StepTranslator complete. Both TinkerGraph STANDARD and COMPUTER tests pass in full. That was intense. Still lots more to do...
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/af3e34b0 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/af3e34b0 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/af3e34b0 Branch: refs/heads/TINKERPOP-1278 Commit: af3e34b03d4c0bd7906c0bb57114fea00edaafc6 Parents: 7240b54 Author: Marko A. Rodriguez <okramma...@gmail.com> Authored: Wed Jun 29 08:19:49 2016 -0600 Committer: Marko A. Rodriguez <okramma...@gmail.com> Committed: Wed Jun 29 08:19:49 2016 -0600 ---------------------------------------------------------------------- .../process/traversal/TraversalStrategies.java | 4 + .../dsl/graph/DefaultGraphTraversal.java | 3 +- .../traversal/dsl/graph/GraphTraversal.java | 718 ++++++++----------- .../traversal/dsl/graph/StepTranslator.java | 267 ++++++- .../process/traversal/dsl/graph/Symbols.java | 25 +- .../gremlin/process/traversal/dsl/graph/__.java | 2 +- .../util/DefaultTraversalStrategies.java | 12 + .../util/EmptyTraversalStrategies.java | 11 + .../process/traversal/step/map/SelectTest.java | 2 +- 9 files changed, 592 insertions(+), 452 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/af3e34b0/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 b7fd5c4..65beee1 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 @@ -87,6 +87,10 @@ public interface TraversalStrategies extends Serializable, Cloneable { return (Optional) toList().stream().filter(s -> traversalStrategyClass.isAssignableFrom(s.getClass())).findAny(); } + public Translator getTranslator(); + + public void setTranslator(final Translator translator); + /** * Apply all the {@link TraversalStrategy} optimizers to the {@link Traversal} for the stated {@link TraversalEngine}. * This method must ensure that the strategies are sorted prior to application. http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/af3e34b0/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/DefaultGraphTraversal.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/DefaultGraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/DefaultGraphTraversal.java index 50b9287..f1b878d 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/DefaultGraphTraversal.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/DefaultGraphTraversal.java @@ -18,7 +18,6 @@ */ package org.apache.tinkerpop.gremlin.process.traversal.dsl.graph; -import org.apache.tinkerpop.gremlin.process.traversal.Step; import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal; import org.apache.tinkerpop.gremlin.structure.Graph; @@ -29,10 +28,12 @@ public class DefaultGraphTraversal<S, E> extends DefaultTraversal<S, E> implemen public DefaultGraphTraversal() { super(); + this.strategies.setTranslator(new StepTranslator()); } public DefaultGraphTraversal(final Graph graph) { super(graph); + this.strategies.setTranslator(new StepTranslator()); } @Override http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/af3e34b0/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java index 170c1a9..b6e3f21 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java @@ -19,9 +19,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.dsl.graph; import org.apache.tinkerpop.gremlin.process.computer.VertexProgram; -import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PageRankVertexProgramStep; -import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PeerPressureVertexProgramStep; -import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ProgramVertexProgramStep; import org.apache.tinkerpop.gremlin.process.traversal.Order; import org.apache.tinkerpop.gremlin.process.traversal.P; import org.apache.tinkerpop.gremlin.process.traversal.Path; @@ -30,106 +27,39 @@ import org.apache.tinkerpop.gremlin.process.traversal.Scope; import org.apache.tinkerpop.gremlin.process.traversal.Step; import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.Traverser; -import org.apache.tinkerpop.gremlin.process.traversal.lambda.ColumnTraversal; -import org.apache.tinkerpop.gremlin.process.traversal.lambda.FunctionTraverser; -import org.apache.tinkerpop.gremlin.process.traversal.lambda.LoopTraversal; -import org.apache.tinkerpop.gremlin.process.traversal.lambda.PredicateTraverser; -import org.apache.tinkerpop.gremlin.process.traversal.lambda.TrueTraversal; -import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating; import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating; -import org.apache.tinkerpop.gremlin.process.traversal.step.TimesModulating; -import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent; -import org.apache.tinkerpop.gremlin.process.traversal.step.branch.BranchStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.branch.ChooseStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.branch.LocalStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.branch.RepeatStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.branch.UnionStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.AndStep; import org.apache.tinkerpop.gremlin.process.traversal.step.filter.CoinStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.ConnectiveStep; import org.apache.tinkerpop.gremlin.process.traversal.step.filter.CyclicPathStep; import org.apache.tinkerpop.gremlin.process.traversal.step.filter.DedupGlobalStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.DropStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep; import org.apache.tinkerpop.gremlin.process.traversal.step.filter.IsStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.LambdaFilterStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.NotStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.OrStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.SampleGlobalStep; import org.apache.tinkerpop.gremlin.process.traversal.step.filter.SimplePathStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.TailGlobalStep; import org.apache.tinkerpop.gremlin.process.traversal.step.filter.TimeLimitStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.TraversalFilterStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WherePredicateStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereTraversalStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStartStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.CoalesceStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.ConstantStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountGlobalStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountLocalStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.DedupLocalStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.EdgeOtherVertexStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.EdgeVertexStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.FoldStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupCountStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupStepV3d0; import org.apache.tinkerpop.gremlin.process.traversal.step.map.IdStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.LabelStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.LambdaCollectingBarrierStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.LambdaFlatMapStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.LambdaMapStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.LoopsStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.MaxGlobalStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.MaxLocalStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.MeanGlobalStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.MeanLocalStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.MinGlobalStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.MinLocalStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.NoOpBarrierStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderLocalStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.PathStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProjectStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertyKeyStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertyMapStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertyValueStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.RangeLocalStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.SackStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.SampleLocalStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectOneStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.SumGlobalStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.SumLocalStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.TailLocalStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalFlatMapStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalMapStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.TreeStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.UnfoldStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep; import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.AddPropertyStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.AggregateStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroupCountSideEffectStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroupSideEffectStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroupSideEffectStepV3d0; import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.InjectStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.LambdaSideEffectStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.ProfileSideEffectStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SackValueStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectCapStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StartStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StoreStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SubgraphStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.TraversalSideEffectStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.TreeSideEffectStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer; import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet; import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper; @@ -140,11 +70,9 @@ import org.apache.tinkerpop.gremlin.structure.Edge; import org.apache.tinkerpop.gremlin.structure.Element; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.Property; -import org.apache.tinkerpop.gremlin.structure.PropertyType; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.apache.tinkerpop.gremlin.structure.VertexProperty; -import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier; import java.util.Arrays; import java.util.Collection; @@ -152,7 +80,6 @@ import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Function; @@ -193,13 +120,13 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link LambdaMapStep}. */ public default <E2> GraphTraversal<S, E2> map(final Function<Traverser<E>, E2> function) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), function); - return this.asAdmin().addStep(new LambdaMapStep<>(this.asAdmin(), function)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.map, function); + return (GraphTraversal) this; } public default <E2> GraphTraversal<S, E2> map(final Traversal<?, E2> mapTraversal) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), mapTraversal); - return this.asAdmin().addStep(new TraversalMapStep<>(this.asAdmin(), mapTraversal)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.map, mapTraversal); + return (GraphTraversal) this; } /** @@ -211,8 +138,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link LambdaFlatMapStep}. */ public default <E2> GraphTraversal<S, E2> flatMap(final Function<Traverser<E>, Iterator<E2>> function) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), function); - return this.asAdmin().addStep(new LambdaFlatMapStep<>(this.asAdmin(), function)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.flatMap, function); + return (GraphTraversal) this; } /** @@ -224,8 +151,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link TraversalFlatMapStep}. */ public default <E2> GraphTraversal<S, E2> flatMap(final Traversal<?, E2> flatMapTraversal) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), flatMapTraversal); - return this.asAdmin().addStep(new TraversalFlatMapStep<>(this.asAdmin(), flatMapTraversal)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.flatMap, flatMapTraversal); + return (GraphTraversal) this; } /** @@ -234,8 +161,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link IdStep}. */ public default GraphTraversal<S, Object> id() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new IdStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.id); + return (GraphTraversal) this; } /** @@ -244,8 +171,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link LabelStep}. */ public default GraphTraversal<S, String> label() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new LabelStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.label); + return (GraphTraversal) this; } /** @@ -254,8 +181,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link IdentityStep}. */ public default GraphTraversal<S, E> identity() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new IdentityStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.identity); + return this; } /** @@ -264,13 +191,13 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link ConstantStep}. */ public default <E2> GraphTraversal<S, E2> constant(final E2 e) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), e); - return this.asAdmin().addStep(new ConstantStep<E, E2>(this.asAdmin(), e)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.constant, e); + return (GraphTraversal) this; } public default GraphTraversal<S, Vertex> V(final Object... vertexIdsOrElements) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), vertexIdsOrElements); - return this.asAdmin().addStep(new GraphStep<>(this.asAdmin(), Vertex.class, false, vertexIdsOrElements)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.V, vertexIdsOrElements); + return (GraphTraversal) this; } /** @@ -281,8 +208,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link VertexStep}. */ public default GraphTraversal<S, Vertex> to(final Direction direction, final String... edgeLabels) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), direction, edgeLabels); - return this.asAdmin().addStep(new VertexStep<>(this.asAdmin(), Vertex.class, direction, edgeLabels)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.to, direction, edgeLabels); + return (GraphTraversal) this; } /** @@ -292,8 +219,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link VertexStep}. */ public default GraphTraversal<S, Vertex> out(final String... edgeLabels) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), edgeLabels); - return this.asAdmin().addStep(new VertexStep<>(this.asAdmin(), Vertex.class, Direction.OUT, edgeLabels)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.out, edgeLabels); + return (GraphTraversal) this; } /** @@ -303,8 +230,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link VertexStep}. */ public default GraphTraversal<S, Vertex> in(final String... edgeLabels) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), edgeLabels); - return this.asAdmin().addStep(new VertexStep<>(this.asAdmin(), Vertex.class, Direction.IN, edgeLabels)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.in, edgeLabels); + return (GraphTraversal) this; } /** @@ -314,8 +241,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link VertexStep}. */ public default GraphTraversal<S, Vertex> both(final String... edgeLabels) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), edgeLabels); - return this.asAdmin().addStep(new VertexStep<>(this.asAdmin(), Vertex.class, Direction.BOTH, edgeLabels)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.both, edgeLabels); + return (GraphTraversal) this; } /** @@ -326,8 +253,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link VertexStep}. */ public default GraphTraversal<S, Edge> toE(final Direction direction, final String... edgeLabels) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), direction, edgeLabels); - return this.asAdmin().addStep(new VertexStep<>(this.asAdmin(), Edge.class, direction, edgeLabels)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.toE, direction, edgeLabels); + return (GraphTraversal) this; } /** @@ -337,8 +264,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link VertexStep}. */ public default GraphTraversal<S, Edge> outE(final String... edgeLabels) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), edgeLabels); - return this.asAdmin().addStep(new VertexStep<>(this.asAdmin(), Edge.class, Direction.OUT, edgeLabels)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.outE, edgeLabels); + return (GraphTraversal) this; } /** @@ -348,8 +275,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link VertexStep}. */ public default GraphTraversal<S, Edge> inE(final String... edgeLabels) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), edgeLabels); - return this.asAdmin().addStep(new VertexStep<>(this.asAdmin(), Edge.class, Direction.IN, edgeLabels)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.inE, edgeLabels); + return (GraphTraversal) this; } /** @@ -359,8 +286,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link VertexStep}. */ public default GraphTraversal<S, Edge> bothE(final String... edgeLabels) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), edgeLabels); - return this.asAdmin().addStep(new VertexStep<>(this.asAdmin(), Edge.class, Direction.BOTH, edgeLabels)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.bothE, edgeLabels); + return (GraphTraversal) this; } /** @@ -370,8 +297,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link EdgeVertexStep}. */ public default GraphTraversal<S, Vertex> toV(final Direction direction) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), direction); - return this.asAdmin().addStep(new EdgeVertexStep(this.asAdmin(), direction)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.toV, direction); + return (GraphTraversal) this; } /** @@ -380,8 +307,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link EdgeVertexStep}. */ public default GraphTraversal<S, Vertex> inV() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new EdgeVertexStep(this.asAdmin(), Direction.IN)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.inV); + return (GraphTraversal) this; } /** @@ -390,8 +317,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link EdgeVertexStep}. */ public default GraphTraversal<S, Vertex> outV() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new EdgeVertexStep(this.asAdmin(), Direction.OUT)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.outV); + return (GraphTraversal) this; } /** @@ -400,8 +327,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link EdgeVertexStep}. */ public default GraphTraversal<S, Vertex> bothV() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new EdgeVertexStep(this.asAdmin(), Direction.BOTH)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.bothV); + return (GraphTraversal) this; } /** @@ -410,8 +337,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link EdgeOtherVertexStep}. */ public default GraphTraversal<S, Vertex> otherV() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new EdgeOtherVertexStep(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.otherV); + return (GraphTraversal) this; } /** @@ -420,8 +347,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link OrderGlobalStep}. */ public default GraphTraversal<S, E> order() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new OrderGlobalStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.order); + return this; } /** @@ -431,8 +358,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link OrderGlobalStep} or {@link OrderLocalStep}. */ public default GraphTraversal<S, E> order(final Scope scope) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), scope); - return this.asAdmin().addStep(scope.equals(Scope.global) ? new OrderGlobalStep<>(this.asAdmin()) : new OrderLocalStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.order, scope); + return this; } /** @@ -444,8 +371,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link PropertiesStep}. */ public default <E2> GraphTraversal<S, ? extends Property<E2>> properties(final String... propertyKeys) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), propertyKeys); - return this.asAdmin().addStep(new PropertiesStep<>(this.asAdmin(), PropertyType.PROPERTY, propertyKeys)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.properties, propertyKeys); + return (GraphTraversal) this; } /** @@ -457,8 +384,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link PropertiesStep}. */ public default <E2> GraphTraversal<S, E2> values(final String... propertyKeys) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), propertyKeys); - return this.asAdmin().addStep(new PropertiesStep<>(this.asAdmin(), PropertyType.VALUE, propertyKeys)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.values, propertyKeys); + return (GraphTraversal) this; } /** @@ -470,8 +397,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link PropertyMapStep}. */ public default <E2> GraphTraversal<S, Map<String, E2>> propertyMap(final String... propertyKeys) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), propertyKeys); - return this.asAdmin().addStep(new PropertyMapStep<>(this.asAdmin(), false, PropertyType.PROPERTY, propertyKeys)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.propertyMap, propertyKeys); + return (GraphTraversal) this; } /** @@ -483,8 +410,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link PropertyMapStep}. */ public default <E2> GraphTraversal<S, Map<String, E2>> valueMap(final String... propertyKeys) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), propertyKeys); - return this.asAdmin().addStep(new PropertyMapStep<>(this.asAdmin(), false, PropertyType.VALUE, propertyKeys)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.valueMap, propertyKeys); + return (GraphTraversal) this; } /** @@ -497,13 +424,13 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link PropertyMapStep}. */ public default <E2> GraphTraversal<S, Map<String, E2>> valueMap(final boolean includeTokens, final String... propertyKeys) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), includeTokens, propertyKeys); - return this.asAdmin().addStep(new PropertyMapStep<>(this.asAdmin(), includeTokens, PropertyType.VALUE, propertyKeys)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.valueMap, includeTokens, propertyKeys); + return (GraphTraversal) this; } public default <E2> GraphTraversal<S, Collection<E2>> select(final Column column) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), column); - return this.asAdmin().addStep(new TraversalMapStep<>(this.asAdmin(), new ColumnTraversal(column))); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.select, column); + return (GraphTraversal) this; } /** @@ -528,8 +455,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link PropertyKeyStep}. */ public default GraphTraversal<S, String> key() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new PropertyKeyStep(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.key); + return (GraphTraversal) this; } /** @@ -538,8 +465,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link PropertyValueStep}. */ public default <E2> GraphTraversal<S, E2> value() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new PropertyValueStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.value); + return (GraphTraversal) this; } /** @@ -548,8 +475,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link PathStep}. */ public default GraphTraversal<S, Path> path() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new PathStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.path); + return (GraphTraversal) this; } /** @@ -560,8 +487,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link MatchStep}. */ public default <E2> GraphTraversal<S, Map<String, E2>> match(final Traversal<?, ?>... matchTraversals) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), matchTraversals); - return this.asAdmin().addStep(new MatchStep<>(this.asAdmin(), ConnectiveStep.Connective.AND, matchTraversals)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.match, matchTraversals); + return (GraphTraversal) this; } /** @@ -571,21 +498,18 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link SackStep}. */ public default <E2> GraphTraversal<S, E2> sack() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new SackStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.sack); + return (GraphTraversal) this; } public default GraphTraversal<S, Integer> loops() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new LoopsStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.loops); + return (GraphTraversal) this; } public default <E2> GraphTraversal<S, Map<String, E2>> project(final String projectKey, final String... otherProjectKeys) { - final String[] projectKeys = new String[otherProjectKeys.length + 1]; - projectKeys[0] = projectKey; - System.arraycopy(otherProjectKeys, 0, projectKeys, 1, otherProjectKeys.length); - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), projectKeys); - return this.asAdmin().addStep(new ProjectStep<>(this.asAdmin(), projectKeys)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.project, projectKey, otherProjectKeys); + return (GraphTraversal) this; } /** @@ -599,15 +523,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link SelectStep}. */ public default <E2> GraphTraversal<S, Map<String, E2>> select(final Pop pop, final String selectKey1, final String selectKey2, String... otherSelectKeys) { - final String[] selectKeys = new String[otherSelectKeys.length + 2]; - selectKeys[0] = selectKey1; - selectKeys[1] = selectKey2; - System.arraycopy(otherSelectKeys, 0, selectKeys, 2, otherSelectKeys.length); - if (null == pop) - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), selectKeys); - else - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), pop, selectKeys); - return this.asAdmin().addStep(new SelectStep<>(this.asAdmin(), pop, selectKeys)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.select, pop, selectKey1, selectKey2, otherSelectKeys); + return (GraphTraversal) this; } /** @@ -620,32 +537,33 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link SelectStep}. */ public default <E2> GraphTraversal<S, Map<String, E2>> select(final String selectKey1, final String selectKey2, String... otherSelectKeys) { - return this.select(null, selectKey1, selectKey2, otherSelectKeys); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.select, selectKey1, selectKey2, otherSelectKeys); + return (GraphTraversal) this; } public default <E2> GraphTraversal<S, E2> select(final Pop pop, final String selectKey) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), pop, selectKey); - return this.asAdmin().addStep(new SelectOneStep<>(this.asAdmin(), pop, selectKey)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.select, pop, selectKey); + return (GraphTraversal) this; } public default <E2> GraphTraversal<S, E2> select(final String selectKey) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), selectKey); - return this.asAdmin().addStep(new SelectOneStep<>(this.asAdmin(), null, selectKey)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.select, selectKey); + return (GraphTraversal) this; } public default <E2> GraphTraversal<S, E2> unfold() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new UnfoldStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.unfold); + return (GraphTraversal) this; } public default GraphTraversal<S, List<E>> fold() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new FoldStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.fold); + return (GraphTraversal) this; } public default <E2> GraphTraversal<S, E2> fold(final E2 seed, final BiFunction<E2, E, E2> foldFunction) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), seed, foldFunction); - return this.asAdmin().addStep(new FoldStep<>(this.asAdmin(), new ConstantSupplier<>(seed), foldFunction)); // TODO: User should provide supplier? + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.fold, seed, foldFunction); + return (GraphTraversal) this; } /** @@ -654,13 +572,13 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link CountGlobalStep}. */ public default GraphTraversal<S, Long> count() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new CountGlobalStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.count); + return (GraphTraversal) this; } public default GraphTraversal<S, Long> count(final Scope scope) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), scope); - return this.asAdmin().addStep(scope.equals(Scope.global) ? new CountGlobalStep<>(this.asAdmin()) : new CountLocalStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.count, scope); + return (GraphTraversal) this; } /** @@ -669,48 +587,48 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link SumGlobalStep}. */ public default <E2 extends Number> GraphTraversal<S, E2> sum() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new SumGlobalStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.sum); + return (GraphTraversal) this; } public default <E2 extends Number> GraphTraversal<S, E2> sum(final Scope scope) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), scope); - return this.asAdmin().addStep(scope.equals(Scope.global) ? new SumGlobalStep<>(this.asAdmin()) : new SumLocalStep(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.sum, scope); + return (GraphTraversal) this; } public default <E2 extends Number> GraphTraversal<S, E2> max() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new MaxGlobalStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.max); + return (GraphTraversal) this; } public default <E2 extends Number> GraphTraversal<S, E2> max(final Scope scope) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), scope); - return this.asAdmin().addStep(scope.equals(Scope.global) ? new MaxGlobalStep<>(this.asAdmin()) : new MaxLocalStep(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.max, scope); + return (GraphTraversal) this; } public default <E2 extends Number> GraphTraversal<S, E2> min() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new MinGlobalStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.min); + return (GraphTraversal) this; } public default <E2 extends Number> GraphTraversal<S, E2> min(final Scope scope) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), scope); - return this.asAdmin().addStep(scope.equals(Scope.global) ? new MinGlobalStep<E2>(this.asAdmin()) : new MinLocalStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.min, scope); + return (GraphTraversal) this; } public default <E2 extends Number> GraphTraversal<S, E2> mean() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new MeanGlobalStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.mean); + return (GraphTraversal) this; } public default <E2 extends Number> GraphTraversal<S, E2> mean(final Scope scope) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), scope); - return this.asAdmin().addStep(scope.equals(Scope.global) ? new MeanGlobalStep<>(this.asAdmin()) : new MeanLocalStep(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.mean, scope); + return (GraphTraversal) this; } public default <K, V> GraphTraversal<S, Map<K, V>> group() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new GroupStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.group); + return (GraphTraversal) this; } /** @@ -718,28 +636,28 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { */ @Deprecated public default <K, V> GraphTraversal<S, Map<K, V>> groupV3d0() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new GroupStepV3d0<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.groupV3d0); + return (GraphTraversal) this; } public default <K> GraphTraversal<S, Map<K, Long>> groupCount() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new GroupCountStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.groupCount); + return (GraphTraversal) this; } public default GraphTraversal<S, Tree> tree() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new TreeStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.tree); + return (GraphTraversal) this; } public default GraphTraversal<S, Vertex> addV(final String vertexLabel) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), vertexLabel); - return this.asAdmin().addStep(new AddVertexStep<>(this.asAdmin(), vertexLabel)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.addV, vertexLabel); + return (GraphTraversal) this; } public default GraphTraversal<S, Vertex> addV() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new AddVertexStep<>(this.asAdmin(), null)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.addV); + return (GraphTraversal) this; } /** @@ -751,36 +669,31 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { for (int i = 0; i < propertyKeyValues.length; i = i + 2) { this.property(propertyKeyValues[i], propertyKeyValues[i + 1]); } - //((AddVertexStep) this.asAdmin().getEndStep()).addPropertyMutations(propertyKeyValues); return (GraphTraversal<S, Vertex>) this; } public default GraphTraversal<S, Edge> addE(final String edgeLabel) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), edgeLabel); - return this.asAdmin().addStep(new AddEdgeStep<>(this.asAdmin(), edgeLabel)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.addE, edgeLabel); + return (GraphTraversal) this; } public default GraphTraversal<S, E> to(final String toStepLabel) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), toStepLabel); - ((AddEdgeStep) this.asAdmin().getEndStep()).addTo(__.select(toStepLabel)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.to, toStepLabel); return this; } public default GraphTraversal<S, E> from(final String fromStepLabel) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), fromStepLabel); - ((AddEdgeStep) this.asAdmin().getEndStep()).addFrom(__.select(fromStepLabel)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.from, fromStepLabel); return this; } public default GraphTraversal<S, E> to(final Traversal<E, Vertex> toVertex) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), toVertex); - ((AddEdgeStep) this.asAdmin().getEndStep()).addTo(toVertex); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.to, toVertex); return this; } public default GraphTraversal<S, E> from(final Traversal<E, Vertex> fromVertex) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), fromVertex); - ((AddEdgeStep) this.asAdmin().getEndStep()).addFrom(fromVertex); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.from, fromVertex); return this; } @@ -837,28 +750,28 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { ///////////////////// FILTER STEPS ///////////////////// public default GraphTraversal<S, E> filter(final Predicate<Traverser<E>> predicate) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), predicate); - return this.asAdmin().addStep(new LambdaFilterStep<>(this.asAdmin(), predicate)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.filter, predicate); + return this; } public default GraphTraversal<S, E> filter(final Traversal<?, ?> filterTraversal) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), filterTraversal); - return this.asAdmin().addStep(new TraversalFilterStep<>(this.asAdmin(), (Traversal) filterTraversal)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.filter, filterTraversal); + return this; } public default GraphTraversal<S, E> or(final Traversal<?, ?>... orTraversals) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), orTraversals); - return this.asAdmin().addStep(new OrStep(this.asAdmin(), orTraversals)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.or, orTraversals); + return this; } public default GraphTraversal<S, E> and(final Traversal<?, ?>... andTraversals) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), andTraversals); - return this.asAdmin().addStep(new AndStep(this.asAdmin(), andTraversals)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.and, andTraversals); + return this; } public default GraphTraversal<S, E> inject(final E... injections) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), injections); - return this.asAdmin().addStep(new InjectStep<>(this.asAdmin(), injections)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.inject, injections); + return this; } /** @@ -869,8 +782,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link DedupGlobalStep}. */ public default GraphTraversal<S, E> dedup(final Scope scope, final String... dedupLabels) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), scope, dedupLabels); - return this.asAdmin().addStep(scope.equals(Scope.global) ? new DedupGlobalStep<>(this.asAdmin(), dedupLabels) : new DedupLocalStep(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.dedup, scope, dedupLabels); + return this; } /** @@ -880,96 +793,98 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link DedupGlobalStep}. */ public default GraphTraversal<S, E> dedup(final String... dedupLabels) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), dedupLabels); - return this.asAdmin().addStep(new DedupGlobalStep<>(this.asAdmin(), dedupLabels)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.dedup, dedupLabels); + return this; } public default GraphTraversal<S, E> where(final String startKey, final P<String> predicate) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), startKey, predicate); - return this.asAdmin().addStep(new WherePredicateStep<>(this.asAdmin(), Optional.ofNullable(startKey), predicate)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.where, startKey, predicate); + return this; } public default GraphTraversal<S, E> where(final P<String> predicate) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), predicate); - return this.asAdmin().addStep(new WherePredicateStep<>(this.asAdmin(), Optional.empty(), predicate)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.where, predicate); + return this; } public default GraphTraversal<S, E> where(final Traversal<?, ?> whereTraversal) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), whereTraversal); - return TraversalHelper.getVariableLocations(whereTraversal.asAdmin()).isEmpty() ? - this.asAdmin().addStep(new TraversalFilterStep<>(this.asAdmin(), (Traversal) whereTraversal)) : - this.asAdmin().addStep(new WhereTraversalStep<>(this.asAdmin(), whereTraversal)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.where, whereTraversal); + return this; } public default GraphTraversal<S, E> has(final String propertyKey, final P<?> predicate) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), propertyKey, predicate); - return this.asAdmin().addStep(new HasStep(this.asAdmin(), HasContainer.makeHasContainers(propertyKey, predicate))); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.has, propertyKey, predicate); + return this; } public default GraphTraversal<S, E> has(final T accessor, final P<?> predicate) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), accessor, predicate); - return this.asAdmin().addStep(new HasStep(this.asAdmin(), HasContainer.makeHasContainers(accessor.getAccessor(), predicate))); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.has, accessor, predicate); + return this; } public default GraphTraversal<S, E> has(final String propertyKey, final Object value) { - if (value instanceof P) - return this.has(propertyKey, (P) value); - else if (value instanceof Traversal) - return this.has(propertyKey, (Traversal) value); - else - return this.has(propertyKey, P.eq(value)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.has, propertyKey, value); + return this; } public default GraphTraversal<S, E> has(final T accessor, final Object value) { - return this.has(accessor.getAccessor(), value); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.has, accessor, value); + return this; } public default GraphTraversal<S, E> has(final String label, final String propertyKey, final P<?> predicate) { - return this.has(T.label, label).has(propertyKey, predicate); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.has, label, propertyKey, predicate); + return this; } public default GraphTraversal<S, E> has(final String label, final String propertyKey, final Object value) { - return this.has(T.label, label).has(propertyKey, value); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.has, label, propertyKey, value); + return this; } public default GraphTraversal<S, E> has(final T accessor, final Traversal<?, ?> propertyTraversal) { - return this.has(accessor.getAccessor(), propertyTraversal); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.has, accessor, propertyTraversal); + return this; } public default GraphTraversal<S, E> has(final String propertyKey, final Traversal<?, ?> propertyTraversal) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), propertyKey, propertyTraversal); - return this.asAdmin().addStep( - new TraversalFilterStep<>(this.asAdmin(), propertyTraversal.asAdmin().addStep(0, - new PropertiesStep(propertyTraversal.asAdmin(), PropertyType.VALUE, propertyKey)))); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.has, propertyKey, propertyTraversal); + return this; } public default GraphTraversal<S, E> has(final String propertyKey) { - return this.filter(__.values(propertyKey)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.has, propertyKey); + return this; } public default GraphTraversal<S, E> hasNot(final String propertyKey) { - return this.not(__.values(propertyKey)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.hasNot, propertyKey); + return this; } public default GraphTraversal<S, E> hasLabel(final String... labels) { - return labels.length == 1 ? this.has(T.label, labels[0]) : this.has(T.label, P.within(labels)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.hasLabel, labels); + return this; } public default GraphTraversal<S, E> hasId(final Object... ids) { - return ids.length == 1 ? this.has(T.id, ids[0]) : this.has(T.id, P.within(ids)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.hasId, ids); + return this; } public default GraphTraversal<S, E> hasKey(final String... keys) { - return keys.length == 1 ? this.has(T.key, keys[0]) : this.has(T.key, P.within(keys)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.hasKey, keys); + return this; } public default GraphTraversal<S, E> hasValue(final Object... values) { - return values.length == 1 ? this.has(T.value, values[0]) : this.has(T.value, P.within(values)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.hasValue, values); + return this; } public default GraphTraversal<S, E> is(final P<E> predicate) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), predicate); - return this.asAdmin().addStep(new IsStep<>(this.asAdmin(), predicate)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.is, predicate); + return this; } /** @@ -979,12 +894,13 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link IsStep}. */ public default GraphTraversal<S, E> is(final Object value) { - return this.is(value instanceof P ? (P<E>) value : P.eq((E) value)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.is, value); + return this; } public default GraphTraversal<S, E> not(final Traversal<?, ?> notTraversal) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), notTraversal); - return this.asAdmin().addStep(new NotStep<>(this.asAdmin(), (Traversal<E, ?>) notTraversal)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.not, notTraversal); + return this; } /** @@ -994,56 +910,48 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link CoinStep}. */ public default GraphTraversal<S, E> coin(final double probability) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), probability); - return this.asAdmin().addStep(new CoinStep<>(this.asAdmin(), probability)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.coin, probability); + return this; } public default GraphTraversal<S, E> range(final long low, final long high) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), low, high); - return this.asAdmin().addStep(new RangeGlobalStep<>(this.asAdmin(), low, high)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.range, low, high); + return this; } public default <E2> GraphTraversal<S, E2> range(final Scope scope, final long low, final long high) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), scope, low, high); - return this.asAdmin().addStep(scope.equals(Scope.global) - ? new RangeGlobalStep<>(this.asAdmin(), low, high) - : new RangeLocalStep<>(this.asAdmin(), low, high)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.range, scope, low, high); + return (GraphTraversal) this; } public default GraphTraversal<S, E> limit(final long limit) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), limit); - return this.asAdmin().addStep(new RangeGlobalStep<>(this.asAdmin(), 0, limit)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.limit, limit); + return this; } public default <E2> GraphTraversal<S, E2> limit(final Scope scope, final long limit) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), scope, limit); - return this.asAdmin().addStep(scope.equals(Scope.global) - ? new RangeGlobalStep<>(this.asAdmin(), 0, limit) - : new RangeLocalStep<>(this.asAdmin(), 0, limit)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.limit, scope, limit); + return (GraphTraversal) this; } public default GraphTraversal<S, E> tail() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new TailGlobalStep<>(this.asAdmin(), 1)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.tail); + return this; } public default GraphTraversal<S, E> tail(final long limit) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), limit); - return this.asAdmin().addStep(new TailGlobalStep<>(this.asAdmin(), limit)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.tail, limit); + return this; } public default <E2> GraphTraversal<S, E2> tail(final Scope scope) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), scope); - return this.asAdmin().addStep(scope.equals(Scope.global) - ? new TailGlobalStep<>(this.asAdmin(), 1) - : new TailLocalStep<>(this.asAdmin(), 1)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.tail, scope); + return (GraphTraversal) this; } public default <E2> GraphTraversal<S, E2> tail(final Scope scope, final long limit) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), scope, limit); - return this.asAdmin().addStep(scope.equals(Scope.global) - ? new TailGlobalStep<>(this.asAdmin(), limit) - : new TailLocalStep<>(this.asAdmin(), limit)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.tail, scope, limit); + return (GraphTraversal) this; } /** @@ -1053,8 +961,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link TimeLimitStep} */ public default GraphTraversal<S, E> timeLimit(final long timeLimit) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), timeLimit); - return this.asAdmin().addStep(new TimeLimitStep<E>(this.asAdmin(), timeLimit)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.timeLimit, timeLimit); + return this; } /** @@ -1063,8 +971,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link SimplePathStep}. */ public default GraphTraversal<S, E> simplePath() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new SimplePathStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.simplePath); + return this; } /** @@ -1073,80 +981,78 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { * @return the traversal with an appended {@link CyclicPathStep}. */ public default GraphTraversal<S, E> cyclicPath() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new CyclicPathStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.cyclicPath); + return this; } public default GraphTraversal<S, E> sample(final int amountToSample) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), amountToSample); - return this.asAdmin().addStep(new SampleGlobalStep<>(this.asAdmin(), amountToSample)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.sample, amountToSample); + return this; } public default GraphTraversal<S, E> sample(final Scope scope, final int amountToSample) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), scope, amountToSample); - return this.asAdmin().addStep(scope.equals(Scope.global) - ? new SampleGlobalStep<>(this.asAdmin(), amountToSample) - : new SampleLocalStep<>(this.asAdmin(), amountToSample)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.sample, scope, amountToSample); + return this; } public default GraphTraversal<S, E> drop() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep(new DropStep<>(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.drop); + return this; } ///////////////////// SIDE-EFFECT STEPS ///////////////////// public default GraphTraversal<S, E> sideEffect(final Consumer<Traverser<E>> consumer) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), consumer); - return this.asAdmin().addStep(new LambdaSideEffectStep<>(this.asAdmin(), consumer)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.sideEffect, consumer); + return this; } public default GraphTraversal<S, E> sideEffect(final Traversal<?, ?> sideEffectTraversal) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), sideEffectTraversal); - return this.asAdmin().addStep(new TraversalSideEffectStep<>(this.asAdmin(), (Traversal) sideEffectTraversal)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.sideEffect, sideEffectTraversal); + return this; } public default <E2> GraphTraversal<S, E2> cap(final String sideEffectKey, final String... sideEffectKeys) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), sideEffectKey, sideEffectKeys); - return this.asAdmin().addStep(new SideEffectCapStep<>(this.asAdmin(), sideEffectKey, sideEffectKeys)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.cap, sideEffectKey, sideEffectKeys); + return (GraphTraversal) this; } public default GraphTraversal<S, Edge> subgraph(final String sideEffectKey) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), sideEffectKey); - return this.asAdmin().addStep(new SubgraphStep(this.asAdmin(), sideEffectKey)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.subgraph, sideEffectKey); + return (GraphTraversal) this; } public default GraphTraversal<S, E> aggregate(final String sideEffectKey) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), sideEffectKey); - return this.asAdmin().addStep(new AggregateStep<>(this.asAdmin(), sideEffectKey)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.aggregate, sideEffectKey); + return this; } public default GraphTraversal<S, E> group(final String sideEffectKey) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), sideEffectKey); - return this.asAdmin().addStep(new GroupSideEffectStep<>(this.asAdmin(), sideEffectKey)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.group, sideEffectKey); + return this; } /** * @deprecated As of release 3.1.0, replaced by {@link #group(String)}. */ public default GraphTraversal<S, E> groupV3d0(final String sideEffectKey) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), sideEffectKey); - return this.asAdmin().addStep(new GroupSideEffectStepV3d0<>(this.asAdmin(), sideEffectKey)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.groupV3d0, sideEffectKey); + return this; } public default GraphTraversal<S, E> groupCount(final String sideEffectKey) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), sideEffectKey); - return this.asAdmin().addStep(new GroupCountSideEffectStep<>(this.asAdmin(), sideEffectKey)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.groupCount, sideEffectKey); + return this; } public default GraphTraversal<S, E> tree(final String sideEffectKey) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), sideEffectKey); - return this.asAdmin().addStep(new TreeSideEffectStep<>(this.asAdmin(), sideEffectKey)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.tree, sideEffectKey); + return this; } public default <V, U> GraphTraversal<S, E> sack(final BiFunction<V, U, V> sackOperator) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), sackOperator); - return this.asAdmin().addStep(new SackValueStep<>(this.asAdmin(), sackOperator)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.sack, sackOperator); + return this; } /** @@ -1158,21 +1064,19 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { } public default GraphTraversal<S, E> store(final String sideEffectKey) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), sideEffectKey); - return this.asAdmin().addStep(new StoreStep<>(this.asAdmin(), sideEffectKey)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.store, sideEffectKey); + return this; } public default GraphTraversal<S, E> profile(final String sideEffectKey) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), sideEffectKey); - return this.asAdmin().addStep(new ProfileSideEffectStep<>(this.asAdmin(), sideEffectKey)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.profile, sideEffectKey); + return this; } @Override public default GraphTraversal<S, TraversalMetrics> profile() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin() - .addStep(new ProfileSideEffectStep<>(this.asAdmin(), ProfileSideEffectStep.DEFAULT_METRICS_KEY)) - .addStep(new SideEffectCapStep<Object, TraversalMetrics>(this.asAdmin(), ProfileSideEffectStep.DEFAULT_METRICS_KEY)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.profile); + return (GraphTraversal) this; } /** @@ -1235,225 +1139,201 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { ///////////////////// BRANCH STEPS ///////////////////// public default <M, E2> GraphTraversal<S, E2> branch(final Traversal<?, M> branchTraversal) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), branchTraversal); - final BranchStep<E, E2, M> branchStep = new BranchStep<>(this.asAdmin()); - branchStep.setBranchTraversal((Traversal.Admin<E, M>) branchTraversal); - return this.asAdmin().addStep(branchStep); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.branch, branchTraversal); + return (GraphTraversal) this; } public default <M, E2> GraphTraversal<S, E2> branch(final Function<Traverser<E>, M> function) { - return this.branch(__.map(function)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.branch, function); + return (GraphTraversal) this; } public default <M, E2> GraphTraversal<S, E2> choose(final Traversal<?, M> choiceTraversal) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), choiceTraversal); - return this.asAdmin().addStep(new ChooseStep<>(this.asAdmin(), (Traversal.Admin<E, M>) choiceTraversal)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.choose, choiceTraversal); + return (GraphTraversal) this; } public default <E2> GraphTraversal<S, E2> choose(final Traversal<?, ?> traversalPredicate, final Traversal<?, E2> trueChoice, final Traversal<?, E2> falseChoice) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), traversalPredicate, trueChoice, falseChoice); - return this.asAdmin().addStep(new ChooseStep<E, E2, Boolean>(this.asAdmin(), (Traversal.Admin<E, ?>) traversalPredicate, (Traversal.Admin<E, E2>) trueChoice, (Traversal.Admin<E, E2>) falseChoice)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.choose, traversalPredicate, trueChoice, falseChoice); + return (GraphTraversal) this; } public default <M, E2> GraphTraversal<S, E2> choose(final Function<E, M> choiceFunction) { - return this.choose(__.map(new FunctionTraverser<>(choiceFunction))); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.choose, choiceFunction); + return (GraphTraversal) this; } public default <E2> GraphTraversal<S, E2> choose(final Predicate<E> choosePredicate, final Traversal<?, E2> trueChoice, final Traversal<?, E2> falseChoice) { - return this.choose(__.filter(new PredicateTraverser<>(choosePredicate)), trueChoice, falseChoice); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.choose, choosePredicate, trueChoice, falseChoice); + return (GraphTraversal) this; } - public default <E2> GraphTraversal<S, E2> optional(final Traversal<?, E2> optionalTraversal) { - return this.choose(optionalTraversal, optionalTraversal.asAdmin().clone(), __.identity()); + public default GraphTraversal<S, E> optional(final Traversal<?, E> optionalTraversal) { + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.optional, optionalTraversal); + return this; } public default <E2> GraphTraversal<S, E2> union(final Traversal<?, E2>... unionTraversals) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), unionTraversals); - return this.asAdmin().addStep(new UnionStep(this.asAdmin(), Arrays.copyOf(unionTraversals, unionTraversals.length, Traversal.Admin[].class))); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.union, unionTraversals); + return (GraphTraversal) this; } public default <E2> GraphTraversal<S, E2> coalesce(final Traversal<?, E2>... coalesceTraversals) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), coalesceTraversals); - return this.asAdmin().addStep(new CoalesceStep(this.asAdmin(), Arrays.copyOf(coalesceTraversals, coalesceTraversals.length, Traversal.Admin[].class))); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.coalesce, coalesceTraversals); + return (GraphTraversal) this; } public default GraphTraversal<S, E> repeat(final Traversal<?, E> repeatTraversal) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), repeatTraversal); - return RepeatStep.addRepeatToTraversal(this, (Traversal.Admin<E, E>) repeatTraversal); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.repeat, repeatTraversal); + return this; } public default GraphTraversal<S, E> emit(final Traversal<?, ?> emitTraversal) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), emitTraversal); - return RepeatStep.addEmitToTraversal(this, (Traversal.Admin<E, ?>) emitTraversal); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.emit, emitTraversal); + return this; } public default GraphTraversal<S, E> emit(final Predicate<Traverser<E>> emitPredicate) { - return this.emit(__.filter(emitPredicate)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.emit, emitPredicate); + return this; } public default GraphTraversal<S, E> emit() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return RepeatStep.addEmitToTraversal(this, TrueTraversal.instance()); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.emit); + return this; } public default GraphTraversal<S, E> until(final Traversal<?, ?> untilTraversal) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), untilTraversal); - return RepeatStep.addUntilToTraversal(this, (Traversal.Admin<E, ?>) untilTraversal); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.until, untilTraversal); + return this; } public default GraphTraversal<S, E> until(final Predicate<Traverser<E>> untilPredicate) { - return this.until(__.filter(untilPredicate)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.until, untilPredicate); + return this; } public default GraphTraversal<S, E> times(final int maxLoops) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), maxLoops); - if (this.asAdmin().getEndStep() instanceof TimesModulating) { - ((TimesModulating) this.asAdmin().getEndStep()).modulateTimes(maxLoops); - return this; - } else - return RepeatStep.addUntilToTraversal(this, new LoopTraversal<>(maxLoops)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.times, maxLoops); + return this; } public default <E2> GraphTraversal<S, E2> local(final Traversal<?, E2> localTraversal) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), localTraversal); - return this.asAdmin().addStep(new LocalStep<>(this.asAdmin(), localTraversal.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.local, localTraversal); + return (GraphTraversal) this; } /////////////////// VERTEX PROGRAM STEPS //////////////// public default GraphTraversal<S, E> pageRank() { - return this.pageRank(0.85d); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.pageRank); + return this; } public default GraphTraversal<S, E> pageRank(final double alpha) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), alpha); - return this.asAdmin().addStep((Step<E, E>) new PageRankVertexProgramStep(this.asAdmin(), alpha)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.pageRank, alpha); + return this; } public default GraphTraversal<S, E> peerPressure() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - return this.asAdmin().addStep((Step<E, E>) new PeerPressureVertexProgramStep(this.asAdmin())); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.peerPressure); + return this; } public default GraphTraversal<S, E> program(final VertexProgram<?> vertexProgram) { - return this.asAdmin().addStep((Step<E, E>) new ProgramVertexProgramStep(this.asAdmin(), vertexProgram)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.program, vertexProgram); + return this; } ///////////////////// UTILITY STEPS ///////////////////// public default GraphTraversal<S, E> as(final String stepLabel, final String... stepLabels) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), stepLabel, stepLabels); - if (this.asAdmin().getSteps().size() == 0) this.asAdmin().addStep(new StartStep<>(this.asAdmin())); - final Step<?, E> endStep = this.asAdmin().getEndStep(); - endStep.addLabel(stepLabel); - for (final String label : stepLabels) { - endStep.addLabel(label); - } + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.as, stepLabel, stepLabels); return this; } public default GraphTraversal<S, E> barrier() { - return this.barrier(Integer.MAX_VALUE); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.barrier); + return this; } public default GraphTraversal<S, E> barrier(final int maxBarrierSize) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), maxBarrierSize); - return this.asAdmin().addStep(new NoOpBarrierStep<>(this.asAdmin(), maxBarrierSize)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.barrier, maxBarrierSize); + return this; } public default GraphTraversal<S, E> barrier(final Consumer<TraverserSet<Object>> barrierConsumer) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), barrierConsumer); - return this.asAdmin().addStep(new LambdaCollectingBarrierStep<>(this.asAdmin(), (Consumer) barrierConsumer, Integer.MAX_VALUE)); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.barrier, barrierConsumer); + return this; } //// BY-MODULATORS public default GraphTraversal<S, E> by() { - TraversalHelper.addStepToCreationStrategies(this.asAdmin()); - ((ByModulating) this.asAdmin().getEndStep()).modulateBy(); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.by); return this; } public default GraphTraversal<S, E> by(final Traversal<?, ?> traversal) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), traversal); - ((ByModulating) this.asAdmin().getEndStep()).modulateBy(traversal.asAdmin()); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.by, traversal); return this; } public default GraphTraversal<S, E> by(final T token) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), token); - ((ByModulating) this.asAdmin().getEndStep()).modulateBy(token); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.by, token); return this; } public default GraphTraversal<S, E> by(final String key) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), key); - ((ByModulating) this.asAdmin().getEndStep()).modulateBy(key); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.by, key); return this; } public default <V> GraphTraversal<S, E> by(final Function<V, Object> function) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), function); - ((ByModulating) this.asAdmin().getEndStep()).modulateBy(function); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.by, function); return this; } //// COMPARATOR BY-MODULATORS public default <V> GraphTraversal<S, E> by(final Traversal<?, ?> traversal, final Comparator<V> comparator) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), traversal, comparator); - ((ByModulating) this.asAdmin().getEndStep()).modulateBy(traversal.asAdmin(), comparator); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.by, traversal, comparator); return this; } public default GraphTraversal<S, E> by(final Comparator<E> comparator) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), comparator); - ((ByModulating) this.asAdmin().getEndStep()).modulateBy(comparator); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.by, comparator); return this; } public default GraphTraversal<S, E> by(final Order order) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), order); - ((ByModulating) this.asAdmin().getEndStep()).modulateBy(order); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.by, order); return this; } public default <V> GraphTraversal<S, E> by(final String key, final Comparator<V> comparator) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), key, comparator); - ((ByModulating) this.asAdmin().getEndStep()).modulateBy(key, comparator); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.by, key, comparator); return this; } - /*public default <V> GraphTraversal<S, E> by(final Column column, final Comparator<V> comparator) { - ((ByModulating) this.asAdmin().getEndStep()).modulateBy(column, comparator); - return this; - } - - public default <V> GraphTraversal<S, E> by(final T token, final Comparator<V> comparator) { - ((ByModulating) this.asAdmin().getEndStep()).modulateBy(token, comparator); - return this; - }*/ - public default <U> GraphTraversal<S, E> by(final Function<U, Object> function, final Comparator comparator) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), function, comparator); - ((ByModulating) this.asAdmin().getEndStep()).modulateBy(function, comparator); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.by, function, comparator); return this; } //// public default <M, E2> GraphTraversal<S, E> option(final M pickToken, final Traversal<E, E2> traversalOption) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), pickToken, traversalOption); - ((TraversalOptionParent<M, E, E2>) this.asAdmin().getEndStep()).addGlobalChildOption(pickToken, traversalOption.asAdmin()); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.option, pickToken, traversalOption); return this; } public default <E2> GraphTraversal<S, E> option(final Traversal<E, E2> traversalOption) { - TraversalHelper.addStepToCreationStrategies(this.asAdmin(), traversalOption); - return this.option(TraversalOptionParent.Pick.any, traversalOption.asAdmin()); + this.asAdmin().getStrategies().getTranslator().addStep(this.asAdmin(), Symbols.option, traversalOption); + return this; } ////