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 19:03:33 UTC

[4/8] 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.

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/master
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) {