+
+ private static Collection<Resource> getDirectOwners(ReadGraph graph, Resource resource) throws DatabaseException {
+ // TODO is necessary?
+ if(resource.equals(graph.getRootLibrary()))
+ return Collections.emptyList();
+
+ Layer0 L0 = Layer0.getInstance(graph);
+
+ Collection<Resource> owners = graph.getObjects(resource, L0.IsOwnedBy);
+ if(owners.isEmpty()) {
+ owners = new THashSet<Resource>();
+
+ // If there are no owners, collect resources referring to this resource by IsRelatedTo
+ for(Statement statement : graph.getStatements(resource, L0.IsWeaklyRelatedTo)) {
+ Resource inverse = graph.getPossibleInverse(statement.getPredicate());
+ if(inverse != null) {
+ if(graph.isSubrelationOf(inverse, L0.IsRelatedTo)) {
+ // Filter away tags
+ if(resource.equals(statement.getObject()))
+ continue;
+ owners.add(statement.getObject());
+ }
+ }
+ }
+ }
+ else if(owners.size() > 1) {
+ // TODO: getObjects returns duplicate entries (https://www.simantics.org/redmine/issues/4885) and therefore direct is Set<Resource>.
+ // Fix getObjects to not return duplicate entries
+ owners = new HashSet<Resource>(owners);
+ }
+
+ return owners;
+ }
+