1 package org.simantics.browsing.ui.model.browsecontexts;
3 import java.util.Collection;
5 import org.simantics.browsing.ui.BuiltinKeys;
6 import org.simantics.browsing.ui.NodeContext;
7 import org.simantics.db.ReadGraph;
8 import org.simantics.db.Resource;
9 import org.simantics.db.common.request.PossibleIndexRoot;
10 import org.simantics.db.common.request.UnaryRead;
11 import org.simantics.db.exception.DatabaseException;
12 import org.simantics.db.layer0.variable.Variable;
14 public class ResolveBrowseContext extends UnaryRead<NodeContext,BrowseContext> {
16 public ResolveBrowseContext(NodeContext parameter) {
20 private Resource getPossibleResource(ReadGraph graph) throws DatabaseException {
21 Object input = parameter.getConstant(BuiltinKeys.INPUT);
22 if(input instanceof Resource) return (Resource)input;
23 else if (input instanceof Variable) return ((Variable)input).getPossibleRepresents(graph);
27 private String getPossibleUIContext() {
28 return parameter.getConstant(BuiltinKeys.UI_CONTEXT);
32 public BrowseContext perform(ReadGraph graph) throws DatabaseException {
34 Resource resource = getPossibleResource(graph);
35 if(resource == null) return null;
37 Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(resource));
38 if(indexRoot == null) return null;
40 Collection<Resource> contexts = graph.syncRequest(new ContributedBrowseContexts(indexRoot, resource, getPossibleUIContext()));
42 if(contexts.isEmpty()) return null;
44 return graph.syncRequest(new BrowseContextRequest(contexts));