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:53 UTC

[1/7] incubator-tinkerpop git commit: Add appropiate link for author tag.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master bc4a0bd0d -> d8df0363f


Add appropiate link for author tag.


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

Branch: refs/heads/master
Commit: b29a2443df1cc9607689ad42882b481ced13d518
Parents: 8401fe1
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jun 3 11:47:59 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jun 3 12:25:49 2015 -0400

----------------------------------------------------------------------
 .../apache/tinkerpop/gremlin/process/traversal/step/Mutating.java  | 2 +-
 .../process/traversal/step/util/event/CallbackRegistry.java        | 2 +-
 .../process/traversal/step/util/event/ListCallbackRegistry.java    | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b29a2443/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 a7353a6..07bb350 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
@@ -26,7 +26,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.Event;
  * A marker interface for steps that modify the graph.
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
- * @author Matt Frantz
+ * @author Matt Frantz (http://github.com/mhfrantz)
  */
 public interface Mutating<E extends Event> {
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b29a2443/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
index 8fe7fc4..3f3a209 100644
--- 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
@@ -22,7 +22,7 @@ import java.util.List;
 
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
- * @author Matt Frantz
+ * @author Matt Frantz (http://github.com/mhfrantz)
  */
 public interface CallbackRegistry<E extends Event> {
     public void addCallback(final EventCallback<E> c);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b29a2443/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
index 8ac6b5a..8d50ce3 100644
--- 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
@@ -24,7 +24,7 @@ import java.util.List;
 
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
- * @author Matt Frantz
+ * @author Matt Frantz (http://github.com/mhfrantz)
  */
 public class ListCallbackRegistry<E extends Event> implements CallbackRegistry<E> {
     private List<EventCallback<E>> callbacks;


[7/7] incubator-tinkerpop git commit: Update changelog.

Posted by sp...@apache.org.
Update changelog.


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

Branch: refs/heads/master
Commit: d8df0363ff85fcaa0046043de4f3000de6300486
Parents: b29a244
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jun 3 12:26:40 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jun 3 12:26:40 2015 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d8df0363/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 10e13ec..3a0f572 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ image::http://www.tinkerpop.com/docs/current/images/gremlin-hindu.png[width=225]
 TinkerPop 3.0.0.GA (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Refactored the `Mutating` interface and introduce `CallbackRegistry` interface around `EventStrategy`.
 * Changed `onReadWrite` and `onClose` of `AbstractTransaction` to be synchronized.
 * Added `LabelP` to support index lookups and `has()` filtering on `Neo4jGraph` multi-label vertices.
 * `AddEdgeStep` now supports both `Scope.global` and `Scope.local` semantics.


[3/7] incubator-tinkerpop git commit: Renamed EventTrigger class to EventQueue.

Posted by sp...@apache.org.
Renamed EventTrigger class to EventQueue.


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

Branch: refs/heads/master
Commit: d1a7b9ac54a0d4cb78e2a6b3132cd781a219c5d2
Parents: 0daccb5
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jun 3 08:20:06 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jun 3 12:25:49 2015 -0400

----------------------------------------------------------------------
 .../traversal/strategy/decoration/EventStrategy.java  | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d1a7b9ac/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 3a787f6..a881260 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
@@ -59,7 +59,7 @@ public final class EventStrategy extends AbstractTraversalStrategy<TraversalStra
         if (!traversal.getGraph().isPresent())
             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()));
+        final EventStrategyCallback callback = new EventStrategyCallback(new EventQueue(traversal.getGraph().get()));
         TraversalHelper.getStepsOfAssignableClass(Mutating.class, traversal).forEach(s -> s.getMutatingCallbackRegistry().addCallback(callback));
     }
 
@@ -68,9 +68,9 @@ public final class EventStrategy extends AbstractTraversalStrategy<TraversalStra
     }
 
     public class EventStrategyCallback implements EventCallback<Event>, Serializable {
-        private final EventTrigger trigger;
+        private final EventQueue trigger;
 
-        public EventStrategyCallback(final EventTrigger trigger) {
+        public EventStrategyCallback(final EventQueue trigger) {
             this.trigger = trigger;
         }
 
@@ -85,7 +85,7 @@ public final class EventStrategy extends AbstractTraversalStrategy<TraversalStra
 
         Builder() {}
 
-        public Builder addListener(MutationListener listener) {
+        public Builder addListener(final MutationListener listener) {
             this.listeners.add(listener);
             return this;
         }
@@ -95,7 +95,7 @@ public final class EventStrategy extends AbstractTraversalStrategy<TraversalStra
         }
     }
 
-    class EventTrigger {
+    class EventQueue {
 
         /**
          * A queue of events that are triggered by change to the graph. The queue builds up until the trigger fires them
@@ -112,7 +112,7 @@ public final class EventStrategy extends AbstractTraversalStrategy<TraversalStra
          */
         private final boolean enqueueEvents;
 
-        public EventTrigger(final Graph graph) {
+        public EventQueue(final Graph graph) {
             enqueueEvents = graph.features().graph().supportsTransactions();
 
             if (enqueueEvents) {
@@ -124,7 +124,7 @@ public final class EventStrategy extends AbstractTraversalStrategy<TraversalStra
                     else if (status == Transaction.Status.ROLLBACK)
                         resetEventQueue();
                     else
-                        throw new RuntimeException(String.format("The %s is not aware of this status: %s", EventTrigger.class.getName(), status));
+                        throw new RuntimeException(String.format("The %s is not aware of this status: %s", EventQueue.class.getName(), status));
                 });
             }
         }


[4/7] incubator-tinkerpop git commit: Implement the first leg of CallbackRegistry TINKERPOP3-701

Posted by sp...@apache.org.
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();
                 });
 


[6/7] incubator-tinkerpop git commit: Add javadoc to EventQueue related classes.

Posted by sp...@apache.org.
Add javadoc to EventQueue related classes.


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

Branch: refs/heads/master
Commit: 41310d09141c9f5903d4e2cca1a1e70ea253cefd
Parents: 8c5408c
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jun 3 10:30:59 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jun 3 12:25:49 2015 -0400

----------------------------------------------------------------------
 .../process/traversal/strategy/decoration/EventStrategy.java  | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/41310d09/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 530e1aa..3a93f56 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
@@ -97,6 +97,10 @@ public final class EventStrategy extends AbstractTraversalStrategy<TraversalStra
         }
     }
 
+    /**
+     * Gathers messages from callbacks and fires them to listeners.  When the event is sent to the listener is
+     * up to the implementation of this interface.
+     */
     public interface EventQueue {
         /**
          * Provide listeners to the queue that were given to the {@link EventStrategy} on construction.
@@ -109,6 +113,9 @@ public final class EventStrategy extends AbstractTraversalStrategy<TraversalStra
         public void addEvent(final Event evt);
     }
 
+    /**
+     * Immediately notifies all listeners as events arrive.
+     */
     public static class DefaultEventQueue implements EventQueue {
         private List<MutationListener> listeners = Collections.emptyList();
 


[2/7] incubator-tinkerpop git commit: Clean up javadoc a bit more around EventStrategy classes.

Posted by sp...@apache.org.
Clean up javadoc a bit more around EventStrategy classes.


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

Branch: refs/heads/master
Commit: 8401fe1e2966d8f99d30ef10131041d485aa47ef
Parents: 41310d0
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jun 3 11:45:24 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jun 3 12:25:49 2015 -0400

----------------------------------------------------------------------
 .../gremlin/process/traversal/step/util/event/Event.java      | 2 +-
 .../process/traversal/strategy/decoration/EventStrategy.java  | 7 +------
 2 files changed, 2 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8401fe1e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/event/Event.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/event/Event.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/event/Event.java
index 26db28a..b5ed288 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/event/Event.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/event/Event.java
@@ -29,7 +29,7 @@ import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import java.util.Iterator;
 
 /**
- * A representation of some mutation action that occurs on a {@link Graph} for a {@link Traversal}.
+ * A representation of some action that occurs on a {@link Graph} for a {@link Traversal}.
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8401fe1e/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 3a93f56..30b48fa 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
@@ -37,8 +37,7 @@ import java.util.Deque;
 import java.util.List;
 
 /**
- * A strategy that raises events when {@link org.apache.tinkerpop.gremlin.process.traversal.step.Mutating} steps are
- * encountered and successfully executed.
+ * A strategy that raises events when {@link Mutating} steps are encountered and successfully executed.
  * <p/>
  * Note that this implementation requires a {@link Graph} on the {@link Traversal} instance.  If that is not present
  * an {@link java.lang.IllegalStateException} will be thrown.
@@ -160,10 +159,6 @@ public final class EventStrategy extends AbstractTraversalStrategy<TraversalStra
             });
         }
 
-        /**
-         * Add an event to the event queue. If this is a non-transactional graph, then the queue fires and resets after
-         * each event is added.
-         */
         public void addEvent(final Event evt) {
             eventQueue.get().add(evt);
         }


[5/7] incubator-tinkerpop git commit: Refactor EventQueue into an interface so that it can be supplied to the EventStrategy.

Posted by sp...@apache.org.
Refactor EventQueue into an interface so that it can be supplied to the EventStrategy.


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

Branch: refs/heads/master
Commit: 8c5408ca2167eeda63e1983370b62b5e7a11d15d
Parents: d1a7b9a
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jun 3 10:28:28 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jun 3 12:25:49 2015 -0400

----------------------------------------------------------------------
 .../strategy/decoration/EventStrategy.java      | 108 ++++++----
 .../decoration/EventStrategyProcessTest.java    | 198 ++++++++++++++++---
 2 files changed, 235 insertions(+), 71 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8c5408ca/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 a881260..530e1aa 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
@@ -32,7 +32,7 @@ import org.apache.tinkerpop.gremlin.structure.Transaction;
 import java.io.Serializable;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.Deque;
 import java.util.List;
 
@@ -46,20 +46,16 @@ import java.util.List;
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 public final class EventStrategy extends AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
-    private final List<MutationListener> listeners = new ArrayList<>();
+    private final EventQueue eventQueue;
 
-    private EventStrategy(final MutationListener... listeners) {
-        this.listeners.addAll(Arrays.asList(listeners));
+    private EventStrategy(final Builder builder) {
+        this.eventQueue = builder.eventQueue;
+        this.eventQueue.setListeners(builder.listeners);
     }
 
     @Override
     public void apply(final Traversal.Admin<?, ?> traversal) {
-        // EventStrategy requires access to both graph features and the current transaction object which are
-        // both part of Graph - if that isn't present, this strategy doesn't work.
-        if (!traversal.getGraph().isPresent())
-            throw new IllegalStateException(String.format("%s requires a graph instance is present on the traversal", EventStrategy.class.getName()));
-
-        final EventStrategyCallback callback = new EventStrategyCallback(new EventQueue(traversal.getGraph().get()));
+        final EventStrategyCallback callback = new EventStrategyCallback(eventQueue);
         TraversalHelper.getStepsOfAssignableClass(Mutating.class, traversal).forEach(s -> s.getMutatingCallbackRegistry().addCallback(callback));
     }
 
@@ -68,20 +64,21 @@ public final class EventStrategy extends AbstractTraversalStrategy<TraversalStra
     }
 
     public class EventStrategyCallback implements EventCallback<Event>, Serializable {
-        private final EventQueue trigger;
+        private final EventQueue eventQueue;
 
-        public EventStrategyCallback(final EventQueue trigger) {
-            this.trigger = trigger;
+        public EventStrategyCallback(final EventQueue eventQueue) {
+            this.eventQueue = eventQueue;
         }
 
         @Override
         public void accept(final Event event) {
-            trigger.addEvent(event);
+            eventQueue.addEvent(event);
         }
     }
 
     public final static class Builder {
         private final List<MutationListener> listeners = new ArrayList<>();
+        private EventQueue eventQueue = new DefaultEventQueue();
 
         Builder() {}
 
@@ -90,43 +87,70 @@ public final class EventStrategy extends AbstractTraversalStrategy<TraversalStra
             return this;
         }
 
+        public Builder eventQueue(final EventQueue eventQueue) {
+            this.eventQueue = eventQueue;
+            return this;
+        }
+
         public EventStrategy create() {
-            return new EventStrategy(this.listeners.toArray(new MutationListener[this.listeners.size()]));
+            return new EventStrategy(this);
         }
     }
 
-    class EventQueue {
+    public interface EventQueue {
+        /**
+         * Provide listeners to the queue that were given to the {@link EventStrategy} on construction.
+         */
+        public void setListeners(final List<MutationListener> listeners);
 
         /**
-         * A queue of events that are triggered by change to the graph. The queue builds up until the trigger fires them
-         * in the order they were received.
+         * Add an event to the event queue.
          */
+        public void addEvent(final Event evt);
+    }
+
+    public static class DefaultEventQueue implements EventQueue {
+        private List<MutationListener> listeners = Collections.emptyList();
+
+        @Override
+        public void setListeners(final List<MutationListener> listeners) {
+            this.listeners = listeners;
+        }
+
+        @Override
+        public void addEvent(final Event evt) {
+            evt.fireEvent(listeners.iterator());
+        }
+    }
+
+    /**
+     * Stores events in a queue that builds up until the transaction is committed which then fires them in the order
+     * they were received.
+     */
+    public static class TransactionalEventQueue implements EventQueue {
+
         private final ThreadLocal<Deque<Event>> eventQueue = new ThreadLocal<Deque<Event>>() {
             protected Deque<Event> initialValue() {
                 return new ArrayDeque<>();
             }
         };
 
-        /**
-         * When set to true, events in the event queue will only be fired when a transaction is committed.
-         */
-        private final boolean enqueueEvents;
-
-        public EventQueue(final Graph graph) {
-            enqueueEvents = graph.features().graph().supportsTransactions();
-
-            if (enqueueEvents) {
-                // since this is a transactional graph events are enqueued so the events should be fired/reset only after
-                // transaction is committed/rolled back as tied to a graph transaction
-                graph.tx().addTransactionListener(status -> {
-                    if (status == Transaction.Status.COMMIT)
-                        fireEventQueue();
-                    else if (status == Transaction.Status.ROLLBACK)
-                        resetEventQueue();
-                    else
-                        throw new RuntimeException(String.format("The %s is not aware of this status: %s", EventQueue.class.getName(), status));
-                });
-            }
+        private List<MutationListener> listeners = Collections.emptyList();
+
+        public TransactionalEventQueue(final Graph graph) {
+            if (!graph.features().graph().supportsTransactions())
+                throw new IllegalStateException(String.format("%s requires the graph to support transactions", EventStrategy.class.getName()));
+
+            // since this is a transactional graph events are enqueued so the events should be fired/reset only after
+            // transaction is committed/rolled back as tied to a graph transaction
+            graph.tx().addTransactionListener(status -> {
+                if (status == Transaction.Status.COMMIT)
+                    fireEventQueue();
+                else if (status == Transaction.Status.ROLLBACK)
+                    resetEventQueue();
+                else
+                    throw new RuntimeException(String.format("The %s is not aware of this status: %s", EventQueue.class.getName(), status));
+            });
         }
 
         /**
@@ -135,11 +159,11 @@ public final class EventStrategy extends AbstractTraversalStrategy<TraversalStra
          */
         public void addEvent(final Event evt) {
             eventQueue.get().add(evt);
+        }
 
-            if (!this.enqueueEvents) {
-                fireEventQueue();
-                resetEventQueue();
-            }
+        @Override
+        public void setListeners(final List<MutationListener> listeners) {
+            this.listeners = listeners;
         }
 
         private void resetEventQueue() {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8c5408ca/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyProcessTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyProcessTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyProcessTest.java
index e07b38d..c8adb78 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyProcessTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyProcessTest.java
@@ -21,7 +21,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
 import org.apache.tinkerpop.gremlin.FeatureRequirement;
 import org.apache.tinkerpop.gremlin.FeatureRequirementSet;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.MutationListener;
 import org.apache.tinkerpop.gremlin.structure.Edge;
@@ -37,6 +36,8 @@ import java.util.List;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.atomic.AtomicLong;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 
 /**
@@ -49,9 +50,14 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
     public void shouldTriggerAddVertex() {
         final StubMutationListener listener1 = new StubMutationListener();
         final StubMutationListener listener2 = new StubMutationListener();
-        final EventStrategy eventStrategy = EventStrategy.build()
+        final EventStrategy.Builder builder = EventStrategy.build()
                 .addListener(listener1)
-                .addListener(listener2).create();
+                .addListener(listener2);
+
+        if (graph.features().graph().supportsTransactions())
+            builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph));
+
+        final EventStrategy eventStrategy = builder.create();
 
         graph.addVertex("some", "thing");
         final GraphTraversalSource gts = create(eventStrategy);
@@ -67,9 +73,14 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
     public void shouldTriggerAddVertexFromStart() {
         final StubMutationListener listener1 = new StubMutationListener();
         final StubMutationListener listener2 = new StubMutationListener();
-        final EventStrategy eventStrategy = EventStrategy.build()
+        final EventStrategy.Builder builder = EventStrategy.build()
                 .addListener(listener1)
-                .addListener(listener2).create();
+                .addListener(listener2);
+
+        if (graph.features().graph().supportsTransactions())
+            builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph));
+
+        final EventStrategy eventStrategy = builder.create();
 
         graph.addVertex("some", "thing");
         final GraphTraversalSource gts = create(eventStrategy);
@@ -85,9 +96,14 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
     public void shouldTriggerAddEdge() {
         final StubMutationListener listener1 = new StubMutationListener();
         final StubMutationListener listener2 = new StubMutationListener();
-        final EventStrategy eventStrategy = EventStrategy.build()
+        final EventStrategy.Builder builder = EventStrategy.build()
                 .addListener(listener1)
-                .addListener(listener2).create();
+                .addListener(listener2);
+
+        if (graph.features().graph().supportsTransactions())
+            builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph));
+
+        final EventStrategy eventStrategy = builder.create();
 
         final Vertex v = graph.addVertex();
         v.addEdge("self", v);
@@ -109,9 +125,14 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
     public void shouldTriggerAddEdgeByPath() {
         final StubMutationListener listener1 = new StubMutationListener();
         final StubMutationListener listener2 = new StubMutationListener();
-        final EventStrategy eventStrategy = EventStrategy.build()
+        final EventStrategy.Builder builder = EventStrategy.build()
                 .addListener(listener1)
-                .addListener(listener2).create();
+                .addListener(listener2);
+
+        if (graph.features().graph().supportsTransactions())
+            builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph));
+
+        final EventStrategy eventStrategy = builder.create();
 
         final Vertex v = graph.addVertex();
         v.addEdge("self", v);
@@ -133,9 +154,14 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
     public void shouldTriggerAddVertexPropertyAdded() {
         final StubMutationListener listener1 = new StubMutationListener();
         final StubMutationListener listener2 = new StubMutationListener();
-        final EventStrategy eventStrategy = EventStrategy.build()
+        final EventStrategy.Builder builder = EventStrategy.build()
                 .addListener(listener1)
-                .addListener(listener2).create();
+                .addListener(listener2);
+
+        if (graph.features().graph().supportsTransactions())
+            builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph));
+
+        final EventStrategy eventStrategy = builder.create();
 
         final Vertex vSome = graph.addVertex("some", "thing");
         vSome.property(VertexProperty.Cardinality.single, "that", "thing");
@@ -155,9 +181,14 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
     public void shouldTriggerAddVertexPropertyChanged() {
         final StubMutationListener listener1 = new StubMutationListener();
         final StubMutationListener listener2 = new StubMutationListener();
-        final EventStrategy eventStrategy = EventStrategy.build()
+        final EventStrategy.Builder builder = EventStrategy.build()
                 .addListener(listener1)
-                .addListener(listener2).create();
+                .addListener(listener2);
+
+        if (graph.features().graph().supportsTransactions())
+            builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph));
+
+        final EventStrategy eventStrategy = builder.create();
 
         final Vertex vSome = graph.addVertex("some", "thing");
         vSome.property(VertexProperty.Cardinality.single, "that", "thing");
@@ -179,9 +210,14 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
     public void shouldTriggerAddVertexPropertyPropertyChanged() {
         final StubMutationListener listener1 = new StubMutationListener();
         final StubMutationListener listener2 = new StubMutationListener();
-        final EventStrategy eventStrategy = EventStrategy.build()
+        final EventStrategy.Builder builder = EventStrategy.build()
                 .addListener(listener1)
-                .addListener(listener2).create();
+                .addListener(listener2);
+
+        if (graph.features().graph().supportsTransactions())
+            builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph));
+
+        final EventStrategy eventStrategy = builder.create();
 
         final Vertex vSome = graph.addVertex("some", "thing");
         vSome.property(VertexProperty.Cardinality.single, "that", "thing", "is", "good");
@@ -202,9 +238,14 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
     public void shouldTriggerAddEdgePropertyAdded() {
         final StubMutationListener listener1 = new StubMutationListener();
         final StubMutationListener listener2 = new StubMutationListener();
-        final EventStrategy eventStrategy = EventStrategy.build()
+        final EventStrategy.Builder builder = EventStrategy.build()
                 .addListener(listener1)
-                .addListener(listener2).create();
+                .addListener(listener2);
+
+        if (graph.features().graph().supportsTransactions())
+            builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph));
+
+        final EventStrategy eventStrategy = builder.create();
 
         final Vertex v = graph.addVertex();
         v.addEdge("self", v);
@@ -230,9 +271,14 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
     public void shouldTriggerEdgePropertyChanged() {
         final StubMutationListener listener1 = new StubMutationListener();
         final StubMutationListener listener2 = new StubMutationListener();
-        final EventStrategy eventStrategy = EventStrategy.build()
+        final EventStrategy.Builder builder = EventStrategy.build()
                 .addListener(listener1)
-                .addListener(listener2).create();
+                .addListener(listener2);
+
+        if (graph.features().graph().supportsTransactions())
+            builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph));
+
+        final EventStrategy eventStrategy = builder.create();
 
         final Vertex v = graph.addVertex();
         final Edge e = v.addEdge("self", v);
@@ -258,9 +304,14 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
     public void shouldTriggerRemoveVertex() {
         final StubMutationListener listener1 = new StubMutationListener();
         final StubMutationListener listener2 = new StubMutationListener();
-        final EventStrategy eventStrategy = EventStrategy.build()
+        final EventStrategy.Builder builder = EventStrategy.build()
                 .addListener(listener1)
-                .addListener(listener2).create();
+                .addListener(listener2);
+
+        if (graph.features().graph().supportsTransactions())
+            builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph));
+
+        final EventStrategy eventStrategy = builder.create();
 
         graph.addVertex("some", "thing");
         final GraphTraversalSource gts = create(eventStrategy);
@@ -277,9 +328,14 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
     public void shouldTriggerRemoveEdge() {
         final StubMutationListener listener1 = new StubMutationListener();
         final StubMutationListener listener2 = new StubMutationListener();
-        final EventStrategy eventStrategy = EventStrategy.build()
+        final EventStrategy.Builder builder = EventStrategy.build()
                 .addListener(listener1)
-                .addListener(listener2).create();
+                .addListener(listener2);
+
+        if (graph.features().graph().supportsTransactions())
+            builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph));
+
+        final EventStrategy eventStrategy = builder.create();
 
         final Vertex v = graph.addVertex("some", "thing");
         v.addEdge("self", v);
@@ -297,9 +353,14 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
     public void shouldTriggerRemoveVertexProperty() {
         final StubMutationListener listener1 = new StubMutationListener();
         final StubMutationListener listener2 = new StubMutationListener();
-        final EventStrategy eventStrategy = EventStrategy.build()
+        final EventStrategy.Builder builder = EventStrategy.build()
                 .addListener(listener1)
-                .addListener(listener2).create();
+                .addListener(listener2);
+
+        if (graph.features().graph().supportsTransactions())
+            builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph));
+
+        final EventStrategy eventStrategy = builder.create();
 
         graph.addVertex("some", "thing");
         final GraphTraversalSource gts = create(eventStrategy);
@@ -316,9 +377,14 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
     public void shouldTriggerRemoveEdgeProperty() {
         final StubMutationListener listener1 = new StubMutationListener();
         final StubMutationListener listener2 = new StubMutationListener();
-        final EventStrategy eventStrategy = EventStrategy.build()
+        final EventStrategy.Builder builder = EventStrategy.build()
                 .addListener(listener1)
-                .addListener(listener2).create();
+                .addListener(listener2);
+
+        if (graph.features().graph().supportsTransactions())
+            builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph));
+
+        final EventStrategy eventStrategy = builder.create();
 
         final Vertex v = graph.addVertex();
         v.addEdge("self", v, "some", "thing");
@@ -337,9 +403,14 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
     public void shouldTriggerAddVertexPropertyPropertyRemoved() {
         final StubMutationListener listener1 = new StubMutationListener();
         final StubMutationListener listener2 = new StubMutationListener();
-        final EventStrategy eventStrategy = EventStrategy.build()
+        final EventStrategy.Builder builder = EventStrategy.build()
                 .addListener(listener1)
-                .addListener(listener2).create();
+                .addListener(listener2);
+
+        if (graph.features().graph().supportsTransactions())
+            builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph));
+
+        final EventStrategy eventStrategy = builder.create();
 
         final Vertex vSome = graph.addVertex("some", "thing");
         vSome.property(VertexProperty.Cardinality.single, "that", "thing", "is", "good");
@@ -358,6 +429,75 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
         assertEquals(1, listener1.vertexPropertyPropertyRemovedEventRecorded());
     }
 
+    @Test
+    @FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY)
+    @FeatureRequirement(featureClass = Graph.Features.GraphFeatures.class, feature = Graph.Features.GraphFeatures.FEATURE_TRANSACTIONS)
+    public void shouldTriggerAfterCommit() {
+        final StubMutationListener listener1 = new StubMutationListener();
+        final StubMutationListener listener2 = new StubMutationListener();
+        final EventStrategy.Builder builder = EventStrategy.build()
+                .eventQueue(new EventStrategy.TransactionalEventQueue(graph))
+                .addListener(listener1)
+                .addListener(listener2);
+
+        final EventStrategy eventStrategy = builder.create();
+
+        graph.addVertex("some", "thing");
+        final GraphTraversalSource gts = create(eventStrategy);
+        gts.V().addV("any", "thing").next();
+        gts.V().addV("any", "one").next();
+
+        assertEquals(0, listener1.addVertexEventRecorded());
+        assertEquals(0, listener2.addVertexEventRecorded());
+
+        gts.tx().commit();
+        assertEquals(2, IteratorUtils.count(gts.V().has("any")));
+
+        assertEquals(2, listener1.addVertexEventRecorded());
+        assertEquals(2, listener2.addVertexEventRecorded());
+    }
+
+    @Test
+    @FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY)
+    @FeatureRequirement(featureClass = Graph.Features.GraphFeatures.class, feature = Graph.Features.GraphFeatures.FEATURE_TRANSACTIONS)
+    public void shouldResetAfterRollback() {
+        final StubMutationListener listener1 = new StubMutationListener();
+        final StubMutationListener listener2 = new StubMutationListener();
+        final EventStrategy.Builder builder = EventStrategy.build()
+                .eventQueue(new EventStrategy.TransactionalEventQueue(graph))
+                .addListener(listener1)
+                .addListener(listener2);
+
+        final EventStrategy eventStrategy = builder.create();
+
+        graph.addVertex("some", "thing");
+        final GraphTraversalSource gts = create(eventStrategy);
+        gts.V().addV("any", "thing").next();
+        gts.V().addV("any", "one").next();
+
+        assertEquals(0, listener1.addVertexEventRecorded());
+        assertEquals(0, listener2.addVertexEventRecorded());
+
+        gts.tx().rollback();
+        assertThat(gts.V().has("any").hasNext(), is(false));
+
+        assertEquals(0, listener1.addVertexEventRecorded());
+        assertEquals(0, listener2.addVertexEventRecorded());
+
+        graph.addVertex("some", "thing");
+        gts.V().addV("any", "thing").next();
+        gts.V().addV("any", "one").next();
+
+        assertEquals(0, listener1.addVertexEventRecorded());
+        assertEquals(0, listener2.addVertexEventRecorded());
+
+        gts.tx().commit();
+        assertEquals(2, IteratorUtils.count(gts.V().has("any")));
+
+        assertEquals(2, listener1.addVertexEventRecorded());
+        assertEquals(2, listener2.addVertexEventRecorded());
+    }
+
     private GraphTraversalSource create(final EventStrategy strategy) {
         return graphProvider.traversal(graph, strategy);
     }