Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1278 2d1b087a1 -> fde51ac58
Lots of good stuff here. Anonymous traversals are defined dynamically by the XXXTraversalSource so that translators can be generically written without being concious of the __ class type. Added Translator.addSpawnStep() which is for g.V(), g.addV(), etc. and has different behaviors than addSouce() and addStep(). DefaultTraversalStrategies.getStrategies(class) is now efficient and not a linear scan on each call. Lists are cached now (transient though). This model is really clean and solid -- that is, the CreationStrategy model. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/fde51ac5 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/fde51ac5 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/fde51ac5 Branch: refs/heads/TINKERPOP-1278 Commit: fde51ac58edf1f138fc4f57d25404bdb9ed58948 Parents: 2d1b087 Author: Marko A. Rodriguez <[email protected]> Authored: Tue Jun 14 09:24:37 2016 -0600 Committer: Marko A. Rodriguez <[email protected]> Committed: Tue Jun 14 09:24:37 2016 -0600 ---------------------------------------------------------------------- .../process/traversal/TraversalSource.java | 62 +++++++++++--------- .../process/traversal/TraversalStrategy.java | 4 +- .../dsl/graph/GraphTraversalSource.java | 41 +++++-------- .../gremlin/process/traversal/dsl/graph/__.java | 23 ++++---- .../dsl/graph/script/ScriptGraphTraversal.java | 2 +- .../script/ScriptGraphTraversalSource.java | 8 +-- .../strategy/creation/TranslationStrategy.java | 50 ++++++++++++++-- .../util/DefaultTraversalStrategies.java | 26 +++++++- .../process/traversal/util/Translator.java | 20 ++++--- .../process/traversal/util/TraversalHelper.java | 10 ++++ .../gremlin/groovy/GroovyTranslator.java | 29 +++------ .../gremlin/python/PythonTranslator.java | 13 ++-- .../jython/gremlin_python/gremlin_python.py | 2 + .../tinkerpop/gremlin/VariantGraphProvider.java | 23 +++----- .../gremlin/python/PythonProvider.java | 3 +- 15 files changed, 184 insertions(+), 132 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/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 e29f20a..972dcbe 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 @@ -52,6 +52,8 @@ import java.util.function.UnaryOperator; */ public interface TraversalSource extends Cloneable { + public static final String SET_ANONYMOUS_TRAVERSAL_FUNCTION = "setAnonymousTraversalFunction"; + /** * Get the {@link TraversalStrategies} associated with this traversal source. * @@ -101,7 +103,6 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default TraversalSource withComputer(final Computer computer) { - TraversalHelper.addSourceToCreationStrategies(this, computer); Class<? extends GraphComputer> graphComputerClass; try { graphComputerClass = computer.apply(this.getGraph()).getClass(); @@ -114,12 +115,13 @@ public interface TraversalSource extends Cloneable { for (int i = 0; i < graphComputerStrategies.size(); i++) { traversalStrategies[i + 1] = graphComputerStrategies.get(i); } - return this.withStrategies(traversalStrategies); + final TraversalSource clone = this.withStrategies(traversalStrategies); + TraversalHelper.addSourceToCreationStrategies(clone, computer); + return clone; } - public default TraversalSource withTranslator(final Translator<?> translator) { - TraversalHelper.addSourceToCreationStrategies(this, translator); - return this.withStrategies(new TranslationStrategy(translator)); + public default TraversalSource withTranslator(final Translator translator) { + return this.withStrategies(new TranslationStrategy(translator, null)); } /** @@ -130,7 +132,6 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default TraversalSource withComputer(final Class<? extends GraphComputer> graphComputerClass) { - TraversalHelper.addSourceToCreationStrategies(this, graphComputerClass); return this.withComputer(Computer.compute(graphComputerClass)); } @@ -141,7 +142,6 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default TraversalSource withComputer() { - TraversalHelper.addSourceToCreationStrategies(this); return this.withComputer(Computer.compute()); } @@ -155,8 +155,8 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default <A> TraversalSource withSideEffect(final String key, final Supplier<A> initialValue, final BinaryOperator<A> reducer) { - TraversalHelper.addSourceToCreationStrategies(this, key, initialValue, reducer); final TraversalSource clone = this.clone(); + TraversalHelper.addSourceToCreationStrategies(clone, key, initialValue, reducer); SideEffectStrategy.addSideEffect(clone.getStrategies(), key, (A) initialValue, reducer); return clone; } @@ -171,8 +171,8 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default <A> TraversalSource withSideEffect(final String key, final A initialValue, final BinaryOperator<A> reducer) { - TraversalHelper.addSourceToCreationStrategies(this, key, initialValue, reducer); final TraversalSource clone = this.clone(); + TraversalHelper.addSourceToCreationStrategies(clone, key, initialValue, reducer); SideEffectStrategy.addSideEffect(clone.getStrategies(), key, initialValue, reducer); return clone; } @@ -186,8 +186,8 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default <A> TraversalSource withSideEffect(final String key, final Supplier<A> initialValue) { - TraversalHelper.addSourceToCreationStrategies(this, key, initialValue); final TraversalSource clone = this.clone(); + TraversalHelper.addSourceToCreationStrategies(clone, key, initialValue); SideEffectStrategy.addSideEffect(clone.getStrategies(), key, initialValue, null); return clone; } @@ -201,8 +201,8 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default <A> TraversalSource withSideEffect(final String key, final A initialValue) { - TraversalHelper.addSourceToCreationStrategies(this, key, initialValue); final TraversalSource clone = this.clone(); + TraversalHelper.addSourceToCreationStrategies(clone, key, initialValue); SideEffectStrategy.addSideEffect(clone.getStrategies(), key, initialValue, null); return clone; } @@ -217,8 +217,9 @@ 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) { - TraversalHelper.addSourceToCreationStrategies(this, initialValue, splitOperator, mergeOperator); - return this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).splitOperator(splitOperator).mergeOperator(mergeOperator).create()); + final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).splitOperator(splitOperator).mergeOperator(mergeOperator).create()); + TraversalHelper.addSourceToCreationStrategies(clone, initialValue, splitOperator, mergeOperator); + return clone; } /** @@ -231,8 +232,9 @@ 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) { - TraversalHelper.addSourceToCreationStrategies(this, initialValue, splitOperator, mergeOperator); - return this.withStrategies(SackStrategy.<A>build().initialValue(new ConstantSupplier<>(initialValue)).splitOperator(splitOperator).mergeOperator(mergeOperator).create()); + final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(new ConstantSupplier<>(initialValue)).splitOperator(splitOperator).mergeOperator(mergeOperator).create()); + TraversalHelper.addSourceToCreationStrategies(clone, initialValue, splitOperator, mergeOperator); + return clone; } /** @@ -243,8 +245,9 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default <A> TraversalSource withSack(final A initialValue) { - TraversalHelper.addSourceToCreationStrategies(this, initialValue); - return this.withStrategies(SackStrategy.<A>build().initialValue(new ConstantSupplier<>(initialValue)).create()); + final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(new ConstantSupplier<>(initialValue)).create()); + TraversalHelper.addSourceToCreationStrategies(clone, initialValue); + return clone; } /** @@ -255,8 +258,9 @@ public interface TraversalSource extends Cloneable { * @return a new traversal source with updated strategies */ public default <A> TraversalSource withSack(final Supplier<A> initialValue) { - TraversalHelper.addSourceToCreationStrategies(this, initialValue); - return this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).create()); + final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).create()); + TraversalHelper.addSourceToCreationStrategies(clone, initialValue); + return clone; } /** @@ -268,8 +272,9 @@ 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) { - TraversalHelper.addSourceToCreationStrategies(this, initialValue, splitOperator); - return this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).splitOperator(splitOperator).create()); + final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).splitOperator(splitOperator).create()); + TraversalHelper.addSourceToCreationStrategies(clone, initialValue, splitOperator); + return clone; } /** @@ -281,8 +286,9 @@ 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) { - TraversalHelper.addSourceToCreationStrategies(this, initialValue, splitOperator); - return this.withStrategies(SackStrategy.<A>build().initialValue(new ConstantSupplier<>(initialValue)).splitOperator(splitOperator).create()); + final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(new ConstantSupplier<>(initialValue)).splitOperator(splitOperator).create()); + TraversalHelper.addSourceToCreationStrategies(clone, initialValue, splitOperator); + return clone; } /** @@ -294,8 +300,9 @@ 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) { - TraversalHelper.addSourceToCreationStrategies(this, initialValue, mergeOperator); - return this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).mergeOperator(mergeOperator).create()); + final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).mergeOperator(mergeOperator).create()); + TraversalHelper.addSourceToCreationStrategies(clone, initialValue, mergeOperator); + return clone; } /** @@ -307,8 +314,9 @@ 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) { - TraversalHelper.addSourceToCreationStrategies(this, initialValue, mergeOperator); - return this.withStrategies(SackStrategy.<A>build().initialValue(new ConstantSupplier<>(initialValue)).mergeOperator(mergeOperator).create()); + final TraversalSource clone = this.withStrategies(SackStrategy.<A>build().initialValue(new ConstantSupplier<>(initialValue)).mergeOperator(mergeOperator).create()); + TraversalHelper.addSourceToCreationStrategies(clone, initialValue, mergeOperator); + return clone; } /** http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java index 1241ef6..f7f460f 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java @@ -108,7 +108,9 @@ public interface TraversalStrategy<S extends TraversalStrategy> extends Serializ return 0; } - public void addStep(final Traversal.Admin<?,?> traversal, final String stepName, final Object... arguments); + public void addStep(final Traversal.Admin<?, ?> traversal, final String stepName, final Object... arguments); + + public void addSpawnStep(final Traversal.Admin<?, ?> traversal, final String stepName, final Object... arguments); public void addSource(final TraversalSource traversalSource, final String withName, final Object... arguments); } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/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 0628aa9..3a36610 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 @@ -28,6 +28,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEn import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine; import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStartStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep; +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.util.Translator; @@ -57,9 +59,9 @@ public class GraphTraversalSource implements TraversalSource { protected TraversalStrategies strategies; public GraphTraversalSource(final Graph graph, final TraversalStrategies traversalStrategies) { - __.setAnonymousTraversalSupplier(null); this.graph = graph; this.strategies = traversalStrategies; + __.setAnonymousTraversalFunction(null); // TODO: work to remove } public GraphTraversalSource(final Graph graph) { @@ -96,8 +98,8 @@ public class GraphTraversalSource implements TraversalSource { //// CONFIGURATIONS @Override - public GraphTraversalSource withTranslator(final Translator<?> translator) { - return (GraphTraversalSource) TraversalSource.super.withTranslator(translator); + public GraphTraversalSource withTranslator(final Translator translator) { + return this.withStrategies(new TranslationStrategy(translator, __.class)); } @Override @@ -187,10 +189,10 @@ public class GraphTraversalSource implements TraversalSource { } public GraphTraversalSource withBulk(final boolean useBulk) { - TraversalHelper.addSourceToCreationStrategies(this, useBulk); if (!useBulk) { final GraphTraversalSource clone = this.clone(); RequirementsStrategy.addRequirements(clone.strategies, TraverserRequirement.ONE_BULK); + TraversalHelper.addSourceToCreationStrategies(clone, useBulk); return clone; } else { return this; @@ -198,9 +200,9 @@ public class GraphTraversalSource implements TraversalSource { } public GraphTraversalSource withPath() { - TraversalHelper.addSourceToCreationStrategies(this); final GraphTraversalSource clone = this.clone(); RequirementsStrategy.addRequirements(clone.strategies, TraverserRequirement.PATH); + TraversalHelper.addSourceToCreationStrategies(clone); return clone; } @@ -211,53 +213,40 @@ public class GraphTraversalSource implements TraversalSource { */ @Deprecated public GraphTraversal<Vertex, Vertex> addV(final Object... keyValues) { - TraversalStrategies temp = this.strategies; - this.strategies = this.strategies.clone(); - TraversalHelper.addSourceToCreationStrategies(this, keyValues); final GraphTraversal.Admin<Vertex, Vertex> traversal = this.generateTraversal(); - this.strategies = temp; + TraversalHelper.addSpawnStepToCreationStrategies(traversal, keyValues); traversal.addStep(new AddVertexStartStep(traversal, null)); ((AddVertexStartStep) traversal.getEndStep()).addPropertyMutations(keyValues); return traversal; } public GraphTraversal<Vertex, Vertex> addV(final String label) { - TraversalStrategies temp = this.strategies; - this.strategies = this.strategies.clone(); - TraversalHelper.addSourceToCreationStrategies(this, label); final GraphTraversal.Admin<Vertex, Vertex> traversal = this.generateTraversal(); - this.strategies = temp; + TraversalHelper.addSpawnStepToCreationStrategies(traversal, label); return traversal.addStep(new AddVertexStartStep(traversal, label)); } public GraphTraversal<Vertex, Vertex> addV() { - TraversalStrategies temp = this.strategies; - this.strategies = this.strategies.clone(); - TraversalHelper.addSourceToCreationStrategies(this); final GraphTraversal.Admin<Vertex, Vertex> traversal = this.generateTraversal(); - this.strategies = temp; + TraversalHelper.addSpawnStepToCreationStrategies(traversal); return traversal.addStep(new AddVertexStartStep(traversal, null)); } public <S> GraphTraversal<S, S> inject(S... starts) { - return (GraphTraversal<S, S>) this.generateTraversal().inject(starts); + final GraphTraversal.Admin<S, S> traversal = this.generateTraversal(); + TraversalHelper.addSpawnStepToCreationStrategies(traversal, starts); + return traversal.addStep(new InjectStep<>(traversal, starts)); } public GraphTraversal<Vertex, Vertex> V(final Object... vertexIds) { - TraversalStrategies temp = this.strategies; - this.strategies = this.strategies.clone(); - TraversalHelper.addSourceToCreationStrategies(this, vertexIds); final GraphTraversal.Admin<Vertex, Vertex> traversal = this.generateTraversal(); - this.strategies = temp; + TraversalHelper.addSpawnStepToCreationStrategies(traversal, vertexIds); return traversal.addStep(new GraphStep<>(traversal, Vertex.class, true, vertexIds)); } public GraphTraversal<Edge, Edge> E(final Object... edgesIds) { - TraversalStrategies temp = this.strategies; - this.strategies = this.strategies.clone(); - TraversalHelper.addSourceToCreationStrategies(this, edgesIds); final GraphTraversal.Admin<Edge, Edge> traversal = this.generateTraversal(); - this.strategies = temp; + TraversalHelper.addSpawnStepToCreationStrategies(traversal, edgesIds); return traversal.addStep(new GraphStep<>(traversal, Edge.class, true, edgesIds)); } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java index abc3ecb..ef46bf2 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java @@ -42,7 +42,6 @@ import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; -import java.util.function.Supplier; /** * An anonymous {@link GraphTraversal}. @@ -51,28 +50,26 @@ import java.util.function.Supplier; */ public class __ { - private static ThreadLocal<Supplier<GraphTraversal>> ANONYMOUS_GRAPH_TRAVERSAL = null; + private static ThreadLocal<Function<GraphTraversal.Admin, GraphTraversal.Admin>> ANONYMOUS_TRAVERSAL_FUNCTION = null; protected __() { } ////////////////////////////////////////////////////////////////////// - public static void setAnonymousTraversalSupplier(final Supplier<GraphTraversal> anonymousGraphTraversalSupplier) { - if (null == ANONYMOUS_GRAPH_TRAVERSAL) { - if (null == anonymousGraphTraversalSupplier) - return; - else - ANONYMOUS_GRAPH_TRAVERSAL = ThreadLocal.withInitial(() -> DefaultGraphTraversal::new); + public static void setAnonymousTraversalFunction(final Function<GraphTraversal.Admin, GraphTraversal.Admin> anonymousTraversalFunction) { + if (null == anonymousTraversalFunction) { + if (null != ANONYMOUS_TRAVERSAL_FUNCTION) + ANONYMOUS_TRAVERSAL_FUNCTION.remove(); + } else { + if (null == ANONYMOUS_TRAVERSAL_FUNCTION) + ANONYMOUS_TRAVERSAL_FUNCTION = ThreadLocal.withInitial(Function::identity); + ANONYMOUS_TRAVERSAL_FUNCTION.set(anonymousTraversalFunction); } - if (null == anonymousGraphTraversalSupplier) - ANONYMOUS_GRAPH_TRAVERSAL.remove(); - else - ANONYMOUS_GRAPH_TRAVERSAL.set(anonymousGraphTraversalSupplier); } public static <A> GraphTraversal<A, A> start() { - return null == ANONYMOUS_GRAPH_TRAVERSAL ? new DefaultGraphTraversal<>() : ANONYMOUS_GRAPH_TRAVERSAL.get().get(); + return null == ANONYMOUS_TRAVERSAL_FUNCTION ? new DefaultGraphTraversal<>() : ANONYMOUS_TRAVERSAL_FUNCTION.get().apply(new DefaultGraphTraversal<>()); } public static <A> GraphTraversal<A, A> __(final A... starts) { http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversal.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversal.java index 645bf98..16bac30 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversal.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversal.java @@ -81,7 +81,7 @@ public class ScriptGraphTraversal<S, E> extends DefaultGraphTraversal<S, E> { } try { final String traversalScriptString = this.getTraversalScript(); - __.setAnonymousTraversalSupplier(null); + __.setAnonymousTraversalFunction(null); ScriptEngine engine = ScriptEngineCache.get(this.translator.getScriptEngine()); final Bindings bindings = new SimpleBindings(); bindings.put(this.translator.getAlias(), new GraphTraversalSource(this.getGraph().get(), this.getStrategies())); http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversalSource.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversalSource.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversalSource.java index 5abe3cb..edb1afe 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversalSource.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversalSource.java @@ -42,14 +42,14 @@ import java.util.function.UnaryOperator; */ public class ScriptGraphTraversalSource extends GraphTraversalSource { - private final Translator<GraphTraversal> translator; + private final Translator translator; - public ScriptGraphTraversalSource(final Graph graph, final TraversalStrategies traversalStrategies, final Translator<GraphTraversal> translator) { + public ScriptGraphTraversalSource(final Graph graph, final TraversalStrategies traversalStrategies, final Translator translator) { super(graph, traversalStrategies); this.translator = translator; } - public ScriptGraphTraversalSource(final Graph graph, final Translator<GraphTraversal> translator) { + public ScriptGraphTraversalSource(final Graph graph, final Translator translator) { super(graph); this.translator = translator; } @@ -218,7 +218,7 @@ public class ScriptGraphTraversalSource extends GraphTraversalSource { } private GraphTraversal generateTraversal(final String stepName, final Object... arguments) { - __.setAnonymousTraversalSupplier(this.translator::__); + //this.translator.createAnonymousTraversalSupplier(); final Translator clone = this.translator.clone(); clone.addStep(stepName, arguments); final GraphTraversal traversal = new ScriptGraphTraversal(this.graph, clone); http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java index 9b1811a..573e5aa 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java @@ -37,18 +37,22 @@ import org.apache.tinkerpop.gremlin.util.ScriptEngineCache; import javax.script.Bindings; import javax.script.ScriptEngine; import javax.script.SimpleBindings; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.function.Function; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ public class TranslationStrategy extends AbstractTraversalStrategy<TraversalStrategy.CreationStrategy> implements TraversalStrategy.CreationStrategy { - private Translator<?> translator; + private final Translator translator; + private final Class anonymousTraversalClass; - public TranslationStrategy(final Translator<?> translator) { + public TranslationStrategy(final Translator translator, final Class anonymousTraversalClass) { this.translator = translator; - if (!this.translator.getAlias().equals("__")) - __.setAnonymousTraversalSupplier(() -> (GraphTraversal) translator.__()); + this.anonymousTraversalClass = anonymousTraversalClass; + this.createAnonymousTraversalFunction(); } @Override @@ -59,6 +63,7 @@ public class TranslationStrategy extends AbstractTraversalStrategy<TraversalStra final String traversalScriptString = this.translator.getTraversalScript(); ScriptEngine engine = ScriptEngineCache.get(this.translator.getScriptEngine()); TraversalStrategies strategies = traversal.getStrategies().clone().removeStrategies(TranslationStrategy.class); + this.destroyAnonymousTraversalFunction(); final Bindings bindings = new SimpleBindings(); bindings.put(this.translator.getAlias(), new GraphTraversalSource(traversal.getGraph().orElse(EmptyGraph.instance()), strategies)); Traversal.Admin<?, ?> translatedTraversal = (Traversal.Admin<?, ?>) engine.eval(traversalScriptString, bindings); @@ -74,18 +79,53 @@ public class TranslationStrategy extends AbstractTraversalStrategy<TraversalStra } @Override + public void addSpawnStep(final Traversal.Admin<?, ?> traversal, final String stepName, final Object... arguments) { + final TranslationStrategy clone = new TranslationStrategy(this.translator.clone(), this.anonymousTraversalClass); + traversal.setStrategies(traversal.getStrategies().clone().addStrategies(clone)); + clone.createAnonymousTraversalFunction(); + clone.translator.addSpawnStep(traversal, stepName, arguments); + } + + @Override public void addStep(final Traversal.Admin<?, ?> traversal, final String stepName, final Object... arguments) { this.translator.addStep(traversal, stepName, arguments); } @Override public void addSource(final TraversalSource traversalSource, final String sourceName, final Object... arguments) { - final TranslationStrategy clone = new TranslationStrategy(this.translator.clone()); + final TranslationStrategy clone = new TranslationStrategy(this.translator.clone(), this.anonymousTraversalClass); traversalSource.getStrategies().addStrategies(clone); + clone.createAnonymousTraversalFunction(); clone.translator.addSource(traversalSource, sourceName, arguments); } public Translator getTranslator() { return this.translator; } + + private void createAnonymousTraversalFunction() { + final Function<? extends Traversal.Admin, ? extends Traversal.Admin> function = traversal -> { + try { + traversal.setStrategies(traversal.getStrategies().clone().addStrategies( + new TranslationStrategy(this.translator.getAnonymousTraversalTranslator(), + this.anonymousTraversalClass))); + return traversal; + } catch (final Exception e) { + throw new IllegalStateException(e.getMessage(), e); + } + }; + try { + this.anonymousTraversalClass.getMethod(TraversalSource.SET_ANONYMOUS_TRAVERSAL_FUNCTION, Function.class).invoke(null, function); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new IllegalStateException(e.getMessage(), e); + } + } + + private void destroyAnonymousTraversalFunction() { + try { + this.anonymousTraversalClass.getMethod(TraversalSource.SET_ANONYMOUS_TRAVERSAL_FUNCTION, Function.class).invoke(null, (Function) null); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new IllegalStateException(e.getMessage(), e); + } + } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/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 f12ef74..1c1c35a 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 @@ -25,8 +25,11 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; +import java.util.stream.Collectors; /** * @author Marko A. Rodriguez (http://markorodriguez.com) @@ -34,6 +37,7 @@ import java.util.Optional; public class DefaultTraversalStrategies implements TraversalStrategies { protected List<TraversalStrategy<?>> traversalStrategies = new ArrayList<>(); + protected transient Map<Class<? extends TraversalStrategy>, List<TraversalStrategy<?>>> strategyMap = null; @Override @SuppressWarnings({"unchecked", "varargs"}) @@ -49,6 +53,7 @@ public class DefaultTraversalStrategies implements TraversalStrategies { } this.traversalStrategies.removeAll(toRemove); Collections.addAll(this.traversalStrategies, strategies); + this.strategyMap = null; this.traversalStrategies = TraversalStrategies.sortStrategies(this.traversalStrategies); return this; } @@ -64,7 +69,10 @@ public class DefaultTraversalStrategies implements TraversalStrategies { removed = true; } } - if (removed) this.traversalStrategies = TraversalStrategies.sortStrategies(this.traversalStrategies); + if (removed) { + this.strategyMap = null; + this.traversalStrategies = TraversalStrategies.sortStrategies(this.traversalStrategies); + } return this; } @@ -73,6 +81,21 @@ public class DefaultTraversalStrategies implements TraversalStrategies { return Collections.unmodifiableList(this.traversalStrategies); } + public <T extends TraversalStrategy> List<T> getStrategies(final Class<T> traversalStrategyClass) { + if (null == this.strategyMap) { + this.strategyMap = new HashMap<>(); + for (final TraversalStrategy strategy : this.traversalStrategies) { + this.strategyMap.compute((Class) strategy.getClass().getInterfaces()[0], (key, value) -> { + assert TraversalStrategy.class.isAssignableFrom(key); + if (null == value) value = new ArrayList<>(); + value.add(strategy); + return value; + }); + } + } + return (List<T>) this.strategyMap.getOrDefault(traversalStrategyClass, Collections.emptyList()); + } + @Override public void applyStrategies(final Traversal.Admin<?, ?> traversal) { for (final TraversalStrategy<?> traversalStrategy : this.traversalStrategies) { @@ -86,6 +109,7 @@ public class DefaultTraversalStrategies implements TraversalStrategies { final DefaultTraversalStrategies clone = (DefaultTraversalStrategies) super.clone(); clone.traversalStrategies = new ArrayList<>(this.traversalStrategies.size()); clone.traversalStrategies.addAll(this.traversalStrategies); + clone.strategyMap = null; return clone; } catch (final CloneNotSupportedException e) { throw new IllegalStateException(e.getMessage(), e); http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java index cc9edb9..033b44b 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java @@ -25,7 +25,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public interface Translator<V extends Traversal> extends Cloneable { +public interface Translator extends Cloneable { public String getScriptEngine(); @@ -33,10 +33,22 @@ public interface Translator<V extends Traversal> extends Cloneable { public void addStep(final Traversal.Admin<?, ?> traversal, final String stepName, final Object... arguments); + public default void addSpawnStep(final Traversal.Admin<?, ?> traversal, final String stepName, final Object... arguments) { + addStep(traversal, stepName, arguments); + } + public default void addSource(final TraversalSource traversalSource, final String sourceName, final Object... arguments) { addStep(EmptyTraversal.instance(), sourceName, arguments); } + public Translator getAnonymousTraversalTranslator(); + + public String getTraversalScript(); + + public Translator clone(); + + /// TODO: Below should be removed when ScriptXXXTraversal model is removed + public default void addSource(final String sourceName, final Object... arguments) { } @@ -44,10 +56,4 @@ public interface Translator<V extends Traversal> extends Cloneable { public default void addStep(final String sourceName, final Object... arguments) { } - - public V __(); - - public String getTraversalScript(); - - public Translator<V> clone(); } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java index cd7576d..2b03497 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java @@ -576,6 +576,16 @@ public final class TraversalHelper { } } + public static void addSpawnStepToCreationStrategies(final Traversal.Admin<?, ?> traversal, final Object... arguments) { + final List<TraversalStrategy.CreationStrategy> strategies = traversal.getStrategies().getStrategies(TraversalStrategy.CreationStrategy.class); + if (!strategies.isEmpty()) { + final String stepName = Thread.currentThread().getStackTrace()[2].getMethodName(); + for (final TraversalStrategy.CreationStrategy creationStrategy : strategies) { + creationStrategy.addSpawnStep(traversal, stepName, arguments); + } + } + } + public static void addSourceToCreationStrategies(final TraversalSource traversalSource, final Object... arguments) { final List<TraversalStrategy.CreationStrategy> strategies = traversalSource.getStrategies().getStrategies(TraversalStrategy.CreationStrategy.class); if (!strategies.isEmpty()) { http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java ---------------------------------------------------------------------- diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java index 526e85d..75d22a3 100644 --- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java +++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java @@ -23,10 +23,6 @@ import org.apache.tinkerpop.gremlin.process.computer.Computer; import org.apache.tinkerpop.gremlin.process.traversal.P; import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions; import org.apache.tinkerpop.gremlin.process.traversal.Traversal; -import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; -import org.apache.tinkerpop.gremlin.process.traversal.lambda.AbstractLambdaTraversal; import org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategy; import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException; import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP; @@ -43,16 +39,20 @@ import java.util.List; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public class GroovyTranslator implements Translator<GraphTraversal> { +public final class GroovyTranslator implements Translator { private StringBuilder traversalScript; - private String alias; + private final String alias; - public GroovyTranslator(final String alias) { + private GroovyTranslator(final String alias) { this.alias = alias; this.traversalScript = new StringBuilder(this.alias); } + public static final GroovyTranslator of(final String alias) { + return new GroovyTranslator(alias); + } + @Override public String getScriptEngine() { return "gremlin-groovy"; @@ -78,16 +78,9 @@ public class GroovyTranslator implements Translator<GraphTraversal> { } } - /*Override - public void addSource(final TraversalSource source, final String sourceName, final Object... arguments) { - source.getStrategies().toList(). - }*/ - @Override - public GraphTraversal __() { - final GraphTraversal traversal = new DefaultGraphTraversal(); - traversal.asAdmin().setStrategies(traversal.asAdmin().getStrategies().clone().addStrategies(new TranslationStrategy(new GroovyTranslator("__")))); - return traversal; + public Translator getAnonymousTraversalTranslator() { + return new GroovyTranslator("__"); } @Override @@ -109,10 +102,6 @@ public class GroovyTranslator implements Translator<GraphTraversal> { } } - public static final GroovyTranslator of(final String alias) { - return new GroovyTranslator(alias); - } - /////// private static String convertToString(final Object object) { http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java ---------------------------------------------------------------------- diff --git a/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java b/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java index 0ca4095..e7abdea 100644 --- a/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java +++ b/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java @@ -23,9 +23,7 @@ import org.apache.tinkerpop.gremlin.process.computer.Computer; import org.apache.tinkerpop.gremlin.process.traversal.Operator; import org.apache.tinkerpop.gremlin.process.traversal.P; import org.apache.tinkerpop.gremlin.process.traversal.Traversal; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.script.ScriptGraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategy; import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException; import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP; @@ -36,7 +34,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.TranslatorHelper; import org.apache.tinkerpop.gremlin.structure.Element; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.VertexProperty; -import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph; import org.apache.tinkerpop.gremlin.util.ScriptEngineCache; import org.apache.tinkerpop.gremlin.util.iterator.ArrayIterator; import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils; @@ -58,7 +55,7 @@ import java.util.stream.Stream; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public class PythonTranslator implements Translator<GraphTraversal> { +public final class PythonTranslator implements Translator { private static boolean isTesting = Boolean.valueOf(System.getProperty("is.testing", "false")); //// @@ -74,7 +71,7 @@ public class PythonTranslator implements Translator<GraphTraversal> { private final String scriptEngine; private final boolean importStatics; - public PythonTranslator(final String scriptEngine, final String alias, final boolean importStatics) { + private PythonTranslator(final String scriptEngine, final String alias, final boolean importStatics) { this.scriptEngine = scriptEngine; this.alias = alias; this.traversalScript = new StringBuilder(this.alias); @@ -100,10 +97,8 @@ public class PythonTranslator implements Translator<GraphTraversal> { } @Override - public GraphTraversal __() { - final GraphTraversal traversal = new DefaultGraphTraversal(); - traversal.asAdmin().setStrategies(traversal.asAdmin().getStrategies().clone().addStrategies(new TranslationStrategy(new PythonTranslator(this.scriptEngine, "__", this.importStatics)))); - return traversal; + public Translator getAnonymousTraversalTranslator() { + return new PythonTranslator(this.scriptEngine, "__", this.importStatics); } @Override http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py ---------------------------------------------------------------------- diff --git a/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py b/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py index bd993c6..a122a70 100644 --- a/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py +++ b/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py @@ -83,6 +83,8 @@ class PythonGraphTraversalSource(object): return PythonGraphTraversal(self.traversal_source_string + ".V(" + Helper.stringify(*args) + ")", self.remote_connection) def addV(self, *args): return PythonGraphTraversal(self.traversal_source_string + ".addV(" + Helper.stringify(*args) + ")", self.remote_connection) + def clone(self, *args): + return PythonGraphTraversalSource(self.traversal_source_string + ".clone(" + Helper.stringify(*args) + ")", self.remote_connection) def inject(self, *args): return PythonGraphTraversal(self.traversal_source_string + ".inject(" + Helper.stringify(*args) + ")", self.remote_connection) def withBulk(self, *args): http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/VariantGraphProvider.java ---------------------------------------------------------------------- diff --git a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/VariantGraphProvider.java b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/VariantGraphProvider.java index 7f05aea..8545dff 100644 --- a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/VariantGraphProvider.java +++ b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/VariantGraphProvider.java @@ -60,17 +60,16 @@ public abstract class VariantGraphProvider extends AbstractGraphProvider { "testProfileStrategyCallbackSideEffect", "g_withSideEffectXa_setX_V_both_name_storeXaX_capXaX", "g_V_both_hasLabelXpersonX_order_byXage_decrX_name", + "g_VX1X_out_injectXv2X_name", "shouldSupportGraphFilter", - InjectTest.Traversals.class.getCanonicalName(), + "shouldNeverPropagateANoBulkTraverser", + "shouldNeverPropagateANullValuedTraverser", + "shouldTraversalResetProperly", + "shouldHidePartitionKeyForValues", ProgramTest.Traversals.class.getCanonicalName(), - CoreTraversalTest.class.getCanonicalName(), TraversalInterruptionTest.class.getCanonicalName(), TraversalInterruptionComputerTest.class.getCanonicalName(), - ElementIdStrategyProcessTest.class.getCanonicalName(), - EventStrategyProcessTest.class.getCanonicalName(), - ReadOnlyStrategyProcessTest.class.getCanonicalName(), - PartitionStrategyProcessTest.class.getCanonicalName(), - SubgraphStrategyProcessTest.class.getCanonicalName())); + ElementIdStrategyProcessTest.class.getCanonicalName())); private static final Set<Class> IMPLEMENTATION = new HashSet<Class>() {{ add(TinkerEdge.class); @@ -101,15 +100,7 @@ public abstract class VariantGraphProvider extends AbstractGraphProvider { @Override public void clear(final Graph graph, final Configuration configuration) throws Exception { - if (graph != null) - graph.close(); - - // in the even the graph is persisted we need to clean up - final String graphLocation = configuration.getString(TinkerGraph.GREMLIN_TINKERGRAPH_GRAPH_LOCATION, null); - if (graphLocation != null) { - final File f = new File(graphLocation); - f.delete(); - } + if (graph != null) graph.close(); } @Override http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java ---------------------------------------------------------------------- diff --git a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java index 605862f..8c29a32 100644 --- a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java +++ b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java @@ -19,9 +19,8 @@ package org.apache.tinkerpop.gremlin.python; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.VariantGraphProvider; -import org.apache.tinkerpop.gremlin.python.GremlinPythonGenerator; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.util.ScriptEngineCache;
