1 package org.simantics.spreadsheet.graph;
\r
3 import org.simantics.db.ReadGraph;
\r
4 import org.simantics.db.Resource;
\r
5 import org.simantics.db.exception.DatabaseException;
\r
6 import org.simantics.db.layer0.variable.NodeManagerVariableBuilder;
\r
7 import org.simantics.db.layer0.variable.NodeSupport;
\r
8 import org.simantics.db.layer0.variable.ProxyChildVariable;
\r
9 import org.simantics.db.layer0.variable.StandardGraphChildVariable;
\r
10 import org.simantics.db.layer0.variable.Variable;
\r
11 import org.simantics.db.layer0.variable.VariableNode;
\r
12 import org.simantics.spreadsheet.graph.function.SpreadsheetRootVariable;
\r
14 public class SpreadsheetVariableBuilder extends NodeManagerVariableBuilder {
\r
17 public Variable buildChild(ReadGraph graph, Variable parent, VariableNode node, Resource child) throws DatabaseException {
\r
19 // For proxies, return a variable with a node manager
\r
20 if(parent instanceof ProxyChildVariable) {
\r
21 String sessionName = parent.getURI(graph);
\r
22 return createChild(graph, parent, sessionName, child);
\r
24 // For others return a standard variable
\r
25 return new StandardGraphChildVariable(parent, node, child);
\r
30 protected Variable createChild(ReadGraph graph, Variable parent, String sessionName, Resource child) throws DatabaseException {
\r
31 NodeSupport<?> support = getNodeSupport(graph, sessionName);
\r
32 return new SpreadsheetRootVariable(parent, new VariableNode(support, getRoot(graph, support, sessionName)), child);
\r
37 protected NodeSupport<?> getNodeSupport(ReadGraph graph, String sessionName) throws DatabaseException {
\r
38 return SpreadsheetSessionManager.getInstance().getOrCreateNodeSupport(graph, sessionName);
\r
42 protected Object getRoot(ReadGraph graph, NodeSupport<?> support, String sessionName) {
\r
43 SpreadsheetNodeManager manager = (SpreadsheetNodeManager)support.manager;
\r
44 return manager.getRoot();
\r