[
https://issues.apache.org/jira/browse/TINKERPOP-1701?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16066641#comment-16066641
]
ASF GitHub Bot commented on TINKERPOP-1701:
-------------------------------------------
GitHub user okram opened a pull request:
https://github.com/apache/tinkerpop/pull/643
TINKERPOP-1701: HaltedTraverserStrategy should recurse into collections for
detachment.
https://issues.apache.org/jira/browse/TINKERPOP-1701
`HaltedTraverserStrategy` is used by serializing systems (e.g.
GremlinServer, OLAP) to decide how to format the result set. For instance, are
the objects `DetachedXXX` or `ReferenceXXX`. In order to make this
functionality generalized to objects within collections, `DetachedFactory` and
`ReferenceFactory` were updated to handle `Tree`, `Map`, `BulkSet`, `Set`, and
`List` (in any arbitrarily nested configuration). Test cases added, and stuff
passes.
VOTE +1.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/apache/tinkerpop TINKERPOP-1701
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/tinkerpop/pull/643.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #643
----
commit 6e2ebb52fdaa477e93a98d6c7c28b4ce5ed9bdb5
Author: Marko A. Rodriguez <[email protected]>
Date: 2017-06-27T19:51:47Z
added colleciton handling to XXXFactory.detach(). This will ensure that
collection nested graph elements get detached accordingly.
commit d16d0df5c64f6da04c6a11c9403273f30eb264d4
Author: Marko A. Rodriguez <[email protected]>
Date: 2017-06-27T20:14:22Z
added test cases that verify that nested collection detachment works for
Lists, Sets, and Maps (and any arbitrary nest of those collections within
themselves).
commit 7d54b1814937da8693b8d45498b2f56b941a9caf
Author: Marko A. Rodriguez <[email protected]>
Date: 2017-06-27T20:23:12Z
doh. needed to tweak the ReferenceFactory test as properties don't come
over.
commit 12de6fbf49028072ffb0933776c516e1bf1e9763
Author: Marko A. Rodriguez <[email protected]>
Date: 2017-06-27T20:29:09Z
add test cases to HaltedTraversaerStrategyTest to verify property
collection handling during detachment.
commit c01b27ea870b15464a263254248b177a8bd0d9d4
Author: Marko A. Rodriguez <[email protected]>
Date: 2017-06-27T20:56:48Z
the plot thickens with BulkSet and Tree needing special handling during
detachment. @spmallette was right about the rabbit hole. Fortuantely, we have
lots of test cases that failed cause of not handling these collections
correctly. So that is a win.
commit f43d1e2dd1635726588bd9c67bc312f8f52c07c6
Author: Marko A. Rodriguez <[email protected]>
Date: 2017-06-28T14:11:37Z
minor nothing. need to switch branches.
commit 601f9c3062e78bec8e23d695a75cedb1e3381229
Author: Marko A. Rodriguez <[email protected]>
Date: 2017-06-28T15:02:49Z
being smarter about the collection sizes on object creation.
----
> HaltedTraverserStrategy should recurse into collections for detachment.
> -----------------------------------------------------------------------
>
> Key: TINKERPOP-1701
> URL: https://issues.apache.org/jira/browse/TINKERPOP-1701
> Project: TinkerPop
> Issue Type: Improvement
> Components: process
> Affects Versions: 3.2.5
> Reporter: Marko A. Rodriguez
> Assignee: Marko A. Rodriguez
>
> We need to make sure that {{HaltedTraverserStrategy}} recurses into
> collections. This will be elegantly handled by updated {{DetachedFactory}}
> and {{ReferenceFactory}} accordingly.
> For instance:
> {code}
> public static <D> D detach(final Object object) {
> if (object instanceof Element) {
> return (D) ReferenceFactory.detach((Element) object);
> } else if (object instanceof Property) {
> return (D) ReferenceFactory.detach((Property) object);
> } else if (object instanceof Path) {
> return (D) ReferenceFactory.detach((Path) object);
> } else if (object instanceof List) {
> final List list = new ArrayList();
> for (final Object item : (List) object) {
> list.add(ReferenceFactory.detach(item));
> }
> return (D) list;
> } else if (object instanceof Set) {
> final Set set = object instanceof LinkedHashSet ? new
> LinkedHashSet() : new HashSet();
> for (final Object item : (Set) object) {
> set.add(ReferenceFactory.detach(item));
> }
> return (D) set;
> } else if (object instanceof Map) {
> final Map map = object instanceof LinkedHashMap ? new
> LinkedHashMap() : new HashMap();
> for (final Map.Entry<Object, Object> entry : ((Map<Object,
> Object>) object).entrySet()) {
> map.put(ReferenceFactory.detach(entry.getKey()),
> ReferenceFactory.detach(entry.getValue()));
> }
> return (D) map;
> } else {
> return (D) object;
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)