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]

Reply via email to