1 package org.simantics.db.layer0.variable;
\r
3 import org.simantics.databoard.binding.Binding;
\r
4 import org.simantics.databoard.type.Datatype;
\r
5 import org.simantics.db.ReadGraph;
\r
6 import org.simantics.db.WriteGraph;
\r
7 import org.simantics.db.exception.DatabaseException;
\r
8 import org.simantics.scl.runtime.SCLContext;
\r
9 import org.simantics.scl.runtime.function.Function1;
\r
10 import org.simantics.scl.runtime.function.Function2;
\r
11 import org.simantics.scl.runtime.function.Function3;
\r
13 public class SCLValueAccessor implements ValueAccessor {
\r
15 private final Function1<Variable,Object> getValue1;
\r
16 private final Function2<Variable,Binding,Object> getValue2;
\r
17 private final Function2<Variable,Object,Object> setValue2;
\r
18 private final Function3<Variable,Object,Binding,Object> setValue3;
\r
19 private final Function1<Variable,Datatype> getDatatype;
\r
21 public SCLValueAccessor(Function1<Variable, Object> getValue1, Function2<Variable, Binding, Object> getValue2,
\r
22 Function2<Variable, Object, Object> setValue2, Function3<Variable, Object, Binding, Object> setValue3,
\r
23 Function1<Variable, Datatype> getDatatype) {
\r
24 this.getValue1 = getValue1;
\r
25 this.getValue2 = getValue2;
\r
26 this.setValue2 = setValue2;
\r
27 this.setValue3 = setValue3;
\r
28 this.getDatatype = getDatatype;
\r
32 public Object getValue(ReadGraph graph, Variable context) throws DatabaseException {
\r
33 SCLContext sclContext = SCLContext.getCurrent();
\r
34 Object oldGraph = sclContext.put("graph", graph);
\r
36 return getValue1.apply(context);
\r
37 } catch (Throwable t) {
\r
38 throw new DatabaseException(t);
\r
40 sclContext.put("graph", oldGraph);
\r
45 public Object getValue(ReadGraph graph, Variable context, Binding binding) throws DatabaseException {
\r
46 SCLContext sclContext = SCLContext.getCurrent();
\r
47 Object oldGraph = sclContext.put("graph", graph);
\r
49 return getValue2.apply(context, binding);
\r
50 } catch (Throwable t) {
\r
51 throw new DatabaseException(t);
\r
53 sclContext.put("graph", oldGraph);
\r
58 public void setValue(WriteGraph graph, Variable context, Object value) throws DatabaseException {
\r
59 SCLContext sclContext = SCLContext.getCurrent();
\r
60 Object oldGraph = sclContext.put("graph", graph);
\r
62 setValue2.apply(context, value);
\r
63 } catch (Throwable t) {
\r
64 throw new DatabaseException(t);
\r
66 sclContext.put("graph", oldGraph);
\r
71 public void setValue(WriteGraph graph, Variable context, Object value, Binding binding) throws DatabaseException {
\r
72 SCLContext sclContext = SCLContext.getCurrent();
\r
73 Object oldGraph = sclContext.put("graph", graph);
\r
75 setValue3.apply(context, value, binding);
\r
76 } catch (Throwable t) {
\r
77 throw new DatabaseException(t);
\r
79 sclContext.put("graph", oldGraph);
\r
84 public Datatype getDatatype(ReadGraph graph, Variable context) throws DatabaseException {
\r
85 SCLContext sclContext = SCLContext.getCurrent();
\r
86 Object oldGraph = sclContext.put("graph", graph);
\r
88 return getDatatype.apply(context);
\r
89 } catch (Throwable t) {
\r
90 throw new DatabaseException(t);
\r
92 sclContext.put("graph", oldGraph);
\r