]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/browsecontexts/ContributedBrowseContexts.java
Accept multiple types in browse context contributions
[simantics/platform.git] / bundles / org.simantics.browsing.ui.model / src / org / simantics / browsing / ui / model / browsecontexts / ContributedBrowseContexts.java
index f2015257f1fb33997425b174a3c3c1a3f10ff025..3fb20eeb939d067bb111935eefc5c799818ce47d 100644 (file)
@@ -2,6 +2,7 @@ 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;
@@ -20,25 +21,26 @@ public class ContributedBrowseContexts extends TernaryRead<Resource,Resource,Str
 
     @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<Resource>();
+        Collection<Resource> result = new ArrayList<>();
         for(Resource contribution : query.find(graph, parameter)) {
-            Resource type = graph.getPossibleObject(contribution, VP.BrowseContextContribution_HasType);
-            if(type == null) continue;
-            if(graph.isInstanceOf(parameter2, type)) {
-                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)
-                       if(!Arrays.contains(allowedContexts, parameter3))
-                               continue;
-                result.add(context);
-            }
+            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;
-        
     }
 
 }