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/16 01:38:35 UTC

incubator-tinkerpop git commit: HasStep is now a TraversalParent as it may have a P.traversal() HasContainer.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 6da1de44d -> 50b89450a


HasStep is now a TraversalParent as it may have a P.traversal() HasContainer.


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

Branch: refs/heads/master
Commit: 50b89450ac011abc0fc29cb710b882636779dadd
Parents: 6da1de4
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri May 15 17:38:28 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri May 15 17:38:28 2015 -0600

----------------------------------------------------------------------
 .../process/traversal/step/filter/HasStep.java  | 32 ++++++++++++++++++--
 .../traversal/step/filter/WhereStep.java        |  4 ---
 .../process/traversal/util/TraversalHelper.java |  8 ++---
 .../apache/tinkerpop/gremlin/structure/P.java   | 12 ++++----
 4 files changed, 39 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/50b89450/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 184384b..44db7af 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,7 +20,9 @@ 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.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
@@ -30,19 +32,22 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class HasStep<S extends Element> extends FilterStep<S> implements HasContainerHolder {
+public class HasStep<S extends Element> extends FilterStep<S> implements HasContainerHolder, TraversalParent {
 
-    private final List<HasContainer> hasContainers;
+    private List<HasContainer> hasContainers;
 
     public HasStep(final Traversal.Admin traversal, final HasContainer... hasContainers) {
         super(traversal);
         this.hasContainers = new ArrayList<>();
         for (final HasContainer hasContainer : hasContainers) {
             this.hasContainers.add(hasContainer);
+            if (hasContainer.predicate instanceof TraversalBiPredicate)
+                this.integrateChild(((TraversalBiPredicate) hasContainer.predicate).getTraversal());
         }
     }
 
@@ -64,10 +69,31 @@ public class HasStep<S extends Element> extends FilterStep<S> implements HasCont
     @Override
     public void addHasContainer(final HasContainer hasContainer) {
         this.hasContainers.add(hasContainer);
+        if (hasContainer.predicate instanceof TraversalBiPredicate)
+            this.integrateChild(((TraversalBiPredicate) hasContainer.predicate).getTraversal());
+    }
+
+    @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());
     }
 
     @Override
     public Set<TraverserRequirement> getRequirements() {
-        return Collections.singleton(TraverserRequirement.OBJECT);
+        return this.getSelfAndChildRequirements(TraverserRequirement.OBJECT);
+    }
+
+    @Override
+    public HasStep<S> clone() {
+        final HasStep<S> clone = (HasStep<S>) super.clone();
+        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));
+            } else {
+                clone.hasContainers.add(hasContainer);
+            }
+        }
+        return clone;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/50b89450/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 8336bc8..e699e89 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
@@ -105,10 +105,6 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
         clone.predicate = this.predicate.clone();
         if (clone.predicate.getBiPredicate() instanceof TraversalBiPredicate)
             clone.integrateChild(((TraversalBiPredicate) clone.predicate.getBiPredicate()).getTraversal());
-        /*if (this.predicate.getBiPredicate() instanceof TraversalBiPredicate)
-            clone.predicate = false ?
-                    P.not(((TraversalBiPredicate) this.predicate.getBiPredicate()).getTraversal().clone()) :
-                    P.traversal(((TraversalBiPredicate) this.predicate.getBiPredicate()).getTraversal().clone()); */
         return clone;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/50b89450/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
index 138a311..1211b8d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
@@ -103,15 +103,15 @@ public final class TraversalHelper {
                 }
             } else if (step instanceof EdgeVertexStep) {
                 if (state == 'e') state = 'u';
+            } else if (step instanceof HasContainerHolder && state == 'u') {
+                if (((HasContainerHolder) step).getHasContainers().stream()
+                        .filter(c -> !c.key.equals(T.id.getAccessor())) // TODO: are labels available?
+                        .findAny().isPresent()) return false;
             } else if (step instanceof TraversalParent) {
                 final char currState = state;
                 if (((TraversalParent) step).getLocalChildren().stream()
                         .filter(t -> !isLocalStarGraph(t.asAdmin(), currState))
                         .findAny().isPresent()) return false;
-            } else if (step instanceof HasContainerHolder && state == 'u') {
-                if (((HasContainerHolder) step).getHasContainers().stream()
-                        .filter(c -> !c.key.equals(T.id.getAccessor())) // TODO: are labels available?
-                        .findAny().isPresent()) return false;
             }
         }
         return true;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/50b89450/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 9af3592..1b0acb9 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
@@ -66,14 +66,14 @@ public class P<V> implements Predicate<V>, Serializable, Cloneable {
     @Override
     public boolean equals(final Object other) {
         return other instanceof P &&
-                ((P)other).getClass().equals(this.getClass()) &&
+                ((P) other).getClass().equals(this.getClass()) &&
                 ((P) other).getBiPredicate().equals(this.biPredicate) &&
                 ((((P) other).getValue() == null && this.getValue() == null) || ((P) other).getValue().equals(this.getValue()));
     }
 
     @Override
     public String toString() {
-        return this.biPredicate.toString() + "(" + this.value + ")";
+        return null == this.value ? this.biPredicate.toString() : this.biPredicate.toString() + "(" + this.value + ")";
     }
 
     @Override
@@ -81,12 +81,12 @@ public class P<V> implements Predicate<V>, Serializable, Cloneable {
         return new P<>(this.biPredicate.negate(), this.value);
     }
 
-    public P<V> and(final Traversal<?,?> traversal) {
-        return this.and((Predicate)P.traversal(traversal));
+    public P<V> and(final Traversal<?, ?> traversal) {
+        return this.and((Predicate) P.traversal(traversal));
     }
 
-    public P<V> or(final Traversal<?,?> traversal) {
-        return this.or((Predicate)P.traversal(traversal));
+    public P<V> or(final Traversal<?, ?> traversal) {
+        return this.or((Predicate) P.traversal(traversal));
     }
 
     @Override