You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2016/08/08 19:50:33 UTC
tinkerpop git commit: TranslationStrategy is no longer needed as
everything is Bytecode based. However,
its useful for testing and thus is now in gremlin-test/. This allows us to
remote TraversalSource.withTranslator(). Updated all the respective Provide
Repository: tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1278 daa37695e -> f7e2945a8
TranslationStrategy is no longer needed as everything is Bytecode based. However, its useful for testing and thus is now in gremlin-test/. This allows us to remote TraversalSource.withTranslator(). Updated all the respective Providers that use translation throughout. Removed the concept of CreationStrategy as that was a new Strategy categy introduced in this branch which was needed when translation happened in real-time. The bytecode model doesn't require it. Thus, no need to have it -- reverted.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/f7e2945a
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/f7e2945a
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/f7e2945a
Branch: refs/heads/TINKERPOP-1278
Commit: f7e2945a8124e9de7f65b1e7eaf01fac2c453671
Parents: daa3769
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon Aug 8 13:50:06 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon Aug 8 13:50:26 2016 -0600
----------------------------------------------------------------------
.../gremlin/process/remote/RemoteGraph.java | 2 +-
.../strategy/decoration/RemoteStrategy.java | 3 -
.../gremlin/process/traversal/Bytecode.java | 4 +-
.../process/traversal/TraversalSource.java | 16 +--
.../process/traversal/TraversalStrategies.java | 2 +-
.../process/traversal/TraversalStrategy.java | 53 ++-------
.../dsl/graph/GraphTraversalSource.java | 6 --
.../strategy/creation/TranslationStrategy.java | 94 ----------------
.../process/traversal/util/ScriptTraversal.java | 18 ----
.../tinkerpop/gremlin/util/CoreImports.java | 6 +-
.../gremlin/groovy/GroovyTranslatorTest.java | 4 +-
.../gremlin/groovy/jsr223/GroovyTranslator.java | 3 +-
.../gremlin/python/jsr223/PythonTranslator.java | 3 +-
.../gremlin_python/process/graph_traversal.py | 4 -
.../jsr223/PythonGraphSONJavaTranslator.java | 12 ++-
.../gremlin/python/jsr223/PythonProvider.java | 6 +-
.../RemoteGraphGroovyTranslatorProvider.java | 5 +-
.../gremlin/process/ProcessComputerSuite.java | 2 +-
.../gremlin/process/ProcessStandardSuite.java | 2 +-
.../TranslationStrategyProcessTest.java | 67 ------------
.../decoration/TranslationStrategy.java | 108 +++++++++++++++++++
.../TranslationStrategyProcessTest.java | 67 ++++++++++++
.../TinkerGraphGroovyTranslatorProvider.java | 7 +-
.../TinkerGraphJavaTranslatorProvider.java | 5 +-
.../TinkerGraphGraphSONTranslatorProvider.java | 5 +-
25 files changed, 227 insertions(+), 277 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
index 9852ed0..2c70266 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
@@ -74,7 +74,7 @@ import java.util.Iterator;
method = "*",
reason = "hmmmm")
@Graph.OptOut(
- test = "org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategyProcessTest",
+ test = "org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategyProcessTest",
method = "*",
reason = "hmmmm")
@Graph.OptOut(
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/strategy/decoration/RemoteStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/strategy/decoration/RemoteStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/strategy/decoration/RemoteStrategy.java
index 20f7e80..35b3fdd 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/strategy/decoration/RemoteStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/strategy/decoration/RemoteStrategy.java
@@ -29,10 +29,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.ProfileSideEffectStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
-import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.util.ScriptTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
index 3f9c1cc..9c5ef76 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
@@ -79,11 +79,11 @@ public final class Bytecode implements Cloneable, Serializable {
return bindingsMap;
}
- private static void addInstructionBindings(final Map<String, Object> bindingsMap, final Instruction instruction) {
+ private static final void addInstructionBindings(final Map<String, Object> bindingsMap, final Instruction instruction) {
for (final Object argument : instruction.getArguments()) {
if (argument instanceof Binding)
bindingsMap.put(((Binding) argument).variable, ((Binding) argument).value);
- if (argument instanceof Bytecode)
+ else if (argument instanceof Bytecode)
bindingsMap.putAll(((Bytecode) argument).getBindings());
}
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/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 0b9a2d6..bd5c055 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,7 +21,6 @@ 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.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.structure.Graph;
@@ -85,7 +84,6 @@ public interface TraversalSource extends Cloneable {
public static final String withoutStrategies = "withoutStrategies";
public static final String withComputer = "withComputer";
public static final String withSideEffect = "withSideEffect";
- public static final String withTranslator = "withTranslator";
}
/////////////////////////////
@@ -118,18 +116,12 @@ public interface TraversalSource extends Cloneable {
}
/**
- * Add a {@link Translator} to translate any traversal from this traversal source language into some target language.
+ * Using the provided {@link Bindings} to create {@link org.apache.tinkerpop.gremlin.process.traversal.Bytecode.Binding}.
+ * The bindings serve as a relay for ensure bound arguments are encoded as {@link org.apache.tinkerpop.gremlin.process.traversal.Bytecode.Binding} in {@link Bytecode}.
*
- * @param translator the translator that will do the source to targer language translation
- * @return a new traversal source with updated strategies
+ * @param bindings the bindings instance to use
+ * @return a new traversal source with set bindings
*/
- public default TraversalSource withTranslator(final Translator translator) {
- final TraversalSource clone = this.clone();
- clone.getStrategies().addStrategies(new TranslationStrategy(clone, translator));
- clone.getBytecode().addSource(Symbols.withTranslator, translator);
- return clone;
- }
-
public default TraversalSource withBindings(final Bindings bindings) {
final TraversalSource clone = this.clone();
clone.getBytecode().addSource(Symbols.withBindings, bindings);
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/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 b3caf6f..4b89833 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
@@ -60,7 +60,7 @@ import java.util.stream.Collectors;
*/
public interface TraversalStrategies extends Serializable, Cloneable {
- static List<Class<? extends TraversalStrategy>> STRATEGY_CATEGORIES = Collections.unmodifiableList(Arrays.asList(TraversalStrategy.CreationStrategy.class, TraversalStrategy.DecorationStrategy.class, TraversalStrategy.OptimizationStrategy.class, TraversalStrategy.ProviderOptimizationStrategy.class, TraversalStrategy.FinalizationStrategy.class, TraversalStrategy.VerificationStrategy.class));
+ static List<Class<? extends TraversalStrategy>> STRATEGY_CATEGORIES = Collections.unmodifiableList(Arrays.asList(TraversalStrategy.DecorationStrategy.class, TraversalStrategy.OptimizationStrategy.class, TraversalStrategy.ProviderOptimizationStrategy.class, TraversalStrategy.FinalizationStrategy.class, TraversalStrategy.VerificationStrategy.class));
/**
* Return all the {@link TraversalStrategy} singleton instances associated with this {@link TraversalStrategies}.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/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 e09b03c..f01f418 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java
@@ -29,7 +29,7 @@ import java.util.Set;
/**
* A {@link TraversalStrategy} defines a particular atomic operation for mutating a {@link Traversal} prior to its evaluation.
- * There are 6 pre-defined "traversal categories": {@link CreationStrategy}, {@link DecorationStrategy}, {@link OptimizationStrategy}, {@link ProviderOptimizationStrategy}, {@link FinalizationStrategy}, and {@link VerificationStrategy}.
+ * There are 6 pre-defined "traversal categories": {@link DecorationStrategy}, {@link OptimizationStrategy}, {@link ProviderOptimizationStrategy}, {@link FinalizationStrategy}, and {@link VerificationStrategy}.
* Strategies within a category are sorted amongst themselves and then category sorts are applied in the ordered specified previous.
* That is, decorations are applied, then optimizations, then provider optimizations, then finalizations, and finally, verifications.
* If a strategy does not fit within the specified categories, then it can simply implement {@link TraversalStrategy} and can have priors/posts that span categories.
@@ -67,7 +67,7 @@ public interface TraversalStrategy<S extends TraversalStrategy> extends Serializ
}
/**
- * The type of traversal strategy -- i.e. {@link CreationStrategy}, {@link DecorationStrategy}, {@link OptimizationStrategy}, {@link FinalizationStrategy}, or {@link VerificationStrategy}.
+ * The type of traversal strategy -- i.e. {@link DecorationStrategy}, {@link OptimizationStrategy}, {@link FinalizationStrategy}, or {@link VerificationStrategy}.
*
* @return the traversal strategy category class
*/
@@ -83,35 +83,6 @@ public interface TraversalStrategy<S extends TraversalStrategy> extends Serializ
/**
* Implemented by strategies that adds "application logic" to the traversal (e.g. {@link PartitionStrategy}).
*/
- public interface CreationStrategy extends TraversalStrategy<CreationStrategy> {
-
- @Override
- public default Class<CreationStrategy> getTraversalCategory() {
- return CreationStrategy.class;
- }
-
- @Override
- public default int compareTo(final Class<? extends TraversalStrategy> otherTraversalCategory) {
- if (otherTraversalCategory.equals(CreationStrategy.class))
- return 0;
- else if (otherTraversalCategory.equals(DecorationStrategy.class))
- return -1;
- else if (otherTraversalCategory.equals(OptimizationStrategy.class))
- return -1;
- else if (otherTraversalCategory.equals(ProviderOptimizationStrategy.class))
- return -1;
- else if (otherTraversalCategory.equals(FinalizationStrategy.class))
- return -1;
- else if (otherTraversalCategory.equals(VerificationStrategy.class))
- return -1;
- else
- return 0;
- }
- }
-
- /**
- * Implemented by strategies that adds "application logic" to the traversal (e.g. {@link PartitionStrategy}).
- */
public interface DecorationStrategy extends TraversalStrategy<DecorationStrategy> {
@Override
@@ -121,9 +92,7 @@ public interface TraversalStrategy<S extends TraversalStrategy> extends Serializ
@Override
public default int compareTo(final Class<? extends TraversalStrategy> otherTraversalCategory) {
- if (otherTraversalCategory.equals(CreationStrategy.class))
- return 1;
- else if (otherTraversalCategory.equals(DecorationStrategy.class))
+ if (otherTraversalCategory.equals(DecorationStrategy.class))
return 0;
else if (otherTraversalCategory.equals(OptimizationStrategy.class))
return -1;
@@ -152,9 +121,7 @@ public interface TraversalStrategy<S extends TraversalStrategy> extends Serializ
@Override
public default int compareTo(final Class<? extends TraversalStrategy> otherTraversalCategory) {
- if (otherTraversalCategory.equals(CreationStrategy.class))
- return 1;
- else if (otherTraversalCategory.equals(DecorationStrategy.class))
+ if (otherTraversalCategory.equals(DecorationStrategy.class))
return 1;
else if (otherTraversalCategory.equals(OptimizationStrategy.class))
return 0;
@@ -182,9 +149,7 @@ public interface TraversalStrategy<S extends TraversalStrategy> extends Serializ
@Override
public default int compareTo(final Class<? extends TraversalStrategy> otherTraversalCategory) {
- if (otherTraversalCategory.equals(CreationStrategy.class))
- return 1;
- else if (otherTraversalCategory.equals(DecorationStrategy.class))
+ if (otherTraversalCategory.equals(DecorationStrategy.class))
return 1;
else if (otherTraversalCategory.equals(OptimizationStrategy.class))
return 1;
@@ -212,9 +177,7 @@ public interface TraversalStrategy<S extends TraversalStrategy> extends Serializ
@Override
public default int compareTo(final Class<? extends TraversalStrategy> otherTraversalCategory) {
- if (otherTraversalCategory.equals(CreationStrategy.class))
- return 1;
- else if (otherTraversalCategory.equals(DecorationStrategy.class))
+ if (otherTraversalCategory.equals(DecorationStrategy.class))
return 1;
else if (otherTraversalCategory.equals(OptimizationStrategy.class))
return 1;
@@ -243,9 +206,7 @@ public interface TraversalStrategy<S extends TraversalStrategy> extends Serializ
@Override
public default int compareTo(final Class<? extends TraversalStrategy> otherTraversalCategory) {
- if (otherTraversalCategory.equals(CreationStrategy.class))
- return 1;
- else if (otherTraversalCategory.equals(DecorationStrategy.class))
+ if (otherTraversalCategory.equals(DecorationStrategy.class))
return 1;
else if (otherTraversalCategory.equals(OptimizationStrategy.class))
return 1;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/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 828f3b2..4c42ef6 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
@@ -22,7 +22,6 @@ import org.apache.tinkerpop.gremlin.process.computer.Computer;
import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
import org.apache.tinkerpop.gremlin.process.traversal.Bindings;
import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
-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;
@@ -119,11 +118,6 @@ public class GraphTraversalSource implements TraversalSource {
}
@Override
- public GraphTraversalSource withTranslator(final Translator translator) {
- return (GraphTraversalSource) TraversalSource.super.withTranslator(translator);
- }
-
- @Override
public GraphTraversalSource withComputer(final Computer computer) {
return (GraphTraversalSource) TraversalSource.super.withComputer(computer);
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/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
deleted file mode 100644
index 61ee8d4..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.tinkerpop.gremlin.process.traversal.strategy.creation;
-
-import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine;
-import org.apache.tinkerpop.gremlin.jsr223.SingleGremlinScriptEngineManager;
-import org.apache.tinkerpop.gremlin.process.remote.RemoteGraph;
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-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.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-
-import javax.script.Bindings;
-import javax.script.ScriptContext;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class TranslationStrategy extends AbstractTraversalStrategy<TraversalStrategy.CreationStrategy> implements TraversalStrategy.CreationStrategy {
-
- private final TraversalSource traversalSource;
- private final Translator translator;
-
- public TranslationStrategy(final TraversalSource traversalSource, final Translator translator) {
- this.traversalSource = traversalSource;
- this.translator = translator;
- }
-
- @Override
- public void apply(final Traversal.Admin<?, ?> traversal) {
- if (!(traversal.getParent() instanceof EmptyStep))
- return;
-
- // if the graph is RemoteGraph, RemoteStrategy will send the traversal
- if (traversal.getGraph().isPresent() && traversal.getGraph().get() instanceof RemoteGraph)
- return;
-
- final Traversal.Admin<?, ?> translatedTraversal;
- ////////////////
- if (this.translator instanceof Translator.StepTranslator) {
- // reflection based translation
- translatedTraversal = (Traversal.Admin<?, ?>) this.translator.translate(traversal.getBytecode());
- } else if (this.translator instanceof Translator.ScriptTranslator) {
- try {
- // script based translation
- final GremlinScriptEngine scriptEngine = SingleGremlinScriptEngineManager.get(this.translator.getTargetLanguage());
- final Bindings bindings = scriptEngine.createBindings();
- bindings.putAll(scriptEngine.getContext().getBindings(ScriptContext.ENGINE_SCOPE));
- bindings.put(this.translator.getTraversalSource().toString(), this.traversalSource);
- translatedTraversal = (Traversal.Admin<?, ?>) scriptEngine.eval(traversal.getBytecode(), bindings);
- } catch (final Exception e) {
- throw new IllegalArgumentException(e.getMessage(), e);
- }
- } else {
- throw new IllegalArgumentException("TranslationStrategy does not know how to process the provided translator type: " + this.translator.getClass().getSimpleName());
- }
- ////////////////
- assert !translatedTraversal.isLocked();
- assert !traversal.isLocked();
- traversal.setSideEffects(translatedTraversal.getSideEffects());
- TraversalHelper.removeAllSteps(traversal);
- TraversalHelper.removeToTraversal((Step) translatedTraversal.getStartStep(), EmptyStep.instance(), traversal);
- }
-
- public TraversalSource getTraversalSource() {
- return this.traversalSource;
- }
-
- public Translator getTranslator() {
- return this.translator;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/ScriptTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/ScriptTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/ScriptTraversal.java
index d1933ad..e3be4c9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/ScriptTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/ScriptTraversal.java
@@ -20,12 +20,9 @@
package org.apache.tinkerpop.gremlin.process.traversal.util;
import org.apache.tinkerpop.gremlin.jsr223.SingleGremlinScriptEngineManager;
-import org.apache.tinkerpop.gremlin.process.remote.traversal.strategy.decoration.RemoteStrategy;
-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.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategy;
import javax.script.Bindings;
import javax.script.ScriptEngine;
@@ -58,21 +55,6 @@ public final class ScriptTraversal<S, E> extends DefaultTraversal<S, E> {
throw new IllegalArgumentException("The provided key/value bindings array length must be a multiple of two");
}
- public ScriptTraversal(final Traversal traversal, TranslationStrategy translationStrategy, final Object... bindings) {
- super();
- final Translator translator = translationStrategy.getTranslator();
- final TraversalSource traversalSource = translationStrategy.getTraversalSource().clone().withoutStrategies(TranslationStrategy.class, RemoteStrategy.class);
- //
- this.alias = translator.getTraversalSource().toString();
- this.graph = traversalSource.getGraph();
- this.factory = new TraversalSourceFactory<>(traversalSource);
- this.scriptEngine = translator.getTargetLanguage();
- this.script = translator.translate(traversal.asAdmin().getBytecode()).toString();
- this.bindings = bindings;
- if (this.bindings.length % 2 != 0)
- throw new IllegalArgumentException("The provided key/value bindings array length must be a multiple of two");
- }
-
@Override
public void applyStrategies() throws IllegalStateException {
try {
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/CoreImports.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/CoreImports.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/CoreImports.java
index 41edffa..d95f8ef 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/CoreImports.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/CoreImports.java
@@ -33,16 +33,17 @@ import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decorati
import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.optimization.GraphFilterStrategy;
import org.apache.tinkerpop.gremlin.process.remote.RemoteConnection;
import org.apache.tinkerpop.gremlin.process.remote.RemoteGraph;
+import org.apache.tinkerpop.gremlin.process.traversal.Bindings;
import org.apache.tinkerpop.gremlin.process.traversal.Operator;
import org.apache.tinkerpop.gremlin.process.traversal.Order;
import org.apache.tinkerpop.gremlin.process.traversal.P;
import org.apache.tinkerpop.gremlin.process.traversal.Pop;
import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
import org.apache.tinkerpop.gremlin.process.traversal.Scope;
+import org.apache.tinkerpop.gremlin.process.traversal.Translator;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConnectiveStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategy;
@@ -64,7 +65,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.Comp
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.LambdaRestrictionStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.StandardVerificationStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
import org.apache.tinkerpop.gremlin.structure.Column;
import org.apache.tinkerpop.gremlin.structure.Direction;
@@ -134,7 +134,6 @@ public final class CoreImports {
CLASS_IMPORTS.add(Storage.class);
CLASS_IMPORTS.add(Configuration.class);
// strategies
- CLASS_IMPORTS.add(TranslationStrategy.class);
CLASS_IMPORTS.add(ConnectiveStrategy.class);
CLASS_IMPORTS.add(ElementIdStrategy.class);
CLASS_IMPORTS.add(EventStrategy.class);
@@ -162,6 +161,7 @@ public final class CoreImports {
CLASS_IMPORTS.add(GraphTraversalSource.class);
CLASS_IMPORTS.add(TraversalMetrics.class);
CLASS_IMPORTS.add(Translator.class);
+ CLASS_IMPORTS.add(Bindings.class);
// graph computer
CLASS_IMPORTS.add(Computer.class);
CLASS_IMPORTS.add(ComputerResult.class);
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslatorTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslatorTest.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslatorTest.java
index f76fa7a..5ce48e5 100644
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslatorTest.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslatorTest.java
@@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyTranslator;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.util.function.Lambda;
import org.junit.Test;
@@ -43,7 +44,8 @@ public class GroovyTranslatorTest extends AbstractGremlinTest {
@Test
@LoadGraphWith(LoadGraphWith.GraphData.MODERN)
public void shouldSupportStringSupplierLambdas() throws Exception {
- final GraphTraversalSource g = graph.traversal().withTranslator(GroovyTranslator.of("g", "__"));
+ GraphTraversalSource g = graph.traversal();
+ g = g.withStrategies(new TranslationStrategy(g, GroovyTranslator.of("g", "__")));
GraphTraversal.Admin<Vertex, Integer> t = g.withSideEffect("lengthSum", 0).withSack(1)
.V()
.filter(Lambda.predicate("it.get().label().equals('person')"))
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
index ee233c4..ea5fc2b 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
@@ -24,6 +24,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
import org.apache.tinkerpop.gremlin.process.traversal.P;
import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
import org.apache.tinkerpop.gremlin.process.traversal.Translator;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
import org.apache.tinkerpop.gremlin.process.traversal.util.BytecodeHelper;
import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
@@ -91,7 +92,7 @@ public final class GroovyTranslator implements Translator.ScriptTranslator {
private String internalTranslate(final String start, final Bytecode bytecode) {
final StringBuilder traversalScript = new StringBuilder(start);
final Bytecode clone = BytecodeHelper.filterInstructions(bytecode,
- instruction -> !Arrays.asList("withTranslator", "withStrategies").contains(instruction.getOperator()));
+ instruction -> !instruction.getOperator().equals(TraversalSource.Symbols.withStrategies));
for (final Bytecode.Instruction instruction : clone.getSourceInstructions()) {
processInstruction(traversalScript, instruction);
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
index b2d1cb1..a63237c 100644
--- a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
+++ b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
@@ -26,6 +26,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.P;
import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
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.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
import org.apache.tinkerpop.gremlin.process.traversal.util.BytecodeHelper;
@@ -87,7 +88,7 @@ public final class PythonTranslator implements Translator.ScriptTranslator {
@Override
public String translate(final Bytecode bytecode) {
final String traversal = this.internalTranslate(this.traversalSource, BytecodeHelper.filterInstructions(bytecode,
- instruction -> !Arrays.asList("withTranslator", "withStrategies").contains(instruction.getOperator())));
+ instruction -> !instruction.getOperator().equals(TraversalSource.Symbols.withStrategies)));
//if (this.importStatics)
// assert !traversal.contains("__.");
return traversal;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
index b923453..9803139 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
@@ -69,10 +69,6 @@ class GraphTraversalSource(object):
source = GraphTraversalSource(self.graph, self.traversal_strategies, Bytecode(self.bytecode))
source.bytecode.add_source("withStrategies", *args)
return source
- def withTranslator(self, *args):
- source = GraphTraversalSource(self.graph, self.traversal_strategies, Bytecode(self.bytecode))
- source.bytecode.add_source("withTranslator", *args)
- return source
def withoutStrategies(self, *args):
source = GraphTraversalSource(self.graph, self.traversal_strategies, Bytecode(self.bytecode))
source.bytecode.add_source("withoutStrategies", *args)
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonGraphSONJavaTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonGraphSONJavaTranslator.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonGraphSONJavaTranslator.java
index 3b21cd5..2a55228 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonGraphSONJavaTranslator.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonGraphSONJavaTranslator.java
@@ -19,16 +19,17 @@
package org.apache.tinkerpop.gremlin.python.jsr223;
+import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
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.strategy.verification.VerificationException;
import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
-import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONReader;
import org.apache.tinkerpop.gremlin.util.ScriptEngineCache;
+import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import java.io.ByteArrayInputStream;
@@ -74,10 +75,11 @@ public class PythonGraphSONJavaTranslator<S extends TraversalSource, T extends T
try {
final ScriptEngine jythonEngine = ScriptEngineCache.get("jython");
- jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE)
- .put(this.pythonTranslator.getTraversalSource(), jythonEngine.eval("RemoteGraph(None).traversal()"));
- final String graphsonBytecode = jythonEngine.eval("GraphSONWriter.writeObject(" + this.pythonTranslator.translate(bytecode) + ")").toString();
- //System.out.println(graphsonBytecode + "!!!!");
+ final Bindings bindings = jythonEngine.createBindings();
+ bindings.putAll(jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE));
+ bindings.put(this.pythonTranslator.getTraversalSource(), jythonEngine.eval("RemoteGraph(None).traversal()"));
+ bindings.putAll(bytecode.getBindings());
+ final String graphsonBytecode = jythonEngine.eval("GraphSONWriter.writeObject(" + this.pythonTranslator.translate(bytecode) + ")", bindings).toString();
return this.javaTranslator.translate(this.reader.readObject(new ByteArrayInputStream(graphsonBytecode.getBytes()), Bytecode.class));
} catch (final Exception e) {
throw new IllegalArgumentException(e.getMessage(), e);
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java
index b40cbec..1318da0 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java
@@ -22,6 +22,7 @@ package org.apache.tinkerpop.gremlin.python.jsr223;
import org.apache.commons.configuration.Configuration;
import org.apache.tinkerpop.gremlin.AbstractGraphProvider;
import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
import org.apache.tinkerpop.gremlin.process.traversal.CoreTraversalTest;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionComputerTest;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionTest;
@@ -29,10 +30,10 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.PageRankTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategyProcessTest;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategyProcessTest;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategyProcessTest;
-import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerEdge;
@@ -161,7 +162,8 @@ public class PythonProvider extends AbstractGraphProvider {
} catch (final ScriptException e) {
throw new IllegalStateException(e.getMessage(), e);
}
- return graph.traversal().withTranslator(new PythonGraphSONJavaTranslator<>(new PythonTranslator("g", "__", IMPORT_STATICS), new JavaTranslator<>(graph.traversal(), __.class))); // the bypass translator will ensure that gremlin-groovy is ultimately used
+ final GraphTraversalSource g = graph.traversal();
+ return g.withStrategies(new TranslationStrategy(g, new PythonGraphSONJavaTranslator<>(new PythonTranslator("g", "__", IMPORT_STATICS), new JavaTranslator<>(graph.traversal(), __.class))));
}
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/RemoteGraphGroovyTranslatorProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/RemoteGraphGroovyTranslatorProvider.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/RemoteGraphGroovyTranslatorProvider.java
index 306f054..571cbb5 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/RemoteGraphGroovyTranslatorProvider.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/RemoteGraphGroovyTranslatorProvider.java
@@ -20,8 +20,8 @@
package org.apache.tinkerpop.gremlin.groovy.jsr223;
import org.apache.tinkerpop.gremlin.driver.remote.RemoteGraphProvider;
-import org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyTranslator;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
import org.apache.tinkerpop.gremlin.structure.Graph;
/**
@@ -31,6 +31,7 @@ public class RemoteGraphGroovyTranslatorProvider extends RemoteGraphProvider {
@Override
public GraphTraversalSource traversal(final Graph graph) {
- return graph.traversal().withTranslator(GroovyTranslator.of("g","__"));
+ final GraphTraversalSource g = graph.traversal();
+ return g.withStrategies(new TranslationStrategy(g, GroovyTranslator.of("g", "__")));
}
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
index 2c404b3..63c6e68 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
@@ -86,7 +86,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffect
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StoreTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SubgraphTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.TreeTest;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategyProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategyProcessTest;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategyProcessTest;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategyProcessTest;
import org.apache.tinkerpop.gremlin.structure.Graph;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
index 3bd485a..c574601 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
@@ -80,7 +80,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffect
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StoreTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SubgraphTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.TreeTest;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategyProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategyProcessTest;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategyProcessTest;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategyProcessTest;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategyProcessTest;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategyProcessTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategyProcessTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategyProcessTest.java
deleted file mode 100644
index 3234833..0000000
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategyProcessTest.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.tinkerpop.gremlin.process.traversal.strategy.creation;
-
-import org.apache.tinkerpop.gremlin.LoadGraphWith;
-import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
-import static org.junit.Assert.assertEquals;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class TranslationStrategyProcessTest extends AbstractGremlinProcessTest {
- private static final Logger logger = LoggerFactory.getLogger(TranslationStrategyProcessTest.class);
-
- @Test
- @LoadGraphWith(MODERN)
- public void shouldNotHaveAnonymousTraversalMixups() throws Exception {
- if (!g.getStrategies().getStrategy(TranslationStrategy.class).isPresent()) {
- logger.debug("No " + TranslationStrategy.class.getSimpleName() + " is registered and thus, skipping test.");
- return;
- }
-
- final GraphTraversalSource a = g;
- final GraphTraversalSource b = g.withoutStrategies(TranslationStrategy.class);
-
- assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent();
- assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent();
-
- assertEquals(6l, a.V().out().count().next().longValue());
- assertEquals(6l, b.V().out().count().next().longValue());
-
- assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent();
- assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent();
-
- assertEquals(2l, a.V().repeat(__.out()).times(2).count().next().longValue());
- assertEquals(2l, b.V().repeat(__.out()).times(2).count().next().longValue());
-
- assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent();
- assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent();
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
new file mode 100644
index 0000000..b7e5dac
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
+
+import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine;
+import org.apache.tinkerpop.gremlin.jsr223.SingleGremlinScriptEngineManager;
+import org.apache.tinkerpop.gremlin.process.remote.RemoteGraph;
+import org.apache.tinkerpop.gremlin.process.remote.traversal.strategy.decoration.RemoteStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+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.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+
+import javax.script.Bindings;
+import javax.script.ScriptContext;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class TranslationStrategy extends AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
+
+ private final TraversalSource traversalSource;
+ private final Translator translator;
+
+ private static final Set<Class<? extends DecorationStrategy>> POSTS = new HashSet<>(Arrays.asList(
+ ConnectiveStrategy.class,
+ ElementIdStrategy.class,
+ EventStrategy.class,
+ HaltedTraverserStrategy.class,
+ PartitionStrategy.class,
+ RequirementsStrategy.class,
+ SackStrategy.class,
+ SideEffectStrategy.class,
+ SubgraphStrategy.class,
+ RemoteStrategy.class));
+
+ public TranslationStrategy(final TraversalSource traversalSource, final Translator translator) {
+ this.traversalSource = traversalSource;
+ this.translator = translator;
+ }
+
+ @Override
+ public void apply(final Traversal.Admin<?, ?> traversal) {
+ if (!(traversal.getParent() instanceof EmptyStep))
+ return;
+
+ // if the graph is RemoteGraph, RemoteStrategy will send the traversal
+ if (traversal.getGraph().isPresent() && traversal.getGraph().get() instanceof RemoteGraph)
+ return;
+
+ final Traversal.Admin<?, ?> translatedTraversal;
+ ////////////////
+ if (this.translator instanceof Translator.StepTranslator) {
+ // reflection based translation
+ translatedTraversal = (Traversal.Admin<?, ?>) this.translator.translate(traversal.getBytecode());
+ } else if (this.translator instanceof Translator.ScriptTranslator) {
+ try {
+ // script based translation
+ final GremlinScriptEngine scriptEngine = SingleGremlinScriptEngineManager.get(this.translator.getTargetLanguage());
+ final Bindings bindings = scriptEngine.createBindings();
+ bindings.putAll(scriptEngine.getContext().getBindings(ScriptContext.ENGINE_SCOPE));
+ bindings.put(this.translator.getTraversalSource().toString(), this.traversalSource);
+ translatedTraversal = (Traversal.Admin<?, ?>) scriptEngine.eval(traversal.getBytecode(), bindings);
+ } catch (final Exception e) {
+ throw new IllegalArgumentException(e.getMessage(), e);
+ }
+ } else {
+ throw new IllegalArgumentException("TranslationStrategy does not know how to process the provided translator type: " + this.translator.getClass().getSimpleName());
+ }
+ ////////////////
+ assert !translatedTraversal.isLocked();
+ assert !traversal.isLocked();
+ traversal.setSideEffects(translatedTraversal.getSideEffects());
+ TraversalHelper.removeAllSteps(traversal);
+ TraversalHelper.removeToTraversal((Step) translatedTraversal.getStartStep(), EmptyStep.instance(), traversal);
+ }
+
+
+ @Override
+ public Set<Class<? extends DecorationStrategy>> applyPost() {
+ return POSTS;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategyProcessTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategyProcessTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategyProcessTest.java
new file mode 100644
index 0000000..a280a9c
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategyProcessTest.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class TranslationStrategyProcessTest extends AbstractGremlinProcessTest {
+ private static final Logger logger = LoggerFactory.getLogger(TranslationStrategyProcessTest.class);
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void shouldNotHaveAnonymousTraversalMixups() throws Exception {
+ if (!g.getStrategies().getStrategy(TranslationStrategy.class).isPresent()) {
+ logger.debug("No " + TranslationStrategy.class.getSimpleName() + " is registered and thus, skipping test.");
+ return;
+ }
+
+ final GraphTraversalSource a = g;
+ final GraphTraversalSource b = g.withoutStrategies(TranslationStrategy.class);
+
+ assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent();
+ assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent();
+
+ assertEquals(6l, a.V().out().count().next().longValue());
+ assertEquals(6l, b.V().out().count().next().longValue());
+
+ assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent();
+ assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent();
+
+ assertEquals(2l, a.V().repeat(__.out()).times(2).count().next().longValue());
+ assertEquals(2l, b.V().repeat(__.out()).times(2).count().next().longValue());
+
+ assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent();
+ assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent();
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/groovy/jsr223/TinkerGraphGroovyTranslatorProvider.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/groovy/jsr223/TinkerGraphGroovyTranslatorProvider.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/groovy/jsr223/TinkerGraphGroovyTranslatorProvider.java
index 0dc9ea5..9f1cf52 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/groovy/jsr223/TinkerGraphGroovyTranslatorProvider.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/groovy/jsr223/TinkerGraphGroovyTranslatorProvider.java
@@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionCompu
import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionTest;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategyProcessTest;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.tinkergraph.TinkerGraphProvider;
@@ -70,7 +71,9 @@ public class TinkerGraphGroovyTranslatorProvider extends TinkerGraphProvider {
if ((Boolean) graph.configuration().getProperty("skipTest"))
return graph.traversal();
//throw new VerificationException("This test current does not work with Gremlin-Python", EmptyTraversal.instance());
- else
- return graph.traversal().withTranslator(GroovyTranslator.of("g","__"));
+ else {
+ final GraphTraversalSource g = graph.traversal();
+ return g.withStrategies(new TranslationStrategy(g, GroovyTranslator.of("g", "__")));
+ }
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/jsr223/TinkerGraphJavaTranslatorProvider.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/jsr223/TinkerGraphJavaTranslatorProvider.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/jsr223/TinkerGraphJavaTranslatorProvider.java
index 18dabaa..7bdcaf5 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/jsr223/TinkerGraphJavaTranslatorProvider.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/jsr223/TinkerGraphJavaTranslatorProvider.java
@@ -20,13 +20,14 @@
package org.apache.tinkerpop.gremlin.tinkergraph.process.jsr223;
import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionComputerTest;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionTest;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategyProcessTest;
-import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.tinkergraph.TinkerGraphProvider;
@@ -73,7 +74,7 @@ public class TinkerGraphJavaTranslatorProvider extends TinkerGraphProvider {
//throw new VerificationException("This test current does not work with Gremlin-Python", EmptyTraversal.instance());
else {
final GraphTraversalSource g = graph.traversal();
- return g.withTranslator(JavaTranslator.of(g,__.class));
+ return g.withStrategies(new TranslationStrategy(g, JavaTranslator.of(g, __.class)));
}
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f7e2945a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
index b85b8dc..3248efd 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
@@ -20,6 +20,7 @@
package org.apache.tinkerpop.gremlin.tinkergraph.structure.io.graphson;
import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
import org.apache.tinkerpop.gremlin.process.traversal.CoreTraversalTest;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionComputerTest;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionTest;
@@ -27,10 +28,10 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.PageRankTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategyProcessTest;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategyProcessTest;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategyProcessTest;
-import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.tinkergraph.TinkerGraphProvider;
@@ -87,7 +88,7 @@ public class TinkerGraphGraphSONTranslatorProvider extends TinkerGraphProvider {
//throw new VerificationException("This test current does not work with Gremlin-Python", EmptyTraversal.instance());
else {
final GraphTraversalSource g = graph.traversal();
- return g.withTranslator(new GraphSONTranslator<>(JavaTranslator.of(g, __.class)));
+ return g.withStrategies(new TranslationStrategy(g, new GraphSONTranslator<>(JavaTranslator.of(g, __.class))));
}
}
}
\ No newline at end of file