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 2015/08/26 01:33:25 UTC

incubator-tinkerpop git commit: simplifications of Parameters and their usage in the AddXXXSteps. Man, this new model really simplified things even though, paradoxically, its provides more complex behavior.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/mutating_traverser f314fe674 -> 085cd168e


simplifications of Parameters and their usage in the AddXXXSteps. Man, this new model really simplified things even though, paradoxically, its provides more complex behavior.


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

Branch: refs/heads/mutating_traverser
Commit: 085cd168e8ff2eba8d1f4555ae49db9a5c51a529
Parents: f314fe6
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Aug 25 17:33:19 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Aug 25 17:33:19 2015 -0600

----------------------------------------------------------------------
 .../traversal/dsl/graph/GraphTraversal.java     |  5 +--
 .../process/traversal/step/map/AddEdgeStep.java | 46 ++++++++++----------
 .../traversal/step/map/AddVertexStartStep.java  | 34 ++++++++++-----
 .../traversal/step/map/AddVertexStep.java       | 29 +++++++-----
 .../step/sideEffect/AddPropertyStep.java        | 34 ++++++++++-----
 .../process/traversal/step/util/Parameters.java | 10 +++--
 6 files changed, 95 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/085cd168/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 2fdb3e2..2fad998 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
@@ -687,7 +687,6 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
      */
     @Deprecated
     public default GraphTraversal<S, Edge> addE(final Direction direction, final String firstVertexKeyOrEdgeLabel, final String edgeLabelOrSecondVertexKey, final Object... propertyKeyValues) {
-
         if (propertyKeyValues.length % 2 == 0) {
             // addOutE("createdBy", "a")
             this.addE(firstVertexKeyOrEdgeLabel);
@@ -991,9 +990,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
         return this.asAdmin().addStep(new ProfileStep<>(this.asAdmin()));
     }
 
-
-    public default GraphTraversal<S, E> property(final VertexProperty.Cardinality cardinality, final Object key,
-                                                 final Object value, final Object... keyValues) {
+    public default GraphTraversal<S, E> property(final VertexProperty.Cardinality cardinality, final Object key, final Object value, final Object... keyValues) {
         if ((this.asAdmin().getEndStep() instanceof AddVertexStep || this.asAdmin().getEndStep() instanceof AddEdgeStep || this.asAdmin().getEndStep() instanceof AddVertexStartStep) && keyValues.length == 0) {
             ((Mutating) this.asAdmin().getEndStep()).addPropertyMutations(new Object[]{key, value});
         } else {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/085cd168/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 dbd6491..6a83a59 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
@@ -34,9 +34,7 @@ import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -44,12 +42,12 @@ import java.util.Set;
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public final class AddEdgeStep<S> extends FlatMapStep<S, Edge> implements Mutating<Event.EdgeAddedEvent>, TraversalParent, Parameterizing {
+public final class AddEdgeStep<S> extends MapStep<S, Edge> implements Mutating<Event.EdgeAddedEvent>, TraversalParent, Parameterizing {
 
     private static final String FROM = Graph.Hidden.hide("from");
     private static final String TO = Graph.Hidden.hide("to");
 
-    private final Parameters parameters = new Parameters();
+    private Parameters parameters = new Parameters();
     private CallbackRegistry<Event.EdgeAddedEvent> callbackRegistry;
 
     public AddEdgeStep(final Traversal.Admin traversal, final String edgeLabel) {
@@ -69,9 +67,7 @@ public final class AddEdgeStep<S> extends FlatMapStep<S, Edge> implements Mutati
 
     @Override
     public void addPropertyMutations(final Object... keyValues) {
-        for (int i = 0; i < keyValues.length; i = i + 2) {
-            this.parameters.set(keyValues[i], keyValues[i + 1]);
-        }
+        this.parameters.set(keyValues);
         this.parameters.integrateTraversals(this);
     }
 
@@ -86,18 +82,16 @@ public final class AddEdgeStep<S> extends FlatMapStep<S, Edge> implements Mutati
     }
 
     @Override
-    protected Iterator<Edge> flatMap(final Traverser.Admin<S> traverser) {
-        final Vertex toVertex = this.parameters.get(traverser, TO, () -> (Vertex) traverser.get());
-        final Vertex fromVertex = this.parameters.get(traverser, FROM, () -> (Vertex) traverser.get());
-        final String edgeLabel = this.parameters.get(traverser, T.label, () -> Edge.DEFAULT_LABEL);
-
-        final Iterator<Edge> edgeIterator = IteratorUtils.of(fromVertex.addEdge(edgeLabel, toVertex, this.parameters.getKeyValues(traverser, TO, FROM, T.label)));
-        return IteratorUtils.consume(edgeIterator, edge -> {
-            if (callbackRegistry != null) {
-                final Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(DetachedFactory.detach(edge, true));
-                callbackRegistry.getCallbacks().forEach(c -> c.accept(vae));
-            }
-        });
+    protected Edge map(final Traverser.Admin<S> traverser) {
+        final Edge edge =
+                this.parameters.get(traverser, FROM, () -> (Vertex) traverser.get()).
+                        addEdge(this.parameters.get(traverser, T.label, () -> Edge.DEFAULT_LABEL),
+                                this.parameters.get(traverser, TO, () -> (Vertex) traverser.get()), this.parameters.getKeyValues(traverser, TO, FROM, T.label));
+        if (callbackRegistry != null) {
+            final Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(DetachedFactory.detach(edge, true));
+            callbackRegistry.getCallbacks().forEach(c -> c.accept(vae));
+        }
+        return edge;
     }
 
     @Override
@@ -107,14 +101,13 @@ public final class AddEdgeStep<S> extends FlatMapStep<S, Edge> implements Mutati
 
     @Override
     public CallbackRegistry<Event.EdgeAddedEvent> getMutatingCallbackRegistry() {
-        if (null == callbackRegistry) callbackRegistry = new ListCallbackRegistry<>();
-        return callbackRegistry;
+        if (null == this.callbackRegistry) this.callbackRegistry = new ListCallbackRegistry<>();
+        return this.callbackRegistry;
     }
 
     @Override
     public int hashCode() {
-        int result = super.hashCode() ^ this.parameters.hashCode();
-        return result;
+        return super.hashCode() ^ this.parameters.hashCode();
     }
 
     @Override
@@ -122,4 +115,11 @@ public final class AddEdgeStep<S> extends FlatMapStep<S, Edge> implements Mutati
         return StringFactory.stepString(this, this.parameters.toString());
     }
 
+    @Override
+    public AddEdgeStep<S> clone() {
+        final AddEdgeStep<S> clone = (AddEdgeStep<S>) super.clone();
+        clone.parameters = this.parameters.clone();
+        return clone;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/085cd168/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 da5cf71..7313bd8 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
@@ -33,6 +33,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.EmptyTraver
 import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
 
 import java.util.List;
@@ -44,7 +45,7 @@ import java.util.Set;
  */
 public final class AddVertexStartStep extends AbstractStep<Vertex, Vertex> implements Mutating<Event.VertexAddedEvent>, TraversalParent, Parameterizing {
 
-    private final Parameters parameters = new Parameters();
+    private Parameters parameters = new Parameters();
     private boolean first = true;
     private CallbackRegistry<Event.VertexAddedEvent> callbackRegistry;
 
@@ -66,9 +67,7 @@ public final class AddVertexStartStep extends AbstractStep<Vertex, Vertex> imple
 
     @Override
     public void addPropertyMutations(final Object... keyValues) {
-        for (int i = 0; i < keyValues.length; i = i + 2) {
-            this.parameters.set(keyValues[i], keyValues[i + 1]);
-        }
+        this.parameters.set(keyValues);
         this.parameters.integrateTraversals(this);
     }
 
@@ -76,21 +75,20 @@ public final class AddVertexStartStep extends AbstractStep<Vertex, Vertex> imple
     protected Traverser<Vertex> processNextStart() {
         if (this.first) {
             this.first = false;
-            final Vertex v = this.getTraversal().getGraph().get().addVertex(this.parameters.getKeyValues(EmptyTraverser.instance()));
-            if (callbackRegistry != null) {
-                final Event.VertexAddedEvent vae = new Event.VertexAddedEvent(DetachedFactory.detach(v, true));
-                callbackRegistry.getCallbacks().forEach(c -> c.accept(vae));
+            final Vertex vertex = this.getTraversal().getGraph().get().addVertex(this.parameters.getKeyValues(EmptyTraverser.instance()));
+            if (this.callbackRegistry != null) {
+                final Event.VertexAddedEvent vae = new Event.VertexAddedEvent(DetachedFactory.detach(vertex, true));
+                this.callbackRegistry.getCallbacks().forEach(c -> c.accept(vae));
             }
-
-            return this.getTraversal().getTraverserGenerator().generate(v, this, 1l);
+            return this.getTraversal().getTraverserGenerator().generate(vertex, this, 1l);
         } else
             throw FastNoSuchElementException.instance();
     }
 
     @Override
     public CallbackRegistry<Event.VertexAddedEvent> getMutatingCallbackRegistry() {
-        if (null == callbackRegistry) callbackRegistry = new ListCallbackRegistry<>();
-        return callbackRegistry;
+        if (null == this.callbackRegistry) this.callbackRegistry = new ListCallbackRegistry<>();
+        return this.callbackRegistry;
     }
 
     @Override
@@ -108,4 +106,16 @@ public final class AddVertexStartStep extends AbstractStep<Vertex, Vertex> imple
         super.reset();
         this.first = false;
     }
+
+    @Override
+    public String toString() {
+        return StringFactory.stepString(this, this.parameters);
+    }
+
+    @Override
+    public AddVertexStartStep clone() {
+        final AddVertexStartStep clone = (AddVertexStartStep) super.clone();
+        clone.parameters = this.parameters.clone();
+        return clone;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/085cd168/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 2e813f8..1d5e8c0 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
@@ -30,6 +30,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.ListCallba
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
 
 import java.util.List;
@@ -41,7 +42,7 @@ import java.util.Set;
  */
 public final class AddVertexStep<S> extends MapStep<S, Vertex> implements Mutating<Event.VertexAddedEvent>, TraversalParent, Parameterizing {
 
-    private final Parameters parameters = new Parameters();
+    private Parameters parameters = new Parameters();
     private CallbackRegistry<Event.VertexAddedEvent> callbackRegistry;
 
     public AddVertexStep(final Traversal.Admin traversal, final String label) {
@@ -62,20 +63,18 @@ public final class AddVertexStep<S> extends MapStep<S, Vertex> implements Mutati
 
     @Override
     public void addPropertyMutations(final Object... keyValues) {
-        for (int i = 0; i < keyValues.length; i = i + 2) {
-            this.parameters.set(keyValues[i], keyValues[i + 1]);
-        }
+        this.parameters.set(keyValues);
         this.parameters.integrateTraversals(this);
     }
 
     @Override
     protected Vertex map(final Traverser.Admin<S> traverser) {
-        final Vertex v = this.getTraversal().getGraph().get().addVertex(this.parameters.getKeyValues(traverser));
-        if (callbackRegistry != null) {
-            final Event.VertexAddedEvent vae = new Event.VertexAddedEvent(DetachedFactory.detach(v, true));
-            callbackRegistry.getCallbacks().forEach(c -> c.accept(vae));
+        final Vertex vertex = this.getTraversal().getGraph().get().addVertex(this.parameters.getKeyValues(traverser));
+        if (this.callbackRegistry != null) {
+            final Event.VertexAddedEvent vae = new Event.VertexAddedEvent(DetachedFactory.detach(vertex, true));
+            this.callbackRegistry.getCallbacks().forEach(c -> c.accept(vae));
         }
-        return v;
+        return vertex;
     }
 
     @Override
@@ -94,5 +93,15 @@ public final class AddVertexStep<S> extends MapStep<S, Vertex> implements Mutati
         return this.getSelfAndChildRequirements();
     }
 
-    // TODO clone()
+    @Override
+    public String toString() {
+        return StringFactory.stepString(this, this.parameters);
+    }
+
+    @Override
+    public AddVertexStep<S> clone() {
+        final AddVertexStep<S> clone = (AddVertexStep<S>) super.clone();
+        clone.parameters = this.parameters.clone();
+        return clone;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/085cd168/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStep.java
index d6771ae..ccae521 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStep.java
@@ -34,6 +34,7 @@ import org.apache.tinkerpop.gremlin.structure.Property;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
 
 import java.util.List;
@@ -44,8 +45,7 @@ import java.util.Set;
  */
 public final class AddPropertyStep<S extends Element> extends SideEffectStep<S> implements Mutating<Event.ElementPropertyChangedEvent>, TraversalParent, Parameterizing {
 
-    private final Parameters parameters = new Parameters();
-
+    private Parameters parameters = new Parameters();
     private final VertexProperty.Cardinality cardinality;
     private CallbackRegistry<Event.ElementPropertyChangedEvent> callbackRegistry;
 
@@ -69,16 +69,18 @@ public final class AddPropertyStep<S extends Element> extends SideEffectStep<S>
 
     @Override
     public void addPropertyMutations(final Object... keyValues) {
-        for (int i = 0; i < keyValues.length; i = i + 2) {
-            this.parameters.set(keyValues[i], keyValues[i + 1]);
-        }
+        this.parameters.set(keyValues);
         this.parameters.integrateTraversals(this);
     }
 
     @Override
     protected void sideEffect(final Traverser.Admin<S> traverser) {
-        final String key = this.parameters.get(traverser, T.key, null);
-        final Object value = this.parameters.get(traverser, T.value, null);
+        final String key = this.parameters.get(traverser, T.key, () -> {
+            throw new IllegalStateException("The AddPropertyStep does not have a provided key: " + this);
+        });
+        final Object value = this.parameters.get(traverser, T.value, () -> {
+            throw new IllegalStateException("The AddPropertyStep does not have a provided value: " + this);
+        });
         final Object[] vertexPropertyKeyValues = this.parameters.getKeyValues(traverser, T.key, T.value);
 
         if (this.callbackRegistry != null) {
@@ -99,7 +101,7 @@ public final class AddPropertyStep<S extends Element> extends SideEffectStep<S>
             else
                 throw new IllegalStateException(String.format("The incoming object cannot be processed by change eventing in %s:  %s", AddPropertyStep.class.getName(), currentElement));
 
-            callbackRegistry.getCallbacks().forEach(c -> c.accept(evt));
+            this.callbackRegistry.getCallbacks().forEach(c -> c.accept(evt));
         }
 
         if (null != this.cardinality)
@@ -115,8 +117,8 @@ public final class AddPropertyStep<S extends Element> extends SideEffectStep<S>
 
     @Override
     public CallbackRegistry<Event.ElementPropertyChangedEvent> getMutatingCallbackRegistry() {
-        if (null == callbackRegistry) callbackRegistry = new ListCallbackRegistry<>();
-        return callbackRegistry;
+        if (null == this.callbackRegistry) this.callbackRegistry = new ListCallbackRegistry<>();
+        return this.callbackRegistry;
     }
 
 
@@ -125,5 +127,15 @@ public final class AddPropertyStep<S extends Element> extends SideEffectStep<S>
         return super.hashCode() ^ this.parameters.hashCode() ^ ((null == this.cardinality) ? "null".hashCode() : this.cardinality.hashCode());
     }
 
-    // TODO clone()
+    @Override
+    public String toString() {
+        return StringFactory.stepString(this, this.parameters);
+    }
+
+    @Override
+    public AddPropertyStep<S> clone() {
+        final AddPropertyStep<S> clone = (AddPropertyStep<S>)super.clone();
+        clone.parameters = this.parameters.clone();
+        return clone;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/085cd168/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/Parameters.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/Parameters.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/Parameters.java
index 55f814f..5af3cc4 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/Parameters.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/Parameters.java
@@ -57,7 +57,7 @@ public final class Parameters implements Cloneable, Serializable {
         return null == object ? defaultValue.get() : object instanceof Traversal.Admin ? TraversalUtil.apply(traverser, (Traversal.Admin<S, E>) object) : (E) object;
     }
 
-    public <S, E> E get(final Object key, final Supplier<E> defaultValue) {
+    public <E> E get(final Object key, final Supplier<E> defaultValue) {
         final Object object = parameters.get(key);
         return null == object ? defaultValue.get() : (E) object;
     }
@@ -75,8 +75,12 @@ public final class Parameters implements Cloneable, Serializable {
         return keyValues.toArray(new Object[keyValues.size()]);
     }
 
-    public void set(final Object key, final Object value) {
-        if (null != value) this.parameters.put(key, value);
+    public void set(final Object... keyValues) {
+        for (int i = 0; i < keyValues.length; i = i + 2) {
+            if (keyValues[i + 1] != null) {
+                this.parameters.put(keyValues[i], keyValues[i + 1]);
+            }
+        }
     }
 
     public void integrateTraversals(final TraversalParent step) {