Package com.tinkerpop.blueprints.impls.rexster

Source Code of com.tinkerpop.blueprints.impls.rexster.RexsterVertexQuery

package com.tinkerpop.blueprints.impls.rexster;

import com.tinkerpop.blueprints.Direction;
import com.tinkerpop.blueprints.Edge;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.util.DefaultVertexQuery;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONObject;

import java.util.ArrayList;
import java.util.List;


/**
* RexsterQuery makes no requests until edges(), vertices(), count() or vertexIds() is called.
*
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
public class RexsterVertexQuery extends DefaultVertexQuery {

    public final String baseUri;
    public final RexsterGraph graph;

    public RexsterVertexQuery(final String uri, final RexsterGraph graph) {
        super(null);
        this.baseUri = uri;
        this.graph = graph;
    }

    public Iterable<Edge> edges() {
        final String directionReturnToken;
        if (this.direction == Direction.IN) {
            directionReturnToken = RexsterTokens.SLASH_INE;
        } else if (this.direction == Direction.OUT) {
            directionReturnToken = RexsterTokens.SLASH_OUTE;
        } else {
            directionReturnToken = RexsterTokens.SLASH_BOTHE;
        }

        return new RexsterEdgeIterable(buildUri(directionReturnToken), graph);
    }

    public Iterable<Vertex> vertices() {
        final String directionReturnToken;
        if (this.direction == Direction.IN) {
            directionReturnToken = RexsterTokens.SLASH_IN;
        } else if (this.direction == Direction.OUT) {
            directionReturnToken = RexsterTokens.SLASH_OUT;
        } else {
            directionReturnToken = RexsterTokens.SLASH_BOTH;
        }

        return new RexsterVertexIterable(buildUri(directionReturnToken), graph);
    }

    public long count() {
        final String directionReturnToken;
        if (this.direction == Direction.IN) {
            directionReturnToken = RexsterTokens.SLASH_INCOUNT;
        } else if (this.direction == Direction.OUT) {
            directionReturnToken = RexsterTokens.SLASH_OUTCOUNT;
        } else {
            directionReturnToken = RexsterTokens.SLASH_BOTHCOUNT;
        }

        final JSONObject jsonObject = RestHelper.get(buildUri(directionReturnToken));
        return jsonObject.optLong(RexsterTokens.TOTAL_SIZE);
    }

    public Object vertexIds() {
        final String directionReturnToken;
        if (this.direction == Direction.IN) {
            directionReturnToken = RexsterTokens.SLASH_INIDS;
        } else if (this.direction == Direction.OUT) {
            directionReturnToken = RexsterTokens.SLASH_OUTIDS;
        } else {
            directionReturnToken = RexsterTokens.SLASH_BOTHIDS;
        }

        final JSONArray jsonArray = RestHelper.getResultArray(buildUri(directionReturnToken));

        final List<Object> list = new ArrayList<Object>();
        for (int ix = 0; ix < jsonArray.length(); ix++) {
            list.add(jsonArray.opt(ix));
        }

        return list;
    }

    private String buildUri(final String directionReturnToken) {
        final StringBuilder sb = new StringBuilder(this.baseUri + directionReturnToken + RexsterTokens.QUESTION);
        sb.append(RexsterTokens._TAKE);
        sb.append(RexsterTokens.EQUALS);
        sb.append(this.limit);

        /*sb.append(RexsterTokens.AND);

        sb.append(RexsterTokens._SKIP);
        sb.append(RexsterTokens.EQUALS);
        sb.append(this.minimum);*/

        if (this.labels != null && this.labels.length > 0) {
            sb.append(RexsterTokens.AND);
            sb.append(RexsterTokens._LABEL_EQUALS);

            sb.append(RexsterTokens.LEFT_SQUARE_BRACKET);
            for (String label : labels) {
                sb.append(label);
                sb.append(RexsterTokens.COMMA);
            }

            sb.deleteCharAt(sb.length() - 1);
            sb.append(RexsterTokens.RIGHT_SQUARE_BRACKET);
        }

        if (this.hasContainers.size() > 0) {
            sb.append(RexsterTokens.AND);
            sb.append(RexsterTokens._PROPERTIES);
            sb.append(RexsterTokens.EQUALS);
            sb.append(RexsterTokens.LEFT_SQUARE_BRACKET);

            for (HasContainer hasContainer : this.hasContainers) {
                sb.append(RexsterTokens.LEFT_SQUARE_BRACKET);
                sb.append(hasContainer.key);

                sb.append(RexsterTokens.COMMA);
                sb.append(hasContainer.predicate.toString());
                sb.append(RexsterTokens.COMMA);

                // for (Object v : hasContainer.values) {
                sb.append(RestHelper.uriCast(hasContainer.value)); // TODO BRO.
                sb.append(" ");
                //}

                sb.trimToSize();

                sb.append(RexsterTokens.RIGHT_SQUARE_BRACKET);

                sb.append(RexsterTokens.COMMA);
            }

            sb.deleteCharAt(sb.length() - 1);

            if (this.hasContainers.size() > 0) {
                sb.append(RexsterTokens.RIGHT_SQUARE_BRACKET);
            }
        }

        return sb.toString();
    }

}
TOP

Related Classes of com.tinkerpop.blueprints.impls.rexster.RexsterVertexQuery

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.