1 package org.simantics.db.layer0.variable;
3 import org.simantics.db.ReadGraph;
4 import org.simantics.db.exception.DatabaseException;
6 public class ProxyVariables {
8 public static Variable tryToOwn(ReadGraph graph, Variable parent, Variable variable) {
9 if(variable instanceof ProxyVariableSupport) {
10 ProxyVariableSupport pvs = (ProxyVariableSupport)variable;
11 return pvs.attachTo(graph, parent);
16 public static Variable tryToOwnRenamed(ReadGraph graph, Variable parent, Variable variable, String name) {
17 if(variable instanceof ProxyVariableSupport) {
18 ProxyVariableSupport pvs = (ProxyVariableSupport)variable;
19 return pvs.attachToRenamed(graph, parent, name);
24 public static Variable inputVariable(ReadGraph graph, Variable context) throws DatabaseException {
25 Variable session = graph.syncRequest(new ProxySessionRequest(context));
26 if(session == null) return null;
27 String uri = session.getPossiblePropertyValue(graph, "inputURI");
29 // TODO HAXX - Please fix this
30 // we have no URI so this probably means that someone has inserted a non-session
31 // into the proxy variable => return that instead
34 return Variables.getVariable(graph, uri);
37 public static Variable sessionVariable(ReadGraph graph, Variable self) throws DatabaseException {
38 return graph.syncRequest(new ProxySessionRequest(self));
41 public static Variable makeProxyVariable(ReadGraph graph, Variable base, Variable input) throws DatabaseException {
43 base = base.getChild(graph, ProxyChildVariable.CONTEXT_BEGIN);
44 String path = input.getURI(graph).substring("http:/".length());
45 base = base.browse(graph, path);
46 return base.getChild(graph, ProxyChildVariable.CONTEXT_END);
50 public static Variable proxySessionVariable(ReadGraph graph, Variable variable) throws DatabaseException {
54 Variable child = variable.getParent(graph);
55 Variable parent = child.getParent(graph);
57 if(parent instanceof ProxyChildVariable) {
58 Variable var = ((ProxyChildVariable)parent).other();
59 if(var.getParent(graph) == null) {
64 Variable input = parent.getPossiblePropertyValue(graph, "session");
66 System.out.println("null input for: " + parent.getURI(graph));
70 } catch (Throwable t) {
77 public static Variable proxyVariableBase(ReadGraph graph, Variable variable) throws DatabaseException {
81 Variable parent = variable.getParent(graph);
82 if(parent == null) return null;
84 if(parent instanceof ProxyChildVariable) {
85 return ((ProxyChildVariable)parent).base();
87 return proxyVariableBase(graph, parent);
90 } catch (Throwable t) {
97 public static Variable proxyVariableInput(ReadGraph graph, Variable variable) throws DatabaseException {
99 if(variable instanceof ProxyChildVariable) {
100 Variable var = ((ProxyChildVariable)variable).other();
101 if(var.getParent(graph) == null) {
106 Variable parent = variable.getParent(graph);
107 if(parent == null) return null;
108 else return proxyVariableBase(graph, parent);
113 public static Variable proxyVariableRoot(ReadGraph graph, Variable variable) throws DatabaseException {
117 Variable parent = variable.getParent(graph);
118 if(parent == null) return null;
120 if(parent instanceof ProxyChildVariable) {
123 return proxyVariableRoot(graph, parent);
126 } catch (Throwable t) {
133 public static boolean isProxy(ReadGraph graph, Variable variable) throws DatabaseException {
134 return proxyVariableRoot(graph, variable) != null;