private Set<NODE> findPathValues(ID resource, MappedPath path, int index, PropertiesMap properties, UID context) {
MappedPredicate predicate = path.get(index);
if (predicate.getContext() != null) {
context = predicate.getContext();
}
Set<NODE> values;
if (!predicate.inv() && properties.getDirect() != null) {
values = findValues(predicate.getUID(), properties.getDirect(), context, predicate.inv());
} else if (predicate.inv() && properties.getInverse() != null) {
values = findValues(predicate.getUID(), properties.getInverse(), null, predicate.inv());
} else {
values = findValues(resource, predicate.getUID(), predicate.inv(), predicate.includeInferred(), context);
}
if (path.size() > index + 1) {
Set<NODE> nestedValues = new LinkedHashSet<NODE>();
for (NODE value : values) {
if (value.isResource()) {
nestedValues.addAll(findPathValues((ID) value, path, index + 1, new PropertiesMap(null, null), context));
}
}
return nestedValues;
}
return values;
}