This is an automated email from the ASF dual-hosted git repository.
xiaokang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-graphar.git
The following commit(s) were added to refs/heads/main by this push:
new cf728bfb feat(java,info): add remove vertex edge method (#773)
cf728bfb is described below
commit cf728bfb3f1700094c6941532c4d74637ac9ba5a
Author: Selim S. <[email protected]>
AuthorDate: Wed Dec 17 10:06:37 2025 +0100
feat(java,info): add remove vertex edge method (#773)
* add remove vertex edge, TODO: tests
* reformat only GraphInfo class, TODO: tests
* added basic tests for add and remove vertex
* format graphInfoTests
* format graphInfoTests
* refactoring 1
* added basic test for edges
* add test
* update filter
* update
* chores
---------
Co-authored-by: Selim Soufargi <[email protected]~>
Co-authored-by: yxk485490 <[email protected]>
---
.../java/org/apache/graphar/info/GraphInfo.java | 60 ++++++++++++++++++++++
.../org/apache/graphar/info/GraphInfoTest.java | 55 ++++++++++++++++++++
2 files changed, 115 insertions(+)
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 2e5661ee..894f22ea 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
@@ -179,6 +179,34 @@ public class GraphInfo {
edgeConcat2EdgeInfo));
}
+ public Optional<GraphInfo> removeVertex(VertexInfo vertexInfo) {
+
+ if (vertexInfo == null || !hasVertexInfo(vertexInfo.getType())) {
+ return Optional.empty();
+ }
+
+ final List<VertexInfo> newVertexInfoList =
+ vertexInfos.stream()
+ .filter(v -> !v.getType().equals(vertexInfo.getType()))
+ .collect(Collectors.toList());
+
+ final Map<String, VertexInfo> newVertexInfoMap =
+ vertexType2VertexInfo.entrySet().stream()
+ .filter(v -> !v.getKey().equals(vertexInfo.getType()))
+ .collect(
+ Collectors.toUnmodifiableMap(
+ Map.Entry::getKey,
Map.Entry::getValue));
+ return Optional.of(
+ new GraphInfo(
+ name,
+ newVertexInfoList,
+ edgeInfos,
+ baseUri,
+ version,
+ newVertexInfoMap,
+ edgeConcat2EdgeInfo));
+ }
+
public Optional<GraphInfo> addEdgeAsNew(EdgeInfo edgeInfo) {
if (edgeInfo == null
|| hasEdgeInfo(
@@ -205,6 +233,38 @@ public class GraphInfo {
newEdgeConcat2EdgeInfo));
}
+ public Optional<GraphInfo> removeEdge(EdgeInfo edgeInfo) {
+ if (edgeInfo == null
+ || !hasEdgeInfo(
+ edgeInfo.getSrcType(), edgeInfo.getEdgeType(),
edgeInfo.getDstType())) {
+ return Optional.empty();
+ }
+ final List<EdgeInfo> 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<String, EdgeInfo> newEdgeConcat2EdgeInfo =
+ edgeConcat2EdgeInfo.entrySet().stream()
+ .filter(e -> !e.getKey().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 0ba983ab..607e9805 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
@@ -24,6 +24,7 @@ import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Optional;
import org.apache.graphar.info.loader.GraphInfoLoader;
import
org.apache.graphar.info.loader.impl.LocalFileSystemStreamGraphInfoLoader;
import org.apache.graphar.info.type.AdjListType;
@@ -110,6 +111,60 @@ public class GraphInfoTest {
illegalArgumentException.getMessage());
// test version gar/v1
Assert.assertEquals(1, graphInfo.getVersion().getVersion());
+ // basic tests for addVertex and removeVertex
+ VertexInfo testingVertexInfo =
+ new VertexInfo(
+ "test_vertex",
+ 100,
+ Arrays.asList(TestUtil.pg1),
+ "vertex/person/",
+ "gar/v1");
+ GraphInfo testingVertexGraphInfo =
+ new GraphInfo("graphVertexTest", new ArrayList<>(), new
ArrayList<>(), "", "");
+ // remove non-existent vertex from an empty graph
+
Assert.assertTrue(testingVertexGraphInfo.removeVertex(testingVertexInfo).isEmpty());
+ // add the created vertex on an empty graph
+ Optional<GraphInfo> addVertexAsNewGraph =
+ testingVertexGraphInfo.addVertexAsNew(testingVertexInfo);
+ Assert.assertTrue(addVertexAsNewGraph.isPresent());
+ testingVertexGraphInfo = addVertexAsNewGraph.get();
+ Assert.assertEquals(1,
addVertexAsNewGraph.get().getVertexInfos().size());
+ // try to add the same vertex again
+
Assert.assertTrue(testingVertexGraphInfo.addVertexAsNew(testingVertexInfo).isEmpty());
+ // test remove vertex
+ addVertexAsNewGraph =
testingVertexGraphInfo.removeVertex(testingVertexInfo);
+ Assert.assertTrue(addVertexAsNewGraph.isPresent());
+ Assert.assertEquals(0,
addVertexAsNewGraph.get().getVertexInfos().size());
+
+ // same tests as vertices for edges
+ GraphInfo testingEdgeGraphInfo =
+ new GraphInfo("graphEdgeTest", new ArrayList<>(), new
ArrayList<>(), "", "");
+ EdgeInfo testingEdgeInfo =
+ new EdgeInfo(
+ "person",
+ "knows",
+ "person",
+ 1024,
+ 100,
+ 100,
+ false,
+ URI.create("edge/person_knows_person/"),
+ "gar/v1",
+ List.of(TestUtil.orderedBySource),
+ List.of(TestUtil.pg3));
+ // remove non-existent edge from an empty graph
+
Assert.assertTrue(testingEdgeGraphInfo.removeEdge(testingEdgeInfo).isEmpty());
+ // add the created edge on an empty graph
+ Optional<GraphInfo> addEdgeAsNewGraph =
testingEdgeGraphInfo.addEdgeAsNew(testingEdgeInfo);
+ Assert.assertTrue(addEdgeAsNewGraph.isPresent());
+ testingEdgeGraphInfo = addEdgeAsNewGraph.get();
+ Assert.assertEquals(1, addEdgeAsNewGraph.get().getEdgeInfos().size());
+ // try to add the same edge again
+
Assert.assertTrue(testingEdgeGraphInfo.addEdgeAsNew(testingEdgeInfo).isEmpty());
+ // test remove edge
+ addEdgeAsNewGraph = testingEdgeGraphInfo.removeEdge(testingEdgeInfo);
+ Assert.assertTrue(addEdgeAsNewGraph.isPresent());
+ Assert.assertEquals(0, addEdgeAsNewGraph.get().getEdgeInfos().size());
}
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]