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; 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 ContributedBrowseContexts extends TernaryRead> { public ContributedBrowseContexts(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.BrowseContextContribution, Instances.class); Collection result = new ArrayList<>(); for(Resource contribution : query.find(graph, parameter)) { Collection acceptedTypes = graph.getObjects(contribution, VP.BrowseContextContribution_HasType); Collection 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; } }