]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/browsecontexts/ResolveActionBrowseContext.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.browsing.ui.model / src / org / simantics / browsing / ui / model / browsecontexts / ResolveActionBrowseContext.java
1 package org.simantics.browsing.ui.model.browsecontexts;\r
2 \r
3 import java.util.Collection;\r
4 \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
14 \r
15 public class ResolveActionBrowseContext extends UnaryRead<NodeContext,ActionBrowseContext> {\r
16 \r
17     public ResolveActionBrowseContext(NodeContext parameter) {\r
18         super(parameter);\r
19     }\r
20 \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
25         else return null;\r
26     }\r
27     \r
28     private String getPossibleUIContext() {\r
29         return parameter.getConstant(BuiltinKeys.UI_CONTEXT);\r
30     }\r
31     \r
32     @Override\r
33     public ActionBrowseContext perform(ReadGraph graph) throws DatabaseException {\r
34         \r
35         Resource resource = getPossibleResource(graph);\r
36         if(resource == null) return null;\r
37         \r
38         Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(resource));\r
39         if(indexRoot == null) return null;\r
40 \r
41         Collection<Resource> contexts = graph.syncRequest(new ContributedActionBrowseContexts(indexRoot, resource, getPossibleUIContext()));\r
42         \r
43         if(contexts.isEmpty()) return null;\r
44         \r
45         return graph.syncRequest(new ActionBrowseContextRequest(contexts));\r
46         \r
47     }\r
48 \r
49 }\r