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/28 23:25:26 UTC

[1/2] tinkerpop git commit: finalized parameters. minor nothing.

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1278 d8365977d -> 7000fbcbc


finalized parameters. minor nothing.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/ebbf6559
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/ebbf6559
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/ebbf6559

Branch: refs/heads/TINKERPOP-1278
Commit: ebbf65595fc970aca0076116f7582dbae94b1d08
Parents: d836597
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Jun 28 07:14:45 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Jun 28 07:14:45 2016 -0600

----------------------------------------------------------------------
 .../jsr223/GremlinJythonScriptEngine.java       | 22 ++++++++++----------
 1 file changed, 11 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ebbf6559/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/GremlinJythonScriptEngine.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/GremlinJythonScriptEngine.java b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/GremlinJythonScriptEngine.java
index 4c94049..c3251b5 100644
--- a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/GremlinJythonScriptEngine.java
+++ b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/GremlinJythonScriptEngine.java
@@ -115,54 +115,54 @@ public class GremlinJythonScriptEngine implements ScriptEngine {
     }
 
     @Override
-    public Object eval(String script, ScriptContext context) throws ScriptException {
+    public Object eval(final String script, final ScriptContext context) throws ScriptException {
         return this.pyScriptEngine.eval(script, context);
     }
 
     @Override
-    public Object eval(Reader reader, ScriptContext context) throws ScriptException {
+    public Object eval(final Reader reader, final ScriptContext context) throws ScriptException {
         return this.pyScriptEngine.eval(reader, context);
     }
 
     @Override
-    public Object eval(String script) throws ScriptException {
+    public Object eval(final String script) throws ScriptException {
         return this.pyScriptEngine.eval(script);
     }
 
     @Override
-    public Object eval(Reader reader) throws ScriptException {
+    public Object eval(final Reader reader) throws ScriptException {
         return this.pyScriptEngine.eval(reader);
     }
 
     @Override
-    public Object eval(String script, Bindings n) throws ScriptException {
+    public Object eval(final String script, final Bindings n) throws ScriptException {
         this.pyScriptEngine.getBindings(ScriptContext.ENGINE_SCOPE).putAll(n); // TODO: groovy and jython act different
         return this.pyScriptEngine.eval(script);
     }
 
     @Override
-    public Object eval(Reader reader, Bindings n) throws ScriptException {
+    public Object eval(final Reader reader, final Bindings n) throws ScriptException {
         this.pyScriptEngine.getBindings(ScriptContext.ENGINE_SCOPE).putAll(n); // TODO: groovy and jython act different
         return this.pyScriptEngine.eval(reader);
     }
 
     @Override
-    public void put(String key, Object value) {
+    public void put(final String key, final Object value) {
         this.pyScriptEngine.put(key, value);
     }
 
     @Override
-    public Object get(String key) {
+    public Object get(final String key) {
         return this.pyScriptEngine.get(key);
     }
 
     @Override
-    public Bindings getBindings(int scope) {
+    public Bindings getBindings(final int scope) {
         return this.pyScriptEngine.getBindings(scope);
     }
 
     @Override
-    public void setBindings(Bindings bindings, int scope) {
+    public void setBindings(final Bindings bindings, final int scope) {
         this.pyScriptEngine.setBindings(bindings, scope);
     }
 
@@ -177,7 +177,7 @@ public class GremlinJythonScriptEngine implements ScriptEngine {
     }
 
     @Override
-    public void setContext(ScriptContext context) {
+    public void setContext(final ScriptContext context) {
         this.pyScriptEngine.setContext(context);
     }
 


[2/2] tinkerpop git commit: StepTranslator is being created. This is a half-committ as this is tedious work that I don't want to lose.

Posted by ok...@apache.org.
StepTranslator is being created. This is a half-committ as this is tedious work that I don't want to lose.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/7000fbcb
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/7000fbcb
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/7000fbcb

Branch: refs/heads/TINKERPOP-1278
Commit: 7000fbcbca3bda9bfd412e281d403c0c694dda73
Parents: ebbf655
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Jun 28 17:25:17 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Jun 28 17:25:17 2016 -0600

----------------------------------------------------------------------
 .../gremlin/process/traversal/Translator.java   |  50 ++++
 .../process/traversal/TraversalSource.java      |   1 -
 .../dsl/graph/GraphTraversalSource.java         |   2 +-
 .../traversal/dsl/graph/StepTranslator.java     | 243 +++++++++++++++++++
 .../process/traversal/dsl/graph/Symbols.java    |  73 ++++++
 .../strategy/creation/TranslationStrategy.java  |   2 +-
 .../process/traversal/util/ScriptTraversal.java |   1 +
 .../process/traversal/util/Translator.java      |  51 ----
 .../gremlin/structure/util/StringFactory.java   |   2 +-
 .../tinkerpop/gremlin/util/CoreImports.java     |   2 +-
 .../java/translator/GroovyTranslator.java       |   2 +-
 .../java/translator/PythonTranslator.java       |   2 +-
 .../groovy/PythonGroovyTranslator.java          |   2 +-
 .../jython/PythonJythonTranslator.java          |   2 +-
 14 files changed, 375 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7000fbcb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Translator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Translator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Translator.java
new file mode 100644
index 0000000..c7e8b5d
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Translator.java
@@ -0,0 +1,50 @@
+/*
+ *  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;
+
+import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public interface Translator extends Cloneable {
+
+    public String getAlias();
+
+    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();
+
+    public String getSourceLanguage();
+
+    public String getTargetLanguage();
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7000fbcb/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 2321534..9c7d081 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
@@ -24,7 +24,6 @@ import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decorati
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SackStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SideEffectStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7000fbcb/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 ab1e34d..cbc51d2 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
@@ -32,7 +32,7 @@ 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;
+import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7000fbcb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/StepTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/StepTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/StepTranslator.java
new file mode 100644
index 0000000..7fbc084
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/StepTranslator.java
@@ -0,0 +1,243 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.process.traversal.dsl.graph;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Pop;
+import org.apache.tinkerpop.gremlin.process.traversal.Scope;
+import org.apache.tinkerpop.gremlin.process.traversal.Translator;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.lambda.ColumnTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.ConnectiveStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.ConstantStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountGlobalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountLocalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.EdgeOtherVertexStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.EdgeVertexStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.FoldStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.IdStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.LabelStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.LambdaFlatMapStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.LambdaMapStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.LoopsStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderLocalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.PathStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProjectStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertyKeyStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertyMapStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertyValueStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.SackStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectOneStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.SumGlobalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.SumLocalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalFlatMapStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalMapStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.UnfoldStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep;
+import org.apache.tinkerpop.gremlin.structure.Column;
+import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.PropertyType;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+
+import java.util.function.BiFunction;
+import java.util.function.Function;
+import java.util.function.Supplier;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class StepTranslator implements Translator {
+    @Override
+    public String getAlias() {
+        return null;
+    }
+
+    @Override
+    public void addStep(final Traversal.Admin<?, ?> traversal, final String stepName, final Object... arguments) {
+        switch (stepName) {
+            case Symbols.map:
+                traversal.addStep(arguments[0] instanceof Traversal ? new TraversalMapStep<>(traversal, (Traversal) arguments[0]) : new LambdaMapStep<>(traversal, (Function) arguments[0]));
+                return;
+            case Symbols.flatMap:
+                traversal.addStep(arguments[0] instanceof Traversal ? new TraversalFlatMapStep<>(traversal, (Traversal) arguments[0]) : new LambdaFlatMapStep<>(traversal, (Function) arguments[0]));
+                return;
+            case Symbols.id:
+                traversal.addStep(new IdStep<>(traversal));
+                return;
+            case Symbols.label:
+                traversal.addStep(new LabelStep<>(traversal));
+                return;
+            case Symbols.identity:
+                traversal.addStep(new IdentityStep<>(traversal));
+                return;
+            case Symbols.constant:
+                traversal.addStep(new ConstantStep<>(traversal, arguments[0]));
+                return;
+            case Symbols.V:
+                traversal.addStep(new GraphStep<>(traversal, Vertex.class, false, arguments));
+                return;
+            case Symbols.to:
+                traversal.addStep(new VertexStep<>(traversal, Vertex.class, (Direction) arguments[0], (String[]) arguments[1]));
+                return;
+            case Symbols.out:
+                traversal.addStep(new VertexStep<>(traversal, Vertex.class, Direction.OUT, (String[]) arguments[0]));
+                return;
+            case Symbols.in:
+                traversal.addStep(new VertexStep<>(traversal, Vertex.class, Direction.IN, (String[]) arguments[0]));
+                return;
+            case Symbols.both:
+                traversal.addStep(new VertexStep<>(traversal, Vertex.class, Direction.BOTH, (String[]) arguments[0]));
+                return;
+            case Symbols.toE:
+                traversal.addStep(new VertexStep<>(traversal, Edge.class, (Direction) arguments[0], (String[]) arguments[1]));
+                return;
+            case Symbols.outE:
+                traversal.addStep(new VertexStep<>(traversal, Edge.class, Direction.OUT, (String[]) arguments[0]));
+                return;
+            case Symbols.inE:
+                traversal.addStep(new VertexStep<>(traversal, Edge.class, Direction.IN, (String[]) arguments[0]));
+                return;
+            case Symbols.bothE:
+                traversal.addStep(new VertexStep<>(traversal, Edge.class, Direction.BOTH, (String[]) arguments[0]));
+                return;
+            case Symbols.toV:
+                traversal.addStep(new EdgeVertexStep(traversal, (Direction) arguments[0]));
+                return;
+            case Symbols.outV:
+                traversal.addStep(new EdgeVertexStep(traversal, Direction.OUT));
+                return;
+            case Symbols.inV:
+                traversal.addStep(new EdgeVertexStep(traversal, Direction.IN));
+                return;
+            case Symbols.bothV:
+                traversal.addStep(new EdgeVertexStep(traversal, Direction.BOTH));
+                return;
+            case Symbols.otherV:
+                traversal.addStep(new EdgeOtherVertexStep(traversal));
+                return;
+            case Symbols.order:
+                traversal.addStep(arguments.length == 0 || Scope.global == arguments[0] ? new OrderGlobalStep<>(traversal) : new OrderLocalStep<>(traversal));
+                return;
+            case Symbols.properties:
+                traversal.addStep(new PropertiesStep<>(traversal, PropertyType.PROPERTY, (String[]) arguments));
+                return;
+            case Symbols.values:
+                traversal.addStep(new PropertiesStep<>(traversal, PropertyType.VALUE, (String[]) arguments));
+                return;
+            case Symbols.propertyMap:
+                traversal.addStep(arguments[0] instanceof Boolean ? new PropertyMapStep<>(traversal, (boolean) arguments[0], PropertyType.PROPERTY, (String[]) arguments[1]) : new PropertyMapStep<>(traversal, false, PropertyType.PROPERTY, (String[]) arguments[0]));
+                return;
+            case Symbols.valueMap:
+                traversal.addStep(arguments[0] instanceof Boolean ? new PropertyMapStep<>(traversal, (boolean) arguments[0], PropertyType.VALUE, (String[]) arguments[1]) : new PropertyMapStep<>(traversal, false, PropertyType.VALUE, (String[]) arguments[0]));
+                return;
+            case Symbols.select:
+                if (arguments[0] instanceof Column)
+                    traversal.addStep(new TraversalMapStep<>(traversal, new ColumnTraversal((Column) arguments[0])));
+                else if (arguments[0] instanceof Pop)
+                    if (arguments[1] instanceof String)
+                        traversal.addStep(new SelectOneStep<>(traversal, (Pop) arguments[0], (String) arguments[1]));
+                    else {
+                        final String[] selectKeys = new String[((String[]) arguments[3]).length + 2];
+                        selectKeys[0] = (String) arguments[1];
+                        selectKeys[1] = (String) arguments[2];
+                        System.arraycopy(arguments[3], 0, selectKeys, 2, ((String[]) arguments[3]).length);
+                        traversal.addStep(new SelectStep<>(traversal, (Pop) arguments[0], selectKeys));
+                    }
+                else {
+                    if (arguments[0] instanceof String)
+                        traversal.addStep(new SelectOneStep<>(traversal, null, (String) arguments[0]));
+                    else {
+                        final String[] selectKeys = new String[((String[]) arguments[2]).length + 2];
+                        selectKeys[0] = (String) arguments[0];
+                        selectKeys[1] = (String) arguments[1];
+                        System.arraycopy(arguments[2], 0, selectKeys, 2, ((String[]) arguments[2]).length);
+                        traversal.addStep(new SelectStep<>(traversal, null, selectKeys));
+                    }
+                }
+                return;
+            case Symbols.key:
+                traversal.addStep(new PropertyKeyStep(traversal));
+                return;
+            case Symbols.value:
+                traversal.addStep(new PropertyValueStep<>(traversal));
+                return;
+            case Symbols.path:
+                traversal.addStep(new PathStep<>(traversal));
+                return;
+            case Symbols.match:
+                traversal.addStep(new MatchStep<>(traversal, ConnectiveStep.Connective.AND, (Traversal[]) arguments[0]));
+                return;
+            case Symbols.sack:
+                traversal.addStep(new SackStep<>(traversal));
+                return;
+            case Symbols.loops:
+                traversal.addStep(new LoopsStep<>(traversal));
+                return;
+            case Symbols.project:
+                final String[] projectKeys = new String[((String[]) arguments[1]).length + 1];
+                projectKeys[0] = (String) arguments[0];
+                System.arraycopy((arguments[1]), 0, projectKeys, 1, ((String[]) arguments[1]).length);
+                traversal.addStep(new ProjectStep<>(traversal, projectKeys));
+                return;
+            case Symbols.unfold:
+                traversal.addStep(new UnfoldStep<>(traversal));
+            case Symbols.fold:
+                traversal.addStep(0 == arguments.length ? new FoldStep<>(traversal) : new FoldStep<>(traversal, (Supplier) arguments[0], (BiFunction) arguments[1]));
+            case Symbols.count:
+                traversal.addStep(0 == arguments.length || Scope.global == arguments[0] ? new CountGlobalStep<>(traversal) : new CountLocalStep<>(traversal));
+            case Symbols.sum:
+                traversal.addStep(0 == arguments.length || Scope.global == arguments[0] ? new SumGlobalStep<>(traversal) : new SumLocalStep<>(traversal));
+            default:
+                throw new IllegalArgumentException("The provided step name is not supported by " + StepTranslator.class.getSimpleName() + ": " + stepName);
+
+        }
+    }
+
+    @Override
+    public Translator getAnonymousTraversalTranslator() {
+        return null;
+    }
+
+    @Override
+    public String getTraversalScript() {
+        return null;
+    }
+
+    @Override
+    public Translator clone() {
+        return this;
+    }
+
+    @Override
+    public String getSourceLanguage() {
+        return "gremlin-java";
+    }
+
+    @Override
+    public String getTargetLanguage() {
+        return "java";
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7000fbcb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/Symbols.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/Symbols.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/Symbols.java
new file mode 100644
index 0000000..45b97a0
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/Symbols.java
@@ -0,0 +1,73 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.process.traversal.dsl.graph;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class Symbols {
+
+    private Symbols() {
+        // static fields only
+    }
+
+    public static final String map = "map";
+    public static final String flatMap = "flatMap";
+    public static final String id = "id";
+    public static final String label = "label";
+    public static final String identity = "identity";
+    public static final String constant = "constant";
+    public static final String V = "V";
+    public static final String to = "to";
+    public static final String out = "out";
+    public static final String in = "in";
+    public static final String both = "both";
+    public static final String toE = "toE";
+    public static final String outE = "outE";
+    public static final String inE = "inE";
+    public static final String bothE = "bothE";
+    public static final String toV = "toV";
+    public static final String outV = "outV";
+    public static final String inV = "inV";
+    public static final String bothV = "bothV";
+    public static final String otherV = "otherV";
+    public static final String order = "order";
+    public static final String properties = "properties";
+    public static final String values = "values";
+    public static final String propertyMap = "propertyMap";
+    public static final String valueMap = "valueMap";
+    public static final String select = "select";
+    @Deprecated
+    public static final String mapValues = "mapValues";
+    @Deprecated
+    public static final String mapKeys = "mapKeys";
+    public static final String key = "key";
+    public static final String value = "value";
+    public static final String from = "from";
+    public static final String path = "path";
+    public static final String match = "match";
+    public static final String sack = "sack";
+    public static final String loops = "loops";
+    public static final String project = "project";
+    public static final String unfold = "unfold";
+    public static final String fold = "fold";
+    public static final String count = "count";
+    public static final String sum = "sum";
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7000fbcb/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 3da4327..5ce712c 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
@@ -26,7 +26,7 @@ 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.Translator;
+import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.util.ScriptEngineCache;
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7000fbcb/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 fc1c5df..73e1e2a 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,6 +20,7 @@
 package org.apache.tinkerpop.gremlin.process.traversal.util;
 
 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;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7000fbcb/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
deleted file mode 100644
index 83fb242..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java
+++ /dev/null
@@ -1,51 +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.util;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public interface Translator extends Cloneable {
-
-    public String getAlias();
-
-    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();
-
-    public String getSourceLanguage();
-
-    public String getTargetLanguage();
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7000fbcb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java
index 393bec9..c0bf933 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java
@@ -31,7 +31,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.Translator;
+import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalRing;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7000fbcb/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 b1bf59e..81a680f 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
@@ -64,7 +64,7 @@ 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.util.Translator;
+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;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7000fbcb/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/java/translator/GroovyTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/java/translator/GroovyTranslator.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/java/translator/GroovyTranslator.java
index ead9df1..cc29516 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/java/translator/GroovyTranslator.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/java/translator/GroovyTranslator.java
@@ -28,7 +28,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.Veri
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
-import org.apache.tinkerpop.gremlin.process.traversal.util.Translator;
+import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TranslatorHelper;
 import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7000fbcb/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/java/translator/PythonTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/java/translator/PythonTranslator.java b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/java/translator/PythonTranslator.java
index 02240b0..bcfbf2b 100644
--- a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/java/translator/PythonTranslator.java
+++ b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/java/translator/PythonTranslator.java
@@ -30,7 +30,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.Veri
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
-import org.apache.tinkerpop.gremlin.process.traversal.util.Translator;
+import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TranslatorHelper;
 import org.apache.tinkerpop.gremlin.python.util.SymbolHelper;
 import org.apache.tinkerpop.gremlin.structure.Element;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7000fbcb/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/java/translator/groovy/PythonGroovyTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/java/translator/groovy/PythonGroovyTranslator.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/java/translator/groovy/PythonGroovyTranslator.java
index 97905f7..c2070cb 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/java/translator/groovy/PythonGroovyTranslator.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/java/translator/groovy/PythonGroovyTranslator.java
@@ -21,7 +21,7 @@ package org.apache.tinkerpop.gremlin.java.translator.groovy;
 
 import org.apache.tinkerpop.gremlin.java.translator.PythonTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.util.Translator;
+import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.ScriptEngineCache;
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7000fbcb/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/java/translator/jython/PythonJythonTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/java/translator/jython/PythonJythonTranslator.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/java/translator/jython/PythonJythonTranslator.java
index d690687..2e59432 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/java/translator/jython/PythonJythonTranslator.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/java/translator/jython/PythonJythonTranslator.java
@@ -21,7 +21,7 @@ package org.apache.tinkerpop.gremlin.java.translator.jython;
 
 import org.apache.tinkerpop.gremlin.java.translator.PythonTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.util.Translator;
+import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.ScriptEngineCache;