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/05 02:06:25 UTC
incubator-tinkerpop git commit: bingo. TraversalEngines now can
register and de-register strategies. A fully self-contained strategy model.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/lifecylces de771a08f -> f0157a5ff
bingo. TraversalEngines now can register and de-register strategies. A fully self-contained strategy model.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/f0157a5f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/f0157a5f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/f0157a5f
Branch: refs/heads/lifecylces
Commit: f0157a5ff6fcf46668749472d74c6ec3d906db51
Parents: de771a0
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon May 4 18:06:20 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon May 4 18:06:20 2015 -0600
----------------------------------------------------------------------
.../process/traversal/TraversalEngine.java | 12 +++++-
.../dsl/graph/GraphTraversalSource.java | 17 ++++----
.../engine/ComputerTraversalEngine.java | 45 ++++++++++++++++----
.../engine/StandardTraversalEngine.java | 5 ---
.../ComputerVerificationStrategy.java | 8 ++--
.../traversal/util/DefaultTraversal.java | 1 -
6 files changed, 59 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f0157a5f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalEngine.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalEngine.java
index 0343988..312103d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalEngine.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalEngine.java
@@ -22,6 +22,8 @@ import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
import org.apache.tinkerpop.gremlin.structure.Graph;
import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
import java.util.Optional;
/**
@@ -31,8 +33,6 @@ public interface TraversalEngine extends Serializable {
public enum Type {STANDARD, COMPUTER}
- public void processTraversal(final Traversal.Admin<?, ?> traversal);
-
public Type getType();
public Optional<GraphComputer> getGraphComputer();
@@ -45,6 +45,14 @@ public interface TraversalEngine extends Serializable {
return this.getType().equals(Type.COMPUTER);
}
+ public default List<TraversalStrategy> getWithStrategies() {
+ return Collections.emptyList();
+ }
+
+ public default List<Class<? extends TraversalStrategy>> getWithoutStrategies() {
+ return Collections.emptyList();
+ }
+
///////////
public interface Builder extends Serializable {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f0157a5f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
index 4f04e57..ab67136 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
@@ -36,7 +36,6 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.function.Supplier;
@@ -72,6 +71,9 @@ public class GraphTraversalSource implements TraversalSource {
this.engine = engine;
this.withStrategies = withStrategies;
this.withoutStrategies = withoutStrategies;
+ final TraversalEngine tempEngine = this.engine.create(this.graph);
+ this.withStrategies.addAll(tempEngine.getWithStrategies());
+ this.withoutStrategies.addAll(tempEngine.getWithoutStrategies());
final TraversalStrategies tempStrategies = TraversalStrategies.GlobalCache.getStrategies(TraversalStrategies.GlobalCache.getGraphClass(this.graph));
this.strategies = withStrategies.isEmpty() && withoutStrategies.isEmpty() ?
tempStrategies :
@@ -82,7 +84,8 @@ public class GraphTraversalSource implements TraversalSource {
private <S> GraphTraversal.Admin<S, S> generateTraversal() {
final GraphTraversal.Admin<S, S> traversal = new DefaultGraphTraversal<>(this.graph);
- traversal.setEngine(this.engine.create(this.graph));
+ final TraversalEngine engine = this.engine.create(this.graph);
+ traversal.setEngine(engine);
traversal.setStrategies(this.strategies);
return traversal;
}
@@ -175,8 +178,8 @@ public class GraphTraversalSource implements TraversalSource {
public static class Builder implements TraversalSource.Builder<GraphTraversalSource> {
private TraversalEngine.Builder engineBuilder = StandardTraversalEngine.build();
- private List<TraversalStrategy> withStrategies = null;
- private List<Class<? extends TraversalStrategy>> withoutStrategies = null;
+ private List<TraversalStrategy> withStrategies = new ArrayList<>();
+ private List<Class<? extends TraversalStrategy>> withoutStrategies = new ArrayList<>();
private Builder() {
}
@@ -189,23 +192,19 @@ public class GraphTraversalSource implements TraversalSource {
@Override
public Builder with(final TraversalStrategy strategy) {
- if (null == this.withStrategies) this.withStrategies = new ArrayList<>();
this.withStrategies.add(strategy);
return this;
}
@Override
public TraversalSource.Builder without(Class<? extends TraversalStrategy> strategyClass) {
- if (null == this.withoutStrategies) this.withoutStrategies = new ArrayList<>();
this.withoutStrategies.add(strategyClass);
return this;
}
@Override
public GraphTraversalSource create(final Graph graph) {
- return new GraphTraversalSource(graph, this.engineBuilder,
- null == this.withStrategies ? Collections.emptyList() : this.withStrategies,
- null == this.withoutStrategies ? Collections.emptyList() : this.withoutStrategies);
+ return new GraphTraversalSource(graph, this.engineBuilder, this.withStrategies, this.withoutStrategies);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f0157a5f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java
index 6ea0c48..ec09979 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java
@@ -18,14 +18,18 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.engine;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ComputerResultStep;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+import java.util.Collections;
+import java.util.List;
import java.util.Optional;
/**
@@ -40,13 +44,7 @@ public final class ComputerTraversalEngine implements TraversalEngine {
}
@Override
- public void processTraversal(final Traversal.Admin<?, ?> traversal) {
- if (traversal.getParent() instanceof EmptyStep)
- traversal.addStep(new ComputerResultStep<>(traversal, this.graphComputer, true));
- }
-
- @Override
- public Type getType() {
+ public Type getType() { // TODO: gut this
return Type.COMPUTER;
}
@@ -60,6 +58,11 @@ public final class ComputerTraversalEngine implements TraversalEngine {
return Optional.ofNullable(this.graphComputer);
}
+ @Override
+ public List<TraversalStrategy> getWithStrategies() {
+ return Collections.singletonList(ComputerResultStrategy.instance());
+ }
+
public static Builder build() {
return new Builder();
}
@@ -85,4 +88,28 @@ public final class ComputerTraversalEngine implements TraversalEngine {
new ComputerTraversalEngine(graph.compute(this.graphComputerClass).isolation(this.isolation));
}
}
+
+ ////
+
+ public static class ComputerResultStrategy extends AbstractTraversalStrategy<TraversalStrategy.FinalizationStrategy> implements TraversalStrategy.FinalizationStrategy {
+
+ private static final ComputerResultStrategy INSTANCE = new ComputerResultStrategy();
+
+ private ComputerResultStrategy() {
+
+ }
+
+ @Override
+ public void apply(final Traversal.Admin<?, ?> traversal) {
+ if (traversal.getParent() instanceof EmptyStep) {
+ final TraversalEngine engine = traversal.getEngine();
+ if (engine.isComputer())
+ traversal.addStep(new ComputerResultStep<>(traversal, engine.getGraphComputer().get(), true));
+ }
+ }
+
+ public static ComputerResultStrategy instance() {
+ return INSTANCE;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f0157a5f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/StandardTraversalEngine.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/StandardTraversalEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/StandardTraversalEngine.java
index 7d66d9d..a3e4570 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/StandardTraversalEngine.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/StandardTraversalEngine.java
@@ -38,11 +38,6 @@ public final class StandardTraversalEngine implements TraversalEngine {
}
@Override
- public void processTraversal(final Traversal.Admin<?, ?> traversal) {
-
- }
-
- @Override
public Type getType() {
return Type.STANDARD;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f0157a5f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
index 62c8dc5..0fb821c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
@@ -18,6 +18,7 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ComputerResultStep;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
@@ -47,9 +48,10 @@ public final class ComputerVerificationStrategy extends AbstractTraversalStrateg
if (traversal.getEngine().isStandard())
return;
- final Step<?, ?> endStep = traversal.getEndStep() instanceof ComputerAwareStep.EndStep ?
- ((ComputerAwareStep.EndStep) traversal.getEndStep()).getPreviousStep() :
- traversal.getEndStep();
+ Step<?, ?> endStep = traversal.getEndStep();
+ while (endStep instanceof ComputerAwareStep.EndStep || endStep instanceof ComputerResultStep) {
+ endStep = endStep.getPreviousStep();
+ }
for (final Step<?, ?> step : traversal.getSteps()) {
if ((step instanceof ReducingBarrierStep || step instanceof SupplyingBarrierStep) && (step != endStep || !(traversal.getParent() instanceof EmptyStep)))
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f0157a5f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
index 6e9f653..17e779a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
@@ -86,7 +86,6 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
}
}
}
- this.traversalEngine.processTraversal(this);
this.finalEndStep = this.getEndStep();
this.locked = true;
}