1 package org.simantics.db.layer0.variable;
\r
3 import org.simantics.db.ReadGraph;
\r
4 import org.simantics.db.exception.DatabaseException;
\r
6 public class ProxyVariables {
\r
8 public static Variable inputVariable(ReadGraph graph, Variable context) throws DatabaseException {
\r
9 Variable session = graph.syncRequest(new ProxySessionRequest(context));
\r
10 if(session == null) return null;
\r
11 String uri = session.getPossiblePropertyValue(graph, "inputURI");
\r
13 // TODO HAXX - Please fix this
\r
14 // we have no URI so this probably means that someone has inserted a non-session
\r
15 // into the proxy variable => return that instead
\r
18 return Variables.getVariable(graph, uri);
\r
21 public static Variable sessionVariable(ReadGraph graph, Variable self) throws DatabaseException {
\r
22 return graph.syncRequest(new ProxySessionRequest(self));
\r
25 public static Variable makeProxyVariable(ReadGraph graph, Variable base, Variable input) throws DatabaseException {
\r
27 base = base.getChild(graph, ProxyChildVariable.CONTEXT_BEGIN);
\r
28 String path = input.getURI(graph).substring("http:/".length());
\r
29 base = base.browse(graph, path);
\r
30 return base.getChild(graph, ProxyChildVariable.CONTEXT_END);
\r
34 public static Variable proxySessionVariable(ReadGraph graph, Variable variable) throws DatabaseException {
\r
38 Variable child = variable.getParent(graph);
\r
39 Variable parent = child.getParent(graph);
\r
41 if(parent instanceof ProxyChildVariable) {
\r
42 Variable var = ((ProxyChildVariable)parent).other();
\r
43 if(var.getParent(graph) == null) {
\r
48 Variable input = parent.getPossiblePropertyValue(graph, "session");
\r
50 System.out.println("null input for: " + parent.getURI(graph));
\r
54 } catch (Throwable t) {
\r
55 t.printStackTrace();
\r
61 public static Variable proxyVariableBase(ReadGraph graph, Variable variable) throws DatabaseException {
\r
65 Variable parent = variable.getParent(graph);
\r
66 if(parent == null) return null;
\r
68 if(parent instanceof ProxyChildVariable) {
\r
69 return ((ProxyChildVariable)parent).base();
\r
71 return proxyVariableBase(graph, parent);
\r
74 } catch (Throwable t) {
\r
75 t.printStackTrace();
\r
81 public static Variable proxyVariableInput(ReadGraph graph, Variable variable) throws DatabaseException {
\r
83 if(variable instanceof ProxyChildVariable) {
\r
84 Variable var = ((ProxyChildVariable)variable).other();
\r
85 if(var.getParent(graph) == null) {
\r
90 Variable parent = variable.getParent(graph);
\r
91 if(parent == null) return null;
\r
92 else return proxyVariableBase(graph, parent);
\r
97 public static Variable proxyVariableRoot(ReadGraph graph, Variable variable) throws DatabaseException {
\r
101 Variable parent = variable.getParent(graph);
\r
102 if(parent == null) return null;
\r
104 if(parent instanceof ProxyChildVariable) {
\r
107 return proxyVariableRoot(graph, parent);
\r
110 } catch (Throwable t) {
\r
111 t.printStackTrace();
\r
117 public static boolean isProxy(ReadGraph graph, Variable variable) throws DatabaseException {
\r
118 return proxyVariableRoot(graph, variable) != null;
\r