--- /dev/null
+package org.simantics.browsing.ui.model.browsecontexts;\r
+\r
+import java.util.Collection;\r
+\r
+import org.simantics.browsing.ui.BuiltinKeys;\r
+import org.simantics.browsing.ui.NodeContext;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.request.PossibleIndexRoot;\r
+import org.simantics.db.common.request.UnaryRead;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.variable.Variable;\r
+\r
+public class ResolveBrowseContext extends UnaryRead<NodeContext,BrowseContext> {\r
+\r
+ public ResolveBrowseContext(NodeContext parameter) {\r
+ super(parameter);\r
+ }\r
+\r
+ private Resource getPossibleResource(ReadGraph graph) throws DatabaseException {\r
+ Object input = parameter.getConstant(BuiltinKeys.INPUT);\r
+ if(input instanceof Resource) return (Resource)input;\r
+ else if (input instanceof Variable) return ((Variable)input).getPossibleRepresents(graph);\r
+ else return null;\r
+ }\r
+ \r
+ private String getPossibleUIContext() {\r
+ return parameter.getConstant(BuiltinKeys.UI_CONTEXT);\r
+ }\r
+ \r
+ @Override\r
+ public BrowseContext perform(ReadGraph graph) throws DatabaseException {\r
+ \r
+ Resource resource = getPossibleResource(graph);\r
+ if(resource == null) return null;\r
+ \r
+ Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(resource));\r
+ if(indexRoot == null) return null;\r
+ \r
+ Collection<Resource> contexts = graph.syncRequest(new ContributedBrowseContexts(indexRoot, resource, getPossibleUIContext()));\r
+ \r
+ if(contexts.isEmpty()) return null;\r
+ \r
+ return graph.syncRequest(new BrowseContextRequest(contexts));\r
+ \r
+ }\r
+\r
+}\r