1 package org.simantics.browsing.ui.model.browsecontexts;
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.Collections;
7 import org.simantics.browsing.ui.model.tests.Test;
8 import org.simantics.databoard.Bindings;
9 import org.simantics.db.ReadGraph;
10 import org.simantics.db.Resource;
11 import org.simantics.db.common.request.TernaryRead;
12 import org.simantics.db.exception.DatabaseException;
13 import org.simantics.db.layer0.adapter.Instances;
14 import org.simantics.utils.datastructures.Arrays;
15 import org.simantics.viewpoint.ontology.ViewpointResource;
17 public class ContributedActionBrowseContexts extends TernaryRead<Resource,Resource,String,Collection<Resource>> {
19 public ContributedActionBrowseContexts(Resource indexRoot, Resource context, String uiContext) {
20 super(indexRoot, context, uiContext);
24 public Collection<Resource> perform(ReadGraph graph) throws DatabaseException {
25 ViewpointResource VP = ViewpointResource.getInstance(graph);
26 Instances query = graph.adapt(VP.ActionBrowseContextContribution, Instances.class);
27 Collection<Resource> result = new ArrayList<>();
28 for(Resource contribution : query.find(graph, parameter)) {
29 Collection<Resource> acceptedTypes = graph.getObjects(contribution, VP.ActionBrowseContextContribution_HasType);
30 Collection<Resource> allTypes = graph.getTypes(parameter2);
31 if(Collections.disjoint(acceptedTypes, allTypes))
34 Resource context = graph.getPossibleObject(contribution, VP.ActionBrowseContextContribution_HasActionBrowseContext);
38 Resource testResource = graph.getPossibleObject(contribution, VP.ActionBrowseContextContribution_HasTest);
39 if(testResource != null) {
40 Test test = graph.getPossibleAdapter(testResource, Test.class);
41 if(test != null && !test.test(graph, parameter2))
45 String[] allowedContexts = graph.getPossibleRelatedValue(contribution, VP.ActionBrowseContextContribution_allowedUIContexts, Bindings.STRING_ARRAY);
46 if(allowedContexts != null && !Arrays.contains(allowedContexts, parameter3))