1 package org.simantics.db.layer0.variable;
3 import org.simantics.db.ReadGraph;
4 import org.simantics.db.exception.DatabaseException;
5 import org.slf4j.Logger;
6 import org.slf4j.LoggerFactory;
8 public class ProxyVariables {
10 private static final Logger LOGGER = LoggerFactory.getLogger(ProxyVariables.class);
12 public static Variable tryToOwn(ReadGraph graph, Variable parent, Variable variable) {
13 if (variable instanceof ProxyVariableSupport) {
14 ProxyVariableSupport pvs = (ProxyVariableSupport) variable;
15 return pvs.attachTo(graph, parent);
20 public static Variable tryToOwnRenamed(ReadGraph graph, Variable parent, Variable variable, String name) {
21 if (variable instanceof ProxyVariableSupport) {
22 ProxyVariableSupport pvs = (ProxyVariableSupport) variable;
23 return pvs.attachToRenamed(graph, parent, name);
28 public static Variable inputVariable(ReadGraph graph, Variable context) throws DatabaseException {
29 Variable session = graph.syncRequest(new ProxySessionRequest(context));
30 if(session == null) return null;
31 String uri = session.getPossiblePropertyValue(graph, "inputURI");
33 // TODO HAXX - Please fix this
34 // we have no URI so this probably means that someone has inserted a non-session
35 // into the proxy variable => return that instead
38 return Variables.getVariable(graph, uri);
41 public static Variable sessionVariable(ReadGraph graph, Variable self) throws DatabaseException {
42 return graph.syncRequest(new ProxySessionRequest(self));
45 public static Variable makeProxyVariable(ReadGraph graph, Variable base, Variable input) throws DatabaseException {
47 base = base.getChild(graph, ProxyChildVariable.CONTEXT_BEGIN);
48 String path = input.getURI(graph).substring("http:/".length());
49 base = base.browse(graph, path);
50 return base.getChild(graph, ProxyChildVariable.CONTEXT_END);
54 public static Variable proxySessionVariable(ReadGraph graph, Variable variable) throws DatabaseException {
57 return proxyVariableInput(graph, variable);
58 } catch (Throwable t) {
59 LOGGER.error("proxySessionVariable failed", t);
65 public static Variable proxyVariableBase(ReadGraph graph, Variable variable) throws DatabaseException {
69 Variable parent = variable.getParent(graph);
70 if(parent == null) return null;
72 if(parent instanceof ProxyChildVariable) {
73 return ((ProxyChildVariable)parent).base();
75 return proxyVariableBase(graph, parent);
78 } catch (Throwable t) {
79 LOGGER.error("proxyVariableBase failed", t);
85 public static Variable proxyVariableInput(ReadGraph graph, Variable variable) throws DatabaseException {
87 if(variable instanceof ProxyChildVariable) {
88 Variable var = ((ProxyChildVariable)variable).other();
89 if(var.getParent(graph) == null) {
94 Variable parent = variable.getParent(graph);
95 if(parent == null) return null;
96 else return proxyVariableInput(graph, parent);
101 public static Variable proxyVariableRoot(ReadGraph graph, Variable variable) throws DatabaseException {
105 Variable parent = variable.getParent(graph);
106 if(parent == null) return null;
108 if(parent instanceof ProxyChildVariable) {
111 return proxyVariableRoot(graph, parent);
114 } catch (Throwable t) {
115 LOGGER.error("proxyVariableRoot failed", t);
121 public static boolean isProxy(ReadGraph graph, Variable variable) throws DatabaseException {
122 return proxyVariableRoot(graph, variable) != null;