Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1592 c94f4df03 -> 3fcce8ddc
added test cases for edge selection and fixed an NPE in DeflatedVertex. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/3fcce8dd Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/3fcce8dd Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/3fcce8dd Branch: refs/heads/TINKERPOP-1592 Commit: 3fcce8ddcf23888465dbe38486960cbac62114fa Parents: c94f4df Author: Marko A. Rodriguez <okramma...@gmail.com> Authored: Mon Jun 26 14:41:07 2017 -0600 Committer: Marko A. Rodriguez <okramma...@gmail.com> Committed: Mon Jun 26 14:41:07 2017 -0600 ---------------------------------------------------------------------- .../structure/util/deflated/DeflatedVertex.java | 21 +++++------ .../util/deflated/DeflatedVertexTest.java | 39 ++++++++++++++++++-- 2 files changed, 46 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3fcce8dd/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/deflated/DeflatedVertex.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/deflated/DeflatedVertex.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/deflated/DeflatedVertex.java index a4cde6c..d04352d 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/deflated/DeflatedVertex.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/deflated/DeflatedVertex.java @@ -144,20 +144,19 @@ public class DeflatedVertex extends DeflatedElement<Vertex> implements Vertex { if (null == this.outEdges || this.outEdges.isEmpty()) return Collections.emptyIterator(); else - return Stream.of(edgeLabels).map(label -> this.outEdges.get(label)).flatMap(List::stream).iterator(); + return edgeLabels.length == 0 ? + this.outEdges.values().stream().flatMap(List::stream).iterator() : + Stream.of(edgeLabels).map(label -> this.outEdges.getOrDefault(label, Collections.emptyList())).flatMap(List::stream).iterator(); + } else if (direction.equals(Direction.IN)) { - if (null == this.outEdges || this.outEdges.isEmpty()) - return Collections.emptyIterator(); - else - return Stream.of(edgeLabels).map(label -> this.inEdges.get(label)).flatMap(List::stream).iterator(); - } else { - if ((null == this.outEdges || this.outEdges.isEmpty()) && (null == this.inEdges || this.inEdges.isEmpty())) + if (null == this.inEdges || this.inEdges.isEmpty()) return Collections.emptyIterator(); else - return Stream.concat( - Stream.of(edgeLabels).map(label -> this.outEdges.get(label)).flatMap(List::stream), - Stream.of(edgeLabels).map(label -> this.outEdges.get(label)).flatMap(List::stream)).iterator(); - } + return edgeLabels.length == 0 ? + this.inEdges.values().stream().flatMap(List::stream).iterator() : + Stream.of(edgeLabels).map(label -> this.inEdges.getOrDefault(label, Collections.emptyList())).flatMap(List::stream).iterator(); + } else + return IteratorUtils.concat(this.edges(Direction.OUT, edgeLabels), this.edges(Direction.IN, edgeLabels)); } @Override http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3fcce8dd/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/deflated/DeflatedVertexTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/deflated/DeflatedVertexTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/deflated/DeflatedVertexTest.java index bac6c03..ad16000 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/deflated/DeflatedVertexTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/deflated/DeflatedVertexTest.java @@ -21,9 +21,8 @@ package org.apache.tinkerpop.gremlin.structure.util.deflated; import org.apache.tinkerpop.gremlin.AbstractGremlinTest; import org.apache.tinkerpop.gremlin.FeatureRequirementSet; +import org.apache.tinkerpop.gremlin.structure.Direction; import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory; -import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex; import org.junit.Test; import java.util.Arrays; @@ -45,6 +44,40 @@ public class DeflatedVertexTest extends AbstractGremlinTest { @Test @FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY) + public void shouldIterateEdgesOnDeflate() { + final Vertex v1 = graph.addVertex("name", "daniel", "state", "happy"); + final Vertex v2 = graph.addVertex("name", "marko", "state", "stoked"); + v1.addEdge("knows", v2, "weight", 1.0, "time", "always"); + v1.addEdge("likes", v2); + v2.addEdge("knows", v1); + + // NO EDGES + Vertex deflated = DeflatedFactory.detach(v1, new HashMap<String, Set<String>>() {{ + put("properties", new HashSet<>(Arrays.asList("name", "state"))); + }}); + assertTrue(deflated.properties().hasNext()); + assertFalse(deflated.edges(Direction.OUT).hasNext()); + assertFalse(deflated.edges(Direction.IN).hasNext()); + assertFalse(deflated.edges(Direction.BOTH).hasNext()); + // SOME EDGES + deflated = DeflatedFactory.detach(v1, new HashMap<String, Set<String>>() {{ + put("properties", new HashSet<>(Arrays.asList("name", "state", "weight"))); + put("outE", Collections.singleton("knows")); + }}); + assertTrue(deflated.properties().hasNext()); + assertTrue(deflated.edges(Direction.OUT).hasNext()); + assertTrue(deflated.edges(Direction.OUT, "knows").hasNext()); + assertFalse(deflated.edges(Direction.OUT, "likes").hasNext()); + assertFalse(deflated.edges(Direction.IN).hasNext()); + assertFalse(deflated.edges(Direction.IN, "knows").hasNext()); + assertFalse(deflated.edges(Direction.IN, "likes").hasNext()); + assertFalse(deflated.edges(Direction.BOTH, "likes").hasNext()); + assertEquals(1.0d, deflated.edges(Direction.OUT, "knows").next().value("weight"), 0.01d); + assertFalse(deflated.edges(Direction.OUT, "knows").next().property("time").isPresent()); + } + + @Test + @FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY) public void shouldIteratePropertiesOnDeflate() { final Vertex v = graph.addVertex("name", "daniel", "favoriteColor", "red", "state", "happy"); // ALL PROPERTIES @@ -89,7 +122,7 @@ public class DeflatedVertexTest extends AbstractGremlinTest { @Test @FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY) public void shouldHashAndEqualCorrectly() { - final Vertex v = graph.addVertex("name","blah"); + final Vertex v = graph.addVertex("name", "blah"); final Set<Vertex> set = new HashSet<>(); for (int i = 0; i < 100; i++) { set.add(DeflatedFactory.detach(v, Collections.emptyMap()));