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