You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/05/19 18:33:14 UTC

incubator-tinkerpop git commit: TraversalRing is now cloneable and this makes PathStep, SelectStep, and TreeStep clone() simpler.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 0be19a1ef -> 9eeb0d32e


TraversalRing is now cloneable and this makes PathStep, SelectStep, and TreeStep clone() simpler.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/9eeb0d32
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/9eeb0d32
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/9eeb0d32

Branch: refs/heads/master
Commit: 9eeb0d32e3085d3519134e7c27103fbd5dc5922d
Parents: 0be19a1
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue May 19 10:33:23 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue May 19 10:33:23 2015 -0600

----------------------------------------------------------------------
 .../process/traversal/step/map/PathStep.java      |  9 +++------
 .../process/traversal/step/map/SelectStep.java    |  6 ++----
 .../process/traversal/step/map/TreeStep.java      | 12 ++++++++----
 .../step/sideEffect/TreeSideEffectStep.java       |  6 ++----
 .../process/traversal/util/TraversalRing.java     | 18 ++++++++++++++++--
 .../tinkergraph/structure/TinkerGraphTest.java    |  2 +-
 6 files changed, 32 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9eeb0d32/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
index ee30ba1..a244da2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
@@ -29,7 +29,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalRing;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
@@ -61,10 +60,8 @@ public final class PathStep<S> extends MapStep<S, Path> implements TraversalPare
     @Override
     public PathStep<S> clone() {
         final PathStep<S> clone = (PathStep<S>) super.clone();
-        clone.traversalRing = new TraversalRing<>();
-        for (final Traversal.Admin<Object, Object> traversal : this.traversalRing.getTraversals()) {
-            clone.traversalRing.addTraversal(clone.integrateChild(traversal.clone()));
-        }
+        clone.traversalRing = this.traversalRing.clone();
+        clone.getLocalChildren().forEach(clone::integrateChild);
         return clone;
     }
 
@@ -91,6 +88,6 @@ public final class PathStep<S> extends MapStep<S, Path> implements TraversalPare
 
     @Override
     public Set<TraverserRequirement> getRequirements() {
-        return Collections.singleton(TraverserRequirement.PATH);
+        return this.getSelfAndChildRequirements(TraverserRequirement.PATH);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9eeb0d32/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
index 5040f03..5f6d4f2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
@@ -87,10 +87,8 @@ public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implement
     @Override
     public SelectStep<S, E> clone() {
         final SelectStep<S, E> clone = (SelectStep<S, E>) super.clone();
-        clone.traversalRing = new TraversalRing<>();
-        for (final Traversal.Admin<Object, Object> traversal : this.traversalRing.getTraversals()) {
-            clone.traversalRing.addTraversal(clone.integrateChild(traversal.clone()));
-        }
+        clone.traversalRing = this.traversalRing.clone();
+        clone.getLocalChildren().forEach(clone::integrateChild);
         return clone;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9eeb0d32/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
index bd1c503..0816f6d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
@@ -82,10 +82,8 @@ public final class TreeStep<S> extends ReducingBarrierStep<S, Tree> implements M
     @Override
     public TreeStep<S> clone() {
         final TreeStep<S> clone = (TreeStep<S>) super.clone();
-        clone.traversalRing = new TraversalRing<>();
-        for (final Traversal.Admin<Object, Object> traversal : this.traversalRing.getTraversals()) {
-            clone.traversalRing.addTraversal(clone.integrateChild(traversal.clone()));
-        }
+        clone.traversalRing = this.traversalRing.clone();
+        clone.getLocalChildren().forEach(clone::integrateChild);
         return clone;
     }
 
@@ -104,6 +102,12 @@ public final class TreeStep<S> extends ReducingBarrierStep<S, Tree> implements M
         return StringFactory.stepString(this, this.traversalRing);
     }
 
+    @Override
+    public void reset() {
+        super.reset();
+        this.traversalRing.reset();
+    }
+
     ///////////
 
     private class TreeBiFunction implements BiFunction<Tree, Traverser<S>, Tree>, Serializable {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9eeb0d32/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
index 3f33796..3e9d0ba 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
@@ -94,10 +94,8 @@ public final class TreeSideEffectStep<S> extends SideEffectStep<S> implements Si
     @Override
     public TreeSideEffectStep<S> clone() {
         final TreeSideEffectStep<S> clone = (TreeSideEffectStep<S>) super.clone();
-        clone.traversalRing = new TraversalRing<>();
-        for (final Traversal.Admin<Object, Object> traversal : this.traversalRing.getTraversals()) {
-            clone.traversalRing.addTraversal(clone.integrateChild(traversal.clone()));
-        }
+        clone.traversalRing = this.traversalRing.clone();
+        clone.getLocalChildren().forEach(clone::integrateChild);
         return clone;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9eeb0d32/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
index 2d16fab..4e50b18 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
@@ -30,14 +30,14 @@ import java.util.List;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class TraversalRing<A, B> implements Serializable {
+public final class TraversalRing<A, B> implements Serializable, Cloneable {
 
     private final IdentityTraversal<A, B> identityTraversal = new IdentityTraversal<>();
 
     private List<Traversal.Admin<A, B>> traversals = new ArrayList<>();
     private int currentTraversal = -1;
 
-    public TraversalRing(final Traversal.Admin<A,B>... traversals) {
+    public TraversalRing(final Traversal.Admin<A, B>... traversals) {
         this.traversals = new ArrayList<>(Arrays.asList(traversals));
     }
 
@@ -74,4 +74,18 @@ public final class TraversalRing<A, B> implements Serializable {
     public String toString() {
         return this.traversals.toString();
     }
+
+    @Override
+    public TraversalRing<A, B> clone() {
+        try {
+            final TraversalRing<A, B> clone = (TraversalRing<A, B>) super.clone();
+            clone.traversals = new ArrayList<>();
+            for(final Traversal.Admin<A,B> traversal : this.traversals) {
+                clone.addTraversal(traversal.clone());
+            }
+            return clone;
+        } catch (final CloneNotSupportedException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9eeb0d32/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
index 57c755f..1ac31b7 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
@@ -164,7 +164,7 @@ public class TinkerGraphTest {
         //g.V().label().groupCount().as("x").select().forEachRemaining(System.out::println);
         //g.V().choose(__.outE().count().is(0L), __.as("x"), __.as("y")).select("x", "y").forEachRemaining(System.out::println);
         // g.V().hasLabel("person").values("age").is(P.lt(27).or(P.gt(29))).forEachRemaining(System.out::println);
-        System.out.println(g.V().has("age", eq(27).or(not(eq(32)))).values("name"));
+        g.V().as("a").out("knows").as("b").where("a",lt("b")).by("age").select().by("name").forEachRemaining(System.out::println);
     }
 
     @Test