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