diff options
author | Simon Brandhof <simon.brandhof@gmail.com> | 2013-01-25 14:53:51 +0100 |
---|---|---|
committer | Simon Brandhof <simon.brandhof@gmail.com> | 2013-01-25 18:01:14 +0100 |
commit | e2390331215b0882c758ba218e50df764a00a6a6 (patch) | |
tree | bbbf29edf6c337394c9ceef333c9875fa8f4b031 | |
parent | a275de7f4f653dbdc8b2192ece6a8d1ad6e0371b (diff) | |
download | sonarqube-e2390331215b0882c758ba218e50df764a00a6a6.tar.gz sonarqube-e2390331215b0882c758ba218e50df764a00a6a6.zip |
SONAR-4087 refactor GraphUtil#uniqueAdjacent()
-rw-r--r-- | sonar-core/src/main/java/org/sonar/core/graph/GraphUtil.java | 10 | ||||
-rw-r--r-- | sonar-core/src/main/java/org/sonar/core/graph/MultipleElementsException.java (renamed from sonar-core/src/main/java/org/sonar/core/graph/MultipleVerticesException.java) | 4 | ||||
-rw-r--r-- | sonar-core/src/main/java/org/sonar/core/test/DefaultTestCase.java | 2 | ||||
-rw-r--r-- | sonar-core/src/main/java/org/sonar/core/test/DefaultTestPlan.java | 2 | ||||
-rw-r--r-- | sonar-core/src/main/java/org/sonar/core/test/DefaultTestable.java | 2 | ||||
-rw-r--r-- | sonar-core/src/test/java/org/sonar/core/graph/GraphUtilTest.java | 38 |
6 files changed, 48 insertions, 10 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/graph/GraphUtil.java b/sonar-core/src/main/java/org/sonar/core/graph/GraphUtil.java index 4b56a69c116..303f589f09d 100644 --- a/sonar-core/src/main/java/org/sonar/core/graph/GraphUtil.java +++ b/sonar-core/src/main/java/org/sonar/core/graph/GraphUtil.java @@ -19,6 +19,7 @@ */ package org.sonar.core.graph; +import com.google.common.base.Joiner; import com.google.common.collect.Lists; import com.tinkerpop.blueprints.Direction; import com.tinkerpop.blueprints.Edge; @@ -27,6 +28,7 @@ import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.blueprints.impls.tg.TinkerGraph; import com.tinkerpop.blueprints.util.ElementHelper; import com.tinkerpop.gremlin.java.GremlinPipeline; +import org.hibernate.engine.JoinSequence; import javax.annotation.CheckForNull; import javax.annotation.Nullable; @@ -42,16 +44,16 @@ public class GraphUtil { /** * Get adjacent vertex. It assumes that there are only 0 or 1 results. * - * @throws MultipleVerticesException if there are more than 1 adjacent vertices with the given criteria. + * @throws MultipleElementsException if there are more than 1 adjacent vertices with the given criteria. */ @CheckForNull - public static Vertex adjacent(Vertex from, Direction direction, String... labels) { + public static Vertex singleAdjacent(Vertex from, Direction direction, String... labels) { Iterator<Vertex> vertices = from.getVertices(direction, labels).iterator(); Vertex result = null; if (vertices.hasNext()) { result = vertices.next(); if (vertices.hasNext()) { - throw new MultipleVerticesException(String.format("More than one vertex adjacent to: %s, direction: %s, labels: ", from, direction, labels)); + throw new MultipleElementsException(String.format("More than one vertex is adjacent to: %s, direction: %s, labels: %s", from, direction, Joiner.on(",").join(labels))); } } return result; @@ -63,7 +65,7 @@ public class GraphUtil { if (iterator.hasNext()) { result = iterator.next(); if (iterator.hasNext()) { - throw new MultipleVerticesException("More than one elements"); + throw new MultipleElementsException("More than one elements"); } } return result; diff --git a/sonar-core/src/main/java/org/sonar/core/graph/MultipleVerticesException.java b/sonar-core/src/main/java/org/sonar/core/graph/MultipleElementsException.java index 384edd34c41..ec4d9ac83c0 100644 --- a/sonar-core/src/main/java/org/sonar/core/graph/MultipleVerticesException.java +++ b/sonar-core/src/main/java/org/sonar/core/graph/MultipleElementsException.java @@ -19,8 +19,8 @@ */ package org.sonar.core.graph; -public class MultipleVerticesException extends RuntimeException { - public MultipleVerticesException(String message) { +public class MultipleElementsException extends RuntimeException { + public MultipleElementsException(String message) { super(message); } } diff --git a/sonar-core/src/main/java/org/sonar/core/test/DefaultTestCase.java b/sonar-core/src/main/java/org/sonar/core/test/DefaultTestCase.java index 00dc306a174..3c01e7cebeb 100644 --- a/sonar-core/src/main/java/org/sonar/core/test/DefaultTestCase.java +++ b/sonar-core/src/main/java/org/sonar/core/test/DefaultTestCase.java @@ -84,7 +84,7 @@ public class DefaultTestCase extends ElementWrapper<Vertex> implements MutableTe } public TestPlan testPlan() { - Vertex plan = GraphUtil.adjacent(element(), Direction.IN, "testcase"); + Vertex plan = GraphUtil.singleAdjacent(element(), Direction.IN, "testcase"); return graph().wrap(plan, DefaultTestPlan.class); } diff --git a/sonar-core/src/main/java/org/sonar/core/test/DefaultTestPlan.java b/sonar-core/src/main/java/org/sonar/core/test/DefaultTestPlan.java index 9a5c21bd77f..536a90ade35 100644 --- a/sonar-core/src/main/java/org/sonar/core/test/DefaultTestPlan.java +++ b/sonar-core/src/main/java/org/sonar/core/test/DefaultTestPlan.java @@ -33,7 +33,7 @@ import java.util.List; public class DefaultTestPlan extends ElementWrapper<Vertex> implements MutableTestPlan { public Component component() { - Vertex component = GraphUtil.adjacent(element(), Direction.IN, "testplan"); + Vertex component = GraphUtil.singleAdjacent(element(), Direction.IN, "testplan"); return graph().wrap(component, ComponentWrapper.class); } diff --git a/sonar-core/src/main/java/org/sonar/core/test/DefaultTestable.java b/sonar-core/src/main/java/org/sonar/core/test/DefaultTestable.java index 6d9288051a9..521a21050c3 100644 --- a/sonar-core/src/main/java/org/sonar/core/test/DefaultTestable.java +++ b/sonar-core/src/main/java/org/sonar/core/test/DefaultTestable.java @@ -34,7 +34,7 @@ import java.util.SortedSet; public class DefaultTestable extends ElementWrapper<Vertex> implements MutableTestable { public Component component() { - Vertex component = GraphUtil.adjacent(element(), Direction.IN, "testable"); + Vertex component = GraphUtil.singleAdjacent(element(), Direction.IN, "testable"); return graph().wrap(component, ComponentWrapper.class); } diff --git a/sonar-core/src/test/java/org/sonar/core/graph/GraphUtilTest.java b/sonar-core/src/test/java/org/sonar/core/graph/GraphUtilTest.java index b39ecf4e331..11f402f7a48 100644 --- a/sonar-core/src/test/java/org/sonar/core/graph/GraphUtilTest.java +++ b/sonar-core/src/test/java/org/sonar/core/graph/GraphUtilTest.java @@ -19,15 +19,51 @@ */ package org.sonar.core.graph; +import com.tinkerpop.blueprints.Direction; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.blueprints.impls.tg.TinkerGraph; import com.tinkerpop.gremlin.java.GremlinPipeline; +import org.junit.Rule; import org.junit.Test; -import org.sonar.core.graph.GraphUtil; +import org.junit.rules.ExpectedException; import static org.fest.assertions.Assertions.assertThat; public class GraphUtilTest { + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void uniqueAdjacent() { + TinkerGraph graph = new TinkerGraph(); + Vertex a = graph.addVertex(null); + Vertex b = graph.addVertex(null); + Vertex c = graph.addVertex(null); + graph.addEdge(null, a, b, "likes"); + graph.addEdge(null, a, c, "hates"); + + assertThat(GraphUtil.singleAdjacent(a, Direction.OUT, "likes")).isEqualTo(b); + assertThat(GraphUtil.singleAdjacent(a, Direction.OUT, "likes", "other")).isEqualTo(b); + assertThat(GraphUtil.singleAdjacent(a, Direction.OUT, "other")).isNull(); + assertThat(GraphUtil.singleAdjacent(a, Direction.IN, "likes")).isNull(); + } + + @Test + public void uniqueAdjacent_fail_if_multiple_adjacents() { + thrown.expect(MultipleElementsException.class); + thrown.expectMessage("More than one vertex is adjacent to: v[0], direction: OUT, labels: likes,hates"); + + TinkerGraph graph = new TinkerGraph(); + Vertex a = graph.addVertex(null); + Vertex b = graph.addVertex(null); + Vertex c = graph.addVertex(null); + graph.addEdge(null, a, b, "likes"); + graph.addEdge(null, a, c, "likes"); + + GraphUtil.singleAdjacent(a, Direction.OUT, "likes", "hates"); + } + @Test public void subGraph() { TinkerGraph graph = new TinkerGraph(); |