public Object convert(Object value) { if (value instanceof ORidBag) { List result = new ArrayList(); ((ORidBag) value).forEach(x -> result.add(x)); return result; } if (value instanceof OEdgeToVertexIterable) { value = ((OEdgeToVertexIterable) value).iterator(); } if (value instanceof OEdgeToVertexIterator) { List<ORID> result = new ArrayList<>(); while (((OEdgeToVertexIterator) value).hasNext()) { result.add(((OEdgeToVertexIterator) value).next().getIdentity()); } return result; } if (value instanceof OInternalResultSet) { ((OInternalResultSet) value).reset(); value = ((OInternalResultSet) value).stream().collect(Collectors.toList()); } return value; }
@Override public Iterable<OVertex> getVertices(ODirection direction, String... type) { if (direction == ODirection.BOTH) { OMultiCollectionIterator<OVertex> result = new OMultiCollectionIterator<>(); result.add(getVertices(ODirection.OUT, type)); result.add(getVertices(ODirection.IN, type)); return result; } else { Iterable<OEdge> edges = getEdges(direction, type); return new OEdgeToVertexIterable(edges, direction); } }
@Override public Iterable<OVertex> getVertices(ODirection direction, String... type) { if (direction == ODirection.BOTH) { OMultiCollectionIterator<OVertex> result = new OMultiCollectionIterator<>(); result.add(getVertices(ODirection.OUT, type)); result.add(getVertices(ODirection.IN, type)); return result; } else { Iterable<OEdge> edges = getEdges(direction, type); return new OEdgeToVertexIterable(edges, direction); } }
/** * get adjacent vertices and edges * * @param srcVertex * @param direction * @param types * * @return * * @author Thomas Young (YJJThomasYoung@hotmail.com) */ private ORawPair<Iterable<OVertex>, Iterable<OEdge>> getVerticesAndEdges(OVertex srcVertex, ODirection direction, String... types) { if (direction == ODirection.BOTH) { OMultiCollectionIterator<OVertex> vertexIterator = new OMultiCollectionIterator<>(); OMultiCollectionIterator<OEdge> edgeIterator = new OMultiCollectionIterator<>(); ORawPair<Iterable<OVertex>, Iterable<OEdge>> pair1 = getVerticesAndEdges(srcVertex, ODirection.OUT, types); ORawPair<Iterable<OVertex>, Iterable<OEdge>> pair2 = getVerticesAndEdges(srcVertex, ODirection.IN, types); vertexIterator.add(pair1.getFirst()); vertexIterator.add(pair2.getFirst()); edgeIterator.add(pair1.getSecond()); edgeIterator.add(pair2.getSecond()); return new ORawPair<>(vertexIterator, edgeIterator); } else { Iterable<OEdge> edges1 = srcVertex.getEdges(direction, types); Iterable<OEdge> edges2 = srcVertex.getEdges(direction, types); return new ORawPair<>(new OEdgeToVertexIterable(edges1, direction), edges2); } }