This is an automated email from the ASF dual-hosted git repository. xiazcy pushed a commit to branch multi-label-experiment in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 93b3b0c9cc90922c1272513ac700e9538b5485fe Author: Yang Xia <[email protected]> AuthorDate: Thu Jun 25 10:11:15 2026 -0700 remove dead edge code --- .../traversal/dsl/graph/GraphTraversal.java | 23 ----- .../traversal/dsl/graph/GraphTraversalSource.java | 25 ----- .../gremlin/process/traversal/dsl/graph/__.java | 7 -- .../step/map/AbstractAddEdgeStepPlaceholder.java | 5 - .../traversal/step/map/AddEdgeStartStep.java | 32 +----- .../step/map/AddEdgeStartStepPlaceholder.java | 10 +- .../process/traversal/step/map/AddEdgeStep.java | 32 +----- .../traversal/step/map/AddEdgeStepPlaceholder.java | 10 +- .../process/traversal/step/map/MergeEdgeStep.java | 111 +++------------------ .../structure/io/graphml/GraphMLWriter.java | 6 +- .../io/graphson/GraphSONSerializersV1.java | 8 +- .../io/graphson/GraphSONSerializersV2.java | 8 +- .../io/graphson/GraphSONSerializersV3.java | 8 +- .../structure/io/gryo/GryoSerializersV3.java | 10 +- 14 files changed, 39 insertions(+), 256 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java index b402e506a8..3e0a847154 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java @@ -1665,29 +1665,6 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { return this.asAdmin().addStep(step); } - /** - * Multi-label edge creation. - * - * @param label1 the first label - * @param label2 the second label - * @param moreLabels additional labels - * @return the traversal with the {@link AddEdgeStepContract} added - * @since 4.0.0 - */ - public default GraphTraversal<S, Edge> addE(final String label1, final String label2, final String... moreLabels) { - if (null == label1) throw new IllegalArgumentException("edgeLabel cannot be null"); - if (null == label2) throw new IllegalArgumentException("edgeLabel cannot be null"); - for (final String l : moreLabels) { - if (null == l) throw new IllegalArgumentException("edgeLabel cannot be null"); - } - this.asAdmin().getGremlinLang().addStep(Symbols.addE, label1, label2, moreLabels); - final Set<String> allLabels = new LinkedHashSet<>(); - allLabels.add(label1); - allLabels.add(label2); - Collections.addAll(allLabels, moreLabels); - return this.asAdmin().addStep(new AddEdgeStepPlaceholder<>(this.asAdmin(), allLabels)); - } - /** * Provide {@code from()}-modulation to respective steps. * diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java index bea323f252..ce5286de06 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java @@ -432,31 +432,6 @@ public class GraphTraversalSource implements TraversalSource { return traversal.addStep(new AddEdgeStartStepPlaceholder(traversal, label)); } - /** - * Spawns a {@link GraphTraversal} by adding an edge with multiple labels. - * - * @param label1 the first label - * @param label2 the second label - * @param moreLabels additional labels - * @return the traversal with the edge added - * @since 4.0.0 - */ - public GraphTraversal<Edge, Edge> addE(final String label1, final String label2, final String... moreLabels) { - if (null == label1) throw new IllegalArgumentException("edgeLabel cannot be null"); - if (null == label2) throw new IllegalArgumentException("edgeLabel cannot be null"); - for (final String l : moreLabels) { - if (null == l) throw new IllegalArgumentException("edgeLabel cannot be null"); - } - final GraphTraversalSource clone = this.clone(); - clone.gremlinLang.addStep(GraphTraversal.Symbols.addE, label1, label2, moreLabels); - final GraphTraversal.Admin<Edge, Edge> traversal = new DefaultGraphTraversal<>(clone); - final Set<String> allLabels = new LinkedHashSet<>(); - allLabels.add(label1); - allLabels.add(label2); - Collections.addAll(allLabels, moreLabels); - return traversal.addStep(new AddEdgeStartStepPlaceholder(traversal, allLabels)); - } - /** * Spawns a {@link GraphTraversal} by doing a merge (i.e. upsert) style operation for an {@link Vertex} using a * {@code Map} as an argument. The {@code Map} represents search criteria and will match each of the supplied diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java index 506bc4e91f..421a1f33ad 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java @@ -756,13 +756,6 @@ public class __ { return __.<A>start().addE(edgeLabel); } - /** - * @see GraphTraversal#addE(String, String, String...) - */ - public static <A> GraphTraversal<A, Edge> addE(final String label1, final String label2, final String... moreLabels) { - return __.<A>start().addE(label1, label2, moreLabels); - } - /** * @see GraphTraversal#addE(GValue) */ diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddEdgeStepPlaceholder.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddEdgeStepPlaceholder.java index 95d377c317..fb1ce7e8c9 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddEdgeStepPlaceholder.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddEdgeStepPlaceholder.java @@ -29,7 +29,6 @@ import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex; import java.util.Collection; import java.util.List; import java.util.Objects; -import java.util.Set; public abstract class AbstractAddEdgeStepPlaceholder<S> extends AbstractAddElementStepPlaceholder<S, Edge, Event.EdgeAddedEvent> implements AddEdgeStepContract<S> { protected Traversal.Admin<?, ?> from; @@ -43,10 +42,6 @@ public abstract class AbstractAddEdgeStepPlaceholder<S> extends AbstractAddEleme super(traversal, label); } - public AbstractAddEdgeStepPlaceholder(Traversal.Admin traversal, Set<String> labels) { - super(traversal, labels); - } - public AbstractAddEdgeStepPlaceholder(Traversal.Admin traversal, Traversal.Admin<S, String> labelTraversal) { super(traversal, labelTraversal); } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStep.java index 99ccd7ce9e..628587a509 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStep.java @@ -19,10 +19,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.map; -import java.util.Arrays; import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -70,15 +67,6 @@ public class AddEdgeStartStep extends AbstractStep<Edge, Edge> implements AddEdg this.internalParameters.set(this, T.label, edgeLabelTraversal); } - public AddEdgeStartStep(final Traversal.Admin traversal, final Set<String> labels) { - super(traversal); - if (labels == null || labels.isEmpty()) { - this.internalParameters.set(this, T.label, Edge.DEFAULT_LABEL); - } else { - this.internalParameters.set(this, T.label, labels); - } - } - @Override public <S, E> List<Traversal.Admin<S, E>> getLocalChildren() { return this.internalParameters.getTraversals(); @@ -133,21 +121,7 @@ public class AddEdgeStartStep extends AbstractStep<Edge, Edge> implements AddEdg // a dead traverser to trigger the traversal final Traverser.Admin traverser = generator.generate(1, (Step) this, 1); - final Object labelParam = this.internalParameters.get(traverser, T.label, () -> Edge.DEFAULT_LABEL).get(0); - final String edgeLabel; - final Set<String> additionalLabels; - if (labelParam instanceof Set) { - final Set<String> labelSet = (Set<String>) labelParam; - final Iterator<String> iter = labelSet.iterator(); - edgeLabel = iter.next(); - additionalLabels = new LinkedHashSet<>(); - while (iter.hasNext()) { - additionalLabels.add(iter.next()); - } - } else { - edgeLabel = (String) labelParam; - additionalLabels = Collections.emptySet(); - } + final String edgeLabel = (String) this.internalParameters.get(traverser, T.label, () -> Edge.DEFAULT_LABEL).get(0); // FROM/TO must be set and must be vertices Object theTo = this.internalParameters.get(traverser, TO, () -> null).get(0); @@ -191,10 +165,6 @@ public class AddEdgeStartStep extends AbstractStep<Edge, Edge> implements AddEdg } final Edge edge = fromVertex.addEdge(edgeLabel, toVertex, this.internalParameters.getKeyValues(traverser, TO, FROM, T.label)); - if (!additionalLabels.isEmpty()) { - final String[] extra = additionalLabels.toArray(new String[0]); - edge.addLabel(extra[0], Arrays.copyOfRange(extra, 1, extra.length)); - } EventUtil.registerEdgeCreation(callbackRegistry, getTraversal(), edge); return generator.generate(edge, this, 1L); } else diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepPlaceholder.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepPlaceholder.java index bbf4d429f3..6042823e17 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepPlaceholder.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepPlaceholder.java @@ -24,8 +24,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.lambda.GValueConstantTrave import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.structure.Edge; -import java.util.Set; - public class AddEdgeStartStepPlaceholder extends AbstractAddEdgeStepPlaceholder<Edge> { public AddEdgeStartStepPlaceholder(final Traversal.Admin traversal, final String edgeLabel) { @@ -42,16 +40,10 @@ public class AddEdgeStartStepPlaceholder extends AbstractAddEdgeStepPlaceholder< (Traversal.Admin<Edge, String>) edgeLabelTraversal); } - public AddEdgeStartStepPlaceholder(final Traversal.Admin traversal, final Set<String> labels) { - super(traversal, labels); - } - @Override public AddEdgeStartStep asConcreteStep() { AddEdgeStartStep step; - if (label instanceof Set) { - step = new AddEdgeStartStep(traversal, (Set<String>) label); - } else if (label instanceof Traversal) { + if (label instanceof Traversal) { step = new AddEdgeStartStep(traversal, ((Traversal<?, String>) label).asAdmin()); } else if (label instanceof GValue) { step = new AddEdgeStartStep(traversal, ((GValue<String>) label).get()); 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 7073a7e80f..753d9ae993 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 @@ -18,10 +18,7 @@ */ package org.apache.tinkerpop.gremlin.process.traversal.step.map; -import java.util.Arrays; import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -65,15 +62,6 @@ public class AddEdgeStep<S> extends ScalarMapStep<S, Edge> implements AddEdgeSte this.internalParameters.set(this, T.label, edgeLabelTraversal); } - public AddEdgeStep(final Traversal.Admin traversal, final Set<String> labels) { - super(traversal); - if (labels == null || labels.isEmpty()) { - this.internalParameters.set(this, T.label, Edge.DEFAULT_LABEL); - } else { - this.internalParameters.set(this, T.label, labels); - } - } - @Override public <S, E> List<Traversal.Admin<S, E>> getLocalChildren() { return this.internalParameters.getTraversals(); @@ -121,21 +109,7 @@ public class AddEdgeStep<S> extends ScalarMapStep<S, Edge> implements AddEdgeSte @Override protected Edge map(final Traverser.Admin<S> traverser) { - final Object labelParam = this.internalParameters.get(traverser, T.label, () -> Edge.DEFAULT_LABEL).get(0); - final String edgeLabel; - final Set<String> additionalLabels; - if (labelParam instanceof Set) { - final Set<String> labelSet = (Set<String>) labelParam; - final Iterator<String> iter = labelSet.iterator(); - edgeLabel = iter.next(); - additionalLabels = new LinkedHashSet<>(); - while (iter.hasNext()) { - additionalLabels.add(iter.next()); - } - } else { - edgeLabel = (String) labelParam; - additionalLabels = Collections.emptySet(); - } + final String edgeLabel = this.internalParameters.get(traverser, T.label, () -> Edge.DEFAULT_LABEL).get(0); Vertex toVertex = getAdjacentVertex(this.internalParameters, TO, traverser, edgeLabel); Vertex fromVertex = getAdjacentVertex(this.internalParameters, FROM, traverser, edgeLabel); @@ -161,10 +135,6 @@ public class AddEdgeStep<S> extends ScalarMapStep<S, Edge> implements AddEdgeSte } final Edge edge = fromVertex.addEdge(edgeLabel, toVertex, this.internalParameters.getKeyValues(traverser, TO, FROM, T.label)); - if (!additionalLabels.isEmpty()) { - final String[] extra = additionalLabels.toArray(new String[0]); - edge.addLabel(extra[0], Arrays.copyOfRange(extra, 1, extra.length)); - } EventUtil.registerEdgeCreation(callbackRegistry, getTraversal(), edge); return edge; } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepPlaceholder.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepPlaceholder.java index a992a1314a..a6a5a4466a 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepPlaceholder.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepPlaceholder.java @@ -24,8 +24,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.lambda.GValueConstantTrave import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.structure.Edge; -import java.util.Set; - public class AddEdgeStepPlaceholder<S> extends AbstractAddEdgeStepPlaceholder<S> { public AddEdgeStepPlaceholder(final Traversal.Admin traversal, final String edgeLabel) { @@ -41,16 +39,10 @@ public class AddEdgeStepPlaceholder<S> extends AbstractAddEdgeStepPlaceholder<S> new ConstantTraversal<>(Edge.DEFAULT_LABEL) : edgeLabelTraversal); } - public AddEdgeStepPlaceholder(final Traversal.Admin traversal, final Set<String> labels) { - super(traversal, labels); - } - @Override public AddEdgeStep<S> asConcreteStep() { AddEdgeStep<S> step; - if (label instanceof Set) { - step = new AddEdgeStep<>(traversal, (Set<String>) label); - } else if (label instanceof Traversal) { + if (label instanceof Traversal) { step = new AddEdgeStep<>(traversal, ((Traversal<S, String>) label).asAdmin()); } else if (label instanceof GValue) { step = new AddEdgeStep<>(traversal, ((GValue<String>) label).get()); diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeEdgeStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeEdgeStep.java index 9bc4e59f78..3535143192 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeEdgeStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeEdgeStep.java @@ -20,7 +20,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.map; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -167,21 +166,17 @@ public class MergeEdgeStep<S> extends MergeElementStep<S, Edge, Map<Object, Obje final Graph graph = getGraph(); final Object edgeId = search.get(T.id); - final Object labelValue = search.get(T.label); + final String edgeLabel = (String) search.get(T.label); final Object fromId = search.get(Direction.OUT); final Object toId = search.get(Direction.IN); - // Extract a single label string for use in outE(label)/inE(label) calls. - // For multi-label (collection), we use hasLabel() chaining instead. - final String singleLabel = labelValue instanceof String ? (String) labelValue : null; - final boolean hasLabelConstraint = labelValue != null; - GraphTraversal t; if (edgeId != null) { // g.E(eid).hasLabel(label).where(outV().hasId(fromId)).where(inV().hasId(toId)); t = graph.traversal().E(edgeId); - t = applyLabelConstraint(t, labelValue); + if (edgeLabel != null) + t = t.hasLabel(edgeLabel); if (fromId != null) t = t.where(outV().hasId(fromId)); if (toId != null) @@ -191,14 +186,10 @@ public class MergeEdgeStep<S> extends MergeElementStep<S, Edge, Map<Object, Obje // g.V(fromId).outE(label).where(inV().hasId(toId)); t = graph.traversal().V(fromId); - if (singleLabel != null) - t = t.outE(singleLabel); - else { + if (edgeLabel != null) + t = t.outE(edgeLabel); + else t = t.outE(); - // apply multi-label constraint after outE() if it's a collection - if (hasLabelConstraint && singleLabel == null) - t = applyLabelConstraint(t, labelValue); - } if (toId != null) t = t.where(inV().hasId(toId)); @@ -206,20 +197,17 @@ public class MergeEdgeStep<S> extends MergeElementStep<S, Edge, Map<Object, Obje // g.V(toId).inE(edgeLabel); t = graph.traversal().V(toId); - if (singleLabel != null) - t = t.inE(singleLabel); - else { + if (edgeLabel != null) + t = t.inE(edgeLabel); + else t = t.inE(); - // apply multi-label constraint after inE() if it's a collection - if (hasLabelConstraint && singleLabel == null) - t = applyLabelConstraint(t, labelValue); - } } else { // g.E().hasLabel(label) t = graph.traversal().E(); - t = applyLabelConstraint(t, labelValue); + if (edgeLabel != null) + t = t.hasLabel(edgeLabel); } @@ -234,26 +222,6 @@ public class MergeEdgeStep<S> extends MergeElementStep<S, Edge, Map<Object, Obje return CloseableIterator.of(t); } - /** - * Apply label constraint(s) to the traversal. Supports both single String labels and - * Collection labels with AND semantics (edge must have ALL specified labels). - */ - protected GraphTraversal applyLabelConstraint(GraphTraversal t, final Object labelValue) { - if (labelValue == null) { - return t; - } - if (labelValue instanceof String) { - return t.hasLabel((String) labelValue); - } else if (labelValue instanceof java.util.Collection) { - // Multi-label: AND semantics - must have ALL specified labels - for (final Object label : (java.util.Collection<?>) labelValue) { - t = t.hasLabel((String) label); - } - return t; - } - return t; - } - protected Map<?,?> resolveVertices(final Map map, final Traverser.Admin<S> traverser) { resolveVertex(Merge.outV, Direction.OUT, map, traverser, outVTraversal); resolveVertex(Merge.inV, Direction.IN, map, traverser, inVTraversal); @@ -311,32 +279,14 @@ public class MergeEdgeStep<S> extends MergeElementStep<S, Edge, Map<Object, Obje traverser.set((S) e); // assume good input from GraphTraversal - folks might drop in a T here even though it is immutable - final Map onMatchMap = materializeMap(traverser, onMatchTraversal); + final Map<String, ?> onMatchMap = materializeMap(traverser, onMatchTraversal); validateMapInput(onMatchMap, true); onMatchMap.forEach((key, value) -> { - // Handle T.label for multi-label support: append only (addLabel semantics) - // No label removal via onMatch — follows cardinality exceptions - if (T.label.equals(key) || T.label.getAccessor().equals(key)) { - if (value instanceof String) { - e.addLabel((String) value); - } else if (value instanceof java.util.Collection) { - final java.util.Collection<?> labels = (java.util.Collection<?>) value; - if (!labels.isEmpty()) { - final String[] labelArray = labels.stream() - .map(l -> (String) l) - .toArray(String[]::new); - e.addLabel(labelArray[0], - Arrays.copyOfRange(labelArray, 1, labelArray.length)); - } - } - return; - } - // trigger callbacks for eventing - in this case, it's a EdgePropertyChangedEvent. if there's no // registry/callbacks then just set the property - EventUtil.registerEdgePropertyChange(callbackRegistry, getTraversal(), e, (String) key, value); - e.property((String) key, value); + EventUtil.registerEdgePropertyChange(callbackRegistry, getTraversal(), e, key, value); + e.property(key, value); }); }); @@ -367,30 +317,7 @@ public class MergeEdgeStep<S> extends MergeElementStep<S, Edge, Map<Object, Obje final Vertex fromV = resolveVertex(onCreateMap.get(Direction.OUT)); final Vertex toV = resolveVertex(onCreateMap.get(Direction.IN)); - final Object labelValue = onCreateMap.getOrDefault(T.label, Edge.DEFAULT_LABEL); - final String primaryLabel; - final java.util.Collection<String> additionalLabels; - - if (labelValue instanceof String) { - primaryLabel = (String) labelValue; - additionalLabels = Collections.emptyList(); - } else if (labelValue instanceof java.util.Collection) { - final java.util.Collection<?> labelCollection = (java.util.Collection<?>) labelValue; - if (labelCollection.isEmpty()) { - primaryLabel = Edge.DEFAULT_LABEL; - additionalLabels = Collections.emptyList(); - } else { - final Iterator<?> iter = labelCollection.iterator(); - primaryLabel = (String) iter.next(); - additionalLabels = new ArrayList<>(); - while (iter.hasNext()) { - additionalLabels.add((String) iter.next()); - } - } - } else { - primaryLabel = Edge.DEFAULT_LABEL; - additionalLabels = Collections.emptyList(); - } + final String label = (String) onCreateMap.getOrDefault(T.label, Edge.DEFAULT_LABEL); final List<Object> properties = new ArrayList<>(); @@ -402,13 +329,7 @@ public class MergeEdgeStep<S> extends MergeElementStep<S, Edge, Map<Object, Obje properties.add(e.getValue()); } - final Edge edge = fromV.addEdge(primaryLabel, toV, properties.toArray()); - - // add any additional labels from a multi-label collection - if (!additionalLabels.isEmpty()) { - final String[] extraLabels = additionalLabels.toArray(new String[0]); - edge.addLabel(extraLabels[0], Arrays.copyOfRange(extraLabels, 1, extraLabels.length)); - } + final Edge edge = fromV.addEdge(label, toV, properties.toArray()); // trigger callbacks for eventing - in this case, it's a VertexAddedEvent EventUtil.registerEdgeCreationWithGenericEventRegistry(callbackRegistry, getTraversal(), edge); diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLWriter.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLWriter.java index 0c75805f3a..cae0f9c987 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLWriter.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLWriter.java @@ -266,7 +266,7 @@ public final class GraphMLWriter implements GraphWriter { writer.writeStartElement(GraphMLTokens.DATA); writer.writeAttribute(GraphMLTokens.KEY, this.edgeLabelKey); - writer.writeCharacters(edge.label() == null ? "" : edge.label()); + writer.writeCharacters(edge.label()); writer.writeEndElement(); final List<String> keys = new ArrayList<>(edge.keys()); @@ -296,7 +296,7 @@ public final class GraphMLWriter implements GraphWriter { writer.writeStartElement(GraphMLTokens.DATA); writer.writeAttribute(GraphMLTokens.KEY, this.edgeLabelKey); - writer.writeCharacters(edge.label() == null ? "" : edge.label()); + writer.writeCharacters(edge.label()); writer.writeEndElement(); for (String key : edge.keys()) { @@ -328,7 +328,7 @@ public final class GraphMLWriter implements GraphWriter { writer.writeStartElement(GraphMLTokens.DATA); writer.writeAttribute(GraphMLTokens.KEY, this.vertexLabelKey); - writer.writeCharacters(vertex.label() == null ? "" : vertex.label()); + writer.writeCharacters(vertex.label()); writer.writeEndElement(); for (String key : keys) { diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1.java index feb49e9487..db4d4a8d60 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1.java @@ -139,10 +139,10 @@ final class GraphSONSerializersV1 { if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName()); GraphSONUtil.writeWithType(GraphSONTokens.ID, edge.id(), jsonGenerator, serializerProvider, typeSerializer); - jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label() == null ? "" : edge.label()); + jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label()); jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.EDGE); - jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, edge.inVertex().label() == null ? "" : edge.inVertex().label()); - jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, edge.outVertex().label() == null ? "" : edge.outVertex().label()); + jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, edge.inVertex().label()); + jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, edge.outVertex().label()); GraphSONUtil.writeWithType(GraphSONTokens.IN, edge.inVertex().id(), jsonGenerator, serializerProvider, typeSerializer); GraphSONUtil.writeWithType(GraphSONTokens.OUT, edge.outVertex().id(), jsonGenerator, serializerProvider, typeSerializer); writeProperties(edge, jsonGenerator, serializerProvider, typeSerializer); @@ -195,7 +195,7 @@ final class GraphSONSerializersV1 { jsonGenerator.writeStartObject(); if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName()); GraphSONUtil.writeWithType(GraphSONTokens.ID, vertex.id(), jsonGenerator, serializerProvider, typeSerializer); - jsonGenerator.writeStringField(GraphSONTokens.LABEL, vertex.label() == null ? "" : vertex.label()); + jsonGenerator.writeStringField(GraphSONTokens.LABEL, vertex.label()); jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.VERTEX); writeProperties(vertex, jsonGenerator, serializerProvider, typeSerializer); jsonGenerator.writeEndObject(); diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2.java index 745d9ceb90..c3113ebfe4 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2.java @@ -100,7 +100,7 @@ class GraphSONSerializersV2 { jsonGenerator.writeStartObject(); jsonGenerator.writeObjectField(GraphSONTokens.ID, vertex.id()); - jsonGenerator.writeStringField(GraphSONTokens.LABEL, vertex.label() == null ? "" : vertex.label()); + jsonGenerator.writeStringField(GraphSONTokens.LABEL, vertex.label()); writeProperties(vertex, jsonGenerator); jsonGenerator.writeEndObject(); @@ -149,9 +149,9 @@ class GraphSONSerializersV2 { jsonGenerator.writeStartObject(); jsonGenerator.writeObjectField(GraphSONTokens.ID, edge.id()); - jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label() == null ? "" : edge.label()); - jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, edge.inVertex().label() == null ? "" : edge.inVertex().label()); - jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, edge.outVertex().label() == null ? "" : edge.outVertex().label()); + jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label()); + jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, edge.inVertex().label()); + jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, edge.outVertex().label()); jsonGenerator.writeObjectField(GraphSONTokens.IN, edge.inVertex().id()); jsonGenerator.writeObjectField(GraphSONTokens.OUT, edge.outVertex().id()); writeProperties(edge, jsonGenerator); diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3.java index 650d8e599f..b6761dc529 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3.java @@ -101,7 +101,7 @@ class GraphSONSerializersV3 { jsonGenerator.writeStartObject(); jsonGenerator.writeObjectField(GraphSONTokens.ID, vertex.id()); - jsonGenerator.writeStringField(GraphSONTokens.LABEL, vertex.label() == null ? "" : vertex.label()); + jsonGenerator.writeStringField(GraphSONTokens.LABEL, vertex.label()); writeTypeForGraphObjectIfUntyped(jsonGenerator, typeInfo, GraphSONTokens.VERTEX); writeProperties(vertex, jsonGenerator, serializerProvider); @@ -161,10 +161,10 @@ class GraphSONSerializersV3 { jsonGenerator.writeStartObject(); jsonGenerator.writeObjectField(GraphSONTokens.ID, edge.id()); - jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label() == null ? "" : edge.label()); + jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label()); writeTypeForGraphObjectIfUntyped(jsonGenerator, typeInfo, GraphSONTokens.EDGE); - jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, edge.inVertex().label() == null ? "" : edge.inVertex().label()); - jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, edge.outVertex().label() == null ? "" : edge.outVertex().label()); + jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, edge.inVertex().label()); + jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, edge.outVertex().label()); jsonGenerator.writeObjectField(GraphSONTokens.IN, edge.inVertex().id()); jsonGenerator.writeObjectField(GraphSONTokens.OUT, edge.outVertex().id()); writeProperties(edge, jsonGenerator); diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV3.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV3.java index a54239972d..0b748813f5 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV3.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV3.java @@ -75,7 +75,7 @@ public final class GryoSerializersV3 { @Override public <O extends OutputShim> void write(final KryoShim<?, O> kryo, final O output, final Edge edge) { kryo.writeClassAndObject(output, edge.id()); - output.writeString(edge.label() == null ? "" : edge.label()); + output.writeString(edge.label()); kryo.writeClassAndObject(output, edge.inVertex().id()); // temporary try/catch perhaps? need this to get SparkSingleIterationStrategyTest to work. Trying to grab @@ -85,8 +85,7 @@ public final class GryoSerializersV3 { // // ghetto try { - final String inLabel = edge.inVertex().label(); - output.writeString(inLabel == null ? Vertex.DEFAULT_LABEL : inLabel); + output.writeString(edge.inVertex().label()); } catch (Exception ex) { output.writeString(Vertex.DEFAULT_LABEL); } @@ -95,8 +94,7 @@ public final class GryoSerializersV3 { // same nonsense as above for a default label try { - final String outLabel = edge.outVertex().label(); - output.writeString(outLabel == null ? Vertex.DEFAULT_LABEL : outLabel); + output.writeString(edge.outVertex().label()); } catch (Exception ex) { output.writeString(Vertex.DEFAULT_LABEL); } @@ -135,7 +133,7 @@ public final class GryoSerializersV3 { @Override public <O extends OutputShim> void write(final KryoShim<?, O> kryo, final O output, final Vertex vertex) { kryo.writeClassAndObject(output, vertex.id()); - output.writeString(vertex.label() == null ? "" : vertex.label()); + output.writeString(vertex.label()); final Iterator<? extends VertexProperty> properties = vertex.properties(); output.writeBoolean(properties.hasNext());
