added GraphTraversalSource.addV(traversal) and 
GraphTraversalSource.addE(traversal). Added 2 more test cases. One more to go. 
Updated upgrade docs accordingly.


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

Branch: refs/heads/master
Commit: f0dc7ff5d72e4ba8532326fe9b99c35b476f4b09
Parents: bd2c3b2
Author: Marko A. Rodriguez <[email protected]>
Authored: Wed Sep 27 10:55:56 2017 -0600
Committer: Marko A. Rodriguez <[email protected]>
Committed: Wed Sep 27 10:55:56 2017 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  2 +-
 docs/src/upgrade/release-3.3.x.asciidoc         |  6 +++
 .../traversal/dsl/graph/GraphTraversal.java     |  2 +-
 .../dsl/graph/GraphTraversalSource.java         | 25 ++++++++-----
 .../traversal/step/map/AddEdgeStartStep.java    |  5 +++
 .../traversal/step/map/AddVertexStartStep.java  |  5 +++
 .../traversal/step/map/AddVertexTest.java       | 39 ++++++++++++++++++++
 7 files changed, 73 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f0dc7ff5/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index c9d0509..fab4ade 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,7 +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.
+* Added `addV(traversal)` and `addE(traversal)` so that 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/f0dc7ff5/docs/src/upgrade/release-3.3.x.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.3.x.asciidoc 
b/docs/src/upgrade/release-3.3.x.asciidoc
index fa50d47..e677995 100644
--- a/docs/src/upgrade/release-3.3.x.asciidoc
+++ b/docs/src/upgrade/release-3.3.x.asciidoc
@@ -29,6 +29,12 @@ Please see the 
link:https://github.com/apache/tinkerpop/blob/3.3.1/CHANGELOG.asc
 
 === Upgrading for Users
 
+==== addV(traversal) and addE(traversal)
+
+The `GraphTraversal` and `GraphTraversalSource` methods of `addV()` and 
`addE()` have been extended to support dynamic
+label determination upon element creation. Both these methods can take a 
`Traversal<?, String>` where the first `String`
+returned by the traversal is used as the label of the respective element.
+
 ==== PageRankVertexProgram
 
 There were two major bugs in the way in which PageRank was being calculated in 
`PageRankVertexProgram`. First, teleportation

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f0dc7ff5/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 d3de413..e64b233 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
@@ -981,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(), 
Vertex.DEFAULT_LABEL));
+        return this.asAdmin().addStep(new AddVertexStep<>(this.asAdmin(), 
(String) null));
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f0dc7ff5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
index 2d4b94f..81a0a71 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
@@ -23,14 +23,11 @@ import 
org.apache.tinkerpop.gremlin.process.computer.Computer;
 import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
 import org.apache.tinkerpop.gremlin.process.remote.RemoteConnection;
 import 
org.apache.tinkerpop.gremlin.process.remote.traversal.strategy.decoration.RemoteStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.Bindings;
 import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import 
org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine;
-import 
org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
 import 
org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeStartStep;
 import 
org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStartStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
@@ -39,14 +36,10 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.Requir
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
-import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Transaction;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Optional;
 import java.util.function.BinaryOperator;
 import java.util.function.Supplier;
@@ -261,11 +254,18 @@ public class GraphTraversalSource implements 
TraversalSource {
         return traversal.addStep(new AddVertexStartStep(traversal, label));
     }
 
