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/07 16:40:26 UTC

incubator-tinkerpop git commit: Lots of good JavaDoc on how to write a TraversalStrategy. finalized various decoration/ strategies. ComputerResultStrategy has a PRIOR of ProfileStrategy.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 0d239c056 -> f3b91ceac


Lots of good JavaDoc on how to write a TraversalStrategy. finalized various decoration/ strategies. ComputerResultStrategy has a PRIOR of ProfileStrategy.


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

Branch: refs/heads/master
Commit: f3b91ceacbcfbbf1d55e7ebe531773ce107ff5f5
Parents: 0d239c0
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu May 7 08:40:20 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu May 7 08:40:20 2015 -0600

----------------------------------------------------------------------
 .../process/traversal/TraversalStrategy.java    | 27 ++++++++++++++++++--
 .../engine/ComputerTraversalEngine.java         | 14 ++++++++++
 .../strategy/decoration/EventStrategy.java      |  2 +-
 .../strategy/decoration/PartitionStrategy.java  |  2 +-
 .../strategy/decoration/SubgraphStrategy.java   |  2 +-
 .../finalization/EngineDependentStrategy.java   |  4 +++
 6 files changed, 46 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f3b91cea/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java
index de1b57d..bc343e5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java
@@ -29,9 +29,14 @@ import java.util.Set;
 
 /**
  * A {@link TraversalStrategy} defines a particular atomic operation for mutating a {@link Traversal} prior to its evaluation.
- * There are 4 typical "traversal categories": {@link DecorationStrategy}, {@link OptimizationStrategy}, {@link FinalizationStrategy}, and {@link VerificationStrategy}.
+ * There are 4 pre-defined "traversal categories": {@link DecorationStrategy}, {@link OptimizationStrategy}, {@link FinalizationStrategy}, and {@link VerificationStrategy}.
  * Strategies within a category are sorted amongst themselves and then category sorts are applied in the ordered specified previous.
+ * That is, decorations are applied, then optimizations, then finalizations, and finally, verifications.
  * If a strategy does not fit within the specified categories, then it can simply implement {@link TraversalStrategy} and can have priors/posts that span categories.
+ * <p/>
+ * A traversal strategy should be a final class as various internal operations on a strategy are based on its ability to be assigned to more general classes.
+ * A traversal strategy should typically be stateless with a public static <code>instance()</code> method.
+ * However, at limit, a traversal strategy can have a state defining constructor (typically via a "builder"), but that state can not mutate once instantiated.
  *
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  * @author Matthias Broecheler (me@matthiasb.com)
@@ -41,14 +46,31 @@ public interface TraversalStrategy<S extends TraversalStrategy> extends Serializ
 
     public void apply(final Traversal.Admin<?, ?> traversal);
 
+    /**
+     * The set of strategies that must be executed before this strategy is executed.
+     * If there are no ordering requirements, the default implementation returns an empty set.
+     *
+     * @return the set of strategies that must be executed prior to this one.
+     */
     public default Set<Class<? extends S>> applyPrior() {
         return Collections.emptySet();
     }
 
+    /**
+     * The set of strategies that must be executed after this strategy is executed.
+     * If there are no ordering requirements, the default implementation returns an empty set.
+     *
+     * @return the set of strategies that must be executed post this one
+     */
     public default Set<Class<? extends S>> applyPost() {
         return Collections.emptySet();
     }
 
+    /**
+     * The type of traversal strategy -- i.e. {@link DecorationStrategy}, {@link OptimizationStrategy}, {@link FinalizationStrategy}, or {@link VerificationStrategy}.
+     *
+     * @return the traversal strategy category class
+     */
     public default Class<S> getTraversalCategory() {
         return (Class) TraversalStrategy.class;
     }
@@ -134,9 +156,10 @@ public interface TraversalStrategy<S extends TraversalStrategy> extends Serializ
                 return 0;
         }
     }
+
     /**
      * Implemented by strategies where there is no more behavioral tweaking of the traversal required.  Strategies that
-     * implement this marker will simply analyze the traversal and throw exceptions if the traversal is not correct
+     * implement this category will simply analyze the traversal and throw exceptions if the traversal is not correct
      * for the execution context (e.g. {@link LambdaRestrictionStrategy}).
      */
     public interface VerificationStrategy extends TraversalStrategy<VerificationStrategy> {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f3b91cea/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 b4aafbb..bfcfaa2 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
@@ -25,12 +25,15 @@ 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.process.traversal.strategy.finalization.ProfileStrategy;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
+import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -95,6 +98,12 @@ public final class ComputerTraversalEngine implements TraversalEngine {
     public static class ComputerResultStrategy extends AbstractTraversalStrategy<TraversalStrategy.FinalizationStrategy> implements TraversalStrategy.FinalizationStrategy {
 
         private static final ComputerResultStrategy INSTANCE = new ComputerResultStrategy();
+        private static final Set<Class<? extends FinalizationStrategy>> PRIORS = new HashSet<>();
+
+        static {
+            PRIORS.add(ProfileStrategy.class);
+        }
+
 
         private ComputerResultStrategy() {
 
@@ -109,6 +118,11 @@ public final class ComputerTraversalEngine implements TraversalEngine {
             }
         }
 
+        @Override
+        public Set<Class<? extends FinalizationStrategy>> applyPrior() {
+            return PRIORS;
+        }
+
         public static ComputerResultStrategy instance() {
             return INSTANCE;
         }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f3b91cea/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategy.java
index 28d5bd6..7910e81 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategy.java
@@ -45,7 +45,7 @@ import java.util.List;
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public class EventStrategy extends AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
+public final class EventStrategy extends AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
     private final List<MutationListener> listeners = new ArrayList<>();
 
     private EventStrategy(final MutationListener... listeners) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f3b91cea/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategy.java
index 75dc3c5..442576a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategy.java
@@ -47,7 +47,7 @@ import java.util.stream.Stream;
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public class PartitionStrategy extends AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
+public final class PartitionStrategy extends AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
     private String writePartition;
     private final String partitionKey;
     private final Set<String> readPartitions;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f3b91cea/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 21a549f..5880720 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
@@ -45,7 +45,7 @@ import java.util.stream.Collectors;
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public class SubgraphStrategy extends AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
+public final class SubgraphStrategy extends AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
 
     private final Predicate<Traverser<Vertex>> vertexPredicate;
     private final Predicate<Traverser<Edge>> edgePredicate;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f3b91cea/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/EngineDependentStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/EngineDependentStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/EngineDependentStrategy.java
index 376f283..4104c7a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/EngineDependentStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/EngineDependentStrategy.java
@@ -24,6 +24,10 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.EngineDependent;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
 
 /**
+ * A {@link org.apache.tinkerpop.gremlin.process.traversal.Step} can extend {@link EngineDependent}.
+ * If it does, that means that the steps internal logic is modulated by whether the execution is via {@link org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine.Type#STANDARD} or {@link org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine.Type#COMPUTER}.
+ * EngineDependentStrategy simply locates all engine dependent steps and provides the respective {@link org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine}.
+ *
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 public final class EngineDependentStrategy extends AbstractTraversalStrategy<TraversalStrategy.FinalizationStrategy> implements TraversalStrategy.FinalizationStrategy {