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/03/30 15:21:07 UTC

[1/6] incubator-tinkerpop git commit: first stub of ProgramVertexProgramStep which is like TraversalMap in that it VertexProgramStep that takes a Program.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master ef1ad23ec -> 6c7962f5a


first stub of ProgramVertexProgramStep which is like TraversalMap in that it VertexProgramStep that takes a Program.


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

Branch: refs/heads/master
Commit: f6d49626fd07182d01de440dbb5129b34dcdbbd7
Parents: 87a0bbf
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Mar 24 10:29:43 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Mar 24 10:29:43 2016 -0600

----------------------------------------------------------------------
 .../traversal/step/VertexComputing.java         | 11 ++--
 .../step/map/PageRankVertexProgramStep.java     | 15 ++----
 .../step/map/PeerPressureVertexProgramStep.java | 10 +---
 .../step/map/ProgramVertexProgramStep.java      | 55 ++++++++++++++++++++
 .../step/map/TraversalVertexProgramStep.java    | 11 +---
 .../traversal/step/map/VertexProgramStep.java   | 22 +++++++-
 .../decoration/VertexProgramStrategy.java       |  2 +-
 7 files changed, 90 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f6d49626/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/VertexComputing.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/VertexComputing.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/VertexComputing.java
index 54accc1..48bed14 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/VertexComputing.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/VertexComputing.java
@@ -19,20 +19,23 @@
 
 package org.apache.tinkerpop.gremlin.process.computer.traversal.step;
 
+import org.apache.tinkerpop.gremlin.process.computer.Computer;
 import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
 import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 
