]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/ProxyVariables.java
Merge commit 'ad8333027322fda6b9a8a524c7a7e15a54c52f38'
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / variable / ProxyVariables.java
1 package org.simantics.db.layer0.variable;\r
2 \r
3 import org.simantics.db.ReadGraph;\r
4 import org.simantics.db.exception.DatabaseException;\r
5 \r
6 public class ProxyVariables {\r
7         \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
12         if(uri == null) {\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
16                 return session;\r
17         }\r
18         return Variables.getVariable(graph, uri);\r
19         }\r
20 \r
21         public static Variable sessionVariable(ReadGraph graph, Variable self) throws DatabaseException {\r
22                 return graph.syncRequest(new ProxySessionRequest(self));\r
23         }\r
24 \r
25         public static Variable makeProxyVariable(ReadGraph graph, Variable base, Variable input) throws DatabaseException {\r
26                 \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
31         \r
32         }\r
33         \r
34     public static Variable proxySessionVariable(ReadGraph graph, Variable variable) throws DatabaseException {\r
35         \r
36         try {\r
37                 \r
38                 Variable child = variable.getParent(graph);\r
39                 Variable parent = child.getParent(graph);\r
40 \r
41                 if(parent instanceof ProxyChildVariable) {\r
42                         Variable var = ((ProxyChildVariable)parent).other();\r
43                         if(var.getParent(graph) == null) {\r
44                                 return null;\r
45                         }\r
46                         return var;\r
47                 } else {\r
48                         Variable input = parent.getPossiblePropertyValue(graph, "session");\r
49                         if(input == null) {\r
50                             System.out.println("null input for: " + parent.getURI(graph));\r
51                         }\r
52                         return input;\r
53                 }\r
54         } catch (Throwable t) {\r
55             t.printStackTrace();\r
56             return null;\r
57         }\r
58 \r
59     }\r
60 \r
61     public static Variable proxyVariableBase(ReadGraph graph, Variable variable) throws DatabaseException {\r
62         \r
63         try {\r
64                 \r
65                 Variable parent = variable.getParent(graph);\r
66                 if(parent == null) return null;\r
67                 \r
68                 if(parent instanceof ProxyChildVariable) {\r
69                         return ((ProxyChildVariable)parent).base();\r
70                 } else {\r
71                         return proxyVariableBase(graph, parent);\r
72                 }\r
73                 \r
74         } catch (Throwable t) {\r
75             t.printStackTrace();\r
76             return null;\r
77         }\r
78 \r
79     }\r
80 \r
81     public static Variable proxyVariableInput(ReadGraph graph, Variable variable) throws DatabaseException {\r
82 \r
83                 if(variable instanceof ProxyChildVariable) {\r
84                         Variable var = ((ProxyChildVariable)variable).other();\r
85                         if(var.getParent(graph) == null) {\r
86                                 return null;\r
87                         }\r
88                         return var;\r
89                 } else {\r
90                         Variable parent = variable.getParent(graph);\r
91                         if(parent == null) return null;\r
92                         else return proxyVariableBase(graph, parent);\r
93                 }\r
94         \r
95     }\r
96     \r
97     public static Variable proxyVariableRoot(ReadGraph graph, Variable variable) throws DatabaseException {\r
98         \r
99         try {\r
100                 \r
101                 Variable parent = variable.getParent(graph);\r
102                 if(parent == null) return null;\r
103                 \r
104                 if(parent instanceof ProxyChildVariable) {\r
105                         return variable;\r
106                 } else {\r
107                         return proxyVariableRoot(graph, parent);\r
108                 }\r
109                 \r
110         } catch (Throwable t) {\r
111             t.printStackTrace();\r
112             return null;\r
113         }\r
114 \r
115     }\r
116 \r
117     public static boolean isProxy(ReadGraph graph, Variable variable) throws DatabaseException {\r
118         return proxyVariableRoot(graph, variable) != null;\r
119     }\r
120 \r
121     \r
122 }\r