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