package org.simantics.browsing.ui.model.browsecontexts; import java.util.ArrayList; import java.util.Collection; import org.simantics.databoard.Bindings; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.request.TernaryRead; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.adapter.Instances; import org.simantics.utils.datastructures.Arrays; import org.simantics.viewpoint.ontology.ViewpointResource; public class ContributedActionBrowseContexts extends TernaryRead> { public ContributedActionBrowseContexts(Resource indexRoot, Resource context, String uiContext) { super(indexRoot, context, uiContext); } @Override public Collection perform(ReadGraph graph) throws DatabaseException { ViewpointResource VP = ViewpointResource.getInstance(graph); Instances query = graph.adapt(VP.ActionBrowseContextContribution, Instances.class); Collection result = new ArrayList(); 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); } } return result; } }