Search in sources :

Example 1 with CustomizePathsTraverser

use of com.baidu.hugegraph.traversal.algorithm.CustomizePathsTraverser in project incubator-hugegraph by apache.

the class CustomizedPathsAPI method post.

@POST
@Timed
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON_WITH_CHARSET)
public String post(@Context GraphManager manager, @PathParam("graph") String graph, PathRequest request) {
    E.checkArgumentNotNull(request, "The path request body can't be null");
    E.checkArgumentNotNull(request.sources, "The sources of path request can't be null");
    E.checkArgument(request.steps != null && !request.steps.isEmpty(), "The steps of path request can't be empty");
    if (request.sortBy == null) {
        request.sortBy = SortBy.NONE;
    }
    LOG.debug("Graph [{}] get customized paths from source vertex '{}', " + "with steps '{}', sort by '{}', capacity '{}', limit '{}' " + "and with_vertex '{}'", graph, request.sources, request.steps, request.sortBy, request.capacity, request.limit, request.withVertex);
    HugeGraph g = graph(manager, graph);
    Iterator<Vertex> sources = request.sources.vertices(g);
    List<WeightedEdgeStep> steps = step(g, request);
    boolean sorted = request.sortBy != SortBy.NONE;
    CustomizePathsTraverser traverser = new CustomizePathsTraverser(g);
    List<HugeTraverser.Path> paths;
    paths = traverser.customizedPaths(sources, steps, sorted, request.capacity, request.limit);
    if (sorted) {
        boolean incr = request.sortBy == SortBy.INCR;
        paths = CustomizePathsTraverser.topNPath(paths, incr, request.limit);
    }
    if (!request.withVertex) {
        return manager.serializer(g).writePaths("paths", paths, false);
    }
    Set<Id> ids = new HashSet<>();
    for (HugeTraverser.Path p : paths) {
        ids.addAll(p.vertices());
    }
    Iterator<Vertex> iter = QueryResults.emptyIterator();
    if (!ids.isEmpty()) {
        iter = g.vertices(ids.toArray());
    }
    return manager.serializer(g).writePaths("paths", paths, false, iter);
}
Also used : Path(jakarta.ws.rs.Path) Vertex(org.apache.tinkerpop.gremlin.structure.Vertex) CustomizePathsTraverser(com.baidu.hugegraph.traversal.algorithm.CustomizePathsTraverser) HugeGraph(com.baidu.hugegraph.HugeGraph) HugeTraverser(com.baidu.hugegraph.traversal.algorithm.HugeTraverser) WeightedEdgeStep(com.baidu.hugegraph.traversal.algorithm.steps.WeightedEdgeStep) Id(com.baidu.hugegraph.backend.id.Id) HashSet(java.util.HashSet) POST(jakarta.ws.rs.POST) Consumes(jakarta.ws.rs.Consumes) Produces(jakarta.ws.rs.Produces) Timed(com.codahale.metrics.annotation.Timed)

Aggregations

HugeGraph (com.baidu.hugegraph.HugeGraph)1 Id (com.baidu.hugegraph.backend.id.Id)1 CustomizePathsTraverser (com.baidu.hugegraph.traversal.algorithm.CustomizePathsTraverser)1 HugeTraverser (com.baidu.hugegraph.traversal.algorithm.HugeTraverser)1 WeightedEdgeStep (com.baidu.hugegraph.traversal.algorithm.steps.WeightedEdgeStep)1 Timed (com.codahale.metrics.annotation.Timed)1 Consumes (jakarta.ws.rs.Consumes)1 POST (jakarta.ws.rs.POST)1 Path (jakarta.ws.rs.Path)1 Produces (jakarta.ws.rs.Produces)1 HashSet (java.util.HashSet)1 Vertex (org.apache.tinkerpop.gremlin.structure.Vertex)1