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;