javeme commented on code in PR #2242:
URL:
https://github.com/apache/incubator-hugegraph/pull/2242#discussion_r1261162899
##########
hugegraph-api/src/main/java/org/apache/hugegraph/api/traversers/EdgeExistenceAPI.java:
##########
@@ -0,0 +1,57 @@
+package org.apache.hugegraph.api.traversers;
+
+import com.codahale.metrics.annotation.Timed;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.inject.Singleton;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.Context;
+import org.apache.hugegraph.HugeGraph;
+import org.apache.hugegraph.backend.id.Id;
+import org.apache.hugegraph.core.GraphManager;
+import org.apache.hugegraph.structure.HugeVertex;
+import org.apache.hugegraph.traversal.algorithm.EdgeExistenceTraverser;
+import org.apache.hugegraph.util.E;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+
+@Path("graphs/{graph}/traversers/edgeexistence")
+@Singleton
+@Tag(name = "EdgeExistenceAPI")
+public class EdgeExistenceAPI extends TraverserAPI {
+
+ @GET
+ @Timed
+ @Produces(APPLICATION_JSON_WITH_CHARSET)
+ public String get(
+ @Context GraphManager manager,
+ @PathParam("graph") String graph,
+ @QueryParam("source") String source,
+ @QueryParam("target") String target,
+ @QueryParam("edgelabel")
+ @DefaultValue("BOTH") String edgeLabel,
+ @QueryParam("limit")
+ @DefaultValue("1000") long limit) {
+
+ E.checkArgumentNotNull(source, "The source can't be null");
+ E.checkArgumentNotNull(target, "The target can't be null");
+
+ Id sourceId = HugeVertex.getIdValue(source);
+ Id targetId = HugeVertex.getIdValue(target);
+ HugeGraph hugeGraph = graph(manager, graph);
+ EdgeExistenceTraverser traverser = new
EdgeExistenceTraverser(hugeGraph);
+
+ Iterator<Edge> edges = traverser.queryEdgeExistence(sourceId,
targetId, edgeLabel, limit);
+
+ List<Id> all = new ArrayList<>();
+ while (edges.hasNext()) {
+ all.add((Id) edges.next().id());
+ }
+ return manager.serializer(hugeGraph).writeList("EdgeIds", all);
+ }
+
+
Review Comment:
unexpected blank lines
##########
hugegraph-api/src/main/java/org/apache/hugegraph/api/traversers/EdgeExistenceAPI.java:
##########
@@ -0,0 +1,57 @@
+package org.apache.hugegraph.api.traversers;
+
+import com.codahale.metrics.annotation.Timed;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.inject.Singleton;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.Context;
+import org.apache.hugegraph.HugeGraph;
+import org.apache.hugegraph.backend.id.Id;
+import org.apache.hugegraph.core.GraphManager;
+import org.apache.hugegraph.structure.HugeVertex;
+import org.apache.hugegraph.traversal.algorithm.EdgeExistenceTraverser;
+import org.apache.hugegraph.util.E;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+
+@Path("graphs/{graph}/traversers/edgeexistence")
+@Singleton
+@Tag(name = "EdgeExistenceAPI")
+public class EdgeExistenceAPI extends TraverserAPI {
+
+ @GET
+ @Timed
+ @Produces(APPLICATION_JSON_WITH_CHARSET)
+ public String get(
+ @Context GraphManager manager,
+ @PathParam("graph") String graph,
+ @QueryParam("source") String source,
+ @QueryParam("target") String target,
+ @QueryParam("edgelabel")
+ @DefaultValue("BOTH") String edgeLabel,
+ @QueryParam("limit")
+ @DefaultValue("1000") long limit) {
+
+ E.checkArgumentNotNull(source, "The source can't be null");
+ E.checkArgumentNotNull(target, "The target can't be null");
+
+ Id sourceId = HugeVertex.getIdValue(source);
+ Id targetId = HugeVertex.getIdValue(target);
+ HugeGraph hugeGraph = graph(manager, graph);
+ EdgeExistenceTraverser traverser = new
EdgeExistenceTraverser(hugeGraph);
+
+ Iterator<Edge> edges = traverser.queryEdgeExistence(sourceId,
targetId, edgeLabel, limit);
+
+ List<Id> all = new ArrayList<>();
+ while (edges.hasNext()) {
+ all.add((Id) edges.next().id());
+ }
+ return manager.serializer(hugeGraph).writeList("EdgeIds", all);
Review Comment:
EdgeIds => edges
##########
hugegraph-api/src/main/java/org/apache/hugegraph/api/traversers/EdgeExistenceAPI.java:
##########
@@ -0,0 +1,57 @@
+package org.apache.hugegraph.api.traversers;
+
+import com.codahale.metrics.annotation.Timed;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.inject.Singleton;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.Context;
+import org.apache.hugegraph.HugeGraph;
+import org.apache.hugegraph.backend.id.Id;
+import org.apache.hugegraph.core.GraphManager;
+import org.apache.hugegraph.structure.HugeVertex;
+import org.apache.hugegraph.traversal.algorithm.EdgeExistenceTraverser;
+import org.apache.hugegraph.util.E;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+
+@Path("graphs/{graph}/traversers/edgeexistence")
+@Singleton
+@Tag(name = "EdgeExistenceAPI")
+public class EdgeExistenceAPI extends TraverserAPI {
+
+ @GET
+ @Timed
+ @Produces(APPLICATION_JSON_WITH_CHARSET)
+ public String get(
+ @Context GraphManager manager,
+ @PathParam("graph") String graph,
+ @QueryParam("source") String source,
+ @QueryParam("target") String target,
+ @QueryParam("edgelabel")
+ @DefaultValue("BOTH") String edgeLabel,
+ @QueryParam("limit")
+ @DefaultValue("1000") long limit) {
+
+ E.checkArgumentNotNull(source, "The source can't be null");
+ E.checkArgumentNotNull(target, "The target can't be null");
+
+ Id sourceId = HugeVertex.getIdValue(source);
+ Id targetId = HugeVertex.getIdValue(target);
+ HugeGraph hugeGraph = graph(manager, graph);
+ EdgeExistenceTraverser traverser = new
EdgeExistenceTraverser(hugeGraph);
+
+ Iterator<Edge> edges = traverser.queryEdgeExistence(sourceId,
targetId, edgeLabel, limit);
+
+ List<Id> all = new ArrayList<>();
Review Comment:
prefer to just return the edges itself?
##########
hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/EdgeExistenceTraverser.java:
##########
@@ -0,0 +1,48 @@
+package org.apache.hugegraph.traversal.algorithm;
+
+import org.apache.hugegraph.HugeGraph;
+import org.apache.hugegraph.backend.id.Id;
+import org.apache.hugegraph.backend.query.ConditionQuery;
+import org.apache.hugegraph.type.HugeType;
+import org.apache.hugegraph.type.define.Directions;
+import org.apache.hugegraph.type.define.HugeKeys;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public class EdgeExistenceTraverser extends HugeTraverser {
+ public EdgeExistenceTraverser(HugeGraph graph) {
+ super(graph);
+ }
+
+ public Iterator<Edge> queryEdgeExistence(
+ Id sourceId, Id targetId,
+ String label, long limit) {
+ if ("BOTH".equals(label)) {
+ return queryByNeighbor(sourceId, targetId, limit);
+ }
+ ConditionQuery conditionQuery = new ConditionQuery(HugeType.EDGE);
+ conditionQuery.eq(HugeKeys.OWNER_VERTEX, sourceId);
+ conditionQuery.eq(HugeKeys.OTHER_VERTEX, targetId);
+ conditionQuery.eq(HugeKeys.LABEL, getEdgeLabelId(label));
+ conditionQuery.eq(HugeKeys.DIRECTION, Directions.OUT);
+ conditionQuery.eq(HugeKeys.SORT_VALUES, "");
Review Comment:
please check if exists sortkey in the edge label, fallback if yes
##########
hugegraph-api/src/main/java/org/apache/hugegraph/api/traversers/EdgeExistenceAPI.java:
##########
@@ -0,0 +1,57 @@
+package org.apache.hugegraph.api.traversers;
+
+import com.codahale.metrics.annotation.Timed;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.inject.Singleton;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.Context;
+import org.apache.hugegraph.HugeGraph;
+import org.apache.hugegraph.backend.id.Id;
+import org.apache.hugegraph.core.GraphManager;
+import org.apache.hugegraph.structure.HugeVertex;
+import org.apache.hugegraph.traversal.algorithm.EdgeExistenceTraverser;
+import org.apache.hugegraph.util.E;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+
+@Path("graphs/{graph}/traversers/edgeexistence")
+@Singleton
+@Tag(name = "EdgeExistenceAPI")
+public class EdgeExistenceAPI extends TraverserAPI {
+
+ @GET
+ @Timed
+ @Produces(APPLICATION_JSON_WITH_CHARSET)
+ public String get(
+ @Context GraphManager manager,
+ @PathParam("graph") String graph,
+ @QueryParam("source") String source,
+ @QueryParam("target") String target,
+ @QueryParam("edgelabel")
+ @DefaultValue("BOTH") String edgeLabel,
Review Comment:
keep edgeLabel=null by default
##########
hugegraph-api/src/main/java/org/apache/hugegraph/api/traversers/EdgeExistenceAPI.java:
##########
@@ -0,0 +1,57 @@
+package org.apache.hugegraph.api.traversers;
+
+import com.codahale.metrics.annotation.Timed;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.inject.Singleton;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.Context;
+import org.apache.hugegraph.HugeGraph;
+import org.apache.hugegraph.backend.id.Id;
+import org.apache.hugegraph.core.GraphManager;
+import org.apache.hugegraph.structure.HugeVertex;
+import org.apache.hugegraph.traversal.algorithm.EdgeExistenceTraverser;
+import org.apache.hugegraph.util.E;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+
+@Path("graphs/{graph}/traversers/edgeexistence")
+@Singleton
+@Tag(name = "EdgeExistenceAPI")
+public class EdgeExistenceAPI extends TraverserAPI {
+
+ @GET
+ @Timed
+ @Produces(APPLICATION_JSON_WITH_CHARSET)
+ public String get(
+ @Context GraphManager manager,
+ @PathParam("graph") String graph,
+ @QueryParam("source") String source,
+ @QueryParam("target") String target,
+ @QueryParam("edgelabel")
+ @DefaultValue("BOTH") String edgeLabel,
+ @QueryParam("limit")
+ @DefaultValue("1000") long limit) {
Review Comment:
use const var instead? please reference other apis
##########
hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/EdgeExistenceTraverser.java:
##########
@@ -0,0 +1,48 @@
+package org.apache.hugegraph.traversal.algorithm;
+
+import org.apache.hugegraph.HugeGraph;
+import org.apache.hugegraph.backend.id.Id;
+import org.apache.hugegraph.backend.query.ConditionQuery;
+import org.apache.hugegraph.type.HugeType;
+import org.apache.hugegraph.type.define.Directions;
+import org.apache.hugegraph.type.define.HugeKeys;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public class EdgeExistenceTraverser extends HugeTraverser {
+ public EdgeExistenceTraverser(HugeGraph graph) {
+ super(graph);
+ }
+
+ public Iterator<Edge> queryEdgeExistence(
+ Id sourceId, Id targetId,
+ String label, long limit) {
+ if ("BOTH".equals(label)) {
Review Comment:
direction?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]