summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@gmail.com>2013-01-25 14:53:51 +0100
committerSimon Brandhof <simon.brandhof@gmail.com>2013-01-25 18:01:14 +0100
commite2390331215b0882c758ba218e50df764a00a6a6 (patch)
treebbbf29edf6c337394c9ceef333c9875fa8f4b031
parenta275de7f4f653dbdc8b2192ece6a8d1ad6e0371b (diff)
downloadsonarqube-e2390331215b0882c758ba218e50df764a00a6a6.tar.gz
sonarqube-e2390331215b0882c758ba218e50df764a00a6a6.zip
SONAR-4087 refactor GraphUtil#uniqueAdjacent()
-rw-r--r--sonar-core/src/main/java/org/sonar/core/graph/GraphUtil.java10
-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.java2
-rw-r--r--sonar-core/src/main/java/org/sonar/core/test/DefaultTestPlan.java2
-rw-r--r--sonar-core/src/main/java/org/sonar/core/test/DefaultTestable.java2
-rw-r--r--sonar-core/src/test/java/org/sonar/core/graph/GraphUtilTest.java38
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();