]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/scl/CompileSCLValueRequest.java
Added some enforcement of immutability to structural user component UI's.
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / scl / CompileSCLValueRequest.java
1 package org.simantics.modeling.scl;\r
2 \r
3 import org.simantics.db.ReadGraph;\r
4 import org.simantics.db.common.procedure.adapter.TransientCacheListener;\r
5 import org.simantics.db.exception.DatabaseException;\r
6 import org.simantics.db.layer0.variable.Variable;\r
7 import org.simantics.scl.runtime.SCLContext;\r
8 import org.simantics.scl.runtime.function.Function1;\r
9 import org.simantics.structural2.scl.CompileStructuralValueRequest;\r
10 \r
11 public class CompileSCLValueRequest extends CompileStructuralValueRequest {\r
12 \r
13     public CompileSCLValueRequest(ReadGraph graph, Variable context)\r
14             throws DatabaseException {\r
15         super(graph, context);\r
16     }\r
17 \r
18     public static Object compileAndEvaluate(ReadGraph graph, Variable context) throws DatabaseException {\r
19         SCLContext sclContext = SCLContext.getCurrent();\r
20         Object oldGraph = sclContext.get("graph");\r
21         try {\r
22             Function1<Variable,Object> exp = graph.syncRequest(new CompileSCLValueRequest(graph, context),\r
23                     TransientCacheListener.<Function1<Variable,Object>>instance());\r
24             sclContext.put("graph", graph);\r
25             return exp.apply(context);\r
26         } catch (DatabaseException e) {\r
27             throw (DatabaseException)e;\r
28         } catch (Throwable t) {\r
29             throw new DatabaseException(t);\r
30         } finally {\r
31             sclContext.put("graph", oldGraph);\r
32         }\r
33     }\r
34     \r
35 }\r