use of com.tinkerpop.pipes.transform.VerticesVerticesPipe in project gremlin by tinkerpop.
the class GremlinFluentUtility method optimizePipelineForVertexQuery.
public static boolean optimizePipelineForVertexQuery(final GremlinPipeline pipeline, final Pipe pipe) {
VertexQueryPipe queryPipe = null;
for (int i = pipeline.size() - 1; i > 0; i--) {
final Pipe temp = pipeline.get(i);
if (temp instanceof VertexQueryPipe) {
queryPipe = (VertexQueryPipe) temp;
break;
} else if (!(temp instanceof IdentityPipe))
break;
}
if (null != queryPipe) {
if (pipe instanceof EdgesVerticesPipe) {
if (queryPipe.getResultElementClass().equals(Vertex.class))
return false;
queryPipe.setResultingElementClass(Vertex.class);
} else if (pipe instanceof VerticesVerticesPipe) {
if (queryPipe.getResultElementClass().equals(Vertex.class))
return false;
queryPipe.setDirection(((VerticesVerticesPipe) pipe).getDirection());
queryPipe.setLabels(((VerticesVerticesPipe) pipe).getLabels());
queryPipe.setBranchFactor(((VerticesVerticesPipe) pipe).getBranchFactor());
} else if (pipe instanceof VerticesEdgesPipe) {
if (queryPipe.getResultElementClass().equals(Vertex.class))
return false;
queryPipe.setResultingElementClass(Edge.class);
queryPipe.setDirection(((VerticesEdgesPipe) pipe).getDirection());
queryPipe.setLabels(((VerticesEdgesPipe) pipe).getLabels());
queryPipe.setBranchFactor(((VerticesEdgesPipe) pipe).getBranchFactor());
} else if (pipe instanceof PropertyFilterPipe) {
if (queryPipe.getResultElementClass().equals(Vertex.class))
return false;
final PropertyFilterPipe temp = (PropertyFilterPipe) pipe;
queryPipe.addHasContainer(new QueryPipe.HasContainer(temp.getKey(), temp.getPredicate(), temp.getValue()));
} else if (pipe instanceof IntervalFilterPipe) {
if (queryPipe.getResultElementClass().equals(Vertex.class))
return false;
final IntervalFilterPipe temp = (IntervalFilterPipe) pipe;
queryPipe.addIntervalContainer(new QueryPipe.IntervalContainer(temp.getKey(), temp.getStartValue(), temp.getEndValue()));
} else if (pipe instanceof RangeFilterPipe) {
queryPipe.setLowRange(((RangeFilterPipe) pipe).getLowRange());
queryPipe.setHighRange(((RangeFilterPipe) pipe).getHighRange());
}
pipeline.addPipe(new IdentityPipe());
return true;
} else {
return false;
}
}
Aggregations