]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/browsecontexts/ContributedActionBrowseContexts.java
Support VP.Test in action browse context contribution
[simantics/platform.git] / bundles / org.simantics.browsing.ui.model / src / org / simantics / browsing / ui / model / browsecontexts / ContributedActionBrowseContexts.java
index 51affb5faf7c3e5525833d8feae06ee3c6cf9a96..dd3fba2c750f068b7835445429452d1905fdc356 100644 (file)
@@ -3,6 +3,7 @@ package org.simantics.browsing.ui.model.browsecontexts;
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.simantics.browsing.ui.model.tests.Test;
 import org.simantics.databoard.Bindings;
 import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
@@ -26,16 +27,25 @@ public class ContributedActionBrowseContexts extends TernaryRead<Resource,Resour
         Collection<Resource> result = new ArrayList<Resource>();
         for(Resource contribution : query.find(graph, parameter)) {
             Resource type = graph.getPossibleObject(contribution, VP.ActionBrowseContextContribution_HasType);
-            if(type == null) continue;
-            if(graph.isInstanceOf(parameter2, type)) {
-                Resource context = graph.getPossibleObject(contribution, VP.ActionBrowseContextContribution_HasActionBrowseContext);
-                if(context == null) continue;
-                String[] allowedContexts = graph.getPossibleRelatedValue(contribution, VP.ActionBrowseContextContribution_allowedUIContexts, Bindings.STRING_ARRAY);
-                if(allowedContexts != null)
-                       if(!Arrays.contains(allowedContexts, parameter3))
-                               continue;
-                result.add(context);
+            if(type != null) {
+                   if(!graph.isInstanceOf(parameter2, type)) continue;
             }
+            Resource testResource = graph.getPossibleObject(contribution, VP.ActionBrowseContextContribution_HasTest);
+            if(testResource != null) {
+               Test test = graph.getPossibleAdapter(testResource, Test.class);
+               if(test != null) {
+                       if(!test.test(graph, parameter2)) continue;
+               }
+            }
+                       
+            Resource context = graph.getPossibleObject(contribution, VP.ActionBrowseContextContribution_HasActionBrowseContext);
+            if(context == null) continue;
+            String[] allowedContexts = graph.getPossibleRelatedValue(contribution, VP.ActionBrowseContextContribution_allowedUIContexts, Bindings.STRING_ARRAY);
+            if(allowedContexts != null)
+               if(!Arrays.contains(allowedContexts, parameter3))
+                       continue;
+            result.add(context);
+            
         }
         return result;