+    public GraphTraversal<Vertex, Vertex> addV(final Traversal<?, String> 
vertexLabelTraversal) {
+        final GraphTraversalSource clone = this.clone();
+        clone.bytecode.addStep(GraphTraversal.Symbols.addV, 
vertexLabelTraversal);
+        final GraphTraversal.Admin<Vertex, Vertex> traversal = new 
DefaultGraphTraversal<>(clone);
+        return traversal.addStep(new AddVertexStartStep(traversal, 
vertexLabelTraversal));
+    }
+
     public GraphTraversal<Vertex, Vertex> addV() {
         final GraphTraversalSource clone = this.clone();
         clone.bytecode.addStep(GraphTraversal.Symbols.addV);
         final GraphTraversal.Admin<Vertex, Vertex> traversal = new 
DefaultGraphTraversal<>(clone);
-        return traversal.addStep(new AddVertexStartStep(traversal, null));
+        return traversal.addStep(new AddVertexStartStep(traversal, 
(String)null));
     }
 
     public GraphTraversal<Edge, Edge> addE(final String label) {
@@ -275,6 +275,13 @@ public class GraphTraversalSource implements 
TraversalSource {
         return traversal.addStep(new AddEdgeStartStep(traversal, label));
     }
 
+    public GraphTraversal<Edge, Edge> addE(final Traversal<?, String> 
edgeLabelTraversal) {
+        final GraphTraversalSource clone = this.clone();
+        clone.bytecode.addStep(GraphTraversal.Symbols.addE, 
edgeLabelTraversal);
+        final GraphTraversal.Admin<Edge, Edge> traversal = new 
DefaultGraphTraversal<>(clone);
+        return traversal.addStep(new AddEdgeStartStep(traversal, 
edgeLabelTraversal));
+    }
+
     public <S> GraphTraversal<S, S> inject(S... starts) {
         final GraphTraversalSource clone = this.clone();
         clone.bytecode.addStep(GraphTraversal.Symbols.inject, starts);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f0dc7ff5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStep.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStep.java
index e629453..e5c023b 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStep.java
@@ -66,6 +66,11 @@ public final class AddEdgeStartStep extends 
AbstractStep<Edge, Edge>
         this.parameters.set(this, T.label, edgeLabel);
     }
 
+    public AddEdgeStartStep(final Traversal.Admin traversal, final 
Traversal<?,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/f0dc7ff5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStartStep.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStartStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStartStep.java
index 7de8839..bf95fe5 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStartStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStartStep.java
@@ -57,6 +57,11 @@ public final class AddVertexStartStep extends 
AbstractStep<Vertex, Vertex>
         this.parameters.set(this, T.label, label);
     }
 
+    public AddVertexStartStep(final Traversal.Admin traversal, final 
Traversal<?, 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/f0dc7ff5/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
index 584ead4..ad54dae 100644
--- 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
+++ 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
@@ -37,6 +37,7 @@ import java.util.List;
 import java.util.Map;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.V;
 import static 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.select;
 import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.junit.Assert.assertEquals;
@@ -72,6 +73,10 @@ public abstract class AddVertexTest extends 
AbstractGremlinTest {
 
     public abstract Traversal<Vertex, String> 
get_g_withSideEffectXa_markoX_addV_propertyXname_selectXaXX_name();
 
+    public abstract Traversal<Vertex, String> 
get_g_addVXV_hasXname_markoX_propertiesXnameX_keyX_label();
+
+    public abstract Traversal<Vertex, Map<Object, Object>> 
get_g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMapXtrueX();
+
     @Test
     @LoadGraphWith(MODERN)
     @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, 
feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
@@ -273,6 +278,30 @@ public abstract class AddVertexTest extends 
AbstractGremlinTest {
         assertFalse(traversal.hasNext());
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, 
feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
+    public void g_addVXV_hasXname_markoX_propertiesXnameX_keyX_label() {
+        final Traversal<Vertex, String> traversal = 
get_g_addVXV_hasXname_markoX_propertiesXnameX_keyX_label();
+        printTraversalForm(traversal);
+        assertEquals("name", traversal.next());
+        assertFalse(traversal.hasNext());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, 
feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
+    @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, 
feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY)
+    public void 
g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMapXtrueX()
 {
+        final Traversal<Vertex, Map<Object,Object>> traversal = 
get_g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMapXtrueX();
+        printTraversalForm(traversal);
+        final Map<Object,Object> map = traversal.next();
+        assertFalse(traversal.hasNext());
+        assertEquals("person",map.get(T.label));
+        assertEquals("software",((List)map.get("test")).get(0));
+        assertEquals(1, ((List)map.get("test")).size());
+        assertEquals(3, map.size());
+    }
 
     public static class Traversals extends AddVertexTest {
 
@@ -330,5 +359,15 @@ public abstract class AddVertexTest extends 
AbstractGremlinTest {
         public Traversal<Vertex, String> 
get_g_withSideEffectXa_markoX_addV_propertyXname_selectXaXX_name() {
             return g.withSideEffect("a", "marko").addV().property("name", 
select("a")).values("name");
         }
+
+        @Override
+        public Traversal<Vertex, String> 
get_g_addVXV_hasXname_markoX_propertiesXnameX_keyX_label() {
+            return g.addV(V().has("name", 
"marko").properties("name").key()).label();
+        }
+
+        @Override
+        public Traversal<Vertex, Map<Object, Object>> 
get_g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMapXtrueX()
 {
+            return g.V().as("a").has("name", 
"marko").out("created").as("b").addV(select("a").label()).property("test", 
select("b").label()).valueMap(true);
+        }
     }
 }
\ No newline at end of file

Reply via email to