From f27396ec9a42a055d9541b10012f1b8dfcfa0516 Mon Sep 17 00:00:00 2001 From: Selim Soufargi Date: Thu, 26 Jun 2025 15:29:33 +0200 Subject: [PATCH 1/5] remove edge in a graph --- .../org/apache/graphar/info/GraphInfo.java | 44 ++++++++++++++++--- maven-projects/java/pom.xml | 2 +- 2 files changed, 40 insertions(+), 6 deletions(-) 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 b21770805..a536b7c36 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 @@ -25,6 +25,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; + import org.apache.graphar.info.yaml.GraphYaml; import org.apache.graphar.util.GeneralParams; import org.yaml.snakeyaml.Yaml; @@ -98,8 +99,8 @@ public Optional addVertexAsNew(VertexInfo vertexInfo) { .collect(Collectors.toList()); final Map newVertexInfoMap = Stream.concat( - cachedVertexInfoMap.entrySet().stream(), - Stream.of(Map.entry(vertexInfo.getType(), vertexInfo))) + cachedVertexInfoMap.entrySet().stream(), + Stream.of(Map.entry(vertexInfo.getType(), vertexInfo))) .collect( Collectors.toUnmodifiableMap( Map.Entry::getKey, Map.Entry::getValue)); @@ -112,10 +113,39 @@ public Optional addVertexAsNew(VertexInfo vertexInfo) { cachedEdgeInfoMap)); } + public Optional removeEdge(EdgeInfo edgeInfo) { + if (edgeInfo == null + || hasEdgeInfo( + edgeInfo.getSrcLabel(), edgeInfo.getEdgeLabel(), edgeInfo.getDstLabel())) { + return Optional.empty(); + } + final org.apache.graphar.proto.GraphInfo newProtoGraphInfo = + org.apache.graphar.proto.GraphInfo.newBuilder(protoGraphInfo) + .removeEdges(edgeInfo.getEdgePath()) + .build(); + final List newEdgeInfos = Stream.concat(cachedEdgeInfoList.stream().filter(e -> + !e.getSrcLabel().equals(edgeInfo.getSrcLabel()) + && !e.getDstLabel().equals(edgeInfo.getDstLabel()) + && !e.getEdgeLabel().equals(edgeInfo.getEdgeLabel()))) + .collect(Collectors.toList()); + + final Map newEdgeConcat2EdgeInfo = + cachedEdgeInfoMap.entrySet().stream() + .filter(e -> !e.getKey().equals(edgeInfo.getConcat())) + .collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, Map.Entry::getValue)); + return Optional.of( + new GraphInfo( + newProtoGraphInfo, + cachedVertexInfoList, + newEdgeInfos, + cachedVertexInfoMap, + newEdgeConcat2EdgeInfo)); + } + public Optional addEdgeAsNew(EdgeInfo edgeInfo) { if (edgeInfo == null || hasEdgeInfo( - edgeInfo.getSrcLabel(), edgeInfo.getEdgeLabel(), edgeInfo.getDstLabel())) { + edgeInfo.getSrcLabel(), edgeInfo.getEdgeLabel(), edgeInfo.getDstLabel())) { return Optional.empty(); } final org.apache.graphar.proto.GraphInfo newProtoGraphInfo = @@ -127,8 +157,8 @@ public Optional addEdgeAsNew(EdgeInfo edgeInfo) { .collect(Collectors.toList()); final Map newEdgeConcat2EdgeInfo = Stream.concat( - cachedEdgeInfoMap.entrySet().stream(), - Stream.of(Map.entry(edgeInfo.getConcat(), edgeInfo))) + cachedEdgeInfoMap.entrySet().stream(), + Stream.of(Map.entry(edgeInfo.getConcat(), edgeInfo))) .collect( Collectors.toUnmodifiableMap( Map.Entry::getKey, Map.Entry::getValue)); @@ -183,6 +213,10 @@ public String getPrefix() { return protoGraphInfo.getPrefix(); } + public String getVersion() { + return protoGraphInfo.getVersion(); + } + private void checkVertexExist(String label) { if (!hasVertexInfo(label)) { throw new IllegalArgumentException( diff --git a/maven-projects/java/pom.xml b/maven-projects/java/pom.xml index 42f4adab2..bdc5361cf 100644 --- a/maven-projects/java/pom.xml +++ b/maven-projects/java/pom.xml @@ -80,7 +80,7 @@ llvm4jni ${fastffi.revision} ${os.detected.classifier} - provided + provided From b47545d2236067868b3d5caa1d0eda3cc937bc15 Mon Sep 17 00:00:00 2001 From: Selim Soufargi Date: Thu, 26 Jun 2025 15:30:41 +0200 Subject: [PATCH 2/5] remove edge in a graph --- .../src/main/java/org/apache/graphar/info/GraphInfo.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) 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 a536b7c36..994877f89 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 @@ -212,10 +212,7 @@ public List getEdgeInfos() { public String getPrefix() { return protoGraphInfo.getPrefix(); } - - public String getVersion() { - return protoGraphInfo.getVersion(); - } + private void checkVertexExist(String label) { if (!hasVertexInfo(label)) { From 80d07d2f2bca95fd4235e53d79d796a719b0b136 Mon Sep 17 00:00:00 2001 From: Selim Soufargi Date: Thu, 26 Jun 2025 15:44:10 +0200 Subject: [PATCH 3/5] remove edge in a graph correction --- .../info/src/main/java/org/apache/graphar/info/GraphInfo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 994877f89..17ebb47e5 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 @@ -131,7 +131,7 @@ public Optional removeEdge(EdgeInfo edgeInfo) { final Map newEdgeConcat2EdgeInfo = cachedEdgeInfoMap.entrySet().stream() - .filter(e -> !e.getKey().equals(edgeInfo.getConcat())) + .filter(e -> !e.getConcat().equals(edgeInfo.getConcat())) .collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, Map.Entry::getValue)); return Optional.of( new GraphInfo( From 21b2c5a5333d31c4e42a5e11bdb7ac5760763743 Mon Sep 17 00:00:00 2001 From: Selim Soufargi Date: Fri, 27 Jun 2025 00:02:19 +0200 Subject: [PATCH 4/5] remove the disconnected vertices as well --- .../org/apache/graphar/info/GraphInfo.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) 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 17ebb47e5..e1c6b3880 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 @@ -129,14 +129,37 @@ public Optional removeEdge(EdgeInfo edgeInfo) { && !e.getEdgeLabel().equals(edgeInfo.getEdgeLabel()))) .collect(Collectors.toList()); + + List newCachedVertexInfoList = newEdgeInfos.stream() + // flatMap is used because for each edge, we might generate a stream of multiple vertices + .flatMap(e -> { + Stream vertexStream = Stream.empty(); // Start with an empty stream + if (e.getSrcLabel().equals("")) { + // If srcLabel is empty, filter vertices where dstLabel doesn't match + vertexStream = Stream.concat(vertexStream, + cachedVertexInfoList.stream() + .filter(vertex -> !e.getDstLabel().equals(vertex.getType()))); + } + if (e.getDstLabel().equals("")) { + // If dstLabel is empty, filter vertices where srcLabel doesn't match + vertexStream = Stream.concat(vertexStream, + cachedVertexInfoList.stream() + .filter(vertex -> !e.getSrcLabel().equals(vertex.getType()))); + } + return vertexStream; // Return the combined stream of vertices for this edge + }) + .distinct() + .collect(Collectors.toList()); + final Map newEdgeConcat2EdgeInfo = cachedEdgeInfoMap.entrySet().stream() .filter(e -> !e.getConcat().equals(edgeInfo.getConcat())) .collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, Map.Entry::getValue)); + // TODO if logic is correct create newCachedVertexInfoMap as well return Optional.of( new GraphInfo( newProtoGraphInfo, - cachedVertexInfoList, + newCachedVertexInfoList, newEdgeInfos, cachedVertexInfoMap, newEdgeConcat2EdgeInfo)); From 8615382d05cf84b5f4f3dbf4ae1e107cbb17b56c Mon Sep 17 00:00:00 2001 From: Selim Soufargi Date: Wed, 2 Jul 2025 23:22:04 +0200 Subject: [PATCH 5/5] adjust method parameters to remove EdgeInfo obj and rename it to removeEdgeAsNew --- .../java/org/apache/graphar/info/GraphInfo.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) 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 e1c6b3880..2e789de0b 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 @@ -113,20 +113,21 @@ public Optional addVertexAsNew(VertexInfo vertexInfo) { cachedEdgeInfoMap)); } - public Optional removeEdge(EdgeInfo edgeInfo) { + public Optional removeEdgeAsNew(String srcLabel, String edgeLabel, String dstLabel) { if (edgeInfo == null || hasEdgeInfo( - edgeInfo.getSrcLabel(), edgeInfo.getEdgeLabel(), edgeInfo.getDstLabel())) { + srcLabel, edgeLabel, dstLabel)) { return Optional.empty(); } + String edgePath = getPrefix() + "/" + EdgeInfo.concat(srcLabel, edgeLabel, dstLabel) + ".edge.yaml"; final org.apache.graphar.proto.GraphInfo newProtoGraphInfo = org.apache.graphar.proto.GraphInfo.newBuilder(protoGraphInfo) - .removeEdges(edgeInfo.getEdgePath()) + .removeEdges(edgePath) .build(); final List newEdgeInfos = Stream.concat(cachedEdgeInfoList.stream().filter(e -> - !e.getSrcLabel().equals(edgeInfo.getSrcLabel()) - && !e.getDstLabel().equals(edgeInfo.getDstLabel()) - && !e.getEdgeLabel().equals(edgeInfo.getEdgeLabel()))) + !e.getSrcLabel().equals(srcLabel) + && !e.getDstLabel().equals(dstLabel) + && !e.getEdgeLabel().equals(edgeLabel))) .collect(Collectors.toList());