You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2015/06/03 18:26:56 UTC
[4/7] incubator-tinkerpop git commit: Implement the first leg of
CallbackRegistry TINKERPOP3-701
Implement the first leg of CallbackRegistry TINKERPOP3-701
Add the CallbackRegistry interface and default implementation.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/0daccb5d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/0daccb5d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/0daccb5d
Branch: refs/heads/master
Commit: 0daccb5de434494018f2d47339929ee8ef09caea
Parents: bc4a0bd
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jun 3 08:12:39 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jun 3 12:25:49 2015 -0400
----------------------------------------------------------------------
.../process/traversal/step/Mutating.java | 16 +++---
.../process/traversal/step/filter/DropStep.java | 40 +++++----------
.../process/traversal/step/map/AddEdgeStep.java | 36 ++++----------
.../traversal/step/map/AddVertexStartStep.java | 36 ++++----------
.../traversal/step/map/AddVertexStep.java | 36 ++++----------
.../step/sideEffect/AddPropertyStep.java | 36 +++++---------
.../step/util/event/CallbackRegistry.java | 32 ++++++++++++
.../step/util/event/ListCallbackRegistry.java | 52 ++++++++++++++++++++
.../strategy/decoration/EventStrategy.java | 2 +-
.../strategy/decoration/EventStrategyTest.java | 3 +-
10 files changed, 143 insertions(+), 146 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0daccb5d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Mutating.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Mutating.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Mutating.java
index b278dd4..a7353a6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Mutating.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Mutating.java
@@ -19,19 +19,19 @@
package org.apache.tinkerpop.gremlin.process.traversal.step;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.CallbackRegistry;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.Event;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.EventCallback;
-
-import java.util.List;
/**
* A marker interface for steps that modify the graph.
*
* @author Stephen Mallette (http://stephen.genoprime.com)
+ * @author Matt Frantz
*/
-public interface Mutating<C extends EventCallback<? extends Event>> {
- public void addCallback(final C c);
- public void removeCallback(final C c);
- public void clearCallbacks();
- public List<C> getCallbacks();
+public interface Mutating<E extends Event> {
+
+ /**
+ * Gets the callback registry for events that the step raises.
+ */
+ public CallbackRegistry<E> getMutatingCallbackRegistry();
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0daccb5d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DropStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DropStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DropStep.java
index 0a5b730..c53540c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DropStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DropStep.java
@@ -21,8 +21,9 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.CallbackRegistry;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.Event;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.EventCallback;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.ListCallbackRegistry;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Property;
@@ -30,17 +31,13 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
-public final class DropStep<S> extends FilterStep<S> implements Mutating<EventCallback<Event>> {
+public final class DropStep<S> extends FilterStep<S> implements Mutating<Event> {
- private List<EventCallback<Event>> callbacks = null;
+ private CallbackRegistry<Event> callbackRegistry;
public DropStep(final Traversal.Admin traversal) {
super(traversal);
@@ -51,7 +48,7 @@ public final class DropStep<S> extends FilterStep<S> implements Mutating<EventCa
final S s = traverser.get();
if (s instanceof Element) {
final Element toRemove = ((Element) s);
- if (callbacks != null) {
+ if (callbackRegistry != null) {
final Event removeEvent;
if (s instanceof Vertex)
removeEvent = new Event.VertexRemovedEvent(DetachedFactory.detach((Vertex) s, true));
@@ -62,13 +59,13 @@ public final class DropStep<S> extends FilterStep<S> implements Mutating<EventCa
else
throw new IllegalStateException("The incoming object is not removable: " + s);
- callbacks.forEach(c -> c.accept(removeEvent));
+ callbackRegistry.getCallbacks().forEach(c -> c.accept(removeEvent));
}
toRemove.remove();
} else if (s instanceof Property) {
final Property toRemove = ((Property) s);
- if (callbacks != null) {
+ if (callbackRegistry != null) {
final Event.ElementPropertyEvent removeEvent;
if (toRemove.element() instanceof Edge)
removeEvent = new Event.EdgePropertyRemovedEvent((Edge) toRemove.element(), DetachedFactory.detach(toRemove));
@@ -77,7 +74,7 @@ public final class DropStep<S> extends FilterStep<S> implements Mutating<EventCa
else
throw new IllegalStateException("The incoming object is not removable: " + s);
- callbacks.forEach(c -> c.accept(removeEvent));
+ callbackRegistry.getCallbacks().forEach(c -> c.accept(removeEvent));
}
toRemove.remove();
} else
@@ -86,23 +83,8 @@ public final class DropStep<S> extends FilterStep<S> implements Mutating<EventCa
}
@Override
- public void addCallback(final EventCallback<Event> elementPropertyRemovedEventEventCallback) {
- if (callbacks == null) callbacks = new ArrayList<>();
- callbacks.add(elementPropertyRemovedEventEventCallback);
- }
-
- @Override
- public void removeCallback(final EventCallback<Event> elementPropertyRemovedEventEventCallback) {
- if (callbacks != null) callbacks.remove(elementPropertyRemovedEventEventCallback);
- }
-
- @Override
- public void clearCallbacks() {
- if (callbacks != null) callbacks.clear();
- }
-
- @Override
- public List<EventCallback<Event>> getCallbacks() {
- return (callbacks != null) ? Collections.unmodifiableList(callbacks) : Collections.emptyList();
+ public CallbackRegistry<Event> getMutatingCallbackRegistry() {
+ if (null == callbackRegistry) callbackRegistry = new ListCallbackRegistry<>();
+ return callbackRegistry;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0daccb5d/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 84b913a..5112977 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
@@ -23,8 +23,9 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
import org.apache.tinkerpop.gremlin.process.traversal.step.Scoping;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.CallbackRegistry;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.Event;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.EventCallback;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.ListCallbackRegistry;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Edge;
@@ -32,18 +33,15 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import java.util.ArrayList;
-import java.util.Collections;
import java.util.EnumSet;
import java.util.Iterator;
-import java.util.List;
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 Scoping, Mutating<EventCallback<Event.EdgeAddedEvent>> {
+public final class AddEdgeStep<S> extends FlatMapStep<S, Edge> implements Scoping, Mutating<Event.EdgeAddedEvent> {
private static final Set<TraverserRequirement> LOCAL_REQUIREMENTS = EnumSet.of(TraverserRequirement.OBJECT);
private static final Set<TraverserRequirement> GLOBAL_REQUIREMENTS = EnumSet.of(TraverserRequirement.OBJECT, TraverserRequirement.PATH, TraverserRequirement.SIDE_EFFECTS);
@@ -55,7 +53,7 @@ public final class AddEdgeStep<S> extends FlatMapStep<S, Edge> implements Scopin
private final String secondVertexKey;
private final Object[] propertyKeyValues;
- private List<EventCallback<Event.EdgeAddedEvent>> callbacks = null;
+ private CallbackRegistry<Event.EdgeAddedEvent> callbackRegistry;
public AddEdgeStep(final Traversal.Admin traversal, final Scope scope, final Direction direction, final String firstVertexKey, final String edgeLabel, final String secondVertexKey, final Object... propertyKeyValues) {
super(traversal);
@@ -112,9 +110,9 @@ public final class AddEdgeStep<S> extends FlatMapStep<S, Edge> implements Scopin
}
return IteratorUtils.consume(edgeIterator, edge -> {
- if (callbacks != null) {
+ if (callbackRegistry != null) {
final Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(DetachedFactory.detach(edge, true));
- callbacks.forEach(c -> c.accept(vae));
+ callbackRegistry.getCallbacks().forEach(c -> c.accept(vae));
}
});
}
@@ -125,28 +123,12 @@ public final class AddEdgeStep<S> extends FlatMapStep<S, Edge> implements Scopin
}
@Override
- public void addCallback(final EventCallback<Event.EdgeAddedEvent> edgeAddedEventEventCallback) {
- if (callbacks == null) callbacks = new ArrayList<>();
- callbacks.add(edgeAddedEventEventCallback);
+ public CallbackRegistry<Event.EdgeAddedEvent> getMutatingCallbackRegistry() {
+ if (null == callbackRegistry) callbackRegistry = new ListCallbackRegistry<>();
+ return callbackRegistry;
}
@Override
- public void removeCallback(final EventCallback<Event.EdgeAddedEvent> edgeAddedEventEventCallback) {
- if (callbacks != null) callbacks.remove(edgeAddedEventEventCallback);
- }
-
- @Override
- public void clearCallbacks() {
- if (callbacks != null) callbacks.clear();
- }
-
- @Override
- public List<EventCallback<Event.EdgeAddedEvent>> getCallbacks() {
- return (callbacks != null) ? Collections.unmodifiableList(callbacks) : Collections.emptyList();
- }
-
-
- @Override
public int hashCode() {
int result = super.hashCode() ^ this.scope.hashCode() ^ this.direction.hashCode() ^ this.edgeLabel.hashCode();
if (null != this.firstVertexKey)
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0daccb5d/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 df27143..856a985 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
@@ -22,25 +22,22 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.CallbackRegistry;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.Event;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.EventCallback;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.ListCallbackRegistry;
import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
-public final class AddVertexStartStep extends AbstractStep<Vertex, Vertex> implements Mutating<EventCallback<Event.VertexAddedEvent>> {
+public final class AddVertexStartStep extends AbstractStep<Vertex, Vertex> implements Mutating<Event.VertexAddedEvent> {
private final Object[] keyValues;
private boolean first = true;
- private List<EventCallback<Event.VertexAddedEvent>> callbacks = null;
+ private CallbackRegistry<Event.VertexAddedEvent> callbackRegistry;
public AddVertexStartStep(final Traversal.Admin traversal, final Object... keyValues) {
super(traversal);
@@ -56,9 +53,9 @@ public final class AddVertexStartStep extends AbstractStep<Vertex, Vertex> imple
if (this.first) {
this.first = false;
final Vertex v = this.getTraversal().getGraph().get().addVertex(this.keyValues);
- if (callbacks != null) {
+ if (callbackRegistry != null) {
final Event.VertexAddedEvent vae = new Event.VertexAddedEvent(DetachedFactory.detach(v, true));
- callbacks.forEach(c -> c.accept(vae));
+ callbackRegistry.getCallbacks().forEach(c -> c.accept(vae));
}
return this.getTraversal().getTraverserGenerator().generate(v, this, 1l);
@@ -67,24 +64,9 @@ public final class AddVertexStartStep extends AbstractStep<Vertex, Vertex> imple
}
@Override
- public void addCallback(final EventCallback<Event.VertexAddedEvent> vertexAddedEventEventCallback) {
- if (callbacks == null) callbacks = new ArrayList<>();
- callbacks.add(vertexAddedEventEventCallback);
- }
-
- @Override
- public void removeCallback(final EventCallback<Event.VertexAddedEvent> vertexAddedEventEventCallback) {
- if (callbacks != null) callbacks.remove(vertexAddedEventEventCallback);
- }
-
- @Override
- public void clearCallbacks() {
- if (callbacks != null) callbacks.clear();
- }
-
- @Override
- public List<EventCallback<Event.VertexAddedEvent>> getCallbacks() {
- return (callbacks != null) ? Collections.unmodifiableList(callbacks) : Collections.emptyList();
+ public CallbackRegistry<Event.VertexAddedEvent> getMutatingCallbackRegistry() {
+ if (null == callbackRegistry) callbackRegistry = new ListCallbackRegistry<>();
+ return callbackRegistry;
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0daccb5d/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 16a6073..c9c887a 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
@@ -21,26 +21,23 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.CallbackRegistry;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.Event;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.EventCallback;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.ListCallbackRegistry;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
-public final class AddVertexStep<S> extends MapStep<S, Vertex> implements Mutating<EventCallback<Event.VertexAddedEvent>> {
+public final class AddVertexStep<S> extends MapStep<S, Vertex> implements Mutating<Event.VertexAddedEvent> {
private final Object[] keyValues;
private final transient Graph graph;
- private List<EventCallback<Event.VertexAddedEvent>> callbacks = null;
+ private CallbackRegistry<Event.VertexAddedEvent> callbackRegistry;
public AddVertexStep(final Traversal.Admin traversal, final Object... keyValues) {
super(traversal);
@@ -55,32 +52,17 @@ public final class AddVertexStep<S> extends MapStep<S, Vertex> implements Mutati
@Override
protected Vertex map(final Traverser.Admin<S> traverser) {
final Vertex v = this.graph.addVertex(this.keyValues);
- if (callbacks != null) {
+ if (callbackRegistry != null) {
final Event.VertexAddedEvent vae = new Event.VertexAddedEvent(DetachedFactory.detach(v, true));
- callbacks.forEach(c -> c.accept(vae));
+ callbackRegistry.getCallbacks().forEach(c -> c.accept(vae));
}
return v;
}
@Override
- public void addCallback(final EventCallback<Event.VertexAddedEvent> vertexAddedEventEventCallback) {
- if (callbacks == null) callbacks = new ArrayList<>();
- callbacks.add(vertexAddedEventEventCallback);
- }
-
- @Override
- public void removeCallback(final EventCallback<Event.VertexAddedEvent> vertexAddedEventEventCallback) {
- if (callbacks != null) callbacks.remove(vertexAddedEventEventCallback);
- }
-
- @Override
- public void clearCallbacks() {
- if (callbacks != null) callbacks.clear();
- }
-
- @Override
- public List<EventCallback<Event.VertexAddedEvent>> getCallbacks() {
- return (callbacks != null) ? Collections.unmodifiableList(callbacks) : Collections.emptyList();
+ public CallbackRegistry<Event.VertexAddedEvent> getMutatingCallbackRegistry() {
+ if (null == callbackRegistry) callbackRegistry = new ListCallbackRegistry<>();
+ return callbackRegistry;
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0daccb5d/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 84a1639..9cb9814 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
@@ -21,18 +21,20 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.CallbackRegistry;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.Event;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.EventCallback;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.ListCallbackRegistry;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.structure.*;
import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
-import java.util.*;
+import java.util.EnumSet;
+import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class AddPropertyStep<S extends Element> extends SideEffectStep<S> implements Mutating<EventCallback<Event.ElementPropertyChangedEvent>> {
+public final class AddPropertyStep<S extends Element> extends SideEffectStep<S> implements Mutating<Event.ElementPropertyChangedEvent> {
private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(TraverserRequirement.OBJECT);
@@ -41,7 +43,7 @@ public final class AddPropertyStep<S extends Element> extends SideEffectStep<S>
private final Object value;
private final Object[] vertexPropertyKeyValues;
private final boolean asVertex;
- private List<EventCallback<Event.ElementPropertyChangedEvent>> callbacks = null;
+ private CallbackRegistry<Event.ElementPropertyChangedEvent> callbackRegistry;
public AddPropertyStep(final Traversal.Admin traversal, final VertexProperty.Cardinality cardinality, final String key, final Object value, final Object... vertexPropertyKeyValues) {
super(traversal);
@@ -58,7 +60,7 @@ public final class AddPropertyStep<S extends Element> extends SideEffectStep<S>
@Override
protected void sideEffect(final Traverser.Admin<S> traverser) {
- if (callbacks != null) {
+ if (callbackRegistry != null) {
final Element currentElement = traverser.get();
final Property currentProperty = traverser.get().property(key);
final boolean newProperty = asVertex ? currentProperty == VertexProperty.empty() : currentProperty == Property.empty();
@@ -73,7 +75,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));
- callbacks.forEach(c -> c.accept(evt));
+ callbackRegistry.getCallbacks().forEach(c -> c.accept(evt));
}
if (asVertex)
@@ -87,26 +89,10 @@ public final class AddPropertyStep<S extends Element> extends SideEffectStep<S>
return REQUIREMENTS;
}
-
- @Override
- public void addCallback(final EventCallback<Event.ElementPropertyChangedEvent> elementPropertyChangedEventCallback) {
- if (callbacks == null) callbacks = new ArrayList<>();
- callbacks.add(elementPropertyChangedEventCallback);
- }
-
- @Override
- public void removeCallback(final EventCallback<Event.ElementPropertyChangedEvent> elementPropertyChangedEventCallback) {
- if (callbacks != null) callbacks.remove(elementPropertyChangedEventCallback);
- }
-
- @Override
- public void clearCallbacks() {
- if (callbacks != null) callbacks.clear();
- }
-
@Override
- public List<EventCallback<Event.ElementPropertyChangedEvent>> getCallbacks() {
- return (callbacks != null) ? Collections.unmodifiableList(callbacks) : Collections.emptyList();
+ public CallbackRegistry<Event.ElementPropertyChangedEvent> getMutatingCallbackRegistry() {
+ if (null == callbackRegistry) callbackRegistry = new ListCallbackRegistry<>();
+ return callbackRegistry;
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0daccb5d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/event/CallbackRegistry.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/event/CallbackRegistry.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/event/CallbackRegistry.java
new file mode 100644
index 0000000..8fe7fc4
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/event/CallbackRegistry.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.util.event;
+
+import java.util.List;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ * @author Matt Frantz
+ */
+public interface CallbackRegistry<E extends Event> {
+ public void addCallback(final EventCallback<E> c);
+ public void removeCallback(final EventCallback<E> c);
+ public void clearCallbacks();
+ public List<EventCallback<E>> getCallbacks();
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0daccb5d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/event/ListCallbackRegistry.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/event/ListCallbackRegistry.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/event/ListCallbackRegistry.java
new file mode 100644
index 0000000..8ac6b5a
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/event/ListCallbackRegistry.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.util.event;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ * @author Matt Frantz
+ */
+public class ListCallbackRegistry<E extends Event> implements CallbackRegistry<E> {
+ private List<EventCallback<E>> callbacks;
+
+ @Override
+ public void addCallback(final EventCallback<E> c) {
+ if (callbacks == null) callbacks = new ArrayList<>();
+ callbacks.add(c);
+ }
+
+ @Override
+ public void removeCallback(final EventCallback<E> c) {
+ if (callbacks != null) callbacks.remove(c);
+ }
+
+ @Override
+ public void clearCallbacks() {
+ if (callbacks != null) callbacks.clear();
+ }
+
+ @Override
+ public List<EventCallback<E>> getCallbacks() {
+ return (callbacks != null) ? Collections.unmodifiableList(callbacks) : Collections.emptyList();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0daccb5d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategy.java
index 30530b1..3a787f6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategy.java
@@ -60,7 +60,7 @@ public final class EventStrategy extends AbstractTraversalStrategy<TraversalStra
throw new IllegalStateException(String.format("%s requires a graph instance is present on the traversal", EventStrategy.class.getName()));
final EventStrategyCallback callback = new EventStrategyCallback(new EventTrigger(traversal.getGraph().get()));
- TraversalHelper.getStepsOfAssignableClass(Mutating.class, traversal).forEach(s -> s.addCallback(callback));
+ TraversalHelper.getStepsOfAssignableClass(Mutating.class, traversal).forEach(s -> s.getMutatingCallbackRegistry().addCallback(callback));
}
public static Builder build() {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0daccb5d/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyTest.java
index 5b61146..8412e70 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyTest.java
@@ -20,7 +20,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.ConsoleMutationListener;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.MutationListener;
@@ -85,7 +84,7 @@ public class EventStrategyTest {
.filter(s -> s instanceof Mutating)
.forEach(s -> {
final Mutating mutating = (Mutating) s;
- assertEquals(1, mutating.getCallbacks().size());
+ assertEquals(1, mutating.getMutatingCallbackRegistry().getCallbacks().size());
mutatingStepsFound.incrementAndGet();
});