Repository: tinkerpop
Updated Branches:
  refs/heads/master f142174e9 -> bccdb4cb0


first push of working addV(traversal) and addE(traversal). I have only written 
one test case thus far. However, taking a break and pushing what I have. Need 
to write about 3 more test cases to be confident.


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

Branch: refs/heads/master
Commit: bd2c3b27059a50b87960a5bf270c5b9633bb8edc
Parents: fa246a1
Author: Marko A. Rodriguez <[email protected]>
Authored: Wed Sep 27 10:05:16 2017 -0600
Committer: Marko A. Rodriguez <[email protected]>
Committed: Wed Sep 27 10:05:16 2017 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../traversal/dsl/graph/GraphTraversal.java     | 34 +++++++++++++++++---
 .../gremlin/process/traversal/dsl/graph/__.java | 14 ++++++++
 .../process/traversal/step/map/AddEdgeStep.java |  5 +++
 .../traversal/step/map/AddVertexStep.java       |  5 +++
 .../process/traversal/step/map/AddEdgeTest.java | 22 +++++++++++++
 6 files changed, 76 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bd2c3b27/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 7f8c445..c9d0509 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 This release also includes changes from <<release-3-2-7, 3.2.7>>.
 
+* Added `addV(traversal)` and `addE(traversal)`, where created element labels 
can be determined dynamically.
 * `PageRankVertexProgram` supports `maxIterations` but will break out early if 
epsilon-based convergence occurs.
 * Added support for epsilon-based convergence in `PageRankVertexProgram`.
 * Fixed two major bugs in how PageRank was being calculated in 
