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/18 17:10:23 UTC

[3/3] incubator-tinkerpop git commit: IsStep is now a TraversalParent. SubgraphStrategy uses Scope.global where()-traversals. TraversalBiPredicate moved to step/util.

IsStep is now a TraversalParent. SubgraphStrategy uses Scope.global where()-traversals. TraversalBiPredicate moved to step/util.


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

Branch: refs/heads/master
Commit: 789ce4f03b45f6d226bacc8eb9544c1950aa03db
Parents: 491d0fb
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon May 18 09:10:31 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon May 18 09:10:31 2015 -0600

----------------------------------------------------------------------
 .../traversal/lambda/TraversalBiPredicate.java  | 74 --------------------
 .../process/traversal/step/filter/HasStep.java  | 14 +++-
 .../process/traversal/step/filter/IsStep.java   | 32 +++++++--
 .../traversal/step/filter/WhereStep.java        |  2 +-
 .../step/util/TraversalBiPredicate.java         | 74 ++++++++++++++++++++
 .../step/util/TraversalComparator.java          |  4 +-
 .../strategy/decoration/SubgraphStrategy.java   | 10 +--
 .../apache/tinkerpop/gremlin/structure/P.java   |  2 +-
 8 files changed, 120 insertions(+), 92 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/789ce4f0/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/TraversalBiPredicate.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/TraversalBiPredicate.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/TraversalBiPredicate.java
