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