1 package org.simantics.browsing.ui.model.browsecontexts;
\r
3 import java.util.Collection;
\r
5 import org.simantics.browsing.ui.BuiltinKeys;
\r
6 import org.simantics.browsing.ui.NodeContext;
\r
7 import org.simantics.browsing.ui.model.actions.ActionBrowseContext;
\r
8 import org.simantics.db.ReadGraph;
\r
9 import org.simantics.db.Resource;
\r
10 import org.simantics.db.common.request.PossibleIndexRoot;
\r
11 import org.simantics.db.common.request.UnaryRead;
\r
12 import org.simantics.db.exception.DatabaseException;
\r
13 import org.simantics.db.layer0.variable.Variable;
\r
15 public class ResolveActionBrowseContext extends UnaryRead<NodeContext,ActionBrowseContext> {
\r
17 public ResolveActionBrowseContext(NodeContext parameter) {
\r
21 private Resource getPossibleResource(ReadGraph graph) throws DatabaseException {
\r
22 Object input = parameter.getConstant(BuiltinKeys.INPUT);
\r
23 if(input instanceof Resource) return (Resource)input;
\r
24 else if (input instanceof Variable) return ((Variable)input).getPossibleRepresents(graph);
\r
28 private String getPossibleUIContext() {
\r
29 return parameter.getConstant(BuiltinKeys.UI_CONTEXT);
\r
33 public ActionBrowseContext perform(ReadGraph graph) throws DatabaseException {
\r
35 Resource resource = getPossibleResource(graph);
\r
36 if(resource == null) return null;
\r
38 Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(resource));
\r
39 if(indexRoot == null) return null;
\r
41 Collection<Resource> contexts = graph.syncRequest(new ContributedActionBrowseContexts(indexRoot, resource, getPossibleUIContext()));
\r
43 if(contexts.isEmpty()) return null;
\r
45 return graph.syncRequest(new ActionBrowseContextRequest(contexts));
\r