Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1278 af3e34b03 -> bff3ad1ce
adding source and spawns to StepTranslator... tedium to the core. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/bff3ad1c Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/bff3ad1c Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/bff3ad1c Branch: refs/heads/TINKERPOP-1278 Commit: bff3ad1ce918bc048f162d1b44a7e91b11104682 Parents: af3e34b Author: Marko A. Rodriguez <okramma...@gmail.com> Authored: Wed Jun 29 10:16:20 2016 -0600 Committer: Marko A. Rodriguez <okramma...@gmail.com> Committed: Wed Jun 29 10:16:20 2016 -0600 ---------------------------------------------------------------------- .../process/traversal/TraversalSource.java | 50 ++++++------- .../traversal/dsl/TraversalSourceSymbols.java | 36 ++++++++++ .../dsl/graph/GraphTraversalSource.java | 11 +-- .../traversal/dsl/graph/StepTranslator.java | 57 +++++++++++++-- .../process/traversal/dsl/graph/Symbols.java | 1 + .../util/DefaultTraversalStrategies.java | 3 +- .../process/traversal/util/EmptyTranslator.java | 74 ++++++++++++++++++++ .../process/traversal/util/EmptyTraversal.java | 2 +- 8 files changed, 195 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bff3ad1c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java index 9c7d081..a5e6196 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java @@ -21,12 +21,10 @@ package org.apache.tinkerpop.gremlin.process.traversal; import org.apache.tinkerpop.gremlin.process.computer.Computer; import org.apache.tinkerpop.gremlin.process.computer.GraphComputer; import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.TraversalSourceSymbols; import org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategy; -import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SackStrategy; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SideEffectStrategy; -import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper; import org.apache.tinkerpop.gremlin.structure.Graph; -import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier; import java.io.Serializable; import java.util.List; @@ -115,7 +113,7 @@ public interface TraversalSource extends Cloneable { traversalStrategies[i + 1] = graphComputerStrategies.get(i); } final TraversalSource clone = this.withStrategies(traversalStrategies); - TraversalHelper.addSourceToCreationStrategies(clone, computer); + this.getStrategies().getTranslator().addSource(clone, TraversalSourceSymbols.withComputer, computer); return clone; } @@ -161,8 +159,7 @@ public interface TraversalSource extends Cloneable { */ public default <A> TraversalSource withSideEffect(final String key, final Supplier<A> initialValue, final BinaryOperator<A> reducer) { final TraversalSource clone = this.clone(); - TraversalHelper.addSourceToCreationStrategies(clone, key, initialValue, reducer); - SideEffectStrategy.addSideEffect(clone.getStrategies(), key, (A) initialValue, reducer); + clone.getStrategies().getTranslator().addSource(clone, TraversalSourceSymbols.withSideEffect, key, initialValue, reducer); return clone; } @@ -177,8 +174,7 @@ public interface TraversalSource extends Cloneable { */ public default <A> TraversalSource withSideEffect(final String key, final A initialValue, final BinaryOperator<A> reducer) { final TraversalSource clone = this.clone(); - TraversalHelper.addSourceToCreationStrategies(clone, key, initialValue, reducer); - SideEffectStrategy.addSideEffect(clone.getStrategies(), key, initialValue, reducer); + clone.getStrategies().getTranslator().addSource(clone, TraversalSourceSymbols.withSideEffect, key, initialValue, reducer); return clone; } @@ -192,8 +188,7 @@ public interface TraversalSource extends Cloneable { */ public default <A> TraversalSource withSideEffect(final String key, final Supplier<A> initialValue) { final TraversalSource clone = this.clone(); - TraversalHelper.addSourceToCreationStrategies(clone, key, initialValue); - SideEffectStrategy.addSideEffect(clone.getStrategies(), key, initialValue, null); + clone.getStrategies().getTranslator().addSource(clone, TraversalSourceSymbols.withSideEffect, key, initialValue); return clone; } @@ -207,8 +202,7 @@ public interface TraversalSource extends Cloneable { */ public default <A> TraversalSource withSideEffect(final String key, final A initialValue) { final TraversalSource clone = this.clone(); - TraversalHelper.addSourceToCreationStrategies(clone, key, initialValue); - SideEffectStrategy.addSideEffect(clone.getStrategies(), key, initialValue, null); + clone.getStrategies().getTranslator().addSource(clone, TraversalSourceSymbols.withSideEffect, key, initialValue); return clone; } @@ -222,8 +216,8 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default <A> TraversalSource withSack(final Supplier<A> initialValue, final UnaryOperator<A> splitOperator, final BinaryOperator<A> mergeOperator) { - final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).splitOperator(splitOperator).mergeOperator(mergeOperator).create()); - TraversalHelper.addSourceToCreationStrategies(clone, initialValue, splitOperator, mergeOperator); + final TraversalSource clone = this.clone(); + clone.getStrategies().getTranslator().addSource(clone, TraversalSourceSymbols.withSack, initialValue, splitOperator, mergeOperator); return clone; } @@ -237,8 +231,8 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default <A> TraversalSource withSack(final A initialValue, final UnaryOperator<A> splitOperator, final BinaryOperator<A> mergeOperator) { - final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(new ConstantSupplier<>(initialValue)).splitOperator(splitOperator).mergeOperator(mergeOperator).create()); - TraversalHelper.addSourceToCreationStrategies(clone, initialValue, splitOperator, mergeOperator); + final TraversalSource clone = this.clone(); + clone.getStrategies().getTranslator().addSource(clone, TraversalSourceSymbols.withSack, initialValue, splitOperator, mergeOperator); return clone; } @@ -250,8 +244,8 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default <A> TraversalSource withSack(final A initialValue) { - final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(new ConstantSupplier<>(initialValue)).create()); - TraversalHelper.addSourceToCreationStrategies(clone, initialValue); + final TraversalSource clone = this.clone(); + clone.getStrategies().getTranslator().addSource(clone, TraversalSourceSymbols.withSack, initialValue); return clone; } @@ -263,8 +257,8 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default <A> TraversalSource withSack(final Supplier<A> initialValue) { - final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).create()); - TraversalHelper.addSourceToCreationStrategies(clone, initialValue); + final TraversalSource clone = this.clone(); + clone.getStrategies().getTranslator().addSource(clone, TraversalSourceSymbols.withSack, initialValue); return clone; } @@ -277,8 +271,8 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default <A> TraversalSource withSack(final Supplier<A> initialValue, final UnaryOperator<A> splitOperator) { - final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).splitOperator(splitOperator).create()); - TraversalHelper.addSourceToCreationStrategies(clone, initialValue, splitOperator); + final TraversalSource clone = this.clone(); + clone.getStrategies().getTranslator().addSource(clone, TraversalSourceSymbols.withSack, initialValue, splitOperator); return clone; } @@ -291,8 +285,8 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default <A> TraversalSource withSack(final A initialValue, final UnaryOperator<A> splitOperator) { - final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(new ConstantSupplier<>(initialValue)).splitOperator(splitOperator).create()); - TraversalHelper.addSourceToCreationStrategies(clone, initialValue, splitOperator); + final TraversalSource clone = this.clone(); + clone.getStrategies().getTranslator().addSource(clone, TraversalSourceSymbols.withSack, initialValue, splitOperator); return clone; } @@ -305,8 +299,8 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default <A> TraversalSource withSack(final Supplier<A> initialValue, final BinaryOperator<A> mergeOperator) { - final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).mergeOperator(mergeOperator).create()); - TraversalHelper.addSourceToCreationStrategies(clone, initialValue, mergeOperator); + final TraversalSource clone = this.clone(); + clone.getStrategies().getTranslator().addSource(clone, TraversalSourceSymbols.withSack, initialValue, mergeOperator); return clone; } @@ -319,8 +313,8 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default <A> TraversalSource withSack(final A initialValue, final BinaryOperator<A> mergeOperator) { - final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(new ConstantSupplier<>(initialValue)).mergeOperator(mergeOperator).create()); - TraversalHelper.addSourceToCreationStrategies(clone, initialValue, mergeOperator); + final TraversalSource clone = this.clone(); + clone.getStrategies().getTranslator().addSource(clone, TraversalSourceSymbols.withSack, initialValue, mergeOperator); return clone; } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bff3ad1c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/TraversalSourceSymbols.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/TraversalSourceSymbols.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/TraversalSourceSymbols.java new file mode 100644 index 0000000..1099e84 --- /dev/null +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/TraversalSourceSymbols.java @@ -0,0 +1,36 @@ +/* + * 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.dsl; + +/** + * @author Marko A. Rodriguez (http://markorodriguez.com) + */ +public final class TraversalSourceSymbols { + + private TraversalSourceSymbols() { + // all static methods + } + + public static final String withSack = "withSack"; + public static final String withStrategies = "withStrategies"; + public static final String withoutStrategies = "withoutStrategies"; + public static final String withComputer = "withComputer"; + public static final String withSideEffect = "withSideEffect"; +} http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bff3ad1c/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 cbc51d2..62d9758 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 @@ -20,6 +20,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.dsl.graph; import org.apache.tinkerpop.gremlin.process.computer.Computer; import org.apache.tinkerpop.gremlin.process.computer.GraphComputer; +import org.apache.tinkerpop.gremlin.process.traversal.Translator; import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine; import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource; import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies; @@ -32,7 +33,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.InjectStep import org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategy; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.RequirementsStrategy; import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement; -import org.apache.tinkerpop.gremlin.process.traversal.Translator; import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper; import org.apache.tinkerpop.gremlin.structure.Edge; import org.apache.tinkerpop.gremlin.structure.Graph; @@ -61,6 +61,7 @@ public class GraphTraversalSource implements TraversalSource { public GraphTraversalSource(final Graph graph, final TraversalStrategies traversalStrategies) { this.graph = graph; this.strategies = traversalStrategies; + this.strategies.setTranslator(new StepTranslator()); __.setAnonymousTraversalFunction(null); // TODO: work to remove } @@ -240,14 +241,14 @@ public class GraphTraversalSource implements TraversalSource { public GraphTraversal<Vertex, Vertex> V(final Object... vertexIds) { final GraphTraversal.Admin<Vertex, Vertex> traversal = this.generateTraversal(); - TraversalHelper.addSpawnStepToCreationStrategies(traversal, vertexIds); - return traversal.addStep(new GraphStep<>(traversal, Vertex.class, true, vertexIds)); + this.strategies.getTranslator().addSpawnStep(traversal, Symbols.V, vertexIds); + return traversal; } public GraphTraversal<Edge, Edge> E(final Object... edgesIds) { final GraphTraversal.Admin<Edge, Edge> traversal = this.generateTraversal(); - TraversalHelper.addSpawnStepToCreationStrategies(traversal, edgesIds); - return traversal.addStep(new GraphStep<>(traversal, Edge.class, true, edgesIds)); + this.strategies.getTranslator().addSpawnStep(traversal, Symbols.E, edgesIds); + return traversal; } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bff3ad1c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/StepTranslator.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/StepTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/StepTranslator.java index 797375e..140bf10 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/StepTranslator.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/StepTranslator.java @@ -29,6 +29,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.Pop; import org.apache.tinkerpop.gremlin.process.traversal.Scope; import org.apache.tinkerpop.gremlin.process.traversal.Translator; import org.apache.tinkerpop.gremlin.process.traversal.Traversal; +import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.TraversalSourceSymbols; 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; @@ -127,6 +129,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SubgraphSt 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.strategy.decoration.SackStrategy; +import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SideEffectStrategy; import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper; import org.apache.tinkerpop.gremlin.structure.Column; import org.apache.tinkerpop.gremlin.structure.Direction; @@ -140,26 +144,71 @@ import java.util.Arrays; import java.util.Comparator; import java.util.Optional; import java.util.function.BiFunction; +import java.util.function.BinaryOperator; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; +import java.util.function.UnaryOperator; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ public final class StepTranslator implements Translator { - private static <V> V[] orEmpty(final Object... object) { - return 0 == object.length ? (V[]) new Object[]{} : (V[]) object; - } - @Override public String getAlias() { return null; } @Override + public void addSource(final TraversalSource traversalSource, final String sourceName, final Object... arguments) { + switch (sourceName) { + case TraversalSourceSymbols.withSideEffect: + SideEffectStrategy.addSideEffect(traversalSource.getStrategies(), (String) arguments[0], + arguments[1] instanceof Supplier ? (Supplier) arguments[1] : new ConstantSupplier<>(arguments[1]), 2 == arguments.length ? null : (BinaryOperator) arguments[2]); + return; + case TraversalSourceSymbols.withSack: + if (1 == arguments.length) { + traversalSource.getStrategies().addStrategies(SackStrategy.build().initialValue(arguments[0] instanceof Supplier ? + (Supplier) arguments[0] : + new ConstantSupplier<>(arguments[0])).create()); + } else if (2 == arguments.length) { + if (arguments[1] instanceof UnaryOperator) + traversalSource.getStrategies().addStrategies(SackStrategy.build().initialValue(arguments[0] instanceof Supplier ? + (Supplier) arguments[0] : + new ConstantSupplier<>(arguments[0])).splitOperator((UnaryOperator) arguments[1]).create()); + else + traversalSource.getStrategies().addStrategies((SackStrategy.build().initialValue(arguments[0] instanceof Supplier ? + (Supplier) arguments[0] : + new ConstantSupplier<>(arguments[0])).mergeOperator((BinaryOperator) arguments[1]).create())); + } else { + traversalSource.getStrategies().addStrategies(SackStrategy.build().initialValue(arguments[0] instanceof Supplier ? + (Supplier) arguments[0] : + new ConstantSupplier<>(arguments[0])).splitOperator((UnaryOperator) arguments[1]).mergeOperator((BinaryOperator) arguments[2]).create()); + } + return; + default: + throw new IllegalArgumentException("The provided step name is not supported by " + StepTranslator.class.getSimpleName() + ": " + sourceName); + } + + } + + @Override + public void addSpawnStep(final Traversal.Admin<?, ?> traversal, final String stepName, final Object... arguments) { + switch (stepName) { + case Symbols.V: + traversal.addStep(new GraphStep<>(traversal, Vertex.class, true, arguments)); + return; + case Symbols.E: + traversal.addStep(new GraphStep<>(traversal, Edge.class, true, arguments)); + return; + default: + throw new IllegalArgumentException("The provided step name is not supported by " + StepTranslator.class.getSimpleName() + ": " + stepName); + } + } + + @Override public void addStep(final Traversal.Admin<?, ?> traversal, final String stepName, final Object... arguments) { switch (stepName) { case Symbols.map: http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bff3ad1c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/Symbols.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/Symbols.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/Symbols.java index 3cf825a..bf482df 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/Symbols.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/Symbols.java @@ -35,6 +35,7 @@ public final class Symbols { public static final String identity = "identity"; public static final String constant = "constant"; public static final String V = "V"; + public static final String E = "E"; public static final String to = "to"; public static final String out = "out"; public static final String in = "in"; http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bff3ad1c/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 9adf480..2495a78 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 @@ -37,7 +37,7 @@ import java.util.Optional; public class DefaultTraversalStrategies implements TraversalStrategies { protected List<TraversalStrategy<?>> traversalStrategies = new ArrayList<>(); - protected Translator translator; + protected Translator translator = EmptyTranslator.instance(); protected transient Map<Class<? extends TraversalStrategy>, List<TraversalStrategy<?>>> strategyMap = null; @Override @@ -131,6 +131,7 @@ public class DefaultTraversalStrategies implements TraversalStrategies { clone.traversalStrategies = new ArrayList<>(this.traversalStrategies.size()); clone.traversalStrategies.addAll(this.traversalStrategies); clone.strategyMap = null; + clone.translator = this.translator.clone(); return clone; } catch (final CloneNotSupportedException e) { throw new IllegalStateException(e.getMessage(), e); http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bff3ad1c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTranslator.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTranslator.java new file mode 100644 index 0000000..9ef181a --- /dev/null +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTranslator.java @@ -0,0 +1,74 @@ +/* + * 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.util; + +import org.apache.tinkerpop.gremlin.process.traversal.Translator; +import org.apache.tinkerpop.gremlin.process.traversal.Traversal; + +/** + * @author Marko A. Rodriguez (http://markorodriguez.com) + */ +public final class EmptyTranslator implements Translator { + + private static final EmptyTranslator INSTANCE = new EmptyTranslator(); + + private EmptyTranslator() { + // instance only + } + + @Override + public String getAlias() { + return ""; + } + + @Override + public void addStep(final Traversal.Admin<?, ?> traversal, final String stepName, final Object... arguments) { + + } + + @Override + public Translator getAnonymousTraversalTranslator() { + return EmptyTranslator.INSTANCE; + } + + @Override + public String getTraversalScript() { + return ""; + } + + @Override + public Translator clone() { + return this; + } + + @Override + public String getSourceLanguage() { + return "none"; + } + + @Override + public String getTargetLanguage() { + return "none"; + } + + public static final EmptyTranslator instance() { + return INSTANCE; + } +} http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bff3ad1c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java index 35d551b..a9ba7ab 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java @@ -38,7 +38,7 @@ import java.util.Set; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public class EmptyTraversal<S, E> implements Traversal.Admin<S, E> { +public final class EmptyTraversal<S, E> implements Traversal.Admin<S, E> { private static final EmptyTraversal INSTANCE = new EmptyTraversal(); private static final TraversalSideEffects SIDE_EFFECTS = EmptyTraversalSideEffects.instance();