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;
     }