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)