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 17:51:27 UTC
[1/8] incubator-tinkerpop git commit: first stab at lifecycles.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/master 24a1e9df6 -> 80bfd8d82
first stab at lifecycles.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/61b8a1cb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/61b8a1cb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/61b8a1cb
Branch: refs/heads/master
Commit: 61b8a1cb3d8a974c55ed1383b42cf88808670732
Parents: 65a1e41
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon May 4 14:25:09 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon May 4 14:25:09 2015 -0600
----------------------------------------------------------------------
.../process/traversal/TraversalStrategies.java | 16 +--
.../process/traversal/TraversalStrategy.java | 48 +++++++-
.../decoration/ConjunctionStrategy.java | 83 +++++++++++++
.../strategy/decoration/ElementIdStrategy.java | 12 +-
.../strategy/decoration/EventStrategy.java | 3 +-
.../decoration/LabeledEndStepStrategy.java | 51 ++++++++
.../strategy/decoration/PartitionStrategy.java | 3 +-
.../strategy/decoration/SubgraphStrategy.java | 3 +-
.../finalization/EngineDependentStrategy.java | 46 ++++++++
.../strategy/finalization/ProfileStrategy.java | 91 +++++++++++++++
.../ComparatorHolderRemovalStrategy.java | 55 +++++++++
.../optimization/ConjunctionStrategy.java | 83 -------------
.../optimization/DedupOptimizerStrategy.java | 3 +-
.../optimization/IdentityRemovalStrategy.java | 3 +-
.../optimization/MatchWhereStrategy.java | 6 +-
.../strategy/optimization/ProfileStrategy.java | 115 -------------------
.../optimization/RangeByIsCountStrategy.java | 2 -
.../ComparatorHolderRemovalStrategy.java | 54 ---------
.../verification/EngineDependentStrategy.java | 46 --------
.../verification/LabeledEndStepStrategy.java | 50 --------
.../verification/LambdaRestrictionStrategy.java | 3 +-
.../strategy/verification/ReadOnlyStrategy.java | 3 +-
.../TraversalVerificationStrategy.java | 3 +-
.../util/DefaultTraversalStrategies.java | 5 +-
24 files changed, 410 insertions(+), 377 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
index 077cc9c..c8ff815 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
@@ -19,15 +19,15 @@
package org.apache.tinkerpop.gremlin.process.traversal;
import org.apache.tinkerpop.gremlin.process.computer.util.ShellGraph;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ConjunctionStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConjunctionStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.DedupOptimizerStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IdentityRemovalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.MatchWhereStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ProfileStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RangeByIsCountStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComparatorHolderRemovalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.EngineDependentStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.LabeledEndStepStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ComparatorHolderRemovalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.EngineDependentStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.LabeledEndStepStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.TraversalVerificationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserGeneratorFactory;
import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
@@ -106,7 +106,7 @@ public interface TraversalStrategies extends Serializable, Cloneable {
*
* @param strategies the traversal strategies to sort
*/
- public static void sortStrategies(final List<? extends TraversalStrategy> strategies) {
+ public static void sortStrategies(final List<TraversalStrategy> strategies) {
final Map<Class<? extends TraversalStrategy>, Set<Class<? extends TraversalStrategy>>> dependencyMap = new HashMap<>();
final Set<Class<? extends TraversalStrategy>> strategyClass = new HashSet<>(strategies.size());
//Initialize data structure
@@ -115,10 +115,10 @@ public interface TraversalStrategies extends Serializable, Cloneable {
//Initialize all the dependencies
strategies.forEach(strategy -> {
strategy.applyPrior().forEach(s -> {
- if (strategyClass.contains(s)) MultiMap.put(dependencyMap, s, strategy.getClass());
+ if (strategyClass.contains(s)) MultiMap.put((Map)dependencyMap, s, strategy.getClass());
});
strategy.applyPost().forEach(s -> {
- if (strategyClass.contains(s)) MultiMap.put(dependencyMap, strategy.getClass(), s);
+ if (strategyClass.contains(s)) MultiMap.put((Map)dependencyMap, strategy.getClass(), s);
});
});
//Now, compute transitive closure until convergence
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/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 8d8c383..caa717e 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
@@ -39,12 +39,56 @@ public interface TraversalStrategy extends Serializable {
public void apply(final Traversal.Admin<?, ?> traversal);
- public default Set<Class<? extends TraversalStrategy>> applyPrior() {
+ public default Set applyPrior() {
return Collections.emptySet();
}
- public default Set<Class<? extends TraversalStrategy>> applyPost() {
+ public default Set applyPost() {
return Collections.emptySet();
}
+ public interface DecorationStrategy extends TraversalStrategy {
+
+ public default Set<Class<? extends DecorationStrategy>> applyPrior() {
+ return Collections.emptySet();
+ }
+
+ public default Set<Class<? extends DecorationStrategy>> applyPost() {
+ return Collections.emptySet();
+ }
+ }
+
+ public interface OptimizationStrategy extends TraversalStrategy {
+
+ public default Set<Class<? extends OptimizationStrategy>> applyPrior() {
+ return Collections.emptySet();
+ }
+
+ public default Set<Class<? extends OptimizationStrategy>> applyPost() {
+ return Collections.emptySet();
+ }
+ }
+
+ public interface VerificationStrategy extends TraversalStrategy {
+
+ public default Set<Class<? extends VerificationStrategy>> applyPrior() {
+ return Collections.emptySet();
+ }
+
+ public default Set<Class<? extends VerificationStrategy>> applyPost() {
+ return Collections.emptySet();
+ }
+ }
+
+ public interface FinalizationStrategy extends TraversalStrategy {
+
+ public default Set<Class<? extends FinalizationStrategy>> applyPrior() {
+ return Collections.emptySet();
+ }
+
+ public default Set<Class<? extends FinalizationStrategy>> applyPost() {
+ return Collections.emptySet();
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategy.java
new file mode 100644
index 0000000..186f063
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategy.java
@@ -0,0 +1,83 @@
+/*
+ * 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.strategy.decoration;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.AndStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.ConjunctionStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.OrStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StartStep;
+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.util.TraversalHelper;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class ConjunctionStrategy extends AbstractTraversalStrategy implements TraversalStrategy.DecorationStrategy {
+
+ private static final ConjunctionStrategy INSTANCE = new ConjunctionStrategy();
+
+ private ConjunctionStrategy() {
+ }
+
+ @Override
+ public void apply(final Traversal.Admin<?, ?> traversal) {
+ processConjunctionMarker(AndStep.AndMarker.class, traversal);
+ processConjunctionMarker(OrStep.OrMarker.class, traversal);
+ }
+
+ private static final boolean legalCurrentStep(final Step<?, ?> step) {
+ return !(step instanceof EmptyStep || step instanceof OrStep.OrMarker || step instanceof AndStep.AndMarker || step instanceof StartStep);
+ }
+
+ private static final void processConjunctionMarker(final Class<? extends ConjunctionStep.ConjunctionMarker> markerClass, final Traversal.Admin<?, ?> traversal) {
+ TraversalHelper.getStepsOfClass(markerClass, traversal).forEach(markerStep -> {
+ Step<?, ?> currentStep = markerStep.getNextStep();
+ final Traversal.Admin<?, ?> rightTraversal = __.start().asAdmin();
+ while (legalCurrentStep(currentStep)) {
+ final Step<?, ?> nextStep = currentStep.getNextStep();
+ rightTraversal.addStep(currentStep);
+ traversal.removeStep(currentStep);
+ currentStep = nextStep;
+ }
+
+ currentStep = markerStep.getPreviousStep();
+ final Traversal.Admin<?, ?> leftTraversal = __.start().asAdmin();
+ while (legalCurrentStep(currentStep)) {
+ final Step<?, ?> previousStep = currentStep.getPreviousStep();
+ leftTraversal.addStep(0, currentStep);
+ traversal.removeStep(currentStep);
+ currentStep = previousStep;
+ }
+ TraversalHelper.replaceStep(markerStep,
+ markerClass.equals(AndStep.AndMarker.class) ?
+ new AndStep<Object>(traversal, (Traversal.Admin) leftTraversal, (Traversal.Admin) rightTraversal) :
+ new OrStep<Object>(traversal, (Traversal.Admin) leftTraversal, (Traversal.Admin) rightTraversal),
+ traversal);
+ });
+ }
+
+ public static ConjunctionStrategy instance() {
+ return INSTANCE;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
index f7b0d5e..c25652b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
@@ -18,8 +18,8 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
-import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.step.HasContainerHolder;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeByPathStep;
@@ -29,12 +29,13 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.IdStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GraphStep;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.structure.Contains;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.PropertyType;
+import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
@@ -51,12 +52,12 @@ import java.util.function.Supplier;
* This behavior can be overriden by setting the {@link Builder#idMaker(Supplier)}.
* <p/>
* Unless otherwise specified the identifier is stored in the {@code __id} property. This can be changed by setting
- * the {@link Builder#idPropertyKey(String}
+ * the {@link Builder#idPropertyKey(String)}
*
* @author Marko A. Rodriguez (http://markorodriguez.com)
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
-public final class ElementIdStrategy extends AbstractTraversalStrategy {
+public final class ElementIdStrategy extends AbstractTraversalStrategy implements TraversalStrategy.DecorationStrategy {
private final String idPropertyKey;
@@ -156,7 +157,8 @@ public final class ElementIdStrategy extends AbstractTraversalStrategy {
private Supplier<Object> idMaker = () -> UUID.randomUUID().toString();
- private Builder() {}
+ private Builder() {
+ }
/**
* Creates a new unique identifier for the next created {@link Element}.
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/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 64725d2..3dfc123 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
@@ -19,6 +19,7 @@
package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.Event;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.EventCallback;
@@ -44,7 +45,7 @@ import java.util.List;
*
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
-public class EventStrategy extends AbstractTraversalStrategy {
+public class EventStrategy extends AbstractTraversalStrategy 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/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/LabeledEndStepStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/LabeledEndStepStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/LabeledEndStepStrategy.java
new file mode 100644
index 0000000..1ead6ce
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/LabeledEndStepStrategy.java
@@ -0,0 +1,51 @@
+/*
+ * 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.strategy.decoration;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.MarkerIdentityStep;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class LabeledEndStepStrategy extends AbstractTraversalStrategy implements TraversalStrategy.DecorationStrategy {
+
+ private static final LabeledEndStepStrategy INSTANCE = new LabeledEndStepStrategy();
+
+ private LabeledEndStepStrategy() {
+ }
+
+ @Override
+ public void apply(final Traversal.Admin<?, ?> traversal) {
+ if (!traversal.getEndStep().getLabels().isEmpty())
+ traversal.addStep(new MarkerIdentityStep<>(traversal));
+ }
+
+ public static LabeledEndStepStrategy instance() {
+ return INSTANCE;
+ }
+
+ @Override
+ public String toString() {
+ return StringFactory.traversalStrategyString(this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/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 ca07951..bc223b7 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
@@ -20,6 +20,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeByPathStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStartStep;
@@ -46,7 +47,7 @@ import java.util.stream.Stream;
/**
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
-public class PartitionStrategy extends AbstractTraversalStrategy {
+public class PartitionStrategy extends AbstractTraversalStrategy 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/61b8a1cb/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 bcf9a3f..c7e049b 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
@@ -20,6 +20,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.LambdaFilterStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeByPathStep;
@@ -44,7 +45,7 @@ import java.util.stream.Collectors;
/**
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
-public class SubgraphStrategy extends AbstractTraversalStrategy {
+public class SubgraphStrategy extends AbstractTraversalStrategy 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/61b8a1cb/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
new file mode 100644
index 0000000..0b31eaa
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/EngineDependentStrategy.java
@@ -0,0 +1,46 @@
+/*
+ * 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.strategy.finalization;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.step.EngineDependent;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class EngineDependentStrategy extends AbstractTraversalStrategy implements TraversalStrategy.FinalizationStrategy {
+
+ private static final EngineDependentStrategy INSTANCE = new EngineDependentStrategy();
+
+ private EngineDependentStrategy() {
+ }
+
+ @Override
+ public void apply(final Traversal.Admin<?, ?> traversal) {
+ traversal.getSteps().stream()
+ .filter(step -> step instanceof EngineDependent)
+ .forEach(step -> ((EngineDependent) step).onEngine(traversal.getEngine()));
+ }
+
+ public static EngineDependentStrategy instance() {
+ return INSTANCE;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/ProfileStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/ProfileStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/ProfileStrategy.java
new file mode 100644
index 0000000..cd2c409
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/ProfileStrategy.java
@@ -0,0 +1,91 @@
+/*
+ * 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.strategy.finalization;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.ProfileStep;
+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.util.TraversalHelper;
+
+import java.util.List;
+
+/**
+ * @author Bob Briody (http://bobbriody.com)
+ */
+public final class ProfileStrategy extends AbstractTraversalStrategy implements TraversalStrategy.FinalizationStrategy {
+
+ private static final ProfileStrategy INSTANCE = new ProfileStrategy();
+
+ private ProfileStrategy() {
+ }
+
+ @Override
+ public void apply(final Traversal.Admin<?, ?> traversal) {
+ if (!(traversal.getParent() instanceof EmptyStep)) {
+ // This strategy is applied to the top-level traversal only
+ return;
+ }
+
+ if (!TraversalHelper.hasStepOfClass(ProfileStep.class, traversal)) {
+ // No ProfileStep present
+ return;
+ }
+
+ prepTraversalForProfiling(traversal);
+ }
+
+ // Walk the traversal steps and inject the .profile()-steps.
+ private void prepTraversalForProfiling(Traversal.Admin<?, ?> traversal) {
+ // Remove user-specified .profile() steps
+ final List<ProfileStep> profileSteps = TraversalHelper.getStepsOfClass(ProfileStep.class, traversal);
+ for (ProfileStep step : profileSteps) {
+ traversal.removeStep(step);
+ }
+
+ // Add .profile() step after every pre-existing step.
+ final List<Step> steps = traversal.getSteps();
+ final int numSteps = steps.size();
+ for (int ii = 0; ii < numSteps; ii++) {
+ // Get the original step
+ Step step = steps.get(ii * 2);
+
+ // Create and inject ProfileStep
+ ProfileStep profileStep = new ProfileStep(traversal);
+ traversal.addStep((ii * 2) + 1, profileStep);
+
+ // Handle nested traversal
+ if (step instanceof TraversalParent) {
+ for (Traversal.Admin<?, ?> t : ((TraversalParent) step).getLocalChildren()) {
+ prepTraversalForProfiling(t);
+ }
+ for (Traversal.Admin<?, ?> t : ((TraversalParent) step).getGlobalChildren()) {
+ prepTraversalForProfiling(t);
+ }
+ }
+ }
+ }
+
+ public static ProfileStrategy instance() {
+ return INSTANCE;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ComparatorHolderRemovalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ComparatorHolderRemovalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ComparatorHolderRemovalStrategy.java
new file mode 100644
index 0000000..1d9bca2
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ComparatorHolderRemovalStrategy.java
@@ -0,0 +1,55 @@
+/*
+ * 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.strategy.optimization;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.step.ComparatorHolder;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class ComparatorHolderRemovalStrategy extends AbstractTraversalStrategy implements TraversalStrategy.OptimizationStrategy {
+
+ private static final ComparatorHolderRemovalStrategy INSTANCE = new ComparatorHolderRemovalStrategy();
+
+ private ComparatorHolderRemovalStrategy() {
+ }
+
+ @Override
+ public void apply(final Traversal.Admin<?, ?> traversal) {
+ if (traversal.getEngine().isStandard())
+ return;
+
+ if (TraversalHelper.hasStepOfAssignableClass(ComparatorHolder.class, traversal)) {
+ final Step endStep = traversal.getEndStep();
+ TraversalHelper.getStepsOfAssignableClass(ComparatorHolder.class, traversal)
+ .stream()
+ .filter(step -> step != endStep)
+ .forEach(step -> traversal.removeStep((Step)step));
+ }
+ }
+
+ public static ComparatorHolderRemovalStrategy instance() {
+ return INSTANCE;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ConjunctionStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ConjunctionStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ConjunctionStrategy.java
deleted file mode 100644
index d857121..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ConjunctionStrategy.java
+++ /dev/null
@@ -1,83 +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.strategy.optimization;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.AndStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.ConjunctionStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.OrStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StartStep;
-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.util.TraversalHelper;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class ConjunctionStrategy extends AbstractTraversalStrategy {
-
- private static final ConjunctionStrategy INSTANCE = new ConjunctionStrategy();
-
- private ConjunctionStrategy() {
- }
-
- @Override
- public void apply(final Traversal.Admin<?, ?> traversal) {
- processConjunctionMarker(AndStep.AndMarker.class, traversal);
- processConjunctionMarker(OrStep.OrMarker.class, traversal);
- }
-
- private static final boolean legalCurrentStep(final Step<?, ?> step) {
- return !(step instanceof EmptyStep || step instanceof OrStep.OrMarker || step instanceof AndStep.AndMarker || step instanceof StartStep);
- }
-
- private static final void processConjunctionMarker(final Class<? extends ConjunctionStep.ConjunctionMarker> markerClass, final Traversal.Admin<?, ?> traversal) {
- TraversalHelper.getStepsOfClass(markerClass, traversal).forEach(markerStep -> {
- Step<?, ?> currentStep = markerStep.getNextStep();
- final Traversal.Admin<?, ?> rightTraversal = __.start().asAdmin();
- while (legalCurrentStep(currentStep)) {
- final Step<?, ?> nextStep = currentStep.getNextStep();
- rightTraversal.addStep(currentStep);
- traversal.removeStep(currentStep);
- currentStep = nextStep;
- }
-
- currentStep = markerStep.getPreviousStep();
- final Traversal.Admin<?, ?> leftTraversal = __.start().asAdmin();
- while (legalCurrentStep(currentStep)) {
- final Step<?, ?> previousStep = currentStep.getPreviousStep();
- leftTraversal.addStep(0, currentStep);
- traversal.removeStep(currentStep);
- currentStep = previousStep;
- }
- TraversalHelper.replaceStep(markerStep,
- markerClass.equals(AndStep.AndMarker.class) ?
- new AndStep<Object>(traversal, (Traversal.Admin) leftTraversal, (Traversal.Admin) rightTraversal) :
- new OrStep<Object>(traversal, (Traversal.Admin) leftTraversal, (Traversal.Admin) rightTraversal),
- traversal);
- });
- }
-
- public static ConjunctionStrategy instance() {
- return INSTANCE;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupOptimizerStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupOptimizerStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupOptimizerStrategy.java
index 1bb4a96..0e5bd85 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupOptimizerStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupOptimizerStrategy.java
@@ -20,6 +20,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.DedupGlobalStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep;
@@ -33,7 +34,7 @@ import java.util.List;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class DedupOptimizerStrategy extends AbstractTraversalStrategy {
+public final class DedupOptimizerStrategy extends AbstractTraversalStrategy implements TraversalStrategy.OptimizationStrategy {
private static final DedupOptimizerStrategy INSTANCE = new DedupOptimizerStrategy();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategy.java
index a66aeff..af20d9b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategy.java
@@ -19,6 +19,7 @@
package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
@@ -26,7 +27,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class IdentityRemovalStrategy extends AbstractTraversalStrategy {
+public final class IdentityRemovalStrategy extends AbstractTraversalStrategy implements TraversalStrategy.OptimizationStrategy {
private static final IdentityRemovalStrategy INSTANCE = new IdentityRemovalStrategy();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategy.java
index 15980d9..6d9d5d7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategy.java
@@ -36,10 +36,10 @@ import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class MatchWhereStrategy extends AbstractTraversalStrategy implements TraversalStrategy {
+public final class MatchWhereStrategy extends AbstractTraversalStrategy implements TraversalStrategy.OptimizationStrategy {
private static final MatchWhereStrategy INSTANCE = new MatchWhereStrategy();
- private static final Set<Class<? extends TraversalStrategy>> PRIORS = new HashSet<>();
+ private static final Set<Class<? extends OptimizationStrategy>> PRIORS = new HashSet<>();
static {
PRIORS.add(IdentityRemovalStrategy.class);
@@ -83,7 +83,7 @@ public final class MatchWhereStrategy extends AbstractTraversalStrategy implemen
}
@Override
- public Set<Class<? extends TraversalStrategy>> applyPrior() {
+ public Set<Class<? extends OptimizationStrategy>> applyPrior() {
return PRIORS;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ProfileStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ProfileStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ProfileStrategy.java
deleted file mode 100644
index e31975e..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ProfileStrategy.java
+++ /dev/null
@@ -1,115 +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.strategy.optimization;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.ProfileStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComparatorHolderRemovalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.EngineDependentStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.LabeledEndStepStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * @author Bob Briody (http://bobbriody.com)
- */
-public final class ProfileStrategy extends AbstractTraversalStrategy {
-
-
- private static final ProfileStrategy INSTANCE = new ProfileStrategy();
- private static final Set<Class<? extends TraversalStrategy>> PRIORS = new HashSet<>();
-
- static {
- // Ensure that this strategy is applied last.
- PRIORS.add(ComparatorHolderRemovalStrategy.class);
- PRIORS.add(ConjunctionStrategy.class);
- PRIORS.add(DedupOptimizerStrategy.class);
- PRIORS.add(EngineDependentStrategy.class);
- PRIORS.add(IdentityRemovalStrategy.class);
- PRIORS.add(LabeledEndStepStrategy.class);
- PRIORS.add(MatchWhereStrategy.class);
- PRIORS.add(RangeByIsCountStrategy.class);
- }
-
- private ProfileStrategy() {
- }
-
- @Override
- public void apply(final Traversal.Admin<?, ?> traversal) {
- if (!(traversal.getParent() instanceof EmptyStep)) {
- // This strategy is applied to the top-level traversal only
- return;
- }
-
- if (!TraversalHelper.hasStepOfClass(ProfileStep.class, traversal)) {
- // No ProfileStep present
- return;
- }
-
- prepTraversalForProfiling(traversal);
- }
-
- // Walk the traversal steps and inject the .profile()-steps.
- private void prepTraversalForProfiling(Traversal.Admin<?, ?> traversal) {
- // Remove user-specified .profile() steps
- final List<ProfileStep> profileSteps = TraversalHelper.getStepsOfClass(ProfileStep.class, traversal);
- for (ProfileStep step : profileSteps) {
- traversal.removeStep(step);
- }
-
- // Add .profile() step after every pre-existing step.
- final List<Step> steps = traversal.getSteps();
- final int numSteps = steps.size();
- for (int ii = 0; ii < numSteps; ii++) {
- // Get the original step
- Step step = steps.get(ii * 2);
-
- // Create and inject ProfileStep
- ProfileStep profileStep = new ProfileStep(traversal);
- traversal.addStep((ii * 2) + 1, profileStep);
-
- // Handle nested traversal
- if (step instanceof TraversalParent) {
- for (Traversal.Admin<?, ?> t : ((TraversalParent) step).getLocalChildren()) {
- prepTraversalForProfiling(t);
- }
- for (Traversal.Admin<?, ?> t : ((TraversalParent) step).getGlobalChildren()) {
- prepTraversalForProfiling(t);
- }
- }
- }
- }
-
- @Override
- public Set<Class<? extends TraversalStrategy>> applyPrior() {
- return PRIORS;
- }
-
- public static ProfileStrategy instance() {
- return INSTANCE;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
index 32abcd1..ecc12c8 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
@@ -44,8 +44,6 @@ import java.util.function.BiPredicate;
public final class RangeByIsCountStrategy extends AbstractTraversalStrategy implements TraversalStrategy {
private static final Map<BiPredicate, Long> RANGE_PREDICATES = new HashMap<BiPredicate, Long>() {{
- //put(Compare.inside, 0L);
- //put(Compare.outside, 1L);
put(Contains.within, 1L);
put(Contains.without, 0L);
}};
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComparatorHolderRemovalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComparatorHolderRemovalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComparatorHolderRemovalStrategy.java
deleted file mode 100644
index 97e282d..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComparatorHolderRemovalStrategy.java
+++ /dev/null
@@ -1,54 +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.strategy.verification;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.ComparatorHolder;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class ComparatorHolderRemovalStrategy extends AbstractTraversalStrategy {
-
- private static final ComparatorHolderRemovalStrategy INSTANCE = new ComparatorHolderRemovalStrategy();
-
- private ComparatorHolderRemovalStrategy() {
- }
-
- @Override
- public void apply(final Traversal.Admin<?, ?> traversal) {
- if (traversal.getEngine().isStandard())
- return;
-
- if (TraversalHelper.hasStepOfAssignableClass(ComparatorHolder.class, traversal)) {
- final Step endStep = traversal.getEndStep();
- TraversalHelper.getStepsOfAssignableClass(ComparatorHolder.class, traversal)
- .stream()
- .filter(step -> step != endStep)
- .forEach(step -> traversal.removeStep((Step)step));
- }
- }
-
- public static ComparatorHolderRemovalStrategy instance() {
- return INSTANCE;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/EngineDependentStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/EngineDependentStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/EngineDependentStrategy.java
deleted file mode 100644
index 7902cb7..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/EngineDependentStrategy.java
+++ /dev/null
@@ -1,46 +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.strategy.verification;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.step.EngineDependent;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class EngineDependentStrategy extends AbstractTraversalStrategy implements TraversalStrategy {
-
- private static final EngineDependentStrategy INSTANCE = new EngineDependentStrategy();
-
- private EngineDependentStrategy() {
- }
-
- @Override
- public void apply(final Traversal.Admin<?, ?> traversal) {
- traversal.getSteps().stream()
- .filter(step -> step instanceof EngineDependent)
- .forEach(step -> ((EngineDependent) step).onEngine(traversal.getEngine()));
- }
-
- public static EngineDependentStrategy instance() {
- return INSTANCE;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LabeledEndStepStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LabeledEndStepStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LabeledEndStepStrategy.java
deleted file mode 100644
index 8ba86f9..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LabeledEndStepStrategy.java
+++ /dev/null
@@ -1,50 +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.strategy.verification;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.MarkerIdentityStep;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
-import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class LabeledEndStepStrategy extends AbstractTraversalStrategy {
-
- private static final LabeledEndStepStrategy INSTANCE = new LabeledEndStepStrategy();
-
- private LabeledEndStepStrategy() {
- }
-
- @Override
- public void apply(final Traversal.Admin<?, ?> traversal) {
- if (!traversal.getEndStep().getLabels().isEmpty())
- traversal.addStep(new MarkerIdentityStep<>(traversal));
- }
-
- public static LabeledEndStepStrategy instance() {
- return INSTANCE;
- }
-
- @Override
- public String toString() {
- return StringFactory.traversalStrategyString(this);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java
index 9ac0758..a6c38da 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java
@@ -20,6 +20,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.step.LambdaHolder;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
@@ -27,7 +28,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversal
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class LambdaRestrictionStrategy extends AbstractTraversalStrategy {
+public final class LambdaRestrictionStrategy extends AbstractTraversalStrategy implements TraversalStrategy.VerificationStrategy {
private static final LambdaRestrictionStrategy INSTANCE = new LambdaRestrictionStrategy();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategy.java
index 0718953..91c776c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategy.java
@@ -19,6 +19,7 @@
package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
@@ -28,7 +29,7 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
*
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class ReadOnlyStrategy extends AbstractTraversalStrategy {
+public final class ReadOnlyStrategy extends AbstractTraversalStrategy implements TraversalStrategy.VerificationStrategy {
private static final ReadOnlyStrategy INSTANCE = new ReadOnlyStrategy();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/TraversalVerificationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/TraversalVerificationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/TraversalVerificationStrategy.java
index b9a7b70..9bf191a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/TraversalVerificationStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/TraversalVerificationStrategy.java
@@ -20,6 +20,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.ComputerAwareStep;
@@ -34,7 +35,7 @@ import java.util.Optional;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class TraversalVerificationStrategy extends AbstractTraversalStrategy {
+public final class TraversalVerificationStrategy extends AbstractTraversalStrategy implements TraversalStrategy.VerificationStrategy {
private static final TraversalVerificationStrategy INSTANCE = new TraversalVerificationStrategy();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/61b8a1cb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
index eca4d5d..110efcc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
@@ -73,7 +73,10 @@ public class DefaultTraversalStrategies implements TraversalStrategies {
@Override
public void applyStrategies(final Traversal.Admin<?, ?> traversal) {
- this.traversalStrategies.forEach(traversalStrategy -> traversalStrategy.apply(traversal));
+ this.traversalStrategies.stream().filter(traversalStrategy -> traversalStrategy instanceof TraversalStrategy.DecorationStrategy).forEach(traversalStrategy -> traversalStrategy.apply(traversal));
+ this.traversalStrategies.stream().filter(traversalStrategy -> traversalStrategy instanceof TraversalStrategy.OptimizationStrategy).forEach(traversalStrategy -> traversalStrategy.apply(traversal));
+ this.traversalStrategies.stream().filter(traversalStrategy -> traversalStrategy instanceof TraversalStrategy.FinalizationStrategy).forEach(traversalStrategy -> traversalStrategy.apply(traversal));
+ this.traversalStrategies.stream().filter(traversalStrategy -> traversalStrategy instanceof TraversalStrategy.VerificationStrategy).forEach(traversalStrategy -> traversalStrategy.apply(traversal));
}
@Override
[2/8] incubator-tinkerpop git commit: Merge branch 'master' into
lifecylces
Posted by ok...@apache.org.
Merge branch 'master' into lifecylces
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/405480d7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/405480d7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/405480d7
Branch: refs/heads/master
Commit: 405480d7bb1bd9fcbf1ec2346538daeb33295a27
Parents: 61b8a1c 8bfeb95
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon May 4 16:32:12 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon May 4 16:32:12 2015 -0600
----------------------------------------------------------------------
CHANGELOG.asciidoc | 4 +-
docs/src/gremlin-applications.asciidoc | 30 +++++++++-----
.../tinkerpop/gremlin/driver/Handler.java | 12 ++++--
.../driver/message/ResponseStatusCode.java | 23 ++++++-----
.../gremlin/server/handler/IteratorHandler.java | 6 ++-
.../handler/NioGremlinResponseEncoder.java | 29 ++++----------
.../handler/WsGremlinResponseEncoder.java | 25 +++---------
.../server/op/AbstractEvalOpProcessor.java | 18 +++++++--
.../server/GremlinServerIntegrateTest.java | 42 ++++++++------------
9 files changed, 89 insertions(+), 100 deletions(-)
----------------------------------------------------------------------
[4/8] incubator-tinkerpop git commit: bingo. TraversalEngines now can
register and de-register strategies. A fully self-contained strategy model.
Posted by ok...@apache.org.
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/master
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;
}
[3/8] incubator-tinkerpop git commit: traversal lifecycles
implemented. pretty basic,
nice separation. would really like to get ComputerTraversalEngine strategy in
there as that would seal the deal.
Posted by ok...@apache.org.
traversal lifecycles implemented. pretty basic, nice separation. would really like to get ComputerTraversalEngine strategy in there as that would seal the deal.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/de771a08
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/de771a08
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/de771a08
Branch: refs/heads/master
Commit: de771a08f5a4185e759ac1595b7cf49c1266bbde
Parents: 405480d
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon May 4 17:15:43 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon May 4 17:15:43 2015 -0600
----------------------------------------------------------------------
.../process/traversal/TraversalStrategies.java | 35 ++++-----
.../process/traversal/TraversalStrategy.java | 42 ++---------
.../strategy/AbstractTraversalStrategy.java | 2 +-
.../decoration/ConjunctionStrategy.java | 2 +-
.../strategy/decoration/ElementIdStrategy.java | 2 +-
.../strategy/decoration/EventStrategy.java | 2 +-
.../decoration/LabeledEndStepStrategy.java | 2 +-
.../strategy/decoration/PartitionStrategy.java | 2 +-
.../strategy/decoration/SubgraphStrategy.java | 2 +-
.../finalization/EngineDependentStrategy.java | 2 +-
.../strategy/finalization/ProfileStrategy.java | 2 +-
.../ComparatorHolderRemovalStrategy.java | 2 +-
.../optimization/DedupBijectionStrategy.java | 76 ++++++++++++++++++++
.../optimization/DedupOptimizerStrategy.java | 76 --------------------
.../optimization/IdentityRemovalStrategy.java | 2 +-
.../optimization/MatchWhereStrategy.java | 2 +-
.../optimization/RangeByIsCountStrategy.java | 2 +-
.../ComputerVerificationStrategy.java | 73 +++++++++++++++++++
.../verification/LambdaRestrictionStrategy.java | 2 +-
.../strategy/verification/ReadOnlyStrategy.java | 2 +-
.../TraversalVerificationStrategy.java | 73 -------------------
.../util/DefaultTraversalStrategies.java | 4 +-
.../process/TraversalStrategiesTest.java | 23 +++---
.../optimization/TinkerGraphStepStrategy.java | 20 ++++--
24 files changed, 216 insertions(+), 236 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
index c8ff815..4737c37 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
@@ -20,15 +20,15 @@ package org.apache.tinkerpop.gremlin.process.traversal;
import org.apache.tinkerpop.gremlin.process.computer.util.ShellGraph;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConjunctionStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.DedupOptimizerStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.LabeledEndStepStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.EngineDependentStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ComparatorHolderRemovalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.DedupBijectionStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IdentityRemovalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.MatchWhereStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RangeByIsCountStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ComparatorHolderRemovalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.EngineDependentStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.LabeledEndStepStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.TraversalVerificationStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComputerVerificationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserGeneratorFactory;
import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -106,7 +106,7 @@ public interface TraversalStrategies extends Serializable, Cloneable {
*
* @param strategies the traversal strategies to sort
*/
- public static void sortStrategies(final List<TraversalStrategy> strategies) {
+ public static void sortStrategies(final List<TraversalStrategy<?>> strategies) {
final Map<Class<? extends TraversalStrategy>, Set<Class<? extends TraversalStrategy>>> dependencyMap = new HashMap<>();
final Set<Class<? extends TraversalStrategy>> strategyClass = new HashSet<>(strategies.size());
//Initialize data structure
@@ -115,10 +115,10 @@ public interface TraversalStrategies extends Serializable, Cloneable {
//Initialize all the dependencies
strategies.forEach(strategy -> {
strategy.applyPrior().forEach(s -> {
- if (strategyClass.contains(s)) MultiMap.put((Map)dependencyMap, s, strategy.getClass());
+ if (strategyClass.contains(s)) MultiMap.put(dependencyMap, s, strategy.getClass());
});
strategy.applyPost().forEach(s -> {
- if (strategyClass.contains(s)) MultiMap.put((Map)dependencyMap, strategy.getClass(), s);
+ if (strategyClass.contains(s)) MultiMap.put(dependencyMap, strategy.getClass(), s);
});
});
//Now, compute transitive closure until convergence
@@ -159,17 +159,18 @@ public interface TraversalStrategies extends Serializable, Cloneable {
static {
final TraversalStrategies coreStrategies = new DefaultTraversalStrategies();
coreStrategies.addStrategies(
- DedupOptimizerStrategy.instance(),
- RangeByIsCountStrategy.instance(),
- IdentityRemovalStrategy.instance(),
- MatchWhereStrategy.instance(),
- ComparatorHolderRemovalStrategy.instance(),
+ ConjunctionStrategy.instance(),
LabeledEndStepStrategy.instance(),
- //LambdaRestrictionStrategy.instance(),
EngineDependentStrategy.instance(),
ProfileStrategy.instance(),
- TraversalVerificationStrategy.instance(),
- ConjunctionStrategy.instance());
+ ComparatorHolderRemovalStrategy.instance(),
+ DedupBijectionStrategy.instance(),
+ IdentityRemovalStrategy.instance(),
+ MatchWhereStrategy.instance(),
+ RangeByIsCountStrategy.instance(),
+ ComputerVerificationStrategy.instance());
+ //LambdaRestrictionStrategy.instance(),
+
CACHE.put(Graph.class, coreStrategies.clone());
CACHE.put(EmptyGraph.class, new DefaultTraversalStrategies());
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/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 caa717e..753724c 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
@@ -31,7 +31,7 @@ import java.util.Set;
* @author Marko A. Rodriguez (http://markorodriguez.com)
* @author Matthias Broecheler (me@matthiasb.com)
*/
-public interface TraversalStrategy extends Serializable {
+public interface TraversalStrategy<S extends TraversalStrategy> extends Serializable {
// A TraversalStrategy should not have a public constructor
// Make use of a singleton instance() object to reduce object creation on the JVM
@@ -39,56 +39,28 @@ public interface TraversalStrategy extends Serializable {
public void apply(final Traversal.Admin<?, ?> traversal);
- public default Set applyPrior() {
+ public default Set<Class<? extends S>> applyPrior() {
return Collections.emptySet();
}
- public default Set applyPost() {
+ public default Set<Class<? extends S>> applyPost() {
return Collections.emptySet();
}
- public interface DecorationStrategy extends TraversalStrategy {
+ public interface DecorationStrategy extends TraversalStrategy<DecorationStrategy> {
- public default Set<Class<? extends DecorationStrategy>> applyPrior() {
- return Collections.emptySet();
- }
-
- public default Set<Class<? extends DecorationStrategy>> applyPost() {
- return Collections.emptySet();
- }
}
- public interface OptimizationStrategy extends TraversalStrategy {
-
- public default Set<Class<? extends OptimizationStrategy>> applyPrior() {
- return Collections.emptySet();
- }
+ public interface OptimizationStrategy extends TraversalStrategy<OptimizationStrategy> {
- public default Set<Class<? extends OptimizationStrategy>> applyPost() {
- return Collections.emptySet();
- }
}
- public interface VerificationStrategy extends TraversalStrategy {
+ public interface VerificationStrategy extends TraversalStrategy<VerificationStrategy> {
- public default Set<Class<? extends VerificationStrategy>> applyPrior() {
- return Collections.emptySet();
- }
-
- public default Set<Class<? extends VerificationStrategy>> applyPost() {
- return Collections.emptySet();
- }
}
- public interface FinalizationStrategy extends TraversalStrategy {
-
- public default Set<Class<? extends FinalizationStrategy>> applyPrior() {
- return Collections.emptySet();
- }
+ public interface FinalizationStrategy extends TraversalStrategy<FinalizationStrategy> {
- public default Set<Class<? extends FinalizationStrategy>> applyPost() {
- return Collections.emptySet();
- }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/AbstractTraversalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/AbstractTraversalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/AbstractTraversalStrategy.java
index 0b5fe96..23ce01b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/AbstractTraversalStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/AbstractTraversalStrategy.java
@@ -24,7 +24,7 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public abstract class AbstractTraversalStrategy implements TraversalStrategy {
+public abstract class AbstractTraversalStrategy<S extends TraversalStrategy> implements TraversalStrategy<S> {
@Override
public String toString() {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategy.java
index 186f063..6cbdfad 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategy.java
@@ -33,7 +33,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class ConjunctionStrategy extends AbstractTraversalStrategy implements TraversalStrategy.DecorationStrategy {
+public final class ConjunctionStrategy extends AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
private static final ConjunctionStrategy INSTANCE = new ConjunctionStrategy();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
index c25652b..afe880d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
@@ -57,7 +57,7 @@ import java.util.function.Supplier;
* @author Marko A. Rodriguez (http://markorodriguez.com)
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
-public final class ElementIdStrategy extends AbstractTraversalStrategy implements TraversalStrategy.DecorationStrategy {
+public final class ElementIdStrategy extends AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
private final String idPropertyKey;
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/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 3dfc123..28d5bd6 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 implements TraversalStrategy.DecorationStrategy {
+public 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/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/LabeledEndStepStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/LabeledEndStepStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/LabeledEndStepStrategy.java
index 1ead6ce..29205a6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/LabeledEndStepStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/LabeledEndStepStrategy.java
@@ -27,7 +27,7 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class LabeledEndStepStrategy extends AbstractTraversalStrategy implements TraversalStrategy.DecorationStrategy {
+public final class LabeledEndStepStrategy extends AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
private static final LabeledEndStepStrategy INSTANCE = new LabeledEndStepStrategy();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/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 bc223b7..75dc3c5 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 implements TraversalStrategy.DecorationStrategy {
+public 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/de771a08/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 c7e049b..21a549f 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 implements TraversalStrategy.DecorationStrategy {
+public 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/de771a08/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 0b31eaa..376f283 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
@@ -26,7 +26,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversal
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class EngineDependentStrategy extends AbstractTraversalStrategy implements TraversalStrategy.FinalizationStrategy {
+public final class EngineDependentStrategy extends AbstractTraversalStrategy<TraversalStrategy.FinalizationStrategy> implements TraversalStrategy.FinalizationStrategy {
private static final EngineDependentStrategy INSTANCE = new EngineDependentStrategy();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/ProfileStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/ProfileStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/ProfileStrategy.java
index cd2c409..da2ef6a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/ProfileStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/ProfileStrategy.java
@@ -32,7 +32,7 @@ import java.util.List;
/**
* @author Bob Briody (http://bobbriody.com)
*/
-public final class ProfileStrategy extends AbstractTraversalStrategy implements TraversalStrategy.FinalizationStrategy {
+public final class ProfileStrategy extends AbstractTraversalStrategy<TraversalStrategy.FinalizationStrategy> implements TraversalStrategy.FinalizationStrategy {
private static final ProfileStrategy INSTANCE = new ProfileStrategy();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ComparatorHolderRemovalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ComparatorHolderRemovalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ComparatorHolderRemovalStrategy.java
index 1d9bca2..a30be79 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ComparatorHolderRemovalStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ComparatorHolderRemovalStrategy.java
@@ -28,7 +28,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class ComparatorHolderRemovalStrategy extends AbstractTraversalStrategy implements TraversalStrategy.OptimizationStrategy {
+public final class ComparatorHolderRemovalStrategy extends AbstractTraversalStrategy<TraversalStrategy.OptimizationStrategy> implements TraversalStrategy.OptimizationStrategy {
private static final ComparatorHolderRemovalStrategy INSTANCE = new ComparatorHolderRemovalStrategy();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupBijectionStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupBijectionStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupBijectionStrategy.java
new file mode 100644
index 0000000..e86b8d6
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupBijectionStrategy.java
@@ -0,0 +1,76 @@
+/*
+ * 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.strategy.optimization;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.DedupGlobalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep;
+import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class DedupBijectionStrategy extends AbstractTraversalStrategy<TraversalStrategy.OptimizationStrategy> implements TraversalStrategy.OptimizationStrategy {
+
+ private static final DedupBijectionStrategy INSTANCE = new DedupBijectionStrategy();
+
+ private DedupBijectionStrategy() {
+ }
+
+ private static final List<Class<? extends Step>> BIJECTIVE_PIPES = Arrays.asList(IdentityStep.class, OrderGlobalStep.class);
+
+ @Override
+ public void apply(final Traversal.Admin<?, ?> traversal) {
+ if (!TraversalHelper.hasStepOfClass(DedupGlobalStep.class, traversal))
+ return;
+
+ boolean done = false;
+ while (!done) {
+ done = true;
+ for (int i = 0; i < traversal.getSteps().size(); i++) {
+ final Step step1 = traversal.getSteps().get(i);
+ if (step1 instanceof DedupGlobalStep && !(((DedupGlobalStep) step1).getLocalChildren().get(0) instanceof IdentityTraversal)) {
+ for (int j = i; j >= 0; j--) {
+ final Step step2 = traversal.getSteps().get(j);
+ if (BIJECTIVE_PIPES.stream().filter(c -> c.isAssignableFrom(step2.getClass())).findAny().isPresent()) {
+ traversal.removeStep(step1);
+ traversal.addStep(j, step1);
+ done = false;
+ break;
+ }
+ }
+ }
+ if (!done)
+ break;
+ }
+ }
+ }
+
+ public static DedupBijectionStrategy instance() {
+ return INSTANCE;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupOptimizerStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupOptimizerStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupOptimizerStrategy.java
deleted file mode 100644
index 0e5bd85..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupOptimizerStrategy.java
+++ /dev/null
@@ -1,76 +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.strategy.optimization;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.DedupGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep;
-import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class DedupOptimizerStrategy extends AbstractTraversalStrategy implements TraversalStrategy.OptimizationStrategy {
-
- private static final DedupOptimizerStrategy INSTANCE = new DedupOptimizerStrategy();
-
- private DedupOptimizerStrategy() {
- }
-
- private static final List<Class<? extends Step>> BIJECTIVE_PIPES = Arrays.asList(IdentityStep.class, OrderGlobalStep.class);
-
- @Override
- public void apply(final Traversal.Admin<?, ?> traversal) {
- if (!TraversalHelper.hasStepOfClass(DedupGlobalStep.class, traversal))
- return;
-
- boolean done = false;
- while (!done) {
- done = true;
- for (int i = 0; i < traversal.getSteps().size(); i++) {
- final Step step1 = traversal.getSteps().get(i);
- if (step1 instanceof DedupGlobalStep && !(((DedupGlobalStep) step1).getLocalChildren().get(0) instanceof IdentityTraversal)) {
- for (int j = i; j >= 0; j--) {
- final Step step2 = traversal.getSteps().get(j);
- if (BIJECTIVE_PIPES.stream().filter(c -> c.isAssignableFrom(step2.getClass())).findAny().isPresent()) {
- traversal.removeStep(step1);
- traversal.addStep(j, step1);
- done = false;
- break;
- }
- }
- }
- if (!done)
- break;
- }
- }
- }
-
- public static DedupOptimizerStrategy instance() {
- return INSTANCE;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategy.java
index af20d9b..07eb4e1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategy.java
@@ -27,7 +27,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class IdentityRemovalStrategy extends AbstractTraversalStrategy implements TraversalStrategy.OptimizationStrategy {
+public final class IdentityRemovalStrategy extends AbstractTraversalStrategy<TraversalStrategy.OptimizationStrategy> implements TraversalStrategy.OptimizationStrategy {
private static final IdentityRemovalStrategy INSTANCE = new IdentityRemovalStrategy();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategy.java
index 6d9d5d7..679b8dd 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategy.java
@@ -36,7 +36,7 @@ import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class MatchWhereStrategy extends AbstractTraversalStrategy implements TraversalStrategy.OptimizationStrategy {
+public final class MatchWhereStrategy extends AbstractTraversalStrategy<TraversalStrategy.OptimizationStrategy> implements TraversalStrategy.OptimizationStrategy {
private static final MatchWhereStrategy INSTANCE = new MatchWhereStrategy();
private static final Set<Class<? extends OptimizationStrategy>> PRIORS = new HashSet<>();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
index ecc12c8..c040e13 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
@@ -41,7 +41,7 @@ import java.util.function.BiPredicate;
/**
* @author Daniel Kuppitz (http://gremlin.guru)
*/
-public final class RangeByIsCountStrategy extends AbstractTraversalStrategy implements TraversalStrategy {
+public final class RangeByIsCountStrategy extends AbstractTraversalStrategy<TraversalStrategy.OptimizationStrategy> implements TraversalStrategy.OptimizationStrategy {
private static final Map<BiPredicate, Long> RANGE_PREDICATES = new HashMap<BiPredicate, Long>() {{
put(Contains.within, 1L);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/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
new file mode 100644
index 0000000..62c8dc5
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
@@ -0,0 +1,73 @@
+/*
+ * 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.strategy.verification;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.ComputerAwareStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.SupplyingBarrierStep;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+
+import java.util.Optional;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class ComputerVerificationStrategy extends AbstractTraversalStrategy<TraversalStrategy.VerificationStrategy> implements TraversalStrategy.VerificationStrategy {
+
+ private static final ComputerVerificationStrategy INSTANCE = new ComputerVerificationStrategy();
+
+ private ComputerVerificationStrategy() {
+ }
+
+ @Override
+ public void apply(final Traversal.Admin<?, ?> traversal) {
+ if (traversal.getEngine().isStandard())
+ return;
+
+ final Step<?, ?> endStep = traversal.getEndStep() instanceof ComputerAwareStep.EndStep ?
+ ((ComputerAwareStep.EndStep) traversal.getEndStep()).getPreviousStep() :
+ traversal.getEndStep();
+
+ for (final Step<?, ?> step : traversal.getSteps()) {
+ if ((step instanceof ReducingBarrierStep || step instanceof SupplyingBarrierStep) && (step != endStep || !(traversal.getParent() instanceof EmptyStep)))
+ throw new IllegalStateException("Global traversals on GraphComputer may not contain mid-traversal barriers: " + step);
+
+ if (step instanceof TraversalParent) {
+ final Optional<Traversal.Admin<Object, Object>> traversalOptional = ((TraversalParent) step).getLocalChildren().stream()
+ .filter(t -> !TraversalHelper.isLocalStarGraph(t.asAdmin()))
+ .findAny();
+ if (traversalOptional.isPresent())
+ throw new IllegalStateException("Local traversals on GraphComputer may not traverse past the local star-graph: " + traversalOptional.get());
+ }
+ if (step instanceof Mutating)
+ throw new IllegalStateException("Muting steps are currently not supported by GraphComputer traversals");
+ }
+ }
+
+ public static ComputerVerificationStrategy instance() {
+ return INSTANCE;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java
index a6c38da..f1cde80 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java
@@ -28,7 +28,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversal
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class LambdaRestrictionStrategy extends AbstractTraversalStrategy implements TraversalStrategy.VerificationStrategy {
+public final class LambdaRestrictionStrategy extends AbstractTraversalStrategy<TraversalStrategy.VerificationStrategy> implements TraversalStrategy.VerificationStrategy {
private static final LambdaRestrictionStrategy INSTANCE = new LambdaRestrictionStrategy();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategy.java
index 91c776c..c8d7a17 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategy.java
@@ -29,7 +29,7 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
*
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class ReadOnlyStrategy extends AbstractTraversalStrategy implements TraversalStrategy.VerificationStrategy {
+public final class ReadOnlyStrategy extends AbstractTraversalStrategy<TraversalStrategy.VerificationStrategy> implements TraversalStrategy.VerificationStrategy {
private static final ReadOnlyStrategy INSTANCE = new ReadOnlyStrategy();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/TraversalVerificationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/TraversalVerificationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/TraversalVerificationStrategy.java
deleted file mode 100644
index 9bf191a..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/TraversalVerificationStrategy.java
+++ /dev/null
@@ -1,73 +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.strategy.verification;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
-import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.ComputerAwareStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.SupplyingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-
-import java.util.Optional;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class TraversalVerificationStrategy extends AbstractTraversalStrategy implements TraversalStrategy.VerificationStrategy {
-
- private static final TraversalVerificationStrategy INSTANCE = new TraversalVerificationStrategy();
-
- private TraversalVerificationStrategy() {
- }
-
- @Override
- public void apply(final Traversal.Admin<?, ?> traversal) {
- if (traversal.getEngine().isStandard())
- return;
-
- final Step<?, ?> endStep = traversal.getEndStep() instanceof ComputerAwareStep.EndStep ?
- ((ComputerAwareStep.EndStep) traversal.getEndStep()).getPreviousStep() :
- traversal.getEndStep();
-
- for (final Step<?, ?> step : traversal.getSteps()) {
- if ((step instanceof ReducingBarrierStep || step instanceof SupplyingBarrierStep) && (step != endStep || !(traversal.getParent() instanceof EmptyStep)))
- throw new IllegalStateException("Global traversals on GraphComputer may not contain mid-traversal barriers: " + step);
-
- if (step instanceof TraversalParent) {
- final Optional<Traversal.Admin<Object, Object>> traversalOptional = ((TraversalParent) step).getLocalChildren().stream()
- .filter(t -> !TraversalHelper.isLocalStarGraph(t.asAdmin()))
- .findAny();
- if (traversalOptional.isPresent())
- throw new IllegalStateException("Local traversals on GraphComputer may not traverse past the local star-graph: " + traversalOptional.get());
- }
- if (step instanceof Mutating)
- throw new IllegalStateException("Muting steps are currently not supported by GraphComputer traversals");
- }
- }
-
- public static TraversalVerificationStrategy instance() {
- return INSTANCE;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
index 110efcc..41127fb 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
@@ -35,7 +35,7 @@ import java.util.Optional;
*/
public class DefaultTraversalStrategies implements TraversalStrategies {
- protected List<TraversalStrategy> traversalStrategies = new ArrayList<>();
+ protected List<TraversalStrategy<?>> traversalStrategies = new ArrayList<>();
protected TraverserGeneratorFactory traverserGeneratorFactory = DefaultTraverserGeneratorFactory.instance();
@Override
@@ -56,7 +56,7 @@ public class DefaultTraversalStrategies implements TraversalStrategies {
public TraversalStrategies removeStrategies(final Class<? extends TraversalStrategy>... strategyClasses) {
boolean removed = false;
for (final Class<? extends TraversalStrategy> strategyClass : strategyClasses) {
- final Optional<TraversalStrategy> strategy = this.traversalStrategies.stream().filter(s -> s.getClass().equals(strategyClass)).findAny();
+ final Optional<TraversalStrategy<?>> strategy = this.traversalStrategies.stream().filter(s -> s.getClass().equals(strategyClass)).findAny();
if (strategy.isPresent()) {
this.traversalStrategies.remove(strategy.get());
removed = true;
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java
index 6abd200..7e0db0e 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java
@@ -24,6 +24,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
import org.junit.Test;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -52,27 +53,24 @@ public class TraversalStrategiesTest {
e = new StrategyE(),
k = new StrategyK();
- List<TraversalStrategy> s;
+ List<TraversalStrategy<?>> s;
//Dependency well defined
- s = Stream.of(b, a)
- .collect(Collectors.toList());
+ s = Arrays.asList(b, a);
TraversalStrategies.sortStrategies(s);
assertEquals(2, s.size());
assertEquals(a, s.get(0));
assertEquals(b, s.get(1));
//No dependency
- s = Stream.of(c, a)
- .collect(Collectors.toList());
+ s = Arrays.asList(c, a);
TraversalStrategies.sortStrategies(s);
assertEquals(2, s.size());
assertEquals(c, s.get(0));
assertEquals(a, s.get(1));
//Dependency well defined
- s = Stream.of(c, a, b)
- .collect(Collectors.toList());
+ s = Arrays.asList(c, a, b);
TraversalStrategies.sortStrategies(s);
assertEquals(3, s.size());
assertEquals(a, s.get(0));
@@ -80,8 +78,7 @@ public class TraversalStrategiesTest {
assertEquals(c, s.get(2));
//Circular dependency => throws exception
- s = Stream.of(c, k, a, b)
- .collect(Collectors.toList());
+ s = Arrays.asList(c, k, a, b);
try {
TraversalStrategies.sortStrategies(s);
fail();
@@ -90,8 +87,7 @@ public class TraversalStrategiesTest {
}
//Dependency well defined
- s = Stream.of(d, c, a, e, b)
- .collect(Collectors.toList());
+ s = Arrays.asList(d, c, a, e, b);
TraversalStrategies.sortStrategies(s);
assertEquals(5, s.size());
assertEquals(a, s.get(0));
@@ -101,8 +97,7 @@ public class TraversalStrategiesTest {
assertEquals(e, s.get(4));
//Circular dependency => throws exception
- s = Stream.of(d, c, k, a, e, b)
- .collect(Collectors.toList());
+ s = Arrays.asList(d, c, k, a, e, b);
try {
TraversalStrategies.sortStrategies(s);
fail();
@@ -181,7 +176,7 @@ public class TraversalStrategiesTest {
}
- private static class DummyStrategy extends AbstractTraversalStrategy {
+ private static class DummyStrategy extends AbstractTraversalStrategy<TraversalStrategy> {
@Override
public void apply(Traversal.Admin<?, ?> traversal) {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/de771a08/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java
index 4403693..53dad8d 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java
@@ -20,19 +20,28 @@ package org.apache.tinkerpop.gremlin.tinkergraph.process.traversal.strategy.opti
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.step.HasContainerHolder;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GraphStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IdentityRemovalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.tinkergraph.process.traversal.step.sideEffect.TinkerGraphStep;
+import java.util.HashSet;
+import java.util.Set;
+
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class TinkerGraphStepStrategy extends AbstractTraversalStrategy {
+public final class TinkerGraphStepStrategy extends AbstractTraversalStrategy<TraversalStrategy.OptimizationStrategy> implements TraversalStrategy.OptimizationStrategy {
private static final TinkerGraphStepStrategy INSTANCE = new TinkerGraphStepStrategy();
+ private static final Set<Class<? extends OptimizationStrategy>> PRIORS = new HashSet<>();
+
+ static {
+ PRIORS.add(IdentityRemovalStrategy.class);
+ }
private TinkerGraphStepStrategy() {
}
@@ -54,8 +63,6 @@ public class TinkerGraphStepStrategy extends AbstractTraversalStrategy {
tinkerGraphStep.hasContainers.addAll(((HasContainerHolder) currentStep).getHasContainers());
currentStep.getLabels().forEach(tinkerGraphStep::addLabel);
traversal.removeStep(currentStep);
- } else if (currentStep instanceof IdentityStep) {
- // do nothing
} else {
break;
}
@@ -64,6 +71,11 @@ public class TinkerGraphStepStrategy extends AbstractTraversalStrategy {
}
}
+ @Override
+ public Set<Class<? extends OptimizationStrategy>> applyPrior() {
+ return PRIORS;
+ }
+
public static TinkerGraphStepStrategy instance() {
return INSTANCE;
}
[8/8] incubator-tinkerpop git commit: Merge branch 'master' into
lifecylces
Posted by ok...@apache.org.
Merge branch 'master' into lifecylces
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/80bfd8d8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/80bfd8d8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/80bfd8d8
Branch: refs/heads/master
Commit: 80bfd8d82313a293825e1c33a8e3a389711ea7e5
Parents: a0c4b48 24a1e9d
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue May 5 09:51:07 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue May 5 09:51:07 2015 -0600
----------------------------------------------------------------------
----------------------------------------------------------------------
[7/8] incubator-tinkerpop git commit: If a user needs to provide a
traversal strategy that doesn't nicely fit into the provided traversal
categories, they can sort outside the category boundaries.
Posted by ok...@apache.org.
If a user needs to provide a traversal strategy that doesn't nicely fit into the provided traversal categories, they can sort outside the category boundaries.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/a0c4b485
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/a0c4b485
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/a0c4b485
Branch: refs/heads/master
Commit: a0c4b485b4720fdb479f476ece2605c3e655b57a
Parents: b24a991
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue May 5 09:50:49 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue May 5 09:50:49 2015 -0600
----------------------------------------------------------------------
.../process/traversal/TraversalStrategies.java | 29 +++---
.../process/traversal/TraversalStrategy.java | 91 +++++++++++++++++--
.../util/DefaultTraversalStrategies.java | 11 ++-
.../util/EmptyTraversalStrategies.java | 4 +-
.../process/TraversalStrategiesTest.java | 92 ++++++++++++++++++--
5 files changed, 188 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a0c4b485/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
index 4737c37..2e59d72 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
@@ -38,7 +38,6 @@ import org.apache.tinkerpop.gremlin.util.tools.MultiMap;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -54,7 +53,7 @@ public interface TraversalStrategies extends Serializable, Cloneable {
/**
* Return all the {@link TraversalStrategy} singleton instances associated with this {@link TraversalStrategies}.
*/
- public List<TraversalStrategy> toList();
+ public List<TraversalStrategy<?>> toList();
/**
* Apply all the {@link TraversalStrategy} optimizers to the {@link Traversal} for the stated {@link TraversalEngine}.
@@ -71,7 +70,7 @@ public interface TraversalStrategies extends Serializable, Cloneable {
* @param strategies the traversal strategies to add
* @return the newly updated/sorted traversal strategies collection
*/
- public TraversalStrategies addStrategies(final TraversalStrategy... strategies);
+ public TraversalStrategies addStrategies(final TraversalStrategy<?>... strategies);
/**
* Remove all the provided {@link TraversalStrategy} classes from the current collection.
@@ -137,18 +136,18 @@ public interface TraversalStrategies extends Serializable, Cloneable {
if (toAdd != null && MultiMap.putAll(dependencyMap, sc, toAdd)) updated = true;
}
} while (updated);
- Collections.sort(strategies, new Comparator<TraversalStrategy>() {
- @Override
- public int compare(final TraversalStrategy s1, final TraversalStrategy s2) {
- boolean s1Before = MultiMap.containsEntry(dependencyMap, s1.getClass(), s2.getClass());
- boolean s2Before = MultiMap.containsEntry(dependencyMap, s2.getClass(), s1.getClass());
- if (s1Before && s2Before)
- throw new IllegalStateException("Cyclic dependency between traversal strategies: ["
- + s1.getClass().getName() + ", " + s2.getClass().getName() + ']');
- if (s1Before) return -1;
- else if (s2Before) return 1;
- else return 0;
- }
+ Collections.sort(strategies, (strategy1, strategy2) -> {
+ int categoryComparison = strategy1.compareTo(strategy2.getTraversalCategory());
+ if (categoryComparison != 0) return categoryComparison;
+
+ boolean s1Before = MultiMap.containsEntry(dependencyMap, strategy1.getClass(), strategy2.getClass());
+ boolean s2Before = MultiMap.containsEntry(dependencyMap, strategy2.getClass(), strategy1.getClass());
+ if (s1Before && s2Before)
+ throw new IllegalStateException("Cyclic dependency between traversal strategies: ["
+ + strategy1.getClass().getName() + ", " + strategy2.getClass().getName() + ']');
+ if (s1Before) return -1;
+ else if (s2Before) return 1;
+ else return 0;
});
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a0c4b485/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 753724c..7d16ff1 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
@@ -25,17 +25,12 @@ import java.util.Set;
/**
* A {@link TraversalStrategy} defines a particular atomic operation for mutating a {@link Traversal} prior to its evaluation.
* Traversal strategies are typically used for optimizing a traversal for the particular underlying graph engine.
- * A TraversalStrategy should not have a public constructor as they should not maintain state between applications.
- * Make use of a singleton instance() object to reduce object creation on the JVM.
*
* @author Marko A. Rodriguez (http://markorodriguez.com)
* @author Matthias Broecheler (me@matthiasb.com)
*/
-public interface TraversalStrategy<S extends TraversalStrategy> extends Serializable {
+public interface TraversalStrategy<S extends TraversalStrategy> extends Serializable, Comparable<Class<? extends TraversalStrategy>> {
- // A TraversalStrategy should not have a public constructor
- // Make use of a singleton instance() object to reduce object creation on the JVM
- // Moreover they are stateless objects.
public void apply(final Traversal.Admin<?, ?> traversal);
@@ -47,20 +42,98 @@ public interface TraversalStrategy<S extends TraversalStrategy> extends Serializ
return Collections.emptySet();
}
- public interface DecorationStrategy extends TraversalStrategy<DecorationStrategy> {
+ public default Class<S> getTraversalCategory() {
+ return (Class) TraversalStrategy.class;
+ }
+ @Override
+ public default int compareTo(final Class<? extends TraversalStrategy> otherTraversalCategory) {
+ return 0;
}
- public interface OptimizationStrategy extends TraversalStrategy<OptimizationStrategy> {
+ public interface DecorationStrategy extends TraversalStrategy<DecorationStrategy> {
+ @Override
+ public default Class<DecorationStrategy> getTraversalCategory() {
+ return DecorationStrategy.class;
+ }
+
+ @Override
+ public default int compareTo(final Class<? extends TraversalStrategy> otherTraversalCategory) {
+ if (otherTraversalCategory.equals(DecorationStrategy.class))
+ return 0;
+ else if (otherTraversalCategory.equals(OptimizationStrategy.class))
+ return -1;
+ else if (otherTraversalCategory.equals(FinalizationStrategy.class))
+ return -1;
+ else if (otherTraversalCategory.equals(VerificationStrategy.class))
+ return -1;
+ else
+ return 0;
+ }
}
- public interface VerificationStrategy extends TraversalStrategy<VerificationStrategy> {
+ public interface OptimizationStrategy extends TraversalStrategy<OptimizationStrategy> {
+ @Override
+ public default Class<OptimizationStrategy> getTraversalCategory() {
+ return OptimizationStrategy.class;
+ }
+
+ @Override
+ public default int compareTo(final Class<? extends TraversalStrategy> otherTraversalCategory) {
+ if (otherTraversalCategory.equals(DecorationStrategy.class))
+ return 1;
+ else if (otherTraversalCategory.equals(OptimizationStrategy.class))
+ return 0;
+ else if (otherTraversalCategory.equals(FinalizationStrategy.class))
+ return -1;
+ else if (otherTraversalCategory.equals(VerificationStrategy.class))
+ return -1;
+ else
+ return 0;
+ }
}
public interface FinalizationStrategy extends TraversalStrategy<FinalizationStrategy> {
+ @Override
+ public default Class<FinalizationStrategy> getTraversalCategory() {
+ return FinalizationStrategy.class;
+ }
+
+ @Override
+ public default int compareTo(final Class<? extends TraversalStrategy> otherTraversalCategory) {
+ if (otherTraversalCategory.equals(DecorationStrategy.class))
+ return 1;
+ else if (otherTraversalCategory.equals(OptimizationStrategy.class))
+ return 1;
+ else if (otherTraversalCategory.equals(FinalizationStrategy.class))
+ return 0;
+ else if (otherTraversalCategory.equals(VerificationStrategy.class))
+ return -1;
+ else
+ return 0;
+ }
}
+ public interface VerificationStrategy extends TraversalStrategy<VerificationStrategy> {
+
+ @Override
+ public default Class<VerificationStrategy> getTraversalCategory() {
+ return VerificationStrategy.class;
+ }
+
+ @Override
+ public default int compareTo(final Class<? extends TraversalStrategy> otherTraversalCategory) {
+ if (otherTraversalCategory.equals(DecorationStrategy.class))
+ return 1;
+ else if (otherTraversalCategory.equals(OptimizationStrategy.class))
+ return 1;
+ else if (otherTraversalCategory.equals(FinalizationStrategy.class))
+ return 1;
+ else
+ return 0;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a0c4b485/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
index 41127fb..0dd0cd2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
@@ -39,7 +39,7 @@ public class DefaultTraversalStrategies implements TraversalStrategies {
protected TraverserGeneratorFactory traverserGeneratorFactory = DefaultTraverserGeneratorFactory.instance();
@Override
- public TraversalStrategies addStrategies(final TraversalStrategy... strategies) {
+ public TraversalStrategies addStrategies(final TraversalStrategy<?>... strategies) {
boolean added = false;
for (final TraversalStrategy strategy : strategies) {
if (!this.traversalStrategies.contains(strategy)) {
@@ -67,16 +67,15 @@ public class DefaultTraversalStrategies implements TraversalStrategies {
}
@Override
- public List<TraversalStrategy> toList() {
+ public List<TraversalStrategy<?>> toList() {
return Collections.unmodifiableList(this.traversalStrategies);
}
@Override
public void applyStrategies(final Traversal.Admin<?, ?> traversal) {
- this.traversalStrategies.stream().filter(traversalStrategy -> traversalStrategy instanceof TraversalStrategy.DecorationStrategy).forEach(traversalStrategy -> traversalStrategy.apply(traversal));
- this.traversalStrategies.stream().filter(traversalStrategy -> traversalStrategy instanceof TraversalStrategy.OptimizationStrategy).forEach(traversalStrategy -> traversalStrategy.apply(traversal));
- this.traversalStrategies.stream().filter(traversalStrategy -> traversalStrategy instanceof TraversalStrategy.FinalizationStrategy).forEach(traversalStrategy -> traversalStrategy.apply(traversal));
- this.traversalStrategies.stream().filter(traversalStrategy -> traversalStrategy instanceof TraversalStrategy.VerificationStrategy).forEach(traversalStrategy -> traversalStrategy.apply(traversal));
+ for (final TraversalStrategy<?> traversalStrategy : this.traversalStrategies) {
+ traversalStrategy.apply(traversal);
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a0c4b485/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java
index c0a9175..d79015e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java
@@ -38,7 +38,7 @@ public final class EmptyTraversalStrategies implements TraversalStrategies {
}
@Override
- public List<TraversalStrategy> toList() {
+ public List<TraversalStrategy<?>> toList() {
return Collections.emptyList();
}
@@ -48,7 +48,7 @@ public final class EmptyTraversalStrategies implements TraversalStrategies {
}
@Override
- public TraversalStrategies addStrategies(final TraversalStrategy... strategies) {
+ public TraversalStrategies addStrategies(final TraversalStrategy<?>... strategies) {
return this;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a0c4b485/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java
index 7e0db0e..0beaa37 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java
@@ -70,7 +70,7 @@ public class TraversalStrategiesTest {
assertEquals(a, s.get(1));
//Dependency well defined
- s = Arrays.asList(c, a, b);
+ s = Arrays.asList(c, a, b);
TraversalStrategies.sortStrategies(s);
assertEquals(3, s.size());
assertEquals(a, s.get(0));
@@ -110,11 +110,6 @@ public class TraversalStrategiesTest {
public static class StrategyA extends DummyStrategy {
@Override
- public Set<Class<? extends TraversalStrategy>> applyPrior() {
- return Collections.EMPTY_SET;
- }
-
- @Override
public Set<Class<? extends TraversalStrategy>> applyPost() {
return Stream.of(StrategyB.class).collect(Collectors.toSet());
}
@@ -176,7 +171,7 @@ public class TraversalStrategiesTest {
}
- private static class DummyStrategy extends AbstractTraversalStrategy<TraversalStrategy> {
+ private static class DummyStrategy<S extends TraversalStrategy> extends AbstractTraversalStrategy<S> {
@Override
public void apply(Traversal.Admin<?, ?> traversal) {
@@ -184,4 +179,87 @@ public class TraversalStrategiesTest {
}
}
+ ////////////////////////////////////////////
+ ////////////////////////////////////////////
+ ////////////////////////////////////////////
+
+ @Test
+ public void testTraversalStrategySortingWithCategories() {
+ TraversalStrategy
+ a = new StrategyADecoration(),
+ b = new StrategyBDecoration(),
+ c = new StrategyCOptimization(),
+ d = new StrategyDOptimization(),
+ e = new StrategyEFinalization(),
+ k = new StrategyKVerification();
+
+ List<TraversalStrategy<?>> s;
+
+ //in category sorting
+ s = Arrays.asList(b, a);
+ TraversalStrategies.sortStrategies(s);
+ assertEquals(2, s.size());
+ assertEquals(a, s.get(0));
+ assertEquals(b, s.get(1));
+
+ //mixed category sorting
+ s = Arrays.asList(a, e, b, d);
+ TraversalStrategies.sortStrategies(s);
+ assertEquals(4, s.size());
+ assertEquals(a, s.get(0));
+ assertEquals(b, s.get(1));
+ assertEquals(d, s.get(2));
+ assertEquals(e, s.get(3));
+
+ //full reverse sorting
+ s = Arrays.asList(k,e,d,c,b,a);
+ TraversalStrategies.sortStrategies(s);
+ assertEquals(6, s.size());
+ assertEquals(a, s.get(0));
+ assertEquals(b, s.get(1));
+ assertEquals(c, s.get(2));
+ assertEquals(d, s.get(3));
+ assertEquals(e, s.get(4));
+ assertEquals(k, s.get(5));
+ }
+
+ public static class StrategyADecoration extends DummyStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
+
+ @Override
+ public Set<Class<? extends DecorationStrategy>> applyPost() {
+ return Stream.of(StrategyBDecoration.class).collect(Collectors.toSet());
+ }
+
+ }
+
+ public static class StrategyBDecoration extends DummyStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
+
+ }
+
+ public static class StrategyCOptimization extends DummyStrategy<TraversalStrategy.OptimizationStrategy> implements TraversalStrategy.OptimizationStrategy {
+
+ @Override
+ public Set<Class<? extends OptimizationStrategy>> applyPost() {
+ return Stream.of(StrategyDOptimization.class).collect(Collectors.toSet());
+ }
+ }
+
+ public static class StrategyDOptimization extends DummyStrategy<TraversalStrategy.OptimizationStrategy> implements TraversalStrategy.OptimizationStrategy {
+
+ @Override
+ public Set<Class<? extends OptimizationStrategy>> applyPrior() {
+ return Stream.of(StrategyCOptimization.class).collect(Collectors.toSet());
+ }
+
+ }
+
+ public static class StrategyEFinalization extends DummyStrategy<TraversalStrategy.FinalizationStrategy> implements TraversalStrategy.FinalizationStrategy {
+
+ }
+
+ public static class StrategyKVerification extends DummyStrategy<TraversalStrategy.VerificationStrategy> implements TraversalStrategy.VerificationStrategy {
+
+
+ }
+
}
[6/8] incubator-tinkerpop git commit: fixed a bug in HasNextTraversal
and its relation to ChooseStep. Also, fixed a similar bug in OrderGlobalStep.
Posted by ok...@apache.org.
fixed a bug in HasNextTraversal and its relation to ChooseStep. Also, fixed a similar bug in OrderGlobalStep.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/b24a9910
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/b24a9910
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/b24a9910
Branch: refs/heads/master
Commit: b24a99106341ac79e83a2c27f8f9218573e365aa
Parents: cf79f64
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue May 5 08:23:38 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue May 5 08:23:38 2015 -0600
----------------------------------------------------------------------
.../traversal/lambda/HasNextTraversal.java | 9 +++----
.../traversal/step/branch/BranchStep.java | 2 +-
.../traversal/step/map/OrderGlobalStep.java | 25 ++++++++++++++++----
.../step/util/TraversalComparator.java | 4 ++++
.../traversal/util/DefaultTraversal.java | 5 ++--
5 files changed, 34 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b24a9910/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/HasNextTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/HasNextTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/HasNextTraversal.java
index 7a02e53..b8a3b75 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/HasNextTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/HasNextTraversal.java
@@ -26,6 +26,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.structure.Graph;
import java.util.List;
@@ -60,7 +61,7 @@ public final class HasNextTraversal<S> implements Traversal.Admin<S, Boolean> {
@Override
public String toString() {
- return "(hasNext)";
+ return TraversalHelper.makeTraversalString(this);
}
@Override
@@ -70,7 +71,7 @@ public final class HasNextTraversal<S> implements Traversal.Admin<S, Boolean> {
@Override
public TraversalStrategies getStrategies() {
- return null;
+ return this.hasNextTraversal.getStrategies();
}
@Override
@@ -110,7 +111,7 @@ public final class HasNextTraversal<S> implements Traversal.Admin<S, Boolean> {
@Override
public <S2, E2> Traversal.Admin<S2, E2> removeStep(int index) throws IllegalStateException {
- return null;
+ return this.hasNextTraversal.removeStep(index);
}
@Override
@@ -141,7 +142,7 @@ public final class HasNextTraversal<S> implements Traversal.Admin<S, Boolean> {
@Override
public void setEngine(final TraversalEngine engine) {
-
+ this.hasNextTraversal.setEngine(engine);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b24a9910/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
index f49103d..3b990ca 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
@@ -64,7 +64,7 @@ public class BranchStep<S, E, M> extends ComputerAwareStep<S, E> implements Trav
@Override
public List<Traversal.Admin<S, E>> getGlobalChildren() {
return Collections.unmodifiableList(this.traversalOptions.values().stream()
- .flatMap(list -> list.stream())
+ .flatMap(List::stream)
.collect(Collectors.toList()));
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b24a9910/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderGlobalStep.java
index 39d98ef..92e2993 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderGlobalStep.java
@@ -21,16 +21,17 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.ComparatorHolder;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.CollectingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.TraversalComparator;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.structure.Order;
import org.apache.tinkerpop.gremlin.util.function.ChainedComparator;
import java.io.Serializable;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@@ -40,7 +41,7 @@ import java.util.stream.Collectors;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class OrderGlobalStep<S> extends CollectingBarrierStep<S> implements ComparatorHolder<S> {
+public final class OrderGlobalStep<S> extends CollectingBarrierStep<S> implements ComparatorHolder<S>, TraversalParent {
private final List<Comparator<S>> comparators = new ArrayList<>();
@@ -55,12 +56,14 @@ public final class OrderGlobalStep<S> extends CollectingBarrierStep<S> implement
@Override
public void addComparator(final Comparator<S> comparator) {
+ if (comparator instanceof TraversalComparator)
+ this.integrateChild(((TraversalComparator) comparator).getTraversal());
this.comparators.add(comparator);
}
@Override
public List<Comparator<S>> getComparators() {
- return this.comparators.isEmpty() ? Arrays.asList((Comparator) Order.incr) : this.comparators;
+ return this.comparators.isEmpty() ? Collections.singletonList((Comparator) Order.incr) : this.comparators;
}
@Override
@@ -73,6 +76,20 @@ public final class OrderGlobalStep<S> extends CollectingBarrierStep<S> implement
return Collections.singleton(TraverserRequirement.OBJECT);
}
+ @Override
+ public <S, E> List<Traversal.Admin<S, E>> getLocalChildren() {
+ return Collections.unmodifiableList(this.comparators.stream()
+ .filter(comparator -> comparator instanceof TraversalComparator)
+ .map(traversalComparator -> ((TraversalComparator<S, E>) traversalComparator).getTraversal())
+ .collect(Collectors.toList()));
+ }
+
+ @Override
+ public void addLocalChild(final Traversal.Admin<?, ?> localChildTraversal) {
+ throw new UnsupportedOperationException("Use OrderGlobalStep.addComparator(" + TraversalComparator.class.getSimpleName() + ") to add a local child traversal:" + this);
+ }
+
+
/////
private static class ComparatorTraverser<S> implements Comparator<Traverser<S>>, Serializable {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b24a9910/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 2fe164b..046dedf 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
@@ -53,5 +53,9 @@ public final class TraversalComparator<S, E> implements Comparator<S>, Serializa
clone.traversal = this.traversal.clone();
return clone;
}
+
+ public Traversal.Admin<S,E> getTraversal() {
+ return this.traversal;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b24a9910/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 17e779a..0d18e89 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
@@ -25,8 +25,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
import org.apache.tinkerpop.gremlin.structure.Graph;
import java.util.ArrayList;
@@ -58,8 +58,9 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
public DefaultTraversal(final Graph graph) {
this.graph = graph;
+ // necessary for anonymous traversals without a source (rethink how this works in the future)
this.setStrategies(TraversalStrategies.GlobalCache.getStrategies(TraversalStrategies.GlobalCache.getGraphClass(this.graph)));
- this.traversalEngine = StandardTraversalEngine.instance(); // TODO: remove and then clean up v.outE
+ this.traversalEngine = StandardTraversalEngine.instance();
}
@Override
[5/8] incubator-tinkerpop git commit: withStrategies() and
withoutStrategies() is now part of the TraversalEngine.Builder. JavaDoc.
Posted by ok...@apache.org.
withStrategies() and withoutStrategies() is now part of the TraversalEngine.Builder. JavaDoc.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/cf79f642
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/cf79f642
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/cf79f642
Branch: refs/heads/master
Commit: cf79f6421e82fe78de2f20e5d4b54ea0695e262c
Parents: f0157a5
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue May 5 07:52:41 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue May 5 07:52:41 2015 -0600
----------------------------------------------------------------------
.../process/traversal/TraversalEngine.java | 58 +++++++++++++++++---
.../dsl/graph/GraphTraversalSource.java | 17 +++---
.../engine/ComputerTraversalEngine.java | 13 +++--
3 files changed, 65 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cf79f642/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 312103d..85aee2a 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
@@ -27,35 +27,77 @@ import java.util.List;
import java.util.Optional;
/**
+ * A TraversalEngine is reponsible for executing a {@link Traversal}. There are two {@link Type}s of TraversalEngines.
+ * {@link Type#STANDARD} is the OLTP, iterator-based model of graph traversal.
+ * {@link Type#COMPUTER} is the OLAP, message passing model of graph traversal.
+ * Every {@link TraversalSource} should be provided a {@link TraversalEngine.Builder} so it can construct an engine each spawned {@link Traversal}.
+ *
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public interface TraversalEngine extends Serializable {
public enum Type {STANDARD, COMPUTER}
+ /**
+ * Get the type of the engine: {@link Type#STANDARD} or {@link Type#COMPUTER}.
+ *
+ * @return the traversal engine type
+ */
public Type getType();
+ /**
+ * If the traversal engine is of type {@link Type#COMPUTER}, then it should have the {@link GraphComputer} used for executing the traversal.
+ *
+ * @return an optional of containing the graph computer to be used for execution.
+ */
public Optional<GraphComputer> getGraphComputer();
+ /**
+ * Whether or not the type is {@link Type#STANDARD}.
+ *
+ * @return whether the engine type is standard (OLTP).
+ */
public default boolean isStandard() {
return this.getType().equals(Type.STANDARD);
}
+ /**
+ * Whether or not the type is {@link Type#COMPUTER}.
+ *
+ * @return whether the engine type is computer (OLAP).
+ */
public default boolean isComputer() {
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 {
+
+ /**
+ * A list of {@link TraversalStrategy} instances that should be applied to the ultimate {@link Traversal}.
+ *
+ * @return strategies to apply (if any).
+ */
+ public default List<TraversalStrategy> getWithStrategies() {
+ return Collections.emptyList();
+ }
+
+ /**
+ * A list of {@link TraversalStrategy} classes that should not be applied to the ultimate {@link Traversal}.
+ *
+ * @return strategies to not apply (if any).
+ */
+ public default List<Class<? extends TraversalStrategy>> getWithoutStrategies() {
+ return Collections.emptyList();
+ }
+
+ /**
+ * Create the {@link TraversalEngine}.
+ *
+ * @param graph the graph to ultimately have the {@link Traversal} execute over.
+ * @return a {@link TraversalEngine} that is particular to a {@link Traversal}.
+ */
public TraversalEngine create(final Graph graph);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cf79f642/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 ab67136..570c78c 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
@@ -61,19 +61,18 @@ public class GraphTraversalSource implements TraversalSource {
////
private final transient Graph graph;
- private final TraversalEngine.Builder engine;
+ private final TraversalEngine.Builder engineBuilder;
private final TraversalStrategies strategies;
private final List<TraversalStrategy> withStrategies;
private final List<Class<? extends TraversalStrategy>> withoutStrategies;
- private GraphTraversalSource(final Graph graph, final TraversalEngine.Builder engine, final List<TraversalStrategy> withStrategies, final List<Class<? extends TraversalStrategy>> withoutStrategies) {
+ private GraphTraversalSource(final Graph graph, final TraversalEngine.Builder engineBuilder, final List<TraversalStrategy> withStrategies, final List<Class<? extends TraversalStrategy>> withoutStrategies) {
this.graph = graph;
- this.engine = engine;
+ this.engineBuilder = engineBuilder;
this.withStrategies = withStrategies;
this.withoutStrategies = withoutStrategies;
- final TraversalEngine tempEngine = this.engine.create(this.graph);
- this.withStrategies.addAll(tempEngine.getWithStrategies());
- this.withoutStrategies.addAll(tempEngine.getWithoutStrategies());
+ this.withStrategies.addAll(engineBuilder.getWithStrategies());
+ this.withoutStrategies.addAll(engineBuilder.getWithoutStrategies());
final TraversalStrategies tempStrategies = TraversalStrategies.GlobalCache.getStrategies(TraversalStrategies.GlobalCache.getGraphClass(this.graph));
this.strategies = withStrategies.isEmpty() && withoutStrategies.isEmpty() ?
tempStrategies :
@@ -84,7 +83,7 @@ public class GraphTraversalSource implements TraversalSource {
private <S> GraphTraversal.Admin<S, S> generateTraversal() {
final GraphTraversal.Admin<S, S> traversal = new DefaultGraphTraversal<>(this.graph);
- final TraversalEngine engine = this.engine.create(this.graph);
+ final TraversalEngine engine = this.engineBuilder.create(this.graph);
traversal.setEngine(engine);
traversal.setStrategies(this.strategies);
return traversal;
@@ -152,7 +151,7 @@ public class GraphTraversalSource implements TraversalSource {
@Override
public Optional<GraphComputer> getGraphComputer() {
- return this.engine.create(this.graph).getGraphComputer();
+ return this.engineBuilder.create(this.graph).getGraphComputer();
}
@Override
@@ -162,7 +161,7 @@ public class GraphTraversalSource implements TraversalSource {
@Override
public GraphTraversalSource.Builder asBuilder() {
- final GraphTraversalSource.Builder builder = GraphTraversalSource.build().engine(this.engine);
+ final GraphTraversalSource.Builder builder = GraphTraversalSource.build().engine(this.engineBuilder);
this.withStrategies.forEach(builder::with);
this.withoutStrategies.forEach(builder::without);
return builder;
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cf79f642/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 ec09979..b4aafbb 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
@@ -44,7 +44,7 @@ public final class ComputerTraversalEngine implements TraversalEngine {
}
@Override
- public Type getType() { // TODO: gut this
+ public Type getType() {
return Type.COMPUTER;
}
@@ -58,11 +58,6 @@ 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();
}
@@ -71,6 +66,12 @@ public final class ComputerTraversalEngine implements TraversalEngine {
private Class<? extends GraphComputer> graphComputerClass;
private GraphComputer.Isolation isolation = GraphComputer.Isolation.BSP;
+ private static final List<TraversalStrategy> WITH_STRATEGIES = Collections.singletonList(ComputerResultStrategy.instance());
+
+ @Override
+ public List<TraversalStrategy> getWithStrategies() {
+ return WITH_STRATEGIES;
+ }
public Builder computer(final Class<? extends GraphComputer> graphComputerClass) {
this.graphComputerClass = graphComputerClass;