]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/SCLValueAccessor.java
Merge commit 'ad8333027322fda6b9a8a524c7a7e15a54c52f38'
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / variable / SCLValueAccessor.java
1 package org.simantics.db.layer0.variable;\r
2 \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
12 \r
13 public class SCLValueAccessor implements ValueAccessor {\r
14 \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
20         \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
29         }\r
30 \r
31         @Override\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
35         try {\r
36             return getValue1.apply(context);\r
37         } catch (Throwable t) {\r
38             throw new DatabaseException(t);\r
39         } finally {\r
40             sclContext.put("graph", oldGraph);\r
41         }\r
42         }\r
43 \r
44         @Override\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
48         try {\r
49             return getValue2.apply(context, binding);\r
50         } catch (Throwable t) {\r
51             throw new DatabaseException(t);\r
52         } finally {\r
53             sclContext.put("graph", oldGraph);\r
54         }\r
55         }\r
56 \r
57         @Override\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
61         try {\r
62             setValue2.apply(context, value);\r
63         } catch (Throwable t) {\r
64             throw new DatabaseException(t);\r
65         } finally {\r
66             sclContext.put("graph", oldGraph);\r
67         }\r
68         }\r
69 \r
70         @Override\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
74         try {\r
75             setValue3.apply(context, value, binding);\r
76         } catch (Throwable t) {\r
77             throw new DatabaseException(t);\r
78         } finally {\r
79             sclContext.put("graph", oldGraph);\r
80         }\r
81         }\r
82 \r
83         @Override\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
87         try {\r
88             return getDatatype.apply(context);\r
89         } catch (Throwable t) {\r
90             throw new DatabaseException(t);\r
91         } finally {\r
92             sclContext.put("graph", oldGraph);\r
93         }\r
94         }\r
95 \r
96 }\r