private List<Range> getRange(final ElementId elementId, final GraphFilters operation, final SeededGraphFilters.IncludeIncomingOutgoingType inOutType)
throws RangeFactoryException {
if (elementId instanceof EntityId) {
return getRange(((EntityId) elementId).getVertex(), operation, operation.getView().hasEdges());
} else {
final EdgeId edgeId = (EdgeId) elementId;
final List<Range> ranges = new ArrayList<>();
if (operation.getView().hasEdges()
&& DirectedType.areCompatible(operation.getDirectedType(), edgeId.getDirectedType())) {
final DirectedType directed = DirectedType.and(operation.getDirectedType(), edgeId.getDirectedType());
ranges.addAll(getRange(edgeId.getSource(), edgeId.getDestination(), directed, operation, inOutType));
}
final boolean doRelated = !(operation instanceof SeedMatching)
|| !SeedMatching.SeedMatchingType.EQUAL.equals(((SeedMatching) operation).getSeedMatching());
if (doRelated && operation.getView().hasEntities()) {
ranges.addAll(getRange(edgeId.getSource(), operation, false));
ranges.addAll(getRange(edgeId.getDestination(), operation, false));
}
return ranges;
}
}