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/13 19:37:49 UTC
[31/42] tinkerpop git commit: nada.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f3364102/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
new file mode 100644
index 0000000..b712270
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java
@@ -0,0 +1,95 @@
+/*
+ * 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.process.traversal.Step;
+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.process.traversal.TraversalStrategy;
+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.step.util.EmptyStep;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+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.util.empty.EmptyGraph;
+import org.apache.tinkerpop.gremlin.util.ScriptEngineCache;
+
+import javax.script.Bindings;
+import javax.script.ScriptEngine;
+import javax.script.SimpleBindings;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class TranslationStrategy extends AbstractTraversalStrategy<TraversalStrategy.CreationStrategy> implements TraversalStrategy.CreationStrategy {
+
+ private Translator<?> translator;
+
+ public TranslationStrategy(final Translator<?> translator) {
+ this.translator = translator;
+ if (!this.translator.getAlias().equals("__"))
+ __.setAnonymousGraphTraversalSupplier(() -> (GraphTraversal) translator.__());
+ }
+
+ @Override
+ public void apply(final Traversal.Admin<?, ?> traversal) {
+ if (!(traversal.getParent() instanceof EmptyStep))
+ return;
+ try {
+ final String traversalScriptString = this.translator.getTraversalScript();
+ System.out.println(traversalScriptString + "!!!");
+ __.setAnonymousGraphTraversalSupplier(null);
+ ScriptEngine engine = ScriptEngineCache.get(this.translator.getScriptEngine());
+ TraversalStrategies strategies = traversal.getStrategies().clone().removeStrategies(TranslationStrategy.class);
+ final Bindings bindings = new SimpleBindings();
+ bindings.put(this.translator.getAlias(), new GraphTraversalSource(traversal.getGraph().orElse(EmptyGraph.instance()), strategies));
+ Traversal.Admin<?, ?> translatedTraversal = (Traversal.Admin<?, ?>) engine.eval(traversalScriptString, bindings);
+ assert !translatedTraversal.isLocked();
+ assert !traversal.isLocked();
+ //traversal.setSideEffects(translatedTraversal.getSideEffects());
+ traversal.setStrategies(strategies);
+ TraversalHelper.removeAllSteps(traversal);
+ TraversalHelper.removeToTraversal((Step) translatedTraversal.getStartStep(), EmptyStep.instance(), traversal);
+ } catch (final Exception e) {
+ throw new IllegalArgumentException(e.getMessage(), e);
+ }
+ }
+
+ @Override
+ public void addStep(final Traversal.Admin<?, ?> traversal, final String stepName, final Object... arguments) {
+ this.translator.addStep(traversal, stepName, arguments);
+ }
+
+ @Override
+ public void addSource(final TraversalSource traversalSource, final String sourceName, final Object... arguments) {
+ final TranslationStrategy clone = new TranslationStrategy(this.translator.clone());
+ traversalSource.getStrategies().addStrategies(clone);
+ clone.translator.addSource(traversalSource, sourceName, arguments);
+ }
+
+ public Translator getTranslator() {
+ return this.translator;
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f3364102/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 e3438cb..cc9edb9 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
@@ -20,6 +20,7 @@
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)
@@ -30,10 +31,18 @@ public interface Translator<V extends Traversal> extends Cloneable {
public String getAlias();
- public void addStep(final String stepName, final Object... arguments);
+ public void addStep(final Traversal.Admin<?, ?> traversal, final String stepName, final Object... arguments);
+
+ public default void addSource(final TraversalSource traversalSource, final String sourceName, final Object... arguments) {
+ addStep(EmptyTraversal.instance(), sourceName, arguments);
+ }
+
+ public default void addSource(final String sourceName, final Object... arguments) {
+
+ }
+
+ public default void addStep(final String sourceName, final Object... arguments) {
- public default void addStrategy(final String strategyName, final Object... arguments) {
- this.addStep(strategyName, arguments);
}
public V __();
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f3364102/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
index 67e96b7..cd7576d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
@@ -22,6 +22,8 @@ import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.Traversa
import org.apache.tinkerpop.gremlin.process.traversal.Scope;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
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.lambda.ElementValueTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.lambda.TokenTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
@@ -563,4 +565,30 @@ public final class TraversalHelper {
}
return false;
}
+
+ public static void addStepToCreationStrategies(final Traversal.Admin<?, ?> traversal, final Object... arguments) {
+ final List<TraversalStrategy.CreationStrategy> strategies = traversal.getStrategies().getStrategies(TraversalStrategy.CreationStrategy.class);
+ if (!strategies.isEmpty()) {
+ final String stepName = Thread.currentThread().getStackTrace()[2].getMethodName();
+ for (final TraversalStrategy.CreationStrategy creationStrategy : strategies) {
+ creationStrategy.addStep(traversal, stepName, arguments);
+ }
+ }
+ }
+
+ public static void addSourceToCreationStrategies(final TraversalSource traversalSource, final Object... arguments) {
+ final List<TraversalStrategy.CreationStrategy> strategies = traversalSource.getStrategies().getStrategies(TraversalStrategy.CreationStrategy.class);
+ if (!strategies.isEmpty()) {
+ final String sourceName = Thread.currentThread().getStackTrace()[2].getMethodName();
+ for (final TraversalStrategy.CreationStrategy creationStrategy : strategies) {
+ creationStrategy.addSource(traversalSource, sourceName, arguments);
+ }
+ }
+ }
+
+ public static void removeAllSteps(final Traversal.Admin<?, ?> traversal) {
+ while (!traversal.getSteps().isEmpty()) {
+ traversal.removeStep(0);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f3364102/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
index 0e95d29..8b97570 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
@@ -186,10 +186,6 @@ public interface Graph extends AutoCloseable, Host {
return new GraphTraversalSource(this);
}
- public default GraphTraversalSource traversal(final Translator<GraphTraversal> translator) {
- return new ScriptGraphTraversalSource(this, translator);
- }
-
/**
* Get the {@link Vertex} objects in this graph with the provided vertex ids. If no ids are provided, get all
* vertices. Note that a vertex identifier does not need to correspond to the actual id used in the graph. It
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f3364102/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
index d48416a..3ffbb2b 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
@@ -30,7 +30,7 @@ public abstract class GroovySackTest {
public static class Traversals extends SackTest {
@Override
- public Traversal<Vertex, String> get_g_withSackXhellowX_V_outE_sackXassignX_byXlabelX_inV_sack() {
+ public Traversal<Vertex, String> get_g_withSackXhelloX_V_outE_sackXassignX_byXlabelX_inV_sack() {
new ScriptTraversal<>(g, "gremlin-groovy", "g.withSack('hello').V.outE.sack(assign).by(label).inV.sack")
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f3364102/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java
index 379c361..92dd699 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java
@@ -21,8 +21,12 @@ package org.apache.tinkerpop.gremlin.groovy;
import org.apache.tinkerpop.gremlin.process.traversal.P;
import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.script.ScriptGraphTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.lambda.AbstractLambdaTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
@@ -31,7 +35,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.Translator;
import org.apache.tinkerpop.gremlin.process.traversal.util.TranslatorHelper;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
import java.util.ArrayList;
import java.util.List;
@@ -42,12 +45,11 @@ import java.util.List;
public class GroovyTranslator implements Translator<GraphTraversal> {
private StringBuilder traversalScript;
- private final String alias;
+ private String alias;
public GroovyTranslator(final String alias) {
this.alias = alias;
this.traversalScript = new StringBuilder(this.alias);
-
}
@Override
@@ -61,7 +63,7 @@ public class GroovyTranslator implements Translator<GraphTraversal> {
}
@Override
- public void addStep(final String stepName, final Object... arguments) {
+ public void addStep(final Traversal.Admin<?, ?> traversal, final String stepName, final Object... arguments) {
final List<Object> objects = TranslatorHelper.flattenArguments(arguments);
if (objects.isEmpty())
this.traversalScript.append(".").append(stepName).append("()");
@@ -75,9 +77,16 @@ public class GroovyTranslator implements Translator<GraphTraversal> {
}
}
+ /*Override
+ public void addSource(final TraversalSource source, final String sourceName, final Object... arguments) {
+ source.getStrategies().toList().
+ }*/
+
@Override
public GraphTraversal __() {
- return new ScriptGraphTraversal(EmptyGraph.instance(), new GroovyTranslator("__"));
+ final GraphTraversal traversal = new DefaultGraphTraversal();
+ traversal.asAdmin().setStrategies(traversal.asAdmin().getStrategies().clone().addStrategies(new TranslationStrategy(new GroovyTranslator("__"))));
+ return traversal;
}
@Override
@@ -134,9 +143,13 @@ public class GroovyTranslator implements Translator<GraphTraversal> {
return ((Enum) object).getDeclaringClass().getSimpleName() + "." + object.toString();
else if (object instanceof Element)
return convertToString(((Element) object).id()); // hack
- else if (object instanceof ScriptGraphTraversal)
- return ((ScriptGraphTraversal) object).getTraversalScript();
- else
+ else if (object instanceof Traversal) {
+ final TranslationStrategy strategy = (TranslationStrategy) ((Traversal.Admin) object).getStrategies().toList()
+ .stream()
+ .filter(s -> s instanceof TranslationStrategy)
+ .findFirst().get();
+ return strategy.getTranslator().getTraversalScript();
+ } else
return null == object ? "null" : object.toString();
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f3364102/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
index 299bee2..1e44697 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
@@ -48,7 +48,7 @@ import static org.junit.Assert.assertTrue;
@RunWith(GremlinProcessRunner.class)
public abstract class SackTest extends AbstractGremlinProcessTest {
- public abstract Traversal<Vertex, String> get_g_withSackXhellowX_V_outE_sackXassignX_byXlabelX_inV_sack();
+ public abstract Traversal<Vertex, String> get_g_withSackXhelloX_V_outE_sackXassignX_byXlabelX_inV_sack();
public abstract Traversal<Vertex, Double> get_g_withSackX0X_V_outE_sackXsumX_byXweightX_inV_sack_sum();
@@ -70,8 +70,8 @@ public abstract class SackTest extends AbstractGremlinProcessTest {
@Test
@LoadGraphWith(MODERN)
- public void g_withSackXhellowX_V_outE_sackXassignX_byXlabelX_inV_sack() {
- final Traversal<Vertex, String> traversal = get_g_withSackXhellowX_V_outE_sackXassignX_byXlabelX_inV_sack();
+ public void g_withSackXhelloX_V_outE_sackXassignX_byXlabelX_inV_sack() {
+ final Traversal<Vertex, String> traversal = get_g_withSackXhelloX_V_outE_sackXassignX_byXlabelX_inV_sack();
checkResults(Arrays.asList("knows", "knows", "created", "created", "created", "created"), traversal);
}
@@ -159,7 +159,7 @@ public abstract class SackTest extends AbstractGremlinProcessTest {
public static class Traversals extends SackTest {
@Override
- public Traversal<Vertex, String> get_g_withSackXhellowX_V_outE_sackXassignX_byXlabelX_inV_sack() {
+ public Traversal<Vertex, String> get_g_withSackXhelloX_V_outE_sackXassignX_byXlabelX_inV_sack() {
return g.withSack("hello").V().outE().sack(Operator.assign).by(T.label).inV().sack();
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f3364102/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java b/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java
index 9344ecc..b24b153 100644
--- a/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java
+++ b/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java
@@ -67,7 +67,7 @@ public class PythonTranslator implements Translator<GraphTraversal> {
.collect(Collectors.toCollection(() -> new HashSet<>(Arrays.asList("not"))));
private StringBuilder traversalScript;
- private final String alias;
+ private String alias;
private final String scriptEngine;
private final boolean importStatics;
@@ -122,7 +122,7 @@ public class PythonTranslator implements Translator<GraphTraversal> {
}
@Override
- public void addStep(final String stepName, final Object... arguments) {
+ public void addStep(final Traversal.Admin<?, ?> traversal, final String stepName, final Object... arguments) {
// flatten the arguments into a single array
final List<Object> objects = TranslatorHelper.flattenArguments(arguments);
final int size = objects.size();
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f3364102/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/groovy/GroovyProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/groovy/GroovyProvider.java b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/groovy/GroovyProvider.java
index 310307e..fd7c6a9 100644
--- a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/groovy/GroovyProvider.java
+++ b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/groovy/GroovyProvider.java
@@ -34,6 +34,6 @@ public class GroovyProvider extends VariantGraphProvider {
return graph.traversal();
//throw new VerificationException("This test current does not work with Gremlin-Python", EmptyTraversal.instance());
else
- return graph.traversal(GroovyTranslator.of("g"));
+ return graph.traversal().withTranslator(GroovyTranslator.of("g"));
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f3364102/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java
index 28cdcfe..605862f 100644
--- a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java
+++ b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java
@@ -61,6 +61,7 @@ public class PythonProvider extends VariantGraphProvider {
try {
if (importStatics)
ScriptEngineCache.get("jython").eval("for k in statics:\n globals()[k] = statics[k]");
+ // else globals()[k] = None
} catch (final ScriptException e) {
throw new IllegalStateException(e.getMessage(), e);
}
@@ -69,7 +70,7 @@ public class PythonProvider extends VariantGraphProvider {
return graph.traversal();
//throw new VerificationException("This test current does not work with Gremlin-Python", EmptyTraversal.instance());
else
- return graph.traversal(PythonTranslator.of("gremlin-groovy", "g", importStatics));
+ return graph.traversal().withTranslator(PythonTranslator.of("gremlin-groovy", "g", importStatics));
}
}