]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/ProxyVariables.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / variable / ProxyVariables.java
diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/ProxyVariables.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/ProxyVariables.java
new file mode 100644 (file)
index 0000000..2950d4a
--- /dev/null
@@ -0,0 +1,122 @@
+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