Java源码示例:com.baidu.hugegraph.driver.GremlinManager

示例1
public Builder(String gremlin, GremlinManager executor) {
    this.request = new GremlinRequest(gremlin);
    this.manager = executor;
}
 
示例2
public static GremlinManager gremlin() {
    Assert.assertNotNull("Not opened client", client);
    return client.gremlin();
}
 
示例3
public GremlinManager gremlin() {
    return this.client.gremlin();
}
 
示例4
private QueryResult executeQuery(Card card, HugeClient client) {
    long startTime = System.currentTimeMillis();

    GremlinManager gremlinManager = client.gremlin();

    int limit = conf.getLimitData();
    // To know whether has more record,
    // so add "limit(limit+1)" after code.
    String limitCode = gremlinOptimizer.limitOptimize(card.getCode(),
                                                      limit + 1);
    LOG.info(limitCode);

    // Execute gremlin by HugeClient.
    ResultSet resultSet = gremlinManager.gremlin(limitCode).execute();

    QueryResult queryResult = new QueryResult();
    /*
     * Gremlin result will be stored in two places, the original
     * data is saved as a List<Object>, another is translated
     * into a graph or a table object if possible.
     */
    queryResult.setData(resultSet.data());

    List<Vertex> vertices = new ArrayList<>();
    List<Edge> edges = new ArrayList<>();
    Map<String, Object> styles = new HashMap<>();
    List<com.baidu.hugegraph.structure.graph.Path> paths = new ArrayList<>();
    if (!resultSet.iterator().hasNext()) {
        queryResult.setType(EMPTY);
    }

    queryResult.setType(getResultType(resultSet, limit));
    int count = 0;

    for (Iterator<Result> results = resultSet.iterator();
         results.hasNext();) {

        /*
         * The result might be null, and the object must be got via
         * Result.getObject method.
         */
        Result or = results.next();
        if (or == null) {
            continue;
        }
        Object object = or.getObject();
        if (object instanceof Vertex) {
            vertices.add((Vertex) object);
        } else if (object instanceof Edge) {
            edges.add((Edge) object);
        } else if (object instanceof
                   com.baidu.hugegraph.structure.graph.Path) {
            // Convert Object to Path
            paths.add((com.baidu.hugegraph.structure.graph.Path) object);
        }
        if (++count >= limit) {
            break;
        }
    }

    /*
     * When the results contains not only vertices\edges\paths,
     * how to deal with that?
     */
    switch (queryResult.getType()) {
        case PATH:
            // Extract vertices from paths ;
            vertices = getVertexFromPath(client, paths);
            edges = getEdgeFromVertex(client, vertices);
            styles = getGraphStyles(client);
            break;
        case VERTEX:
            // Extract edges from vertex ;
            edges = getEdgeFromVertex(client, vertices);
            styles = getGraphStyles(client);
            break;
        case EDGE:
            // Extract vertices from edges ;
            vertices = getVertexFromEdge(client, edges);
            styles = getGraphStyles(client);
            break;
        default:
            break;
    }

    queryResult.setGraphVertices(vertices);
    queryResult.setGraphEdges(edges);
    queryResult.setStyles(styles);
    queryResult.setShowNum(count);
    String message = "";
    if (count < resultSet.size()) {
        message = String.format("Partial %s records are shown!", count);
    }
    queryResult.setMessage(message);

    long endTime = System.currentTimeMillis();
    long duration = endTime - startTime;
    queryResult.setDuration(duration);

    return queryResult;
}