diff --git a/maven-projects/info/pom.xml b/maven-projects/info/pom.xml index ebd5d017d..e5010da6f 100644 --- a/maven-projects/info/pom.xml +++ b/maven-projects/info/pom.xml @@ -92,6 +92,11 @@ ${spotless-maven-plugin.version} + 1.7 diff --git a/maven-projects/info/src/main/java/org/apache/graphar/info/GraphInfo.java b/maven-projects/info/src/main/java/org/apache/graphar/info/GraphInfo.java index c67a54280..bba6c9281 100644 --- a/maven-projects/info/src/main/java/org/apache/graphar/info/GraphInfo.java +++ b/maven-projects/info/src/main/java/org/apache/graphar/info/GraphInfo.java @@ -136,6 +136,45 @@ public Optional addVertexAsNew(VertexInfo vertexInfo) { edgeConcat2EdgeInfo)); } + public Optional removeVertex(VertexInfo vertexInfo) { + + if (vertexInfo == null || !hasVertexInfo(vertexInfo.getType())) { + return Optional.empty(); + } + List newCachedEdgeInfoList = + edgeInfos.stream() + .filter( + currEdge -> + !currEdge.getSrcType().equals(vertexInfo.getType()) + && !currEdge.getDstType() + .equals(vertexInfo.getType())) + .collect(Collectors.toList()); + + final List newVertexInfoList = + vertexInfos.stream() + .filter( + v -> + !v.getType().equals(vertexInfo.getType()) + && !v.getPrefix().equals(vertexInfo.getPrefix())) + .collect(Collectors.toList()); + + final Map newVertexInfoMap = + vertexType2VertexInfo.entrySet().stream() + .filter(v -> !v.getValue().getType().equals(vertexInfo.getType())) + .collect( + Collectors.toUnmodifiableMap( + Map.Entry::getKey, Map.Entry::getValue)); + return Optional.of( + new GraphInfo( + name, + newVertexInfoList, + newCachedEdgeInfoList, + baseUri, + version, + newVertexInfoMap, + edgeConcat2EdgeInfo)); + } + public Optional addEdgeAsNew(EdgeInfo edgeInfo) { if (edgeInfo == null || hasEdgeInfo( @@ -162,6 +201,39 @@ public Optional addEdgeAsNew(EdgeInfo edgeInfo) { newEdgeConcat2EdgeInfo)); } + public Optional removeEdge(EdgeInfo edgeInfo) { + if (edgeInfo == null + || hasEdgeInfo( + edgeInfo.getSrcType(), edgeInfo.getEdgeType(), edgeInfo.getDstType())) { + return Optional.empty(); + } + final List newEdgeInfos = + edgeInfos.stream() + .filter( + e -> + !(e.getSrcType().equals(edgeInfo.getSrcType()) + && e.getDstType().equals(edgeInfo.getDstType()) + && e.getEdgeType().equals(edgeInfo.getEdgeType()))) + .collect(Collectors.toList()); + + final Map newEdgeConcat2EdgeInfo = + edgeConcat2EdgeInfo.entrySet().stream() + .filter(e -> !e.getKey().equals(edgeInfo.getConcat())) + .filter(e -> !e.getValue().getConcat().equals(edgeInfo.getConcat())) + .collect( + Collectors.toUnmodifiableMap( + Map.Entry::getKey, Map.Entry::getValue)); + return Optional.of( + new GraphInfo( + name, + vertexInfos, + newEdgeInfos, + baseUri, + version, + vertexType2VertexInfo, + newEdgeConcat2EdgeInfo)); + } + public boolean hasVertexInfo(String type) { return vertexType2VertexInfo.containsKey(type); } diff --git a/maven-projects/info/src/test/java/org/apache/graphar/info/GraphInfoTest.java b/maven-projects/info/src/test/java/org/apache/graphar/info/GraphInfoTest.java index b4ade7188..d4ad0ffc7 100644 --- a/maven-projects/info/src/test/java/org/apache/graphar/info/GraphInfoTest.java +++ b/maven-projects/info/src/test/java/org/apache/graphar/info/GraphInfoTest.java @@ -109,6 +109,19 @@ public void testGraphInfoBasics() { illegalArgumentException.getMessage()); // test version gar/v1 Assert.assertEquals(1, graphInfo.getVersion().getVersion()); + // basic tests for addVertex and removeVertex (more advanced ones should include adjancency + // list checks) + VertexInfo testingVertexInfo = + new VertexInfo("", 100, Arrays.asList(TestUtil.pg1), "vertex/person/", "gar/v1"); + GraphInfo testingGraphInfo = + new GraphInfo("graphTest", new ArrayList<>(), new ArrayList<>(), "", ""); + // add the created vertex on an empty graph + Assert.assertEquals( + 1, + testingGraphInfo.addVertexAsNew(testingVertexInfo).get().getVertexInfos().size()); + // remove the newly created vertex and check again the emptied graph + Assert.assertEquals(true, testingGraphInfo.removeVertex(testingVertexInfo).isEmpty()); + // TODO (same tests as vertices for edges) } @Test diff --git a/testing b/testing index 8286724cd..955596c32 160000 --- a/testing +++ b/testing @@ -1 +1 @@ -Subproject commit 8286724cd898047de833f0304dbddd2831afdf9f +Subproject commit 955596c325ceba7b607e285738e3dd0ce4ff424e