`PageRankVertexProgram`.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bd2c3b27/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 a97c88b..d3de413 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
@@ -961,6 +961,18 @@ public interface GraphTraversal<S, E> extends Traversal<S, 
E> {
     }
 
     /**
+     * Adds a {@link Vertex} with a vertex label determined by a {@link 
Traversal}.
+     *
+     * @return the traversal with the {@link AddVertexStep} added
+     * @see <a 
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#addvertex-step";
 target="_blank">Reference Documentation - AddVertex Step</a>
+     * @since 3.3.1
+     */
+    public default GraphTraversal<S, Vertex> addV(final Traversal<?, String> 
vertexLabelTraversal) {
+        this.asAdmin().getBytecode().addStep(Symbols.addV);
+        return this.asAdmin().addStep(new AddVertexStep<>(this.asAdmin(), 
vertexLabelTraversal.asAdmin()));
+    }
+
+    /**
      * Adds a {@link Vertex} with a default vertex label.
      *
      * @return the traversal with the {@link AddVertexStep} added
@@ -969,7 +981,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, 
E> {
      */
     public default GraphTraversal<S, Vertex> addV() {
         this.asAdmin().getBytecode().addStep(Symbols.addV);
-        return this.asAdmin().addStep(new AddVertexStep<>(this.asAdmin(), 
null));
+        return this.asAdmin().addStep(new AddVertexStep<>(this.asAdmin(), 
Vertex.DEFAULT_LABEL));
     }
 
     /**
@@ -986,6 +998,18 @@ public interface GraphTraversal<S, E> extends Traversal<S, 
E> {
     }
 
     /**
+     * Adds a {@link Edge} with an edge label determined by a {@link 
Traversal}.
+     *
+     * @return the traversal with the {@link AddEdgeStep} added
+     * @see <a 
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#addedge-step";
 target="_blank">Reference Documentation - AddEdge Step</a>
+     * @since 3.3.1
+     */
+    public default GraphTraversal<S, Edge> addE(final Traversal<?, String> 
edgeLabelTraversal) {
+        this.asAdmin().getBytecode().addStep(Symbols.addE);
+        return this.asAdmin().addStep(new AddEdgeStep<>(this.asAdmin(), 
edgeLabelTraversal.asAdmin()));
+    }
+
+    /**
      * Provide {@code to()}-modulation to respective steps.
      *
      * @param toStepLabel the step label to modulate to.
@@ -1359,7 +1383,7 @@ public interface GraphTraversal<S, E> extends 
Traversal<S, E> {
      */
     public default GraphTraversal<S, E> has(final String propertyKey) {
         this.asAdmin().getBytecode().addStep(Symbols.has, propertyKey);
-        return this.asAdmin().addStep(new TraversalFilterStep(this.asAdmin(),  
__.values(propertyKey)));
+        return this.asAdmin().addStep(new TraversalFilterStep(this.asAdmin(), 
__.values(propertyKey)));
     }
 
     /**
@@ -1708,8 +1732,8 @@ public interface GraphTraversal<S, E> extends 
Traversal<S, E> {
      *
      * @param skip the number of objects to skip
      * @return the traversal with an appended {@link RangeGlobalStep}
-     * @since 3.3.0
      * @see <a 
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#skip-step"; 
target="_blank">Reference Documentation - Skip Step</a>
+     * @since 3.3.0
      */
     public default GraphTraversal<S, E> skip(final long skip) {
         this.asAdmin().getBytecode().addStep(Symbols.skip, skip);
@@ -1720,10 +1744,10 @@ public interface GraphTraversal<S, E> extends 
Traversal<S, E> {
      * Filters out the first {@code n} objects in the traversal.
      *
      * @param scope the scope of how to apply the {@code tail}
-     * @param skip the number of objects to skip
+     * @param skip  the number of objects to skip
      * @return the traversal with an appended {@link RangeGlobalStep} or 
{@link RangeLocalStep} depending on {@code scope}
-     * @since 3.3.0
      * @see <a 
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#skip-step"; 
target="_blank">Reference Documentation - Skip Step</a>
+     * @since 3.3.0
      */
     public default <E2> GraphTraversal<S, E2> skip(final Scope scope, final 
long skip) {
         this.asAdmin().getBytecode().addStep(Symbols.skip, scope, skip);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bd2c3b27/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
index a1b40e3..9dc3a93 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
@@ -471,6 +471,13 @@ public class __ {
     }
 
     /**
+     * @see 
GraphTraversal#addV(org.apache.tinkerpop.gremlin.process.traversal.Traversal)
+     */
+    public static <A> GraphTraversal<A, Vertex> addV(final Traversal<?, 
String> vertexLabelTraversal) {
+        return __.<A>start().addV(vertexLabelTraversal);
+    }
+
+    /**
      * @see GraphTraversal#addV()
      */
     public static <A> GraphTraversal<A, Vertex> addV() {
@@ -484,6 +491,13 @@ public class __ {
         return __.<A>start().addE(edgeLabel);
     }
 
+    /**
+     * @see 
GraphTraversal#addE(org.apache.tinkerpop.gremlin.process.traversal.Traversal)
+     */
+    public static <A> GraphTraversal<A, Edge> addE(final Traversal<?, String> 
edgeLabelTraversal) {
+        return __.<A>start().addE(edgeLabelTraversal);
+    }
+
     ///////////////////// FILTER STEPS /////////////////////
 
     /**

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bd2c3b27/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
index efe5906..3455e2c 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
@@ -60,6 +60,11 @@ public final class AddEdgeStep<S> extends MapStep<S, Edge>
         this.parameters.set(this, T.label, edgeLabel);
     }
 
+    public AddEdgeStep(final Traversal.Admin traversal, final 
Traversal.Admin<S,String> edgeLabelTraversal) {
+        super(traversal);
+        this.parameters.set(this, T.label, edgeLabelTraversal);
+    }
+
     @Override
     public <S, E> List<Traversal.Admin<S, E>> getLocalChildren() {
         return this.parameters.getTraversals();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bd2c3b27/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStep.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStep.java
index c35fa80..6faa3d5 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStep.java
@@ -52,6 +52,11 @@ public final class AddVertexStep<S> extends MapStep<S, 
Vertex>
         this.parameters.set(this, T.label, label);
     }
 
+    public AddVertexStep(final Traversal.Admin traversal, final 
Traversal.Admin<S,String> vertexLabelTraversal) {
+        super(traversal);
+        this.parameters.set(this, T.label, vertexLabelTraversal);
+    }
+
     @Override
     public Parameters getParameters() {
         return this.parameters;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bd2c3b27/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
index 59ac1e9..0bf2ba6 100644
--- 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
+++ 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
@@ -68,6 +68,8 @@ public abstract class AddEdgeTest extends 
AbstractGremlinProcessTest {
 
     public abstract Traversal<Edge, Edge> 
get_g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X(final Vertex a, final 
Vertex b);
 
+    public abstract Traversal<Vertex,Edge> 
get_g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX();
+
     ///////
 
     @Test
@@ -255,6 +257,21 @@ public abstract class AddEdgeTest extends 
AbstractGremlinProcessTest {
         assertEquals(7L, g.E().count().next().longValue());
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, 
feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
+    public void 
g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX() 
{
+        final Traversal<Vertex,Edge> traversal =  
get_g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX();
+        printTraversalForm(traversal);
+        final Edge edge =traversal.next();
+        assertFalse(traversal.hasNext());
+        assertEquals("created",edge.label());
+        assertEquals(convertToVertexId("marko"), edge.inVertex().id());
+        assertEquals(convertToVertexId("lop"), edge.outVertex().id());
+        assertEquals(6L, g.V().count().next().longValue());
+        assertEquals(7L, g.E().count().next().longValue());
+    }
+
     public static class Traversals extends AddEdgeTest {
 
         @Override
@@ -301,5 +318,10 @@ public abstract class AddEdgeTest extends 
AbstractGremlinProcessTest {
         public Traversal<Edge, Edge> 
get_g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X(final Vertex a, final 
Vertex b) {
             return g.addE("knows").from(a).to(b).property("weight", 0.1d);
         }
+
+        @Override
+        public Traversal<Vertex,Edge> 
get_g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX()
 {
+            return 
g.V().has("name","marko").as("a").outE("created").as("b").inV().addE(select("b").label()).to("a");
+        }
     }
 }

Reply via email to