You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2015/03/11 19:26:58 UTC
[42/50] [abbrv] incubator-tinkerpop git commit: Introduced
Graph.empty() so we can do remote compilation of traversals. The pit is
endless.
Introduced Graph.empty() so we can do remote compilation of traversals. The pit is endless.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/9d7bab0f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/9d7bab0f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/9d7bab0f
Branch: refs/heads/master
Commit: 9d7bab0fb223c473724f7badf302b6e644e36b06
Parents: a78c679
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Mar 10 16:30:14 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Mar 10 16:30:14 2015 -0600
----------------------------------------------------------------------
.../gremlin/process/TraversalContext.java | 10 +-
.../computer/traversal/TraversalScript.java | 42 -------
.../traversal/TraversalScriptSupplier.java | 59 ++++++++++
.../traversal/TraversalVertexProgram.java | 25 ++--
.../traversal/step/map/ComputerResultStep.java | 3 +-
.../process/computer/util/LambdaHolder.java | 4 +-
.../graph/traversal/GraphTraversalContext.java | 23 +++-
.../engine/ComputerTraversalEngine.java | 4 +
.../tinkerpop/gremlin/structure/Graph.java | 8 ++
.../gremlin/process/ComputerTestHelper.groovy | 19 ++-
.../computer/GroovyGraphComputerTest.groovy | 26 ++---
.../gremlin/groovy/GroovyEnvironmentSuite.java | 2 -
.../engine/GroovyTraversalScriptTest.java | 53 ---------
.../groovy/engine/GroovyTraversalScript.java | 115 -------------------
.../process/computer/GraphComputerTest.java | 5 +-
.../gremlin/hadoop/structure/HadoopGraph.java | 6 +
.../tinkergraph/structure/TinkerGraph.java | 8 +-
17 files changed, 159 insertions(+), 253 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalContext.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalContext.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalContext.java
index 1514b3e..fb43a39 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalContext.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalContext.java
@@ -20,17 +20,25 @@ package org.apache.tinkerpop.gremlin.process;
import org.apache.tinkerpop.gremlin.structure.Graph;
+import java.io.Serializable;
+
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public interface TraversalContext {
- public interface Builder<C extends TraversalContext> {
+ public TraversalContext.Builder asBuilder();
+
+ public interface Builder<C extends TraversalContext> extends Serializable {
public Builder engine(final TraversalEngine.Builder engine);
public Builder strategy(final TraversalStrategy strategy);
public C create(final Graph graph);
+
+ ///
+
+ public TraversalEngine.Builder getTraversalEngineBuilder();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalScript.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalScript.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalScript.java
deleted file mode 100644
index c3ca881..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalScript.java
+++ /dev/null
@@ -1,42 +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.computer.traversal;
-
-import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
-import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
-import org.apache.tinkerpop.gremlin.structure.Graph;
-
-import java.util.concurrent.Future;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public interface TraversalScript<S, E> {
-
- public TraversalScript<S, E> over(final Graph graph);
-
- public TraversalScript<S, E> using(final GraphComputer graphComputer);
-
- public TraversalVertexProgram program();
-
- public Future<Traversal<S, E>> traversal();
-
- public Future<ComputerResult> result();
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalScriptSupplier.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalScriptSupplier.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalScriptSupplier.java
new file mode 100644
index 0000000..43eaa6d
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalScriptSupplier.java
@@ -0,0 +1,59 @@
+/*
+ * 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.computer.traversal;
+
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.TraversalContext;
+import org.apache.tinkerpop.gremlin.process.computer.util.ScriptEngineCache;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+
+import javax.script.Bindings;
+import javax.script.ScriptEngine;
+import javax.script.ScriptException;
+import java.io.Serializable;
+import java.util.function.Supplier;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class TraversalScriptSupplier<S, E> implements Supplier<Traversal.Admin<S, E>>, Serializable {
+
+ private final TraversalContext.Builder traversalContextBuilder;
+ private final Class<? extends Graph> graphClass;
+ private final String scriptEngineName;
+ private final String traversalScript;
+
+ public TraversalScriptSupplier(final Class<? extends Graph> graphClass, final TraversalContext.Builder traversalContextBuilder, final String scriptEngineName, final String traversalScript) {
+ this.traversalContextBuilder = traversalContextBuilder;
+ this.graphClass = graphClass;
+ this.scriptEngineName = scriptEngineName;
+ this.traversalScript = traversalScript;
+ }
+
+ public Traversal.Admin<S, E> get() {
+ try {
+ final ScriptEngine engine = ScriptEngineCache.get(this.scriptEngineName);
+ final Bindings bindings = engine.createBindings();
+ bindings.put("g", this.traversalContextBuilder.create(Graph.empty(this.graphClass)));
+ return (Traversal.Admin<S, E>) engine.eval(this.traversalScript, bindings);
+ } catch (final ScriptException e) {
+ throw new IllegalStateException(e.getMessage(), e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
index 8aaf90b..de1a956 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
@@ -20,9 +20,11 @@ package org.apache.tinkerpop.gremlin.process.computer.traversal;
import org.apache.commons.configuration.Configuration;
import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.TraversalContext;
import org.apache.tinkerpop.gremlin.process.TraversalSideEffects;
import org.apache.tinkerpop.gremlin.process.Traverser;
import org.apache.tinkerpop.gremlin.process.TraverserGenerator;
+import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
import org.apache.tinkerpop.gremlin.process.computer.Memory;
import org.apache.tinkerpop.gremlin.process.computer.MessageCombiner;
@@ -42,6 +44,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.util.TraverserSet;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
@@ -230,6 +233,12 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
};
}
+ public <S, E> Traversal.Admin<S, E> computerResultTraversal(final ComputerResult result) {
+ final Traversal.Admin<S, E> traversal = (Traversal.Admin<S, E>) this.getTraversal();
+ ((ComputerResultStep) traversal.getEndStep()).populateTraversers(result);
+ return traversal;
+ }
+
//////////////
public static Builder build() {
@@ -242,24 +251,24 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
super(TraversalVertexProgram.class);
}
- public Builder traversal(final String scriptEngine, final String traversalScript) {
- LambdaHolder.storeState(this.configuration, LambdaHolder.Type.SCRIPT, TRAVERSAL_SUPPLIER, new String[]{scriptEngine, traversalScript});
+ public Builder traversal(final Class<? extends Graph> graphClass, final TraversalContext.Builder builder, final String scriptEngine, final String traversalScript) {
+ LambdaHolder.storeState(this.configuration, LambdaHolder.Type.SERIALIZED_OBJECT, TRAVERSAL_SUPPLIER, new TraversalScriptSupplier<>(graphClass, builder, scriptEngine, traversalScript));
return this;
}
- public Builder traversal(final String traversalScript) {
+ /*public Builder traversal(final String traversalScript) {
return traversal(GREMLIN_GROOVY, traversalScript);
- }
+ }*/
- public Builder traversal(final Traversal.Admin traversal) {
+ public Builder traversal(final Traversal.Admin<?, ?> traversal) {
return this.traversal(traversal, true);
}
- public Builder traversal(final Traversal.Admin traversal, boolean serialize) {
+ public Builder traversal(final Traversal.Admin<?, ?> traversal, boolean serialize) {
if (serialize)
- LambdaHolder.storeState(this.configuration, LambdaHolder.Type.SERIALIZED_OBJECT, TRAVERSAL_SUPPLIER, new TraversalSupplier(traversal, false));
+ LambdaHolder.storeState(this.configuration, LambdaHolder.Type.SERIALIZED_OBJECT, TRAVERSAL_SUPPLIER, new TraversalSupplier<>(traversal, false));
else
- LambdaHolder.storeState(this.configuration, LambdaHolder.Type.OBJECT, TRAVERSAL_SUPPLIER, new TraversalSupplier(traversal, true));
+ LambdaHolder.storeState(this.configuration, LambdaHolder.Type.OBJECT, TRAVERSAL_SUPPLIER, new TraversalSupplier<>(traversal, true));
return this;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
index 00bdeb5..3698215 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
@@ -27,7 +27,6 @@ import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexPr
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.sideEffect.mapreduce.TraverserMapReduce;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.SideEffectCapStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.ReducingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
import org.apache.tinkerpop.gremlin.process.traversal.step.AbstractStep;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
@@ -91,7 +90,6 @@ public final class ComputerResultStep<S> extends AbstractStep<S, S> {
public void populateTraversers(final ComputerResult result) {
this.graph = result.graph();
- //this.graph.engine(StandardTraversalEngine.standard);
result.memory().keys().forEach(key -> this.getTraversal().getSideEffects().set(key, result.memory().get(key)));
final Step endStep = this.getPreviousStep();
if (endStep instanceof SideEffectCapStep) {
@@ -111,6 +109,7 @@ public final class ComputerResultStep<S> extends AbstractStep<S, S> {
this.traversers = result.memory().get(TraverserMapReduce.TRAVERSERS);
}
this.first = false;
+ this.byPass = false;
}
public void byPass() {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/LambdaHolder.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/LambdaHolder.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/LambdaHolder.java
index 50f62ad..a4fbdc6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/LambdaHolder.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/LambdaHolder.java
@@ -21,10 +21,12 @@ package org.apache.tinkerpop.gremlin.process.computer.util;
import org.apache.commons.configuration.Configuration;
+import java.util.function.Supplier;
+
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class LambdaHolder<S> {
+public class LambdaHolder<S> implements Supplier<S> {
public enum Type {
OBJECT,
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversalContext.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversalContext.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversalContext.java
index b4eca49..d0630e0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversalContext.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversalContext.java
@@ -37,7 +37,7 @@ import java.util.List;
*/
public class GraphTraversalContext implements TraversalContext {
- private final Graph graph;
+ private final transient Graph graph;
private final TraversalEngine.Builder engine;
private final TraversalStrategies strategies;
@@ -69,15 +69,24 @@ public class GraphTraversalContext implements TraversalContext {
return new Builder();
}
+ public Graph getGraph() {
+ return this.graph;
+ }
+
+ @Override
+ public GraphTraversalContext.Builder asBuilder() {
+ return GraphTraversalContext.of().engine(this.engine); // TODO: add strategies
+ }
+
//////
public static class Builder implements TraversalContext.Builder<GraphTraversalContext> {
- private TraversalEngine.Builder engine = StandardTraversalEngine.builder();
+ private TraversalEngine.Builder engineBuilder = StandardTraversalEngine.builder();
private List<TraversalStrategy> strategies = new ArrayList<>();
- public Builder engine(final TraversalEngine.Builder engine) {
- this.engine = engine;
+ public Builder engine(final TraversalEngine.Builder engineBuilder) {
+ this.engineBuilder = engineBuilder;
return this;
}
@@ -87,7 +96,11 @@ public class GraphTraversalContext implements TraversalContext {
}
public GraphTraversalContext create(final Graph graph) {
- return new GraphTraversalContext(graph, this.engine, this.strategies.toArray(new TraversalStrategy[this.strategies.size()]));
+ return new GraphTraversalContext(graph, this.engineBuilder, this.strategies.toArray(new TraversalStrategy[this.strategies.size()]));
+ }
+
+ public TraversalEngine.Builder getTraversalEngineBuilder() {
+ return this.engineBuilder;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java
index cad187b..1863c12 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java
@@ -55,6 +55,10 @@ public final class ComputerTraversalEngine implements TraversalEngine {
return StringFactory.traversalEngineString(this);
}
+ public GraphComputer getGraphComputer() {
+ return this.graphComputer;
+ }
+
public static Builder build() {
return new Builder();
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/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 a7e3d37..5b392b9 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
@@ -67,6 +67,14 @@ public interface Graph extends AutoCloseable {
public static final String GRAPH = "gremlin.graph";
+ public static <G extends Graph> G empty(final Class<G> graphClass) {
+ try {
+ return (G) graphClass.getMethod("empty").invoke(null);
+ } catch (final Exception e) {
+ throw new IllegalArgumentException(e.getMessage(), e);
+ }
+ }
+
/**
* This should only be used by vendors to create keys, labels, etc. in a namespace safe from users.
* Users are not allowed to generate property keys, step labels, etc. that are key'd "hidden".
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/ComputerTestHelper.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/ComputerTestHelper.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/ComputerTestHelper.groovy
index b428d85..c77db9e 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/ComputerTestHelper.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/ComputerTestHelper.groovy
@@ -18,10 +18,10 @@
*/
package org.apache.tinkerpop.gremlin.process
-import org.apache.tinkerpop.gremlin.groovy.engine.GroovyTraversalScript
-import org.apache.tinkerpop.gremlin.process.Traversal
-import org.apache.tinkerpop.gremlin.process.computer.GraphComputer
+import org.apache.tinkerpop.gremlin.process.computer.ComputerResult
+import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram
import org.apache.tinkerpop.gremlin.process.graph.traversal.GraphTraversalContext
+import org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine
import org.apache.tinkerpop.gremlin.structure.Graph
/**
@@ -29,11 +29,18 @@ import org.apache.tinkerpop.gremlin.structure.Graph
*/
public class ComputerTestHelper {
- public static final Traversal compute(final String script, final Graph g, final GraphComputer computer) {
- return GroovyTraversalScript.of(script).over(g).using(computer).withSugar().traversal().get();
+ public static final Traversal compute(
+ final Graph graph,
+ final TraversalContext.Builder builder,
+ final String scriptEngineName,
+ final String traversalScript) {
+
+ final TraversalVertexProgram program = TraversalVertexProgram.build().traversal(graph.getClass(), builder, scriptEngineName, traversalScript).create();
+ final ComputerResult result = ((ComputerTraversalEngine) builder.getTraversalEngineBuilder().create(graph)).getGraphComputer().program(program).submit().get();
+ return program.computerResultTraversal(result);
}
public static final Traversal compute(final String script, final GraphTraversalContext g) {
- return GroovyTraversalScript.of(script).over(g).using(g.compute()).withSugar().traversal().get();
+ return ComputerTestHelper.compute(g.getGraph(), g.asBuilder(), "gremlin-groovy", script);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/computer/GroovyGraphComputerTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/computer/GroovyGraphComputerTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/computer/GroovyGraphComputerTest.groovy
index eaf8bd9..b3a84be 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/computer/GroovyGraphComputerTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/computer/GroovyGraphComputerTest.groovy
@@ -29,37 +29,37 @@ public abstract class GroovyGraphComputerTest {
public static class ComputerTraversals extends GraphComputerTest {
public GraphComputer get_g_compute() {
- g.compute();
+ graph.compute();
}
@Override
public GraphComputer get_g_compute_setupXX_executeXX_terminateXtrueX_memoryKeysXset_incr_and_orX() {
- g.compute().program(LambdaVertexProgram.build().memoryComputeKeys("set", "incr", "and", "or").create());
+ graph.compute().program(LambdaVertexProgram.build().memoryComputeKeys("set", "incr", "and", "or").create());
}
@Override
public GraphComputer get_g_compute_setupXX_executeXX_terminateXtrueX_memoryKeysXnullX() {
- g.compute().program(LambdaVertexProgram.build().memoryComputeKeys([null] as Set).create());
+ graph.compute().program(LambdaVertexProgram.build().memoryComputeKeys([null] as Set).create());
}
@Override
public GraphComputer get_g_compute_setupXX_executeXX_terminateXtrueX_memoryKeysX_X() {
- g.compute().program(LambdaVertexProgram.build().memoryComputeKeys('').create());
+ graph.compute().program(LambdaVertexProgram.build().memoryComputeKeys('').create());
}
@Override
public GraphComputer get_g_compute_setupXsetXa_trueXX_executeXX_terminateXtrueX() {
- g.compute().program(LambdaVertexProgram.build().setup("gremlin-groovy", "a.set('a', true)").create());
+ graph.compute().program(LambdaVertexProgram.build().setup("gremlin-groovy", "a.set('a', true)").create());
}
@Override
public GraphComputer get_g_compute_setupXX_executeXX_terminateXtrueX() {
- g.compute().program(LambdaVertexProgram.build().create());
+ graph.compute().program(LambdaVertexProgram.build().create());
}
@Override
public GraphComputer get_g_compute_setupXX_executeXv_blah_m_incrX_terminateX1X_elementKeysXnameLengthCounterX_memoryKeysXa_bX() {
- return g.compute().program(LambdaVertexProgram.build().
+ return graph.compute().program(LambdaVertexProgram.build().
execute("gremlin-groovy", """
import static org.junit.Assert.*;
try {
@@ -85,7 +85,7 @@ public abstract class GroovyGraphComputerTest {
@Override
public GraphComputer get_g_compute_setupXabcdeX_executeXtestMemoryX_terminateXtestMemoryXmemoryKeysXabcdeX() {
- return g.compute().program(LambdaVertexProgram.build().
+ graph.compute().program(LambdaVertexProgram.build().
setup("gremlin-groovy", """
a.set("a", 0l);
a.set("b", 0l);
@@ -142,7 +142,7 @@ public abstract class GroovyGraphComputerTest {
@Override
public GraphComputer get_g_compute_mapXageX_reduceXsumX_memoryXnextX_memoryKeyXageSumX() {
- g.compute().mapReduce(LambdaMapReduce.<MapReduce.NullObject, Integer, MapReduce.NullObject, Integer, Integer> build()
+ graph.compute().mapReduce(LambdaMapReduce.<MapReduce.NullObject, Integer, MapReduce.NullObject, Integer, Integer> build()
.map("gremlin-groovy", "if(a.property('age').isPresent()) b.emit(a.value('age'))")
.reduce("gremlin-groovy", "c.emit(b.sum())")
.memory("gremlin-groovy", "a.next().getValue()")
@@ -151,7 +151,7 @@ public abstract class GroovyGraphComputerTest {
@Override
public GraphComputer get_g_compute_executeXcounterX_terminateX8X_mapreduceXcounter_aX_mapreduceXcounter_bX() {
- return g.compute().program(LambdaVertexProgram.build()
+ graph.compute().program(LambdaVertexProgram.build()
.execute("gremlin-groovy", "a.property(VertexProperty.Cardinality.single,'counter', c.isInitialIteration() ? 1 : a.value('counter') + 1)")
.terminate("gremlin-groovy", "a.getIteration() > 8")
.elementComputeKeys(["counter"] as Set).create())
@@ -178,7 +178,7 @@ public abstract class GroovyGraphComputerTest {
@Override
public GraphComputer get_g_compute_mapXidX_reduceXidX_reduceKeySortXreverseX_memoryKeyXidsX() {
- return g.compute().mapReduce(LambdaMapReduce.<Long, Long, Long, Long, List<Long>> build()
+ graph.compute().mapReduce(LambdaMapReduce.<Long, Long, Long, Long, List<Long>> build()
.map("b.emit(a.id() as Long, a.id() as Long)")
.reduce("b.forEachRemaining{c.emit(it, it)}")
.memoryKey("ids")
@@ -193,8 +193,8 @@ public abstract class GroovyGraphComputerTest {
@Override
public GraphComputer get_g_compute_programXTraversalVertexProgram_build_traversalXg_V_both_hasXlabel_personX_age_groupCountXaXX_create() {
- return g.compute().program(TraversalVertexProgram.build().
- traversal("GraphFactory.open(['gremlin.graph':'${g.metaClass.theClass.getCanonicalName()}']).V().both().has(label,'person').values('age').groupCount('a')").
+ graph.compute().program(TraversalVertexProgram.build().
+ traversal("GraphFactory.open(['gremlin.graph':'${graph.metaClass.theClass.getCanonicalName()}']).V().both().has(label,'person').values('age').groupCount('a')").
create());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyEnvironmentSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyEnvironmentSuite.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyEnvironmentSuite.java
index f3e6996..b0108b3 100644
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyEnvironmentSuite.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyEnvironmentSuite.java
@@ -22,7 +22,6 @@ import org.apache.tinkerpop.gremlin.AbstractGremlinSuite;
import org.apache.tinkerpop.gremlin.AbstractGremlinTest;
import org.apache.tinkerpop.gremlin.GraphManager;
import org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutorTest;
-import org.apache.tinkerpop.gremlin.groovy.engine.GroovyTraversalScriptTest;
import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngineTest;
import org.apache.tinkerpop.gremlin.groovy.loaders.GremlinLoaderTest;
import org.apache.tinkerpop.gremlin.groovy.loaders.SugarLoader;
@@ -45,7 +44,6 @@ public class GroovyEnvironmentSuite extends AbstractGremlinSuite {
GremlinGroovyScriptEngineTest.class,
GremlinExecutorTest.class,
GremlinLoaderTest.class,
- GroovyTraversalScriptTest.class,
SugarLoaderTest.class,
};
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GroovyTraversalScriptTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GroovyTraversalScriptTest.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GroovyTraversalScriptTest.java
deleted file mode 100644
index aacf96e..0000000
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GroovyTraversalScriptTest.java
+++ /dev/null
@@ -1,53 +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.groovy.engine;
-
-import org.apache.tinkerpop.gremlin.AbstractGremlinTest;
-import org.apache.tinkerpop.gremlin.LoadGraphWith;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.junit.Test;
-
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class GroovyTraversalScriptTest extends AbstractGremlinTest {
-
- @Test
- @LoadGraphWith(LoadGraphWith.GraphData.CLASSIC)
- public void shouldSubmitTraversalCorrectly() throws Exception {
- final List<String> names = GroovyTraversalScript.<Vertex, String>of("g.V().out().out().values('name')").over(graph).using(graph.compute()).traversal().get().toList();
- assertEquals(2, names.size());
- assertTrue(names.contains("lop"));
- assertTrue(names.contains("ripple"));
- }
-
- @Test
- @LoadGraphWith(LoadGraphWith.GraphData.CLASSIC)
- public void shouldSubmitTraversalCorrectly2() throws Exception {
- final List<String> names = GroovyTraversalScript.<Vertex, String>of("g.V(1).out().out().values('name')").over(graph).using(graph.compute()).traversal().get().toList();
- assertEquals(2, names.size());
- assertTrue(names.contains("lop"));
- assertTrue(names.contains("ripple"));
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GroovyTraversalScript.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GroovyTraversalScript.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GroovyTraversalScript.java
deleted file mode 100644
index dc9797a..0000000
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GroovyTraversalScript.java
+++ /dev/null
@@ -1,115 +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.groovy.engine;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine;
-import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngineFactory;
-import org.apache.tinkerpop.gremlin.groovy.loaders.SugarLoader;
-import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
-import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalScript;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ComputerResultStep;
-import org.apache.tinkerpop.gremlin.structure.Graph;
-
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.Future;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class GroovyTraversalScript<S, E> implements TraversalScript<S, E> {
-
- private static final String ENGINE_NAME = new GremlinGroovyScriptEngineFactory().getEngineName();
-
- protected String openGraphScript;
- protected String traversalScript;
- protected String withSugarScript;
-
- private GraphComputer graphComputer;
-
- private GroovyTraversalScript(final String traversalScript) {
- this.traversalScript = traversalScript.concat("\n");
- }
-
- public static <S, E> GroovyTraversalScript<S, E> of(final String traversalScript) {
- return new GroovyTraversalScript<>(traversalScript);
- }
-
- @Override
- public GroovyTraversalScript<S, E> over(final Graph graph) {
- final Configuration configuration = graph.configuration();
- final StringBuilder configurationMap = new StringBuilder("g = GraphFactory.open([");
- configuration.getKeys().forEachRemaining(key -> configurationMap.append("'").append(key).append("':'").append(configuration.getProperty(key)).append("',"));
- configurationMap.deleteCharAt(configurationMap.length() - 1).append("])\n");
- this.openGraphScript = configurationMap.toString();
- this.openGraphScript = this.openGraphScript + "g.engine(ComputerTraversalEngine.computer)\n";
- return this;
- }
-
- @Override
- public GroovyTraversalScript<S, E> using(final GraphComputer graphComputer) {
- this.graphComputer = graphComputer;
- return this;
- }
-
-
- public GroovyTraversalScript<S, E> withSugar() {
- this.withSugarScript = SugarLoader.class.getCanonicalName() + ".load()\n";
- return this;
- }
-
- @Override
- public Future<ComputerResult> result() {
- return this.graphComputer.program(this.program()).submit();
- }
-
- @Override
- public Future<Traversal<S, E>> traversal() {
- return CompletableFuture.<Traversal<S, E>>supplyAsync(() -> {
- try {
- final ComputerResult result = this.graphComputer.program(this.program()).submit().get();
- final Traversal.Admin<S, E> traversal = (Traversal.Admin<S, E>) new GremlinGroovyScriptEngine().eval(this.makeFullScript());
- traversal.applyStrategies();
- ((ComputerResultStep) traversal.getEndStep()).populateTraversers(result);
- return traversal;
- } catch (final Exception e) {
- throw new IllegalStateException(e.getMessage(), e);
- }
- });
- }
-
- @Override
- public TraversalVertexProgram program() {
- return TraversalVertexProgram.build().traversal(ENGINE_NAME, this.makeFullScript()).create();
- }
-
- private String makeFullScript() {
- final StringBuilder builder = new StringBuilder();
- if (null != this.withSugarScript)
- builder.append(this.withSugarScript);
- if (null != this.openGraphScript)
- builder.append(this.openGraphScript);
- if (null != this.traversalScript)
- builder.append(this.traversalScript);
- return builder.toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
index 5ce2e26..ea611f3 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
@@ -489,10 +489,11 @@ public abstract class GraphComputerTest extends AbstractGremlinProcessTest {
@Override
public GraphComputer get_g_compute_programXTraversalVertexProgram_build_traversalXg_V_both_hasXlabel_personX_age_groupCountXaXX_create() {
- return graph.compute().program(TraversalVertexProgram.build().
+ /*return graph.compute().program(TraversalVertexProgram.build().
// TODO: need to set the engine to be computer
traversal("GraphFactory.open(['gremlin.graph':'" + g.getClass().getCanonicalName() + "']).V().both().has(label,'person').values('age').groupCount('a')").
- create());
+ create()); */
+ return null;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
index 775877b..8ccba89 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
@@ -123,6 +123,8 @@ public class HadoopGraph implements Graph {
public static final Logger LOGGER = LoggerFactory.getLogger(HadoopGraph.class);
+ private static final HadoopGraph EMPTY = HadoopGraph.open();
+
private static final Configuration EMPTY_CONFIGURATION = new BaseConfiguration() {{
this.setProperty(Graph.GRAPH, HadoopGraph.class.getName());
}};
@@ -133,6 +135,10 @@ public class HadoopGraph implements Graph {
this.configuration = new HadoopConfiguration(configuration);
}
+ public static HadoopGraph empty() {
+ return EMPTY;
+ }
+
public static HadoopGraph open() {
return HadoopGraph.open(null);
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9d7bab0f/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
index 3ed92cd..ac98e8a 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
@@ -20,10 +20,8 @@ package org.apache.tinkerpop.gremlin.tinkergraph.structure;
import org.apache.commons.configuration.BaseConfiguration;
import org.apache.commons.configuration.Configuration;
-import org.apache.tinkerpop.gremlin.process.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.TraversalStrategies;
import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
-import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -83,7 +81,7 @@ public class TinkerGraph implements Graph {
protected TinkerIndex<TinkerVertex> vertexIndex = new TinkerIndex<>(this, TinkerVertex.class);
protected TinkerIndex<TinkerEdge> edgeIndex = new TinkerIndex<>(this, TinkerEdge.class);
- protected TraversalEngine engine = StandardTraversalEngine.instance();
+ private final static TinkerGraph EMPTY_GRAPH = new TinkerGraph();
/**
* An empty private constructor that initializes {@link TinkerGraph} with no {@link org.apache.tinkerpop.gremlin.structure.strategy.GraphStrategy}.
@@ -91,6 +89,10 @@ public class TinkerGraph implements Graph {
private TinkerGraph() {
}
+ public static TinkerGraph empty() {
+ return EMPTY_GRAPH;
+ }
+
/**
* Open a new {@link TinkerGraph} instance.
* <p/>