--- /dev/null
+package org.simantics.db.layer0.variable;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.exception.DatabaseException;\r
+\r
+public class ProxyVariables {\r
+ \r
+ public static Variable inputVariable(ReadGraph graph, Variable context) throws DatabaseException {\r
+ Variable session = graph.syncRequest(new ProxySessionRequest(context));\r
+ if(session == null) return null;\r
+ String uri = session.getPossiblePropertyValue(graph, "inputURI");\r
+ if(uri == null) {\r
+ // TODO HAXX - Please fix this\r
+ // we have no URI so this probably means that someone has inserted a non-session \r
+ // into the proxy variable => return that instead\r
+ return session;\r
+ }\r
+ return Variables.getVariable(graph, uri);\r
+ }\r
+\r
+ public static Variable sessionVariable(ReadGraph graph, Variable self) throws DatabaseException {\r
+ return graph.syncRequest(new ProxySessionRequest(self));\r
+ }\r
+\r
+ public static Variable makeProxyVariable(ReadGraph graph, Variable base, Variable input) throws DatabaseException {\r
+ \r
+ base = base.getChild(graph, ProxyChildVariable.CONTEXT_BEGIN);\r
+ String path = input.getURI(graph).substring("http:/".length());\r
+ base = base.browse(graph, path);\r
+ return base.getChild(graph, ProxyChildVariable.CONTEXT_END);\r
+ \r
+ }\r
+ \r
+ public static Variable proxySessionVariable(ReadGraph graph, Variable variable) throws DatabaseException {\r
+ \r
+ try {\r
+ \r
+ Variable child = variable.getParent(graph);\r
+ Variable parent = child.getParent(graph);\r
+\r
+ if(parent instanceof ProxyChildVariable) {\r
+ Variable var = ((ProxyChildVariable)parent).other();\r
+ if(var.getParent(graph) == null) {\r
+ return null;\r
+ }\r
+ return var;\r
+ } else {\r
+ Variable input = parent.getPossiblePropertyValue(graph, "session");\r
+ if(input == null) {\r
+ System.out.println("null input for: " + parent.getURI(graph));\r
+ }\r
+ return input;\r
+ }\r
+ } catch (Throwable t) {\r
+ t.printStackTrace();\r
+ return null;\r
+ }\r
+\r
+ }\r
+\r
+ public static Variable proxyVariableBase(ReadGraph graph, Variable variable) throws DatabaseException {\r
+ \r
+ try {\r
+ \r
+ Variable parent = variable.getParent(graph);\r
+ if(parent == null) return null;\r
+ \r
+ if(parent instanceof ProxyChildVariable) {\r
+ return ((ProxyChildVariable)parent).base();\r
+ } else {\r
+ return proxyVariableBase(graph, parent);\r
+ }\r
+ \r
+ } catch (Throwable t) {\r
+ t.printStackTrace();\r
+ return null;\r
+ }\r
+\r
+ }\r
+\r
+ public static Variable proxyVariableInput(ReadGraph graph, Variable variable) throws DatabaseException {\r
+\r
+ if(variable instanceof ProxyChildVariable) {\r
+ Variable var = ((ProxyChildVariable)variable).other();\r
+ if(var.getParent(graph) == null) {\r
+ return null;\r
+ }\r
+ return var;\r
+ } else {\r
+ Variable parent = variable.getParent(graph);\r
+ if(parent == null) return null;\r
+ else return proxyVariableBase(graph, parent);\r
+ }\r
+ \r
+ }\r
+ \r
+ public static Variable proxyVariableRoot(ReadGraph graph, Variable variable) throws DatabaseException {\r
+ \r
+ try {\r
+ \r
+ Variable parent = variable.getParent(graph);\r
+ if(parent == null) return null;\r
+ \r
+ if(parent instanceof ProxyChildVariable) {\r
+ return variable;\r
+ } else {\r
+ return proxyVariableRoot(graph, parent);\r
+ }\r
+ \r
+ } catch (Throwable t) {\r
+ t.printStackTrace();\r
+ return null;\r
+ }\r
+\r
+ }\r
+\r
+ public static boolean isProxy(ReadGraph graph, Variable variable) throws DatabaseException {\r
+ return proxyVariableRoot(graph, variable) != null;\r
+ }\r
+\r
+ \r
+}\r