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