Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1701 [created] 6e2ebb52f
added colleciton handling to XXXFactory.detach(). This will ensure that collection nested graph elements get detached accordingly. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/6e2ebb52 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/6e2ebb52 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/6e2ebb52 Branch: refs/heads/TINKERPOP-1701 Commit: 6e2ebb52fdaa477e93a98d6c7c28b4ce5ed9bdb5 Parents: 9436585 Author: Marko A. Rodriguez <okramma...@gmail.com> Authored: Tue Jun 27 13:51:47 2017 -0600 Committer: Marko A. Rodriguez <okramma...@gmail.com> Committed: Tue Jun 27 13:51:47 2017 -0600 ---------------------------------------------------------------------- .../util/detached/DetachedFactory.java | 27 ++++++++++++++++++++ .../util/reference/ReferenceFactory.java | 27 ++++++++++++++++++++ 2 files changed, 54 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6e2ebb52/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedFactory.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedFactory.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedFactory.java index 10265f8..775e5c6 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedFactory.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedFactory.java @@ -25,6 +25,15 @@ import org.apache.tinkerpop.gremlin.structure.Property; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.apache.tinkerpop.gremlin.structure.VertexProperty; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ @@ -71,6 +80,24 @@ public class DetachedFactory { return (D) DetachedFactory.detach((Property) object); } else if (object instanceof Path) { return (D) DetachedFactory.detach((Path) object, withProperties); + } else if (object instanceof List) { + final List list = new ArrayList(); + for (final Object item : (List) object) { + list.add(DetachedFactory.detach(item, withProperties)); + } + 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(DetachedFactory.detach(item, withProperties)); + } + 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(DetachedFactory.detach(entry.getKey(), withProperties), DetachedFactory.detach(entry.getValue(), withProperties)); + } + return (D) map; } else { return (D) object; } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6e2ebb52/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferenceFactory.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferenceFactory.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferenceFactory.java index 48b6de3..749e424 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferenceFactory.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferenceFactory.java @@ -25,6 +25,15 @@ import org.apache.tinkerpop.gremlin.structure.Property; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.apache.tinkerpop.gremlin.structure.VertexProperty; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ @@ -71,6 +80,24 @@ public class ReferenceFactory { 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; }