Accept multiple types in browse context contributions 38/3338/2
authorAntti Villberg <antti.villberg@semantum.fi>
Wed, 16 Oct 2019 08:26:21 +0000 (11:26 +0300)
committerTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Wed, 16 Oct 2019 12:22:02 +0000 (12:22 +0000)
gitlab #397

Change-Id: Ie653266a7a54cdf78cad923dcb2e62e46e31423d

bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/browsecontexts/ContributedActionBrowseContexts.java
bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/browsecontexts/ContributedBrowseContexts.java

index dd3fba2c750f068b7835445429452d1905fdc356..ce70a477a6d3d34490f9afe52ae982108f068902 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.browsing.ui.model.tests.Test;
 import org.simantics.databoard.Bindings;
@@ -21,34 +22,33 @@ public class ContributedActionBrowseContexts extends TernaryRead<Resource,Resour
 
     @Override
     public Collection<Resource> perform(ReadGraph graph) throws DatabaseException {
-        
         ViewpointResource VP = ViewpointResource.getInstance(graph);
         Instances query = graph.adapt(VP.ActionBrowseContextContribution, 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.ActionBrowseContextContribution_HasType);
-            if(type != null) {
-                   if(!graph.isInstanceOf(parameter2, type)) continue;
-            }
+            Collection<Resource> acceptedTypes = graph.getObjects(contribution, VP.ActionBrowseContextContribution_HasType);
+            Collection<Resource> allTypes = graph.getTypes(parameter2);
+            if(Collections.disjoint(acceptedTypes, allTypes))
+                continue;
+
+            Resource context = graph.getPossibleObject(contribution, VP.ActionBrowseContextContribution_HasActionBrowseContext);
+            if(context == null)
+                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;
-               }
+                Test test = graph.getPossibleAdapter(testResource, Test.class);
+                if(test != null && !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;
+            if(allowedContexts != null && !Arrays.contains(allowedContexts, parameter3))
+                continue;
+
             result.add(context);
-            
         }
         return result;
-        
     }
 
 }
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;
-        
     }
 
 }