package org.vertexium.query;
import org.vertexium.*;
import org.vertexium.util.IterableUtils;
import org.vertexium.util.JoinIterable;
import org.vertexium.util.VerticesToEdgeIdsIterable;
import java.util.EnumSet;
public class DefaultMultiVertexQuery extends QueryBase implements MultiVertexQuery {
private final String[] vertexIds;
public DefaultMultiVertexQuery(Graph graph, String[] vertexIds, String queryString, Authorizations authorizations) {
super(graph, queryString, authorizations);
this.vertexIds = vertexIds;
}
@Override
public QueryResultsIterable<Vertex> vertices(EnumSet<FetchHint> fetchHints) {
Iterable<Vertex> vertices = getGraph().getVertices(IterableUtils.toIterable(getVertexIds()), fetchHints, getParameters().getAuthorizations());
return new DefaultGraphQueryIterableWithAggregations<>(getParameters(), vertices, true, true, true, getAggregations());
}
@Override
public QueryResultsIterable<Edge> edges(EnumSet<FetchHint> fetchHints) {
Iterable<Vertex> vertices = getGraph().getVertices(IterableUtils.toIterable(getVertexIds()), fetchHints, getParameters().getAuthorizations());
Iterable<String> edgeIds = new VerticesToEdgeIdsIterable(vertices, getParameters().getAuthorizations());
Iterable<Edge> edges = getGraph().getEdges(edgeIds, fetchHints, getParameters().getAuthorizations());
return new DefaultGraphQueryIterableWithAggregations<>(getParameters(), edges, true, true, true, getAggregations());
}
@Override
protected QueryResultsIterable<? extends VertexiumObject> extendedData(EnumSet<FetchHint> fetchHints) {
Iterable<Vertex> vertices = getGraph().getVertices(IterableUtils.toIterable(getVertexIds()), fetchHints, getParameters().getAuthorizations());
Iterable<String> edgeIds = new VerticesToEdgeIdsIterable(vertices, getParameters().getAuthorizations());
Iterable<Edge> edges = getGraph().getEdges(edgeIds, fetchHints, getParameters().getAuthorizations());
return extendedData(fetchHints, new JoinIterable<>(vertices, edges));
}
public String[] getVertexIds() {
return vertexIds;
}
}