You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by dk...@apache.org on 2019/02/21 15:58:47 UTC

[tinkerpop] 01/01: Merge branch 'TINKERPOP-2159' into TINKERPOP-2159-master

This is an automated email from the ASF dual-hosted git repository.

dkuppitz pushed a commit to branch TINKERPOP-2159-master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 3872cfba93ed3bc72dc713183be3f7ff7c1847ca
Merge: 197dbc7 14948cb
Author: Daniel Kuppitz <da...@hotmail.com>
AuthorDate: Thu Feb 21 08:40:26 2019 -0700

    Merge branch 'TINKERPOP-2159' into TINKERPOP-2159-master

 .../traversal/step/sideEffect/AddPropertyStep.java | 77 +++++++++++++++-------
 .../tinkergraph/structure/TinkerGraphPlayTest.java | 27 ++++++--
 2 files changed, 76 insertions(+), 28 deletions(-)

diff --cc gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStep.java
index 8176d3e,27ffe4e..470fa4b
--- 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
@@@ -36,10 -37,13 +36,12 @@@ import org.apache.tinkerpop.gremlin.str
  import org.apache.tinkerpop.gremlin.structure.Vertex;
  import org.apache.tinkerpop.gremlin.structure.VertexProperty;
  import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 -import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
 -import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty;
 -import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
 +import org.apache.tinkerpop.gremlin.structure.util.keyed.KeyedProperty;
 +import org.apache.tinkerpop.gremlin.structure.util.keyed.KeyedVertexProperty;
  
+ import java.util.Iterator;
  import java.util.List;
+ import java.util.Objects;
  import java.util.Set;
  
  /**
@@@ -91,29 -95,58 +93,58 @@@ public class AddPropertyStep<S extends 
          final Element element = traverser.get();
  
          if (this.callbackRegistry != null) {
-             final EventStrategy eventStrategy = getTraversal().getStrategies().getStrategy(EventStrategy.class).get();
-             final Property currentProperty = traverser.get().property(key);
-             final boolean newProperty = element instanceof Vertex ? currentProperty == VertexProperty.empty() : currentProperty == Property.empty();
-             final Event.ElementPropertyChangedEvent evt;
-             if (element instanceof Vertex)
-                 evt = new Event.VertexPropertyChangedEvent(eventStrategy.detach((Vertex) element),
-                         newProperty ?
-                                 new KeyedVertexProperty(key) :
-                                 eventStrategy.detach((VertexProperty) currentProperty), value, vertexPropertyKeyValues);
-             else if (element instanceof Edge)
-                 evt = new Event.EdgePropertyChangedEvent(eventStrategy.detach((Edge) element),
-                         newProperty ?
-                                 new KeyedProperty(key) :
-                                 eventStrategy.detach(currentProperty), value);
-             else if (element instanceof VertexProperty)
-                 evt = new Event.VertexPropertyPropertyChangedEvent(eventStrategy.detach((VertexProperty) element),
-                         newProperty ?
-                                 new KeyedProperty(key) :
-                                 eventStrategy.detach(currentProperty), value);
-             else
-                 throw new IllegalStateException(String.format("The incoming object cannot be processed by change eventing in %s:  %s", AddPropertyStep.class.getName(), element));
+             getTraversal().getStrategies().getStrategy(EventStrategy.class)
+                     .ifPresent(eventStrategy -> {
+                         Event.ElementPropertyChangedEvent evt = null;
+                         if (element instanceof Vertex) {
+                             final VertexProperty.Cardinality cardinality = this.cardinality != null
+                                     ? this.cardinality
+                                     : element.graph().features().vertex().getCardinality(key);
  
-             this.callbackRegistry.getCallbacks().forEach(c -> c.accept(evt));
+                             if (cardinality == VertexProperty.Cardinality.list) {
+                                 evt = new Event.VertexPropertyChangedEvent(eventStrategy.detach((Vertex) element),
 -                                        eventStrategy.empty(element, key), value, vertexPropertyKeyValues);
++                                        new KeyedVertexProperty(key), value, vertexPropertyKeyValues);
+                             }
+                             else if (cardinality == VertexProperty.Cardinality.set) {
 -                                Property currentProperty = VertexProperty.empty();
++                                Property currentProperty = null;
+                                 final Iterator<? extends Property> properties = traverser.get().properties(key);
+                                 while (properties.hasNext()) {
+                                     final Property property = properties.next();
+                                     if (Objects.equals(property.value(), value)) {
+                                         currentProperty = property;
+                                         break;
+                                     }
+                                 }
+                                 evt = new Event.VertexPropertyChangedEvent(eventStrategy.detach((Vertex) element),
 -                                        currentProperty == VertexProperty.empty() ?
 -                                                eventStrategy.empty(element, key) :
++                                        currentProperty == null ?
++                                                new KeyedVertexProperty(key) :
+                                                 eventStrategy.detach((VertexProperty) currentProperty), value, vertexPropertyKeyValues);
+                             }
+                         }
+                         if (evt == null) {
+                             final Property currentProperty = traverser.get().property(key);
+                             final boolean newProperty = element instanceof Vertex ? currentProperty == VertexProperty.empty() : currentProperty == Property.empty();
+                             if (element instanceof Vertex)
+                                 evt = new Event.VertexPropertyChangedEvent(eventStrategy.detach((Vertex) element),
+                                         newProperty ?
 -                                                eventStrategy.empty(element, key) :
++                                                new KeyedVertexProperty(key) :
+                                                 eventStrategy.detach((VertexProperty) currentProperty), value, vertexPropertyKeyValues);
+                             else if (element instanceof Edge)
+                                 evt = new Event.EdgePropertyChangedEvent(eventStrategy.detach((Edge) element),
+                                         newProperty ?
 -                                                eventStrategy.empty(element, key) :
++                                                new KeyedProperty(key) :
+                                                 eventStrategy.detach(currentProperty), value);
+                             else if (element instanceof VertexProperty)
+                                 evt = new Event.VertexPropertyPropertyChangedEvent(eventStrategy.detach((VertexProperty) element),
+                                         newProperty ?
 -                                                eventStrategy.empty(element, key) :
++                                                new KeyedProperty(key) :
+                                                 eventStrategy.detach(currentProperty), value);
+                             else
+                                 throw new IllegalStateException(String.format("The incoming object cannot be processed by change eventing in %s:  %s", AddPropertyStep.class.getName(), element));
+                         }
+                         final Event.ElementPropertyChangedEvent event = evt;
+                         this.callbackRegistry.getCallbacks().forEach(c -> c.accept(event));
+                     });
          }
  
          if (null != this.cardinality)
diff --cc tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
index c453a38,8e3e8bd..d54c5f2
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
@@@ -23,8 -26,10 +23,11 @@@ import org.apache.tinkerpop.gremlin.pro
  import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
  import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
  import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 +import org.apache.tinkerpop.gremlin.process.traversal.step.util.WithOptions;
 +import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.ConsoleMutationListener;
+ import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategy;
+ import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.EarlyLimitStrategy;
  import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathRetractionStrategy;
  import org.apache.tinkerpop.gremlin.structure.*;
  import org.apache.tinkerpop.gremlin.structure.io.graphml.GraphMLIo;