deleted file mode 100644
index 9690d37..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/TraversalBiPredicate.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- *
- *  * Licensed to the Apache Software Foundation (ASF) under one
- *  * or more contributor license agreements.  See the NOTICE file
- *  * distributed with this work for additional information
- *  * regarding copyright ownership.  The ASF licenses this file
- *  * to you under the Apache License, Version 2.0 (the
- *  * "License"); you may not use this file except in compliance
- *  * with the License.  You may obtain a copy of the License at
- *  *
- *  * http://www.apache.org/licenses/LICENSE-2.0
- *  *
- *  * Unless required by applicable law or agreed to in writing,
- *  * software distributed under the License is distributed on an
- *  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  * KIND, either express or implied.  See the License for the
- *  * specific language governing permissions and limitations
- *  * under the License.
- *
- */
-
-package org.apache.tinkerpop.gremlin.process.traversal.lambda;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
-
-import java.util.function.BiPredicate;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class TraversalBiPredicate<S, E> implements BiPredicate<S, E>, Cloneable {
-
-    private Traversal.Admin<S, E> traversal;
-    private final boolean negate;
-
-    public TraversalBiPredicate(final Traversal.Admin<S, E> traversal, final boolean negate) {
-        this.traversal = traversal;
-        this.negate = negate;
-    }
-
-    @Override
-    public boolean test(final S start, final E end) {
-        if (null == start)
-            throw new IllegalArgumentException("The traversal must be provided a start: " + this.traversal);
-        final boolean result = null == end ? TraversalUtil.test(start, this.traversal) : TraversalUtil.test(start, this.traversal, end);
-        return this.negate ? !result : result;
-    }
-
-    public Traversal.Admin<S, E> getTraversal() {
-        return this.traversal;
-    }
-
-    @Override
-    public String toString() {
-        return this.negate ? "!" + this.traversal.toString() : this.traversal.toString();
-    }
-
-    @Override
-    public TraversalBiPredicate<S, E> negate() {
-        return new TraversalBiPredicate<>(this.traversal.clone(), !this.negate);
-    }
-
-    @Override
-    public TraversalBiPredicate<S, E> clone() {
-        try {
-            final TraversalBiPredicate<S, E> clone = (TraversalBiPredicate<S, E>) super.clone();
-            clone.traversal = this.traversal.clone();
-            return clone;
-        } catch (final CloneNotSupportedException e) {
-            throw new IllegalStateException(e);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/789ce4f0/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStep.java
index f713051..dd65e24 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStep.java
@@ -20,10 +20,10 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.lambda.TraversalBiPredicate;
 import org.apache.tinkerpop.gremlin.process.traversal.step.HasContainerHolder;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.TraversalBiPredicate;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
@@ -74,8 +74,16 @@ public class HasStep<S extends Element> extends FilterStep<S> implements HasCont
     }
 
     @Override
+    public void addLocalChild(final Traversal.Admin<?, ?> localChildTraversal) {
+        throw new UnsupportedOperationException("Use HasStep.addHasContainer(" + HasContainer.class.getSimpleName() + ") to add a local child traversal:" + this);
+    }
+
+    @Override
     public List<Traversal.Admin<?, ?>> getLocalChildren() {
-        return this.hasContainers.stream().filter(hasContainer -> hasContainer.predicate instanceof TraversalBiPredicate).map(hasContainer -> ((TraversalBiPredicate<?, ?>) hasContainer.predicate).getTraversal()).collect(Collectors.toList());
+        return this.hasContainers.stream()
+                .filter(hasContainer -> hasContainer.predicate instanceof TraversalBiPredicate)
+                .map(hasContainer -> ((TraversalBiPredicate<?, ?>) hasContainer.predicate).getTraversal())
+                .collect(Collectors.toList());
     }
 
     @Override
@@ -89,7 +97,7 @@ public class HasStep<S extends Element> extends FilterStep<S> implements HasCont
         clone.hasContainers = new ArrayList<>();
         for (final HasContainer hasContainer : this.hasContainers) {  // TODO: HasContainer should implement clone()
             if (hasContainer.predicate instanceof TraversalBiPredicate) {
-                clone.hasContainers.add(new HasContainer(hasContainer.key, ((TraversalBiPredicate) hasContainer.predicate).clone(), hasContainer.value));
+                clone.addHasContainer(new HasContainer(hasContainer.key, ((TraversalBiPredicate) hasContainer.predicate).clone(), hasContainer.value));
             } else {
                 clone.hasContainers.add(hasContainer);
             }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/789ce4f0/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsStep.java
index c1330e0..6d60748 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsStep.java
@@ -20,19 +20,23 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.TraversalBiPredicate;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.structure.P;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.Collections;
+import java.util.List;
 import java.util.Set;
 
 /**
  * @author Daniel Kuppitz (http://gremlin.guru)
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class IsStep<S> extends FilterStep<S> {
+public final class IsStep<S> extends FilterStep<S> implements TraversalParent {
 
-    private final P<S> predicate;
+    private P<S> predicate;
 
     public IsStep(final Traversal.Admin traversal, final P<S> predicate) {
         super(traversal);
@@ -49,12 +53,28 @@ public final class IsStep<S> extends FilterStep<S> {
         return StringFactory.stepString(this, this.predicate);
     }
 
-    @Override
-    public Set<TraverserRequirement> getRequirements() {
-        return Collections.singleton(TraverserRequirement.OBJECT);
-    }
 
     public P<S> getPredicate() {
         return this.predicate;
     }
+
+    @Override
+    public List<Traversal.Admin<S, ?>> getLocalChildren() {
+        return this.predicate.getBiPredicate() instanceof TraversalBiPredicate ? Collections.singletonList(((TraversalBiPredicate) this.predicate.getBiPredicate()).getTraversal()) : Collections.emptyList();
+    }
+
+    @Override
+    public IsStep<S> clone() {
+        final IsStep<S> clone = (IsStep<S>) super.clone();
+        clone.predicate = this.predicate.clone();
+        if (clone.predicate.getBiPredicate() instanceof TraversalBiPredicate)
+            clone.integrateChild(((TraversalBiPredicate) clone.predicate.getBiPredicate()).getTraversal());
+        return clone;
+    }
+
+    @Override
+    public Set<TraverserRequirement> getRequirements() {
+        return this.getSelfAndChildRequirements(TraverserRequirement.OBJECT);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/789ce4f0/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
index ab0e1f1..ea3528b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
@@ -22,9 +22,9 @@ import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.lambda.TraversalBiPredicate;
 import org.apache.tinkerpop.gremlin.process.traversal.step.Scoping;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.TraversalBiPredicate;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.structure.P;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/789ce4f0/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/TraversalBiPredicate.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/TraversalBiPredicate.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/TraversalBiPredicate.java
new file mode 100644
index 0000000..bfa8071
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/TraversalBiPredicate.java
@@ -0,0 +1,74 @@
+/*
+ *
+ *  * Licensed to the Apache Software Foundation (ASF) under one
+ *  * or more contributor license agreements.  See the NOTICE file
+ *  * distributed with this work for additional information
+ *  * regarding copyright ownership.  The ASF licenses this file
+ *  * to you under the Apache License, Version 2.0 (the
+ *  * "License"); you may not use this file except in compliance
+ *  * with the License.  You may obtain a copy of the License at
+ *  *
+ *  * http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing,
+ *  * software distributed under the License is distributed on an
+ *  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  * KIND, either express or implied.  See the License for the
+ *  * specific language governing permissions and limitations
+ *  * under the License.
+ *
+ */
+
+package org.apache.tinkerpop.gremlin.process.traversal.step.util;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
+
+import java.util.function.BiPredicate;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class TraversalBiPredicate<S, E> implements BiPredicate<S, E>, Cloneable {
+
+    private Traversal.Admin<S, E> traversal;
+    private final boolean negate;
+
+    public TraversalBiPredicate(final Traversal.Admin<S, E> traversal, final boolean negate) {
+        this.traversal = traversal;
+        this.negate = negate;
+    }
+
+    @Override
+    public boolean test(final S start, final E end) {
+        if (null == start)
+            throw new IllegalArgumentException("The traversal must be provided a start: " + this.traversal);
+        final boolean result = null == end ? TraversalUtil.test(start, this.traversal) : TraversalUtil.test(start, this.traversal, end);
+        return this.negate ? !result : result;
+    }
+
+    public Traversal.Admin<S, E> getTraversal() {
+        return this.traversal;
+    }
+
+    @Override
+    public String toString() {
+        return this.negate ? "!" + this.traversal.toString() : this.traversal.toString();
+    }
+
+    @Override
+    public TraversalBiPredicate<S, E> negate() {
+        return new TraversalBiPredicate<>(this.traversal.clone(), !this.negate);
+    }
+
+    @Override
+    public TraversalBiPredicate<S, E> clone() {
+        try {
+            final TraversalBiPredicate<S, E> clone = (TraversalBiPredicate<S, E>) super.clone();
+            clone.traversal = this.traversal.clone();
+            return clone;
+        } catch (final CloneNotSupportedException e) {
+            throw new IllegalStateException(e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/789ce4f0/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/TraversalComparator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/TraversalComparator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/TraversalComparator.java
index 046dedf..c5ec0e6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/TraversalComparator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/TraversalComparator.java
@@ -54,8 +54,8 @@ public final class TraversalComparator<S, E> implements Comparator<S>, Serializa
         return clone;
     }
 
-    public Traversal.Admin<S,E> getTraversal() {
-         return this.traversal;
+    public Traversal.Admin<S, E> getTraversal() {
+        return this.traversal;
     }
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/789ce4f0/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java
index eb47bb9..38e84e7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java
@@ -90,7 +90,7 @@ public final class SubgraphStrategy extends AbstractTraversalStrategy<TraversalS
             vertexStepsToInsertFilterAfter.addAll(TraversalHelper.getStepsOfAssignableClass(AddVertexStartStep.class, traversal));
             vertexStepsToInsertFilterAfter.addAll(graphSteps.stream().filter(GraphStep::returnsVertex).collect(Collectors.toList()));
 
-            vertexStepsToInsertFilterAfter.forEach(s -> TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.local, P.traversal(vertexCriterion.asAdmin().clone())), s, traversal));
+            vertexStepsToInsertFilterAfter.forEach(s -> TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.global, P.traversal(vertexCriterion.asAdmin().clone())), s, traversal));
         }
 
         if (edgeCriterion != null) {
@@ -100,13 +100,13 @@ public final class SubgraphStrategy extends AbstractTraversalStrategy<TraversalS
             edgeStepsToInsertFilterAfter.addAll(graphSteps.stream().filter(GraphStep::returnsEdge).collect(Collectors.toList()));
             edgeStepsToInsertFilterAfter.addAll(vertexSteps.stream().filter(VertexStep::returnsEdge).collect(Collectors.toList()));
 
-            edgeStepsToInsertFilterAfter.forEach(s -> TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.local, P.traversal(edgeCriterion.asAdmin().clone())), s, traversal));
+            edgeStepsToInsertFilterAfter.forEach(s -> TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.global, P.traversal(edgeCriterion.asAdmin().clone())), s, traversal));
         }
 
         // explode g.V().out() to g.V().outE().inV() only if there is an edge predicate otherwise
         vertexSteps.stream().filter(VertexStep::returnsVertex).forEach(s -> {
             if (null == edgeCriterion)
-                TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.local, P.traversal(vertexCriterion.asAdmin().clone())), s, traversal);
+                TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.global, P.traversal(vertexCriterion.asAdmin().clone())), s, traversal);
             else {
                 final VertexStep replacementVertexStep = new VertexStep(traversal, Edge.class, s.getDirection(), s.getEdgeLabels());
                 Step intermediateFilterStep = null;
@@ -117,10 +117,10 @@ public final class SubgraphStrategy extends AbstractTraversalStrategy<TraversalS
 
                 TraversalHelper.replaceStep(s, replacementVertexStep, traversal);
                 TraversalHelper.insertAfterStep(intermediateFilterStep, replacementVertexStep, traversal);
-                TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.local, P.traversal(edgeCriterion.asAdmin().clone())), replacementVertexStep, traversal);
+                TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.global, P.traversal(edgeCriterion.asAdmin().clone())), replacementVertexStep, traversal);
 
                 if (vertexCriterion != null)
-                    TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.local, P.traversal(vertexCriterion.asAdmin().clone())), intermediateFilterStep, traversal);
+                    TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.global, P.traversal(vertexCriterion.asAdmin().clone())), intermediateFilterStep, traversal);
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/789ce4f0/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/P.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/P.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/P.java
index 1b0acb9..dc60191 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/P.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/P.java
@@ -22,7 +22,7 @@
 package org.apache.tinkerpop.gremlin.structure;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.lambda.TraversalBiPredicate;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.TraversalBiPredicate;
 import org.apache.tinkerpop.gremlin.structure.util.AndP;
 import org.apache.tinkerpop.gremlin.structure.util.OrP;