Mercurial > hg > thermostat
changeset 2287:981f2ef6d5a9
Small changes to the Graph API
review-thread: http://icedtea.classpath.org/pipermail/thermostat/2016-May/018695.html
reviewed-by: jerboaa
line wrap: on
line diff
--- a/dependency-tool/command/src/main/java/com/redhat/thermostat/tools/dependency/internal/DependencyGraphBuilder.java Wed Apr 06 15:07:01 2016 +0200 +++ b/dependency-tool/command/src/main/java/com/redhat/thermostat/tools/dependency/internal/DependencyGraphBuilder.java Wed May 04 17:30:00 2016 +0200 @@ -143,10 +143,10 @@ Relationship relationship = null; Set<Relationship> relationships = null; if (swap) { - relationship = new Relationship("<-", destination, source); + relationship = new Relationship(destination, "<-", source); relationships = graph.getRelationships(destination); } else { - relationship = new Relationship("->", source, destination); + relationship = new Relationship(source, "->", destination); relationships = graph.getRelationships(source); }
--- a/platform/collections/src/main/java/com/redhat/thermostat/collections/graph/Graph.java Wed Apr 06 15:07:01 2016 +0200 +++ b/platform/collections/src/main/java/com/redhat/thermostat/collections/graph/Graph.java Wed May 04 17:30:00 2016 +0200 @@ -46,11 +46,12 @@ /** * Creates a new {@link Relationship} to this Graph - * from the given {@code node}s and {@code id}. + * from the given {@code node}s and {@code relationship} {@code String} + * representation. * Returns the {@link Relationship} just created or {@code null} if the * {@link Relationship} was not added to the Graph. */ - Relationship addRelationship(Node source, Node destination, String id); + Relationship addRelationship(Node source, String relationship, Node destination); /** * Adds the given {@link Relationship} to this Graph.
--- a/platform/collections/src/main/java/com/redhat/thermostat/collections/graph/HashGraph.java Wed Apr 06 15:07:01 2016 +0200 +++ b/platform/collections/src/main/java/com/redhat/thermostat/collections/graph/HashGraph.java Wed May 04 17:30:00 2016 +0200 @@ -54,8 +54,8 @@ } @Override - public Relationship addRelationship(Node source, Node destination, String id) { - Relationship rel = new Relationship(id, source, destination); + public Relationship addRelationship(Node source, String id, Node destination) { + Relationship rel = new Relationship(source, id, destination); if (!addRelationship(rel)) { return null; }
--- a/platform/collections/src/main/java/com/redhat/thermostat/collections/graph/Relationship.java Wed Apr 06 15:07:01 2016 +0200 +++ b/platform/collections/src/main/java/com/redhat/thermostat/collections/graph/Relationship.java Wed May 04 17:30:00 2016 +0200 @@ -48,7 +48,7 @@ private Map<String, Object> properties; - public Relationship(String name, Node from, Node to) { + public Relationship(Node from, String name, Node to) { this.from = from; this.to = to;
--- a/platform/collections/src/test/java/com/redhat/thermostat/collections/graph/BreadthFirstSearchTest.java Wed Apr 06 15:07:01 2016 +0200 +++ b/platform/collections/src/test/java/com/redhat/thermostat/collections/graph/BreadthFirstSearchTest.java Wed May 04 17:30:00 2016 +0200 @@ -63,19 +63,19 @@ Node i = new Node("I"); - Relationship ab = graph.addRelationship(a, b, "knows"); - Relationship ac = graph.addRelationship(a, c, "knows"); + Relationship ab = graph.addRelationship(a, "knows", b); + Relationship ac = graph.addRelationship(a, "knows", c); - Relationship bd = graph.addRelationship(b, d, "knows"); - Relationship be = graph.addRelationship(b, e, "knows"); + Relationship bd = graph.addRelationship(b, "knows", d); + Relationship be = graph.addRelationship(b, "knows", e); - Relationship cf = graph.addRelationship(c, f, "knows"); - Relationship cg = graph.addRelationship(c, g, "knows"); + Relationship cf = graph.addRelationship(c, "knows", f); + Relationship cg = graph.addRelationship(c, "knows", g); - Relationship eh = graph.addRelationship(e, h, "knows"); + Relationship eh = graph.addRelationship(e, "knows", h); - Relationship ei = graph.addRelationship(e, i, "knows"); - Relationship ia = graph.addRelationship(i, a, "knows"); + Relationship ei = graph.addRelationship(e, "knows", i); + Relationship ia = graph.addRelationship(i, "knows", a); final List<Relationship> results = new ArrayList<>(); final List<Node> nodes = new ArrayList<>();
--- a/platform/collections/src/test/java/com/redhat/thermostat/collections/graph/DepthFirstSearchTest.java Wed Apr 06 15:07:01 2016 +0200 +++ b/platform/collections/src/test/java/com/redhat/thermostat/collections/graph/DepthFirstSearchTest.java Wed May 04 17:30:00 2016 +0200 @@ -72,19 +72,19 @@ Node i = new Node("I"); - Relationship ab = graph.addRelationship(a, b, "knows"); - Relationship ac = graph.addRelationship(a, c, "knows"); + Relationship ab = graph.addRelationship(a, "knows", b); + Relationship ac = graph.addRelationship(a, "knows", c); - Relationship bd = graph.addRelationship(b, d, "knows"); - Relationship be = graph.addRelationship(b, e, "knows"); + Relationship bd = graph.addRelationship(b, "knows", d); + Relationship be = graph.addRelationship(b, "knows", e); - Relationship cf = graph.addRelationship(c, f, "knows"); - Relationship cg = graph.addRelationship(c, g, "knows"); + Relationship cf = graph.addRelationship(c, "knows", f); + Relationship cg = graph.addRelationship(c, "knows", g); - Relationship eh = graph.addRelationship(e, h, "knows"); + Relationship eh = graph.addRelationship(e, "knows", h); - Relationship ei = graph.addRelationship(e, i, "knows"); - Relationship ia = graph.addRelationship(i, a, "knows"); + Relationship ei = graph.addRelationship(e, "knows", i); + Relationship ia = graph.addRelationship(i, "knows", a); final List<Relationship> results = new ArrayList<>(); final List<Node> nodes = new ArrayList<>(); @@ -134,19 +134,19 @@ Node i = new Node("I"); - Relationship ab = graph.addRelationship(a, b, "knows"); - Relationship ac = graph.addRelationship(a, c, "knows"); + Relationship ab = graph.addRelationship(a, "knows", b); + Relationship ac = graph.addRelationship(a, "knows", c); - Relationship bd = graph.addRelationship(b, d, "knows"); - Relationship be = graph.addRelationship(b, e, "knows"); + Relationship bd = graph.addRelationship(b, "knows", d); + Relationship be = graph.addRelationship(b, "knows", e); - Relationship cf = graph.addRelationship(c, f, "knows"); - Relationship cg = graph.addRelationship(c, g, "knows"); + Relationship cf = graph.addRelationship(c, "knows", f); + Relationship cg = graph.addRelationship(c, "knows", g); - Relationship eh = graph.addRelationship(e, h, "knows"); + Relationship eh = graph.addRelationship(e, "knows", h); - Relationship ei = graph.addRelationship(e, i, "knows"); - Relationship ia = graph.addRelationship(i, a, "knows"); + Relationship ei = graph.addRelationship(e, "knows", i); + Relationship ia = graph.addRelationship(i, "knows", a); final Map<String, Relationship> backNodes = new HashMap<>(); @@ -300,28 +300,28 @@ Node i = new Node("I"); Node l = new Node("L"); - Relationship ab = graph.addRelationship(a, b, "knows"); - Relationship ac = graph.addRelationship(a, c, "knows"); - Relationship ae = graph.addRelationship(a, e, "knows"); - Relationship ad = graph.addRelationship(a, d, "knows"); - Relationship al = graph.addRelationship(a, l, "knows"); + Relationship ab = graph.addRelationship(a, "knows", b); + Relationship ac = graph.addRelationship(a, "knows", c); + Relationship ae = graph.addRelationship(a, "knows", e); + Relationship ad = graph.addRelationship(a, "knows", d); + Relationship al = graph.addRelationship(a, "knows", l); - Relationship bc = graph.addRelationship(b, c, "knows"); - Relationship bd = graph.addRelationship(b, d, "knows"); + Relationship bc = graph.addRelationship(b, "knows", c); + Relationship bd = graph.addRelationship(b, "knows", d); - Relationship ce = graph.addRelationship(c, e, "knows"); - Relationship cf = graph.addRelationship(c, f, "knows"); + Relationship ce = graph.addRelationship(c, "knows", e); + Relationship cf = graph.addRelationship(c, "knows", f); - Relationship ed = graph.addRelationship(e, d, "knows"); + Relationship ed = graph.addRelationship(e, "knows", d); - Relationship fe = graph.addRelationship(f, e, "knows"); + Relationship fe = graph.addRelationship(f, "knows", e); - Relationship gf = graph.addRelationship(g, f, "knows"); - Relationship ga = graph.addRelationship(g, a, "knows"); + Relationship gf = graph.addRelationship(g, "knows", f); + Relationship ga = graph.addRelationship(g, "knows", a); - Relationship hc = graph.addRelationship(h, c, "knows"); + Relationship hc = graph.addRelationship(h, "knows", c); - Relationship il = graph.addRelationship(i, l, "knows"); + Relationship il = graph.addRelationship(i, "knows", l); DepthFirstSearch dfs = new DepthFirstSearch(graph);
--- a/platform/collections/src/test/java/com/redhat/thermostat/collections/graph/GraphTest.java Wed Apr 06 15:07:01 2016 +0200 +++ b/platform/collections/src/test/java/com/redhat/thermostat/collections/graph/GraphTest.java Wed May 04 17:30:00 2016 +0200 @@ -56,30 +56,30 @@ Node a = new Node("A"); Node b = new Node("B"); - graph.addRelationship(a, b, "knows"); + graph.addRelationship(a, "knows", b); assertEquals(1, graph.size()); assertEquals(2, graph.order()); - graph.addRelationship(b, a, "knows"); + graph.addRelationship(b, "knows", a); assertEquals(2, graph.size()); // same nodes, the order is not changed assertEquals(2, graph.order()); // same relationship, no-op - graph.addRelationship(b, a, "knows"); + graph.addRelationship(b, "knows", a); assertEquals(2, graph.size()); assertEquals(2, graph.order()); - graph.addRelationship(a, b, "plays with"); + graph.addRelationship(a, "plays with", b); assertEquals(3, graph.size()); // same nodes again assertEquals(2, graph.order()); Node c = new Node("C"); - graph.addRelationship(a, c, "knows"); + graph.addRelationship(a, "knows", c); assertEquals(3, graph.order()); } @@ -90,9 +90,9 @@ Node a = new Node("A"); Node b = new Node("B"); - Relationship r0 = graph.addRelationship(a, b, "knows"); - Relationship r1 = graph.addRelationship(a, b, "plays football with"); - Relationship r2 = graph.addRelationship(a, b, "watch movies with"); + Relationship r0 = graph.addRelationship(a, "knows", b); + Relationship r1 = graph.addRelationship(a, "plays football with", b); + Relationship r2 = graph.addRelationship(a, "watch movies with", b); Set<Relationship> rel = graph.getRelationships(a); assertEquals(3, rel.size()); @@ -100,4 +100,33 @@ assertTrue(rel.contains(r1)); assertTrue(rel.contains(r2)); } + + @Test + public void testGraphRelationship1() { + Graph graph = new HashGraph(); + + Node a = new Node("A"); + Node b = new Node("B"); + Node c = new Node("B"); + + Relationship r0 = graph.addRelationship(a, "knows", b); + assertEquals(1, graph.size()); + assertEquals(2, graph.order()); + + Relationship r1 = graph.addRelationship(b, "knows", a); + assertEquals(2, graph.size()); + assertEquals(2, graph.order()); + + Relationship r2 = graph.addRelationship(a, "watch movies with", b); + assertEquals(3, graph.size()); + assertEquals(2, graph.order()); + + // represents the same relationship as (A)->[plays with]->(B) + // - this really depends on nodes being equals just by name, hence + // the extra assert check + assertEquals(b, c); + Relationship r3 = graph.addRelationship(a, "watch movies with", c); + assertEquals(3, graph.size()); + assertEquals(2, graph.order()); + } }
--- a/platform/collections/src/test/java/com/redhat/thermostat/collections/graph/RelationshipTest.java Wed Apr 06 15:07:01 2016 +0200 +++ b/platform/collections/src/test/java/com/redhat/thermostat/collections/graph/RelationshipTest.java Wed May 04 17:30:00 2016 +0200 @@ -48,14 +48,14 @@ Node a = new Node("A"); Node b = new Node("B"); - Relationship relationship = new Relationship("knows", a, b); + Relationship relationship = new Relationship(a, "knows", b); assertEquals(a, relationship.getFrom()); assertEquals(b, relationship.getTo()); String toString = relationship.toString(); assertEquals("(A)-[:knows]->(B)", toString); - relationship = new Relationship("knows", b, a); + relationship = new Relationship(b, "knows", a); assertEquals(b, relationship.getFrom()); assertEquals(a, relationship.getTo());