private void removeEdge(Vertex v) { Set<Edge> edges = UMLG.get().getEdgesBetween(this.vertex, v, this.getLabel()); for (Edge edge : edges) { Vertex associationClassVertex = UMLG.get().v(edge.value(UmlgCollection.ASSOCIATION_CLASS_VERTEX_ID)); // The remove code will delete all in and out edges associationClassVertex.remove(); } }
@Test public void shouldWrapProperties() { final Vertex v = g.addVertex("any", "a"); final Edge e = v.addEdge("to", v, "all", "a"); assertTrue(v.property("any") instanceof StrategyWrappedProperty); assertTrue(v.properties().get("any") instanceof StrategyWrappedProperty); assertTrue(e.property("all") instanceof StrategyWrappedProperty); assertTrue(e.properties().get("all") instanceof StrategyWrappedProperty); assertTrue(g.V().property("any").next() instanceof StrategyWrappedProperty); assertTrue(g.E().property("any").next() instanceof StrategyWrappedProperty); }
@Test public void shouldThrowExceptionOneInDifferentPartition() { final Vertex vA = g.addVertex("any", "a"); final Edge e = vA.addEdge("knows", vA); assertEquals(e.id(), g.e(e.id()).id()); final PartitionGraphStrategy strategy = (PartitionGraphStrategy) ((StrategyWrappedGraph) g).strategy().getGraphStrategy().get(); strategy.clearReadPartitions(); try { g.e(e.id()); } catch (Exception ex) { final Exception expected = Graph.Exceptions.elementNotFound(Edge.class, e.id()); assertEquals(expected.getClass(), ex.getClass()); assertEquals(expected.getMessage(), ex.getMessage()); } }
@Test public void shouldAppendPartitionToEdge() { final Vertex v1 = g.addVertex("any", "thing"); final Vertex v2 = g.addVertex("some", "thing"); final Edge e = v1.addEdge("connectsTo", v2, "every", "thing"); assertNotNull(v1); assertEquals("thing", v1.property("any").value()); assertEquals("A", v2.property(partition).value()); assertNotNull(v2); assertEquals("thing", v2.property("some").value()); assertEquals("A", v2.property(partition).value()); assertNotNull(e); assertEquals("thing", e.property("every").value()); assertEquals("connectsTo", e.label()); assertEquals("A", e.property(partition).value()); }
@Test public void shouldWriteToMultiplePartitions() { final Vertex vA = g.addVertex("any", "a"); final Vertex vAA = g.addVertex("any", "aa"); final Edge eAtoAA = vA.addEdge("a->a", vAA); final PartitionGraphStrategy strategy = (PartitionGraphStrategy) ((StrategyWrappedGraph) g).strategy().getGraphStrategy().get(); strategy.setWritePartition("B"); final Vertex vB = g.addVertex("any", "b"); vA.addEdge("a->b", vB); strategy.setWritePartition("C"); final Vertex vC = g.addVertex("any", "c"); final Edge eBtovC = vB.addEdge("b->c", vC); final Edge eAtovC = vA.addEdge("a->c", vC); /* not applicable to SubgraphStrategy final GraphTraversal t = g.V(); assertTrue(t.strategies().get().stream().anyMatch(o -> o.getClass().equals(PartitionGraphStrategy.PartitionGraphTraversalStrategy.class))); */ strategy.clearReadPartitions(); assertEquals(new Long(0), g.V().count().next()); assertEquals(new Long(0), g.E().count().next()); strategy.addReadPartition("A"); assertEquals(new Long(2), g.V().count().next()); assertEquals(new Long(1), g.E().count().next()); assertEquals(new Long(1), g.v(vA.id()).outE().count().next()); assertEquals(eAtoAA.id(), g.v(vA.id()).outE().next().id()); assertEquals(new Long(1), g.v(vA.id()).out().count().next()); assertEquals(vAA.id(), g.v(vA.id()).out().next().id()); strategy.addReadPartition("B"); assertEquals(new Long(3), g.V().count().next()); assertEquals(new Long(2), g.E().count().next()); strategy.addReadPartition("C"); assertEquals(new Long(4), g.V().count().next()); assertEquals(new Long(4), g.E().count().next()); strategy.removeReadPartition("A"); strategy.removeReadPartition("B"); assertEquals(new Long(1), g.V().count().next()); // two edges are in the "C" partition, but one each of their incident vertices are not assertEquals(new Long(0), g.E().count().next()); assertEquals(new Long(0), g.v(vC.id()).inE().count().next()); assertEquals(new Long(0), g.v(vC.id()).in().count().next()); strategy.addReadPartition("B"); // only one edge in, due to excluded vertices; vA is not in {B,C} assertEquals(new Long(1), g.v(vC.id()).inE().count().next()); assertEquals(new Long(1), g.v(vC.id()).in().count().next()); assertEquals(vC.id(), g.e(eBtovC.id()).inV().id().next()); assertEquals(vB.id(), g.e(eBtovC.id()).outV().id().next()); assertEquals(vC.id(), g.e(eAtovC.id()).inV().id().next()); assertFalse(g.e(eAtovC.id()).outV().hasNext()); /* not applicable to SubgraphStrategy strategy.addReadPartition("A"); g.v(vA.id()).out().out().forEach(v -> { assertTrue(v instanceof StrategyWrapped); assertFalse(((StrategyWrappedElement) v).getBaseElement() instanceof StrategyWrapped); }); g.v(vA.id()).outE().inV().outE().forEach(e -> { assertTrue(e instanceof StrategyWrapped); assertFalse(((StrategyWrappedElement) e).getBaseElement() instanceof StrategyWrapped); }); */ }