1 package org.simantics.browsing.ui.model.browsecontexts;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collection;
\r
6 import org.simantics.databoard.Bindings;
\r
7 import org.simantics.db.ReadGraph;
\r
8 import org.simantics.db.Resource;
\r
9 import org.simantics.db.common.request.TernaryRead;
\r
10 import org.simantics.db.exception.DatabaseException;
\r
11 import org.simantics.db.layer0.adapter.Instances;
\r
12 import org.simantics.utils.datastructures.Arrays;
\r
13 import org.simantics.viewpoint.ontology.ViewpointResource;
\r
15 public class ContributedBrowseContexts extends TernaryRead<Resource,Resource,String,Collection<Resource>> {
\r
17 public ContributedBrowseContexts(Resource indexRoot, Resource context, String uiContext) {
\r
18 super(indexRoot, context, uiContext);
\r
22 public Collection<Resource> perform(ReadGraph graph) throws DatabaseException {
\r
24 ViewpointResource VP = ViewpointResource.getInstance(graph);
\r
25 Instances query = graph.adapt(VP.BrowseContextContribution, Instances.class);
\r
26 Collection<Resource> result = new ArrayList<Resource>();
\r
27 for(Resource contribution : query.find(graph, parameter)) {
\r
28 Resource type = graph.getPossibleObject(contribution, VP.BrowseContextContribution_HasType);
\r
29 if(type == null) continue;
\r
30 if(graph.isInstanceOf(parameter2, type)) {
\r
31 Resource context = graph.getPossibleObject(contribution, VP.BrowseContextContribution_HasBrowseContext);
\r
32 if(context == null) continue;
\r
33 String[] allowedContexts = graph.getPossibleRelatedValue(contribution, VP.BrowseContextContribution_allowedUIContexts, Bindings.STRING_ARRAY);
\r
34 if(allowedContexts != null)
\r
35 if(!Arrays.contains(allowedContexts, parameter3))
\r
37 result.add(context);
\r