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;