]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/browsecontexts/ResolveBrowseContext.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.browsing.ui.model / src / org / simantics / browsing / ui / model / browsecontexts / ResolveBrowseContext.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.db.ReadGraph;\r
8 import org.simantics.db.Resource;\r
9 import org.simantics.db.common.request.PossibleIndexRoot;\r
10 import org.simantics.db.common.request.UnaryRead;\r
11 import org.simantics.db.exception.DatabaseException;\r
12 import org.simantics.db.layer0.variable.Variable;\r
13 \r
14 public class ResolveBrowseContext extends UnaryRead<NodeContext,BrowseContext> {\r
15 \r
16     public ResolveBrowseContext(NodeContext parameter) {\r
17         super(parameter);\r
18     }\r
19 \r
20     private Resource getPossibleResource(ReadGraph graph) throws DatabaseException {\r
21         Object input = parameter.getConstant(BuiltinKeys.INPUT);\r
22         if(input instanceof Resource) return (Resource)input;\r
23         else if (input instanceof Variable) return ((Variable)input).getPossibleRepresents(graph);\r
24         else return null;\r
25     }\r
26     \r
27     private String getPossibleUIContext() {\r
28         return parameter.getConstant(BuiltinKeys.UI_CONTEXT);\r
29     }\r
30     \r
31     @Override\r
32     public BrowseContext perform(ReadGraph graph) throws DatabaseException {\r
33         \r
34         Resource resource = getPossibleResource(graph);\r
35         if(resource == null) return null;\r
36         \r
37         Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(resource));\r
38         if(indexRoot == null) return null;\r
39         \r
40         Collection<Resource> contexts = graph.syncRequest(new ContributedBrowseContexts(indexRoot, resource, getPossibleUIContext()));\r
41         \r
42         if(contexts.isEmpty()) return null;\r
43         \r
44         return graph.syncRequest(new BrowseContextRequest(contexts));\r
45         \r
46     }\r
47 \r
48 }\r