-import java.util.function.Function;
-
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 public interface VertexComputing {
 
-    public void setGraphComputerFunction(final Function<Graph, GraphComputer> graphComputerFunction);
+    public void setComputer(final Computer computer);
+
+    public Computer getComputer();
 
     public VertexProgram generateProgram(final Graph graph);
 
-    public GraphComputer generateComputer(final Graph graph);
+    public default GraphComputer generateComputer(final Graph graph) {
+        return this.getComputer().apply(graph);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f6d49626/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PageRankVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PageRankVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PageRankVertexProgramStep.java
index 5ea8ed5..af435a3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PageRankVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PageRankVertexProgramStep.java
@@ -45,8 +45,6 @@ import java.util.function.Function;
  */
 public final class PageRankVertexProgramStep extends VertexProgramStep implements TraversalParent, ByModulating, TimesModulating {
 
-    private transient Function<Graph, GraphComputer> graphComputerFunction = Graph::compute;
-
     private PureTraversal<Vertex, Edge> edgeTraversal;
     private String pageRankProperty = PageRankVertexProgram.PAGE_RANK;
     private int times = 30;
@@ -85,11 +83,6 @@ public final class PageRankVertexProgramStep extends VertexProgramStep implement
     }
 
     @Override
-    public void setGraphComputerFunction(final Function<Graph, GraphComputer> graphComputerFunction) {
-        this.graphComputerFunction = graphComputerFunction;
-    }
-
-    @Override
     public PageRankVertexProgram generateProgram(final Graph graph) {
         final Traversal.Admin<Vertex, Edge> detachedTraversal = this.edgeTraversal.getPure();
         detachedTraversal.setStrategies(TraversalStrategies.GlobalCache.getStrategies(graph.getClass()));
@@ -104,13 +97,13 @@ public final class PageRankVertexProgramStep extends VertexProgramStep implement
     }
 
     @Override
-    public Set<TraverserRequirement> getRequirements() {
-        return TraversalParent.super.getSelfAndChildRequirements();
+    public GraphComputer generateComputer(final Graph graph) {
+        return this.computer.apply(graph).persist(GraphComputer.Persist.EDGES).result(GraphComputer.ResultGraph.NEW);
     }
 
     @Override
-    public GraphComputer generateComputer(final Graph graph) {
-        return this.graphComputerFunction.apply(graph).persist(GraphComputer.Persist.EDGES).result(GraphComputer.ResultGraph.NEW);
+    public Set<TraverserRequirement> getRequirements() {
+        return TraversalParent.super.getSelfAndChildRequirements();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f6d49626/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PeerPressureVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PeerPressureVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PeerPressureVertexProgramStep.java
index 5b4960d..b5353e9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PeerPressureVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PeerPressureVertexProgramStep.java
@@ -37,15 +37,12 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
-import java.util.function.Function;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 public final class PeerPressureVertexProgramStep extends VertexProgramStep implements TraversalParent, ByModulating, TimesModulating {
 
-    private transient Function<Graph, GraphComputer> graphComputerFunction = Graph::compute;
-
     private PureTraversal<Vertex, Edge> edgeTraversal;
     private String clusterProperty = PeerPressureVertexProgram.CLUSTER;
     private int times = 30;
@@ -87,11 +84,6 @@ public final class PeerPressureVertexProgramStep extends VertexProgramStep imple
     }
 
     @Override
-    public void setGraphComputerFunction(final Function<Graph, GraphComputer> graphComputerFunction) {
-        this.graphComputerFunction = graphComputerFunction;
-    }
-
-    @Override
     public PeerPressureVertexProgram generateProgram(final Graph graph) {
         final Traversal.Admin<Vertex, Edge> detachedTraversal = this.edgeTraversal.getPure();
         detachedTraversal.setStrategies(TraversalStrategies.GlobalCache.getStrategies(graph.getClass()));
@@ -109,7 +101,7 @@ public final class PeerPressureVertexProgramStep extends VertexProgramStep imple
 
     @Override
     public GraphComputer generateComputer(final Graph graph) {
-        return this.graphComputerFunction.apply(graph).persist(GraphComputer.Persist.EDGES).result(GraphComputer.ResultGraph.NEW);
+        return this.computer.apply(graph).persist(GraphComputer.Persist.EDGES).result(GraphComputer.ResultGraph.NEW);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f6d49626/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
new file mode 100644
index 0000000..e41e894
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
@@ -0,0 +1,55 @@
+/*
+ * 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.step.map;
+
+import org.apache.commons.configuration.MapConfiguration;
+import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
+import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class ProgramVertexProgramStep extends VertexProgramStep {
+
+    final Map<String, Object> configuration;
+
+    public ProgramVertexProgramStep(final Traversal.Admin traversal, final VertexProgram vertexProgram) {
+        super(traversal);
+        final MapConfiguration base = new MapConfiguration(Collections.emptyMap());
+        base.setDelimiterParsingDisabled(true);
+        vertexProgram.storeState(base);
+        this.configuration = base.getMap();
+    }
+
+    @Override
+    public VertexProgram generateProgram(final Graph graph) {
+        return VertexProgram.createVertexProgram(graph, new MapConfiguration(this.configuration));
+    }
+
+    @Override
+    public GraphComputer generateComputer(final Graph graph) {
+        return this.computer.apply(graph);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f6d49626/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
index a81fbaf..9f66770 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
@@ -33,14 +33,12 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
-import java.util.function.Function;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 public final class TraversalVertexProgramStep extends VertexProgramStep implements TraversalParent {
 
-    private transient Function<Graph, GraphComputer> graphComputerFunction = Graph::compute;
     public PureTraversal<?, ?> computerTraversal;
 
     public TraversalVertexProgramStep(final Traversal.Admin traversal, final Traversal.Admin<?, ?> computerTraversal) {
@@ -74,11 +72,6 @@ public final class TraversalVertexProgramStep extends VertexProgramStep implemen
     }
 
     @Override
-    public void setGraphComputerFunction(final Function<Graph, GraphComputer> graphComputerFunction) {
-        this.graphComputerFunction = graphComputerFunction;
-    }
-
-    @Override
     public TraversalVertexProgram generateProgram(final Graph graph) {
         final Traversal.Admin<?, ?> computerSpecificTraversal = this.computerTraversal.getPure();
         computerSpecificTraversal.setStrategies(TraversalStrategies.GlobalCache.getStrategies(graph.getClass()).clone());
@@ -92,8 +85,8 @@ public final class TraversalVertexProgramStep extends VertexProgramStep implemen
 
     @Override
     public GraphComputer generateComputer(final Graph graph) {
-        final GraphComputer graphComputer = this.graphComputerFunction.apply(graph);
-        if (!(this.getNextStep() instanceof ComputerResultStep))
+        final GraphComputer graphComputer = this.computer.apply(graph);
+        if (!this.isEndStep())
             graphComputer.persist(GraphComputer.Persist.EDGES).result(GraphComputer.ResultGraph.NEW);
         return graphComputer;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f6d49626/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
index 1b561fd..f9e2936 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
@@ -19,8 +19,10 @@
 
 package org.apache.tinkerpop.gremlin.process.computer.traversal.step.map;
 
+import org.apache.tinkerpop.gremlin.process.computer.Computer;
 import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
 import org.apache.tinkerpop.gremlin.process.computer.Memory;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.step.VertexComputing;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
@@ -28,6 +30,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.ProfileStep;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 
 import java.util.NoSuchElementException;
@@ -38,6 +41,8 @@ import java.util.concurrent.ExecutionException;
  */
 public abstract class VertexProgramStep extends AbstractStep<ComputerResult, ComputerResult> implements VertexComputing {
 
+    protected Computer computer = Computer.compute();
+
     protected boolean first = true;
 
     public VertexProgramStep(final Traversal.Admin traversal) {
@@ -65,6 +70,16 @@ public abstract class VertexProgramStep extends AbstractStep<ComputerResult, Com
         }
     }
 
+    @Override
+    public Computer getComputer() {
+        return this.computer;
+    }
+
+    @Override
+    public void setComputer(final Computer computer) {
+        this.computer = computer;
+    }
+
     protected boolean previousTraversalVertexProgram() {
         Step<?, ?> currentStep = this;
         while (!(currentStep instanceof EmptyStep)) {
@@ -75,10 +90,9 @@ public abstract class VertexProgramStep extends AbstractStep<ComputerResult, Com
         return false;
     }
 
-
     private void processMemorySideEffects(final Memory memory) {
         // unfortunately there is no easy way to test this in a test case
-        // assert this.getNextStep() instanceof ComputerResultStep == memory.exists(TraversalVertexProgram.HALTED_TRAVERSERS);
+        assert this.isEndStep() == memory.exists(TraversalVertexProgram.HALTED_TRAVERSERS);
         final TraversalSideEffects sideEffects = this.getTraversal().getSideEffects();
         for (final String key : memory.keys()) {
             if (sideEffects.exists(key)) {
@@ -87,4 +101,8 @@ public abstract class VertexProgramStep extends AbstractStep<ComputerResult, Com
         }
     }
 
+    protected boolean isEndStep() {
+        return this.getNextStep() instanceof ComputerResultStep || (this.getNextStep() instanceof ProfileStep && this.getNextStep().getNextStep() instanceof ComputerResultStep);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f6d49626/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
index 87979f5..23bcdbd 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
@@ -120,7 +120,7 @@ public final class VertexProgramStrategy extends AbstractTraversalStrategy<Trave
             traversal.addStep(new ComputerResultStep<>(traversal));
         }
         // all vertex computing steps needs the graph computer function
-        traversal.getSteps().stream().filter(step -> step instanceof VertexComputing).forEach(step -> ((VertexComputing) step).setGraphComputerFunction(this.computer));
+        traversal.getSteps().stream().filter(step -> step instanceof VertexComputing).forEach(step -> ((VertexComputing) step).setComputer(this.computer));
     }
 
     private static Step<?, ?> getFirstLegalOLAPStep(Step<?, ?> currentStep) {


[3/6] incubator-tinkerpop git commit: Added graph as a binding in ScriptTraversal much like g. This ensures that when a ScriptTraversal references the graph, its there as graphs are not serializable. This problem emerged during GroovyProgramTest on Spark

Posted by ok...@apache.org.
Added graph as a binding in ScriptTraversal much like g. This ensures that when a ScriptTraversal references the graph, its there as graphs are not serializable. This problem emerged during GroovyProgramTest on Spark and Giraph.


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

Branch: refs/heads/master
Commit: 9521abfe1b39f5a78f7c6402d79d473e0edd130f
Parents: cd143ba
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Mar 24 11:31:02 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Mar 24 11:31:02 2016 -0600

----------------------------------------------------------------------
 .../computer/traversal/step/map/ProgramVertexProgramStep.java    | 2 +-
 .../gremlin/process/traversal/util/ScriptTraversal.java          | 1 +
 .../gremlin/process/traversal/step/map/GroovyProgramTest.groovy  | 4 ++--
 3 files changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9521abfe/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
index 3ab73bc..0b2181c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
@@ -32,7 +32,7 @@ import java.util.Map;
  */
 public final class ProgramVertexProgramStep extends VertexProgramStep {
 
-    final Map<String, Object> configuration;
+    private final Map<String, Object> configuration;
 
     public ProgramVertexProgramStep(final Traversal.Admin traversal, final VertexProgram vertexProgram) {
         super(traversal);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9521abfe/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 55b1890..1bf13da 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
@@ -57,6 +57,7 @@ public final class ScriptTraversal<S, E> extends DefaultTraversal<S, E> {
             final ScriptEngine engine = ScriptEngineCache.get(this.scriptEngine);
             final Bindings engineBindings = engine.createBindings();
             engineBindings.put("g", this.factory.createTraversalSource(this.graph));
+            engineBindings.put("graph", this.graph);
             for (int i = 0; i < this.bindings.length; i = i + 2) {
                 engineBindings.put((String) this.bindings[i], this.bindings[i + 1]);
             }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9521abfe/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy
index 889b088..6630ffc 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy
@@ -32,12 +32,12 @@ public abstract class GroovyProgramTest {
 
         @Override
         public Traversal<Vertex, Vertex> get_g_V_programXpageRankX() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.program(PageRankVertexProgram.build().create(graph))", "graph", graph)
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.program(PageRankVertexProgram.build().create(graph))")
         }
 
         @Override
         public Traversal<Vertex, Map<String, List<Object>>> get_g_V_hasLabelXpersonX_programXpageRank_rankX_order_byXrank_incrX_valueMapXname_rankX() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.hasLabel('person').program(PageRankVertexProgram.build().property('rank').create(graph)).order.by('rank',incr).valueMap('name','rank')", "graph", graph);
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.hasLabel('person').program(PageRankVertexProgram.build().property('rank').create(graph)).order.by('rank',incr).valueMap('name','rank')");
         }
     }
 }


[6/6] incubator-tinkerpop git commit: updated CHANGELOG.

Posted by ok...@apache.org.
updated CHANGELOG.


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

Branch: refs/heads/master
Commit: 6c7962f5ac23db34fac01825309c2814fcbccae2
Parents: ef1ad23 237956e
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Mar 30 07:20:55 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Mar 30 07:20:55 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../traversal/step/VertexComputing.java         | 11 ++-
 .../step/map/PageRankVertexProgramStep.java     | 15 +--
 .../step/map/PeerPressureVertexProgramStep.java | 10 +-
 .../step/map/ProgramVertexProgramStep.java      | 62 +++++++++++++
 .../step/map/TraversalVertexProgramStep.java    | 11 +--
 .../traversal/step/map/VertexProgramStep.java   | 22 ++++-
 .../decoration/VertexProgramStrategy.java       |  2 +-
 .../gremlin/process/remote/RemoteGraph.java     |  4 +
 .../traversal/dsl/graph/GraphTraversal.java     |  5 +
 .../process/traversal/util/ScriptTraversal.java |  1 +
 .../traversal/dsl/graph/GraphTraversalTest.java |  2 +-
 .../traversal/step/map/GroovyProgramTest.groovy | 45 +++++++++
 .../process/GroovyProcessComputerSuite.java     |  2 +
 .../gremlin/process/ProcessComputerSuite.java   |  5 +
 .../process/traversal/step/map/ProgramTest.java | 97 ++++++++++++++++++++
 16 files changed, 258 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6c7962f5/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 73208f8,ccbacf7..ffc64c9
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -26,14 -26,6 +26,15 @@@ image::https://raw.githubusercontent.co
  TinkerPop 3.2.0 (NOT OFFICIALLY RELEASED YET)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
++* Added `GraphTraversal.program(VertexProgram)` to allow arbitrary user vertex programs in OLAP.
 +* Added `GraphTraversal.project()` for creating a `Map<String,E>` given the current traverser and an arbitrary number of `by()`-modulators.
 +* `HADOOP_GREMLIN_LIBS` can now reference a directory in HDFS and will be used if the directory does not exist locally.
 +* Added `gremlin-benchmark` module with JMH benchmarking base classes that can be used for further benchmark development.
 +* `TraversalStrategies.GlobalCache` supports both `Graph` and `GraphComputer` strategy registrations.
 +* `select("a","b").by("name").by("age")`-style traversals now work in OLAP with new `PathProcessorStrategy`.
 +* `DedupGlobalStep` can now handle star-bound `by()`-modulators and scoped keys on `GraphComputer`.
 +* Added `Computer` which is a builder for `GraphComputers` that is serializable.
 +* `PersistedOutputRDD` now implements `PersistResultGraphAware` and thus, no more unneeded warnings when using it.
  * Renamed `StandardTraversalMetrics` to `DefaultTraversalMetrics` given the `DefaultXXX`-convention throughout. (*breaking*)
  * Bumped to Apache Hadoop 2.7.2.
  * Fixed a bug around profiling and nested traversals.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6c7962f5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6c7962f5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java
----------------------------------------------------------------------
diff --cc gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java
index aecff68,0000000..c12e624
mode 100644,000000..100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java
@@@ -1,150 -1,0 +1,150 @@@
 +/*
 + * 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.strategy.decoration;
 +
 +import org.apache.tinkerpop.gremlin.process.computer.Computer;
 +import org.apache.tinkerpop.gremlin.process.computer.traversal.step.VertexComputing;
 +import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ComputerResultStep;
 +import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
 +import org.apache.tinkerpop.gremlin.process.remote.traversal.strategy.decoration.RemoteStrategy;
 +import org.apache.tinkerpop.gremlin.process.traversal.Step;
 +import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 +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.__;
 +import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
 +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.DefaultTraversal;
 +import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 +
 +import java.util.HashSet;
 +import java.util.Optional;
 +import java.util.Set;
 +
 +/**
 + * @author Marko A. Rodriguez (http://markorodriguez.com)
 + */
 +public final class VertexProgramStrategy extends AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
 +
 +    private Computer computer;
 +
 +    private VertexProgramStrategy() {
 +
 +    }
 +
 +    public VertexProgramStrategy(final Computer computer) {
 +        this.computer = computer;
 +    }
 +
 +    @Override
 +    public void apply(final Traversal.Admin<?, ?> traversal) {
 +        // VertexPrograms can only execute at the root level of a Traversal and should not be applied locally prior to RemoteStrategy
 +        if (!(traversal.getParent() instanceof EmptyStep) || traversal.getStrategies().toList().contains(RemoteStrategy.instance()))
 +            return;
 +
 +        // back propagate as()-labels off of vertex computing steps
 +        Step<?, ?> currentStep = traversal.getEndStep();
 +        final Set<String> currentLabels = new HashSet<>();
 +        while (!(currentStep instanceof EmptyStep)) {
 +            if (currentStep instanceof VertexComputing) {
 +                currentLabels.addAll(currentStep.getLabels());
 +                currentStep.getLabels().forEach(currentStep::removeLabel);
 +            } else {
 +                currentLabels.forEach(currentStep::addLabel);
 +                currentLabels.clear();
 +            }
 +            currentStep = currentStep.getPreviousStep();
 +        }
 +
 +        // push GraphStep forward in the chain to reduce the number of TraversalVertexProgram compilations
 +        currentStep = traversal.getStartStep();
 +        while (!(currentStep instanceof EmptyStep)) {
 +            if (currentStep instanceof GraphStep && currentStep.getNextStep() instanceof VertexComputing) {
 +                int index = TraversalHelper.stepIndex(currentStep.getNextStep(), traversal);
 +                traversal.removeStep(currentStep);
 +                traversal.addStep(index, currentStep);
 +            } else
 +                currentStep = currentStep.getNextStep();
 +        }
 +
 +        // wrap all non-VertexComputing steps into a TraversalVertexProgramStep
 +        currentStep = traversal.getStartStep();
 +        while (!(currentStep instanceof EmptyStep)) {
 +            Traversal.Admin<?, ?> computerTraversal = new DefaultTraversal<>();
 +            Step<?, ?> firstLegalOLAPStep = getFirstLegalOLAPStep(currentStep);
 +            Step<?, ?> lastLegalOLAPStep = getLastLegalOLAPStep(currentStep);
 +            if (!(firstLegalOLAPStep instanceof EmptyStep)) {
 +                int index = TraversalHelper.stepIndex(firstLegalOLAPStep, traversal);
 +                TraversalHelper.removeToTraversal(firstLegalOLAPStep, lastLegalOLAPStep.getNextStep(), (Traversal.Admin) computerTraversal);
 +                final TraversalVertexProgramStep traversalVertexProgramStep = new TraversalVertexProgramStep(traversal, computerTraversal);
 +                traversal.addStep(index, traversalVertexProgramStep);
 +            }
 +            currentStep = traversal.getStartStep();
 +            while (!(currentStep instanceof EmptyStep)) {
 +                if (!(currentStep instanceof VertexComputing))
 +                    break;
 +                currentStep = currentStep.getNextStep();
 +            }
 +        }
 +        // if the last vertex computing step is a TraversalVertexProgramStep convert to OLTP with ComputerResultStep
 +        TraversalHelper.getLastStepOfAssignableClass(VertexComputing.class, traversal).ifPresent(step -> {
 +            if (step instanceof TraversalVertexProgramStep) {
 +                final ComputerResultStep computerResultStep = new ComputerResultStep<>(traversal);
 +                ((TraversalVertexProgramStep) step).getGlobalChildren().get(0).getEndStep().getLabels().forEach(computerResultStep::addLabel);
 +                // labeling should happen in TraversalVertexProgram (perhaps MapReduce)
 +                TraversalHelper.insertAfterStep(computerResultStep, (Step) step, traversal);
 +            }
 +        });
 +        // if there is a dangling vertex computing step, add an identity traversal (solve this in the future with a specialized MapReduce)
 +        if (traversal.getEndStep() instanceof VertexComputing && !(traversal.getEndStep() instanceof TraversalVertexProgramStep)) {
 +            final TraversalVertexProgramStep traversalVertexProgramStep = new TraversalVertexProgramStep(traversal, __.identity().asAdmin());
 +            traversal.addStep(traversalVertexProgramStep);
 +            traversal.addStep(new ComputerResultStep<>(traversal));
 +        }
 +        // all vertex computing steps needs the graph computer function
-         traversal.getSteps().stream().filter(step -> step instanceof VertexComputing).forEach(step -> ((VertexComputing) step).setGraphComputerFunction(this.computer));
++        traversal.getSteps().stream().filter(step -> step instanceof VertexComputing).forEach(step -> ((VertexComputing) step).setComputer(this.computer));
 +    }
 +
 +    private static Step<?, ?> getFirstLegalOLAPStep(Step<?, ?> currentStep) {
 +        while (!(currentStep instanceof EmptyStep)) {
 +            if (!(currentStep instanceof VertexComputing))
 +                return currentStep;
 +            currentStep = currentStep.getNextStep();
 +        }
 +        return EmptyStep.instance();
 +    }
 +
 +    private static Step<?, ?> getLastLegalOLAPStep(Step<?, ?> currentStep) {
 +        while (currentStep instanceof VertexComputing)
 +            currentStep = currentStep.getNextStep();
 +        while (!(currentStep instanceof EmptyStep)) {
 +            if (currentStep instanceof VertexComputing)
 +                return currentStep.getPreviousStep();
 +            currentStep = currentStep.getNextStep();
 +        }
 +        return EmptyStep.instance();
 +    }
 +
 +    public static Optional<Computer> getComputer(final TraversalStrategies strategies) {
 +        final Optional<TraversalStrategy<?>> optional = strategies.toList().stream().filter(strategy -> strategy instanceof VertexProgramStrategy).findAny();
 +        return optional.isPresent() ? Optional.of(((VertexProgramStrategy) optional.get()).computer) : Optional.empty();
 +    }
 +}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6c7962f5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6c7962f5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6c7962f5/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
----------------------------------------------------------------------
diff --cc gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
index df7e185,a95e95b..ede493f
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
@@@ -61,7 -61,7 +61,8 @@@ import org.apache.tinkerpop.gremlin.pro
  import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyPathTest;
  import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyPeerPressureTest;
  import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyProfileTest;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyProgramTest;
 +import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyProjectTest;
  import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyPropertiesTest;
  import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovySelectTest;
  import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovySumTest;
@@@ -147,7 -147,7 +148,8 @@@ public class GroovyProcessComputerSuit
              GroovyPathTest.Traversals.class,
              GroovyPeerPressureTest.Traversals.class,
              GroovyProfileTest.Traversals.class,
 +            GroovyProjectTest.Traversals.class,
+             GroovyProgramTest.Traversals.class,
              GroovyPropertiesTest.Traversals.class,
              GroovySelectTest.Traversals.class,
              GroovySumTest.Traversals.class,

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6c7962f5/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
----------------------------------------------------------------------
diff --cc gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
index c3c3d02,ed2bf33..5685c7c
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
@@@ -64,7 -64,7 +64,8 @@@ import org.apache.tinkerpop.gremlin.pro
  import org.apache.tinkerpop.gremlin.process.traversal.step.map.PathTest;
  import org.apache.tinkerpop.gremlin.process.traversal.step.map.PeerPressureTest;
  import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProfileTest;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest;
 +import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProjectTest;
  import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesTest;
  import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectTest;
  import org.apache.tinkerpop.gremlin.process.traversal.step.map.SumTest;
@@@ -155,7 -155,7 +156,8 @@@ public class ProcessComputerSuite exten
              PathTest.Traversals.class,
              PeerPressureTest.Traversals.class,
              ProfileTest.Traversals.class,
 +            ProjectTest.Traversals.class,
+             ProgramTest.Traversals.class,
              PropertiesTest.Traversals.class,
              SelectTest.Traversals.class,
              UnfoldTest.Traversals.class,
@@@ -229,8 -229,10 +231,11 @@@
              MatchTest.class,
              OrderTest.class,
              PageRankTest.class,
+             PeerPressureTest.class,
              PathTest.class,
              ProfileTest.class,
++            ProjectTest.class,
+             ProgramTest.class,
              PropertiesTest.class,
              SelectTest.class,
              UnfoldTest.class,


[2/6] incubator-tinkerpop git commit: simplified ProgramVertexProgramStep and added ProgramTest and GroovyProgramTest. Its crazy, it 'just works'.

Posted by ok...@apache.org.
simplified ProgramVertexProgramStep and added ProgramTest and GroovyProgramTest. Its crazy, it 'just works'.


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

Branch: refs/heads/master
Commit: cd143baff809e657b37768f04a327c05a962e254
Parents: f6d4962
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Mar 24 11:07:45 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Mar 24 11:07:45 2016 -0600

----------------------------------------------------------------------
 .../step/map/ProgramVertexProgramStep.java      | 12 +--
 .../traversal/dsl/graph/GraphTraversal.java     |  5 +
 .../traversal/dsl/graph/GraphTraversalTest.java |  2 +-
 .../traversal/step/map/GroovyProgramTest.groovy | 45 +++++++++
 .../process/GroovyProcessComputerSuite.java     |  2 +
 .../gremlin/process/ProcessComputerSuite.java   |  4 +
 .../process/traversal/step/map/ProgramTest.java | 97 ++++++++++++++++++++
 7 files changed, 157 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cd143baf/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
index e41e894..3ab73bc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
@@ -20,12 +20,11 @@
 package org.apache.tinkerpop.gremlin.process.computer.traversal.step.map;
 
 import org.apache.commons.configuration.MapConfiguration;
-import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
 import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 
-import java.util.Collections;
+import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -37,19 +36,14 @@ public final class ProgramVertexProgramStep extends VertexProgramStep {
 
     public ProgramVertexProgramStep(final Traversal.Admin traversal, final VertexProgram vertexProgram) {
         super(traversal);
-        final MapConfiguration base = new MapConfiguration(Collections.emptyMap());
+        this.configuration = new HashMap<>();
+        final MapConfiguration base = new MapConfiguration(this.configuration);
         base.setDelimiterParsingDisabled(true);
         vertexProgram.storeState(base);
-        this.configuration = base.getMap();
     }
 
     @Override
     public VertexProgram generateProgram(final Graph graph) {
         return VertexProgram.createVertexProgram(graph, new MapConfiguration(this.configuration));
     }
-
-    @Override
-    public GraphComputer generateComputer(final Graph graph) {
-        return this.computer.apply(graph);
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cd143baf/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index 2ed3dd7..e3a1be1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -18,8 +18,10 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.dsl.graph;
 
+import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PageRankVertexProgramStep;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PeerPressureVertexProgramStep;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ProgramVertexProgramStep;
 import org.apache.tinkerpop.gremlin.process.traversal.Order;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
@@ -1164,6 +1166,9 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
         return this.asAdmin().addStep((Step<E, E>) new PeerPressureVertexProgramStep(this.asAdmin()));
     }
 
+    public default GraphTraversal<S, E> program(final VertexProgram<?> vertexProgram) {
+        return this.asAdmin().addStep((Step<E, E>) new ProgramVertexProgramStep(this.asAdmin(), vertexProgram));
+    }
 
     ///////////////////// UTILITY STEPS /////////////////////
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cd143baf/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
index 76c4212..98d590b 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
@@ -31,7 +31,7 @@ import java.util.Set;
  */
 public class GraphTraversalTest {
 
-    private static Set<String> NO_GRAPH = new HashSet<>(Arrays.asList("asAdmin", "by", "option", "iterate", "to", "from", "profile", "pageRank", "peerPressure"));
+    private static Set<String> NO_GRAPH = new HashSet<>(Arrays.asList("asAdmin", "by", "option", "iterate", "to", "from", "profile", "pageRank", "peerPressure", "program"));
     private static Set<String> NO_ANONYMOUS = new HashSet<>(Arrays.asList("start", "__"));
 
     @Test

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cd143baf/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy
new file mode 100644
index 0000000..889b088
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy
@@ -0,0 +1,45 @@
+/*
+ * 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.step.map
+
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal
+import org.apache.tinkerpop.gremlin.process.traversal.util.ScriptTraversal
+import org.apache.tinkerpop.gremlin.structure.Vertex
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class GroovyProgramTest {
+
+    public static class Traversals extends ProgramTest {
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_programXpageRankX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.program(PageRankVertexProgram.build().create(graph))", "graph", graph)
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, List<Object>>> get_g_V_hasLabelXpersonX_programXpageRank_rankX_order_byXrank_incrX_valueMapXname_rankX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.hasLabel('person').program(PageRankVertexProgram.build().property('rank').create(graph)).order.by('rank',incr).valueMap('name','rank')", "graph", graph);
+        }
+    }
+}
+
+

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cd143baf/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
index 496083f..a95e95b 100644
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
@@ -61,6 +61,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyPageRankTes
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyPathTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyPeerPressureTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyProfileTest;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyProgramTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyPropertiesTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovySelectTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovySumTest;
@@ -146,6 +147,7 @@ public class GroovyProcessComputerSuite extends ProcessComputerSuite {
             GroovyPathTest.Traversals.class,
             GroovyPeerPressureTest.Traversals.class,
             GroovyProfileTest.Traversals.class,
+            GroovyProgramTest.Traversals.class,
             GroovyPropertiesTest.Traversals.class,
             GroovySelectTest.Traversals.class,
             GroovySumTest.Traversals.class,

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cd143baf/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
index 82436c2..ed2bf33 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
@@ -64,6 +64,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.PageRankTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.PathTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.PeerPressureTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProfileTest;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.SumTest;
@@ -154,6 +155,7 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
             PathTest.Traversals.class,
             PeerPressureTest.Traversals.class,
             ProfileTest.Traversals.class,
+            ProgramTest.Traversals.class,
             PropertiesTest.Traversals.class,
             SelectTest.Traversals.class,
             UnfoldTest.Traversals.class,
@@ -227,8 +229,10 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
             MatchTest.class,
             OrderTest.class,
             PageRankTest.class,
+            PeerPressureTest.class,
             PathTest.class,
             ProfileTest.class,
+            ProgramTest.class,
             PropertiesTest.class,
             SelectTest.class,
             UnfoldTest.class,

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cd143baf/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProgramTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProgramTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProgramTest.java
new file mode 100644
index 0000000..827286e
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProgramTest.java
@@ -0,0 +1,97 @@
+/*
+ * 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.step.map;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankVertexProgram;
+import org.apache.tinkerpop.gremlin.process.traversal.Order;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import java.util.List;
+import java.util.Map;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class ProgramTest extends AbstractGremlinProcessTest {
+
+    public abstract Traversal<Vertex, Vertex> get_g_V_programXpageRankX();
+
+    public abstract Traversal<Vertex, Map<String, List<Object>>> get_g_V_hasLabelXpersonX_programXpageRank_rankX_order_byXrank_incrX_valueMapXname_rankX();
+
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_programXpageRankX() {
+        final Traversal<Vertex, Vertex> traversal = get_g_V_programXpageRankX();
+        printTraversalForm(traversal);
+        int counter = 0;
+        while (traversal.hasNext()) {
+            final Vertex vertex = traversal.next();
+            counter++;
+            assertTrue(vertex.property(PageRankVertexProgram.PAGE_RANK).isPresent());
+        }
+        assertEquals(6, counter);
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_hasLabelXpersonX_programXpageRank_rankX_order_byXrank_decrX_valueMapXname_rankX() {
+        final Traversal<Vertex, Map<String, List<Object>>> traversal = get_g_V_hasLabelXpersonX_programXpageRank_rankX_order_byXrank_incrX_valueMapXname_rankX();
+        printTraversalForm(traversal);
+        int counter = 0;
+        double lastRank = Double.MIN_VALUE;
+        while (traversal.hasNext()) {
+            final Map<String, List<Object>> map = traversal.next();
+            assertEquals(2, map.size());
+            assertEquals(1, map.get("name").size());
+            assertEquals(1, map.get("rank").size());
+            String name = (String) map.get("name").get(0);
+            double rank = (Double) map.get("rank").get(0);
+            assertTrue(rank >= lastRank);
+            lastRank = rank;
+            assertFalse(name.equals("lop") || name.equals("ripple"));
+            counter++;
+        }
+        assertEquals(4, counter);
+    }
+
+
+    public static class Traversals extends ProgramTest {
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_programXpageRankX() {
+            return g.V().program(PageRankVertexProgram.build().create(graph));
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, List<Object>>> get_g_V_hasLabelXpersonX_programXpageRank_rankX_order_byXrank_incrX_valueMapXname_rankX() {
+            return g.V().hasLabel("person").program(PageRankVertexProgram.build().property("rank").create(graph)).order().by("rank", Order.incr).valueMap("name", "rank");
+        }
+    }
+}
\ No newline at end of file


[5/6] incubator-tinkerpop git commit: Forgot an OPT_OUT in RemoteGraph.

Posted by ok...@apache.org.
Forgot an OPT_OUT in RemoteGraph.


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

Branch: refs/heads/master
Commit: 237956e302a9844c1864ea96fa3f1e41c01dcd6d
Parents: d543f98
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Mar 30 06:04:58 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Mar 30 06:04:58 2016 -0600

----------------------------------------------------------------------
 .../org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/237956e3/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
index 3fe6eb2..881a99e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
@@ -74,6 +74,10 @@ import java.util.Iterator;
         method = "g_V_pageRank",
         reason = "RemoteGraph retrieves detached vertices that can't be attached to a remote OLAP graph")
 @Graph.OptOut(
+        test = "org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest",
+        method = "g_V_programXpageRankX",
+        reason = "RemoteGraph retrieves detached vertices that can't be attached to a remote OLAP graph")
+@Graph.OptOut(
         test = "org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankVertexProgramTest",
         method = "*",
         reason = "RemoteGraph does not support direct Graph.compute() access")


[4/6] incubator-tinkerpop git commit: added hashCode() and toString() to ProgramVertexProgramStep.

Posted by ok...@apache.org.
added hashCode() and toString() to ProgramVertexProgramStep.


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

Branch: refs/heads/master
Commit: d543f980693aa6b2d28442e5745bf8ff802034ed
Parents: 9521abf
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Mar 29 08:31:49 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Mar 29 08:31:49 2016 -0600

----------------------------------------------------------------------
 .../traversal/step/map/ProgramVertexProgramStep.java   | 13 +++++++++++++
 1 file changed, 13 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d543f980/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
index 0b2181c..dfa7983 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
@@ -23,6 +23,7 @@ import org.apache.commons.configuration.MapConfiguration;
 import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -33,6 +34,7 @@ import java.util.Map;
 public final class ProgramVertexProgramStep extends VertexProgramStep {
 
     private final Map<String, Object> configuration;
+    private final String toStringOfVertexProgram;
 
     public ProgramVertexProgramStep(final Traversal.Admin traversal, final VertexProgram vertexProgram) {
         super(traversal);
@@ -40,10 +42,21 @@ public final class ProgramVertexProgramStep extends VertexProgramStep {
         final MapConfiguration base = new MapConfiguration(this.configuration);
         base.setDelimiterParsingDisabled(true);
         vertexProgram.storeState(base);
+        this.toStringOfVertexProgram = vertexProgram.toString();
     }
 
     @Override
     public VertexProgram generateProgram(final Graph graph) {
         return VertexProgram.createVertexProgram(graph, new MapConfiguration(this.configuration));
     }
+
+    @Override
+    public int hashCode() {
+        return super.hashCode() ^ this.configuration.hashCode();
+    }
+
+    @Override
+    public String toString() {
+        return StringFactory.stepString(this, this.toStringOfVertexProgram);
+    }
 }