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/06/15 18:26:10 UTC
tinkerpop git commit: TranslationStrategy now takes both a __.class
and a TraversalSource. Thus,
it is completely generic and can be used by any DSL (beyond GraphTraversal).
Repository: tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1278 155abef4a -> 46fad0383
TranslationStrategy now takes both a __.class and a TraversalSource. Thus, it is completely generic and can be used by any DSL (beyond GraphTraversal).
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/46fad038
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/46fad038
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/46fad038
Branch: refs/heads/TINKERPOP-1278
Commit: 46fad0383d5bae0df1fa387cd2018208cdb55d4c
Parents: 155abef
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Jun 15 12:26:06 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Jun 15 12:26:06 2016 -0600
----------------------------------------------------------------------
.../process/traversal/TraversalSource.java | 2 +-
.../dsl/graph/GraphTraversalSource.java | 2 +-
.../strategy/creation/TranslationStrategy.java | 49 +++++++++++---------
.../process/traversal/util/Translator.java | 2 +
4 files changed, 32 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/46fad038/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 972dcbe..2f96733 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
@@ -121,7 +121,7 @@ public interface TraversalSource extends Cloneable {
}
public default TraversalSource withTranslator(final Translator translator) {
- return this.withStrategies(new TranslationStrategy(translator, null));
+ return this.withStrategies(new TranslationStrategy(translator, this.clone(), null));
}
/**
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/46fad038/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 3a36610..ab1e34d 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
@@ -99,7 +99,7 @@ public class GraphTraversalSource implements TraversalSource {
@Override
public GraphTraversalSource withTranslator(final Translator translator) {
- return this.withStrategies(new TranslationStrategy(translator, __.class));
+ return this.withStrategies(new TranslationStrategy(translator, this.clone(), __.class));
}
@Override
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/46fad038/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 573e5aa..a752963 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
@@ -47,10 +47,13 @@ import java.util.function.Function;
public class TranslationStrategy extends AbstractTraversalStrategy<TraversalStrategy.CreationStrategy> implements TraversalStrategy.CreationStrategy {
private final Translator translator;
+ private final TraversalSource traversalSource;
private final Class anonymousTraversalClass;
- public TranslationStrategy(final Translator translator, final Class anonymousTraversalClass) {
+
+ public TranslationStrategy(final Translator translator, final TraversalSource traversalSource, final Class anonymousTraversalClass) {
this.translator = translator;
+ this.traversalSource = traversalSource;
this.anonymousTraversalClass = anonymousTraversalClass;
this.createAnonymousTraversalFunction();
}
@@ -62,15 +65,14 @@ public class TranslationStrategy extends AbstractTraversalStrategy<TraversalStra
try {
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));
+ bindings.put(this.translator.getAlias(), this.traversalSource);
Traversal.Admin<?, ?> translatedTraversal = (Traversal.Admin<?, ?>) engine.eval(traversalScriptString, bindings);
assert !translatedTraversal.isLocked();
assert !traversal.isLocked();
traversal.setSideEffects(translatedTraversal.getSideEffects());
- traversal.setStrategies(strategies);
+ traversal.setStrategies(traversal.getStrategies().clone().removeStrategies(TranslationStrategy.class));
TraversalHelper.removeAllSteps(traversal);
TraversalHelper.removeToTraversal((Step) translatedTraversal.getStartStep(), EmptyStep.instance(), traversal);
} catch (final Exception e) {
@@ -80,7 +82,7 @@ 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);
+ final TranslationStrategy clone = new TranslationStrategy(this.translator.clone(), this.traversalSource, this.anonymousTraversalClass);
traversal.setStrategies(traversal.getStrategies().clone().addStrategies(clone));
clone.createAnonymousTraversalFunction();
clone.translator.addSpawnStep(traversal, stepName, arguments);
@@ -93,7 +95,7 @@ public class TranslationStrategy extends AbstractTraversalStrategy<TraversalStra
@Override
public void addSource(final TraversalSource traversalSource, final String sourceName, final Object... arguments) {
- final TranslationStrategy clone = new TranslationStrategy(this.translator.clone(), this.anonymousTraversalClass);
+ final TranslationStrategy clone = new TranslationStrategy(this.translator.clone(), this.traversalSource, this.anonymousTraversalClass);
traversalSource.getStrategies().addStrategies(clone);
clone.createAnonymousTraversalFunction();
clone.translator.addSource(traversalSource, sourceName, arguments);
@@ -104,28 +106,33 @@ public class TranslationStrategy extends AbstractTraversalStrategy<TraversalStra
}
private void createAnonymousTraversalFunction() {
- final Function<? extends Traversal.Admin, ? extends Traversal.Admin> function = traversal -> {
+ if (null != this.anonymousTraversalClass) {
+ final Function<? extends Traversal.Admin, ? extends Traversal.Admin> function = traversal -> {
+ try {
+ traversal.setStrategies(traversal.getStrategies().clone().addStrategies(
+ new TranslationStrategy(this.translator.getAnonymousTraversalTranslator(),
+ this.traversalSource,
+ this.anonymousTraversalClass)));
+ return traversal;
+ } catch (final Exception e) {
+ throw new IllegalStateException(e.getMessage(), e);
+ }
+ };
try {
- traversal.setStrategies(traversal.getStrategies().clone().addStrategies(
- new TranslationStrategy(this.translator.getAnonymousTraversalTranslator(),
- this.anonymousTraversalClass)));
- return traversal;
- } catch (final Exception e) {
+ this.anonymousTraversalClass.getMethod(TraversalSource.SET_ANONYMOUS_TRAVERSAL_FUNCTION, Function.class).invoke(null, function);
+ } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException 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);
+ if (null != this.anonymousTraversalClass) {
+ 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/46fad038/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 033b44b..a8f2169 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
@@ -21,6 +21,8 @@ package org.apache.tinkerpop.gremlin.process.traversal.util;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
+import org.apache.tinkerpop.gremlin.structure.Graph;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)