-package org.simantics.browsing.ui.model.browsecontexts;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.common.request.TernaryRead;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.adapter.Instances;\r
-import org.simantics.utils.datastructures.Arrays;\r
-import org.simantics.viewpoint.ontology.ViewpointResource;\r
-\r
-public class ContributedBrowseContexts extends TernaryRead<Resource,Resource,String,Collection<Resource>> {\r
-\r
- public ContributedBrowseContexts(Resource indexRoot, Resource context, String uiContext) {\r
- super(indexRoot, context, uiContext);\r
- }\r
-\r
- @Override\r
- public Collection<Resource> perform(ReadGraph graph) throws DatabaseException {\r
- \r
- ViewpointResource VP = ViewpointResource.getInstance(graph);\r
- Instances query = graph.adapt(VP.BrowseContextContribution, Instances.class);\r
- Collection<Resource> result = new ArrayList<Resource>();\r
- for(Resource contribution : query.find(graph, parameter)) {\r
- Resource type = graph.getPossibleObject(contribution, VP.BrowseContextContribution_HasType);\r
- if(type == null) continue;\r
- if(graph.isInstanceOf(parameter2, type)) {\r
- Resource context = graph.getPossibleObject(contribution, VP.BrowseContextContribution_HasBrowseContext);\r
- if(context == null) continue;\r
- String[] allowedContexts = graph.getPossibleRelatedValue(contribution, VP.BrowseContextContribution_allowedUIContexts, Bindings.STRING_ARRAY);\r
- if(allowedContexts != null)\r
- if(!Arrays.contains(allowedContexts, parameter3))\r
- continue;\r
- result.add(context);\r
- }\r
- }\r
- return result;\r
- \r
- }\r
-\r
-}\r
+package org.simantics.browsing.ui.model.browsecontexts;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+
+import org.simantics.databoard.Bindings;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.request.TernaryRead;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.adapter.Instances;
+import org.simantics.utils.datastructures.Arrays;
+import org.simantics.viewpoint.ontology.ViewpointResource;
+
+public class ContributedBrowseContexts extends TernaryRead<Resource,Resource,String,Collection<Resource>> {
+
+ public ContributedBrowseContexts(Resource indexRoot, Resource context, String uiContext) {
+ super(indexRoot, context, uiContext);
+ }
+
+ @Override
+ public Collection<Resource> perform(ReadGraph graph) throws DatabaseException {
+ ViewpointResource VP = ViewpointResource.getInstance(graph);
+ Instances query = graph.adapt(VP.BrowseContextContribution, Instances.class);
+ Collection<Resource> result = new ArrayList<>();
+ for(Resource contribution : query.find(graph, parameter)) {
+ Collection<Resource> acceptedTypes = graph.getObjects(contribution, VP.BrowseContextContribution_HasType);
+ Collection<Resource> allTypes = graph.getTypes(parameter2);
+ if(Collections.disjoint(acceptedTypes, allTypes))
+ continue;
+
+ Resource context = graph.getPossibleObject(contribution, VP.BrowseContextContribution_HasBrowseContext);
+ if(context == null)
+ continue;
+
+ String[] allowedContexts = graph.getPossibleRelatedValue(contribution, VP.BrowseContextContribution_allowedUIContexts, Bindings.STRING_ARRAY);
+ if(allowedContexts != null && !Arrays.contains(allowedContexts, parameter3))
+ continue;
+
+ result.add(context);
+ }
+ return result;
+ }
+
+}