]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/browsecontexts/ResolveActionBrowseContext.java
Fixed all line endings of the repository
[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;
2
3 import java.util.Collection;
4
5 import org.simantics.browsing.ui.BuiltinKeys;
6 import org.simantics.browsing.ui.NodeContext;
7 import org.simantics.browsing.ui.model.actions.ActionBrowseContext;
8 import org.simantics.db.ReadGraph;
9 import org.simantics.db.Resource;
10 import org.simantics.db.common.request.PossibleIndexRoot;
11 import org.simantics.db.common.request.UnaryRead;
12 import org.simantics.db.exception.DatabaseException;
13 import org.simantics.db.layer0.variable.Variable;
14
15 public class ResolveActionBrowseContext extends UnaryRead<NodeContext,ActionBrowseContext> {
16
17     public ResolveActionBrowseContext(NodeContext parameter) {
18         super(parameter);
19     }
20
21     private Resource getPossibleResource(ReadGraph graph) throws DatabaseException {
22         Object input = parameter.getConstant(BuiltinKeys.INPUT);
23         if(input instanceof Resource) return (Resource)input;
24         else if (input instanceof Variable) return ((Variable)input).getPossibleRepresents(graph);
25         else return null;
26     }
27     
28     private String getPossibleUIContext() {
29         return parameter.getConstant(BuiltinKeys.UI_CONTEXT);
30     }
31     
32     @Override
33     public ActionBrowseContext perform(ReadGraph graph) throws DatabaseException {
34         
35         Resource resource = getPossibleResource(graph);
36         if(resource == null) return null;
37         
38         Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(resource));
39         if(indexRoot == null) return null;
40
41         Collection<Resource> contexts = graph.syncRequest(new ContributedActionBrowseContexts(indexRoot, resource, getPossibleUIContext()));
42         
43         if(contexts.isEmpty()) return null;
44         
45         return graph.syncRequest(new ActionBrowseContextRequest(contexts));
46         
47     }
48
49 }