]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/scl/CompileValueRequest.java
Fix errors with procedural user components for computational values
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / scl / CompileValueRequest.java
index e1804d790fc327c6713cc5e7bdf41b78b84c8b91..11f3ad1854b29e28dbc9724a7149d489b508e310 100644 (file)
@@ -25,7 +25,7 @@ import org.simantics.scl.runtime.function.Function1;
  * 
  * @author Tuukka Lehtonen
  */
-public class CompileValueRequest extends AbstractExpressionCompilationRequest<CompilationContext, Variable> {
+public class CompileValueRequest extends AbstractExpressionCompilationRequest<CompilationContext, Object> {
 
     public static class CompilationContext extends AbstractExpressionCompilationContext {
         public CompilationContext(RuntimeEnvironment runtimeEnvironment) {
@@ -34,27 +34,23 @@ public class CompileValueRequest extends AbstractExpressionCompilationRequest<Co
     }
 
     protected final Resource relation;
-    protected final Resource component;
     protected final Resource literal;
 
-    public CompileValueRequest(Resource component, Resource literal, Resource relation) {
+    public CompileValueRequest(Resource literal, Resource relation) {
         this.relation = relation;
-        this.component = component;
         this.literal = literal;
     }
 
     public CompileValueRequest(ReadGraph graph, Variable context) throws DatabaseException {
-        this(context.getParent(graph).getRepresents(graph),
-                context.getRepresents(graph),
-                context.getPredicateResource(graph));
+        this(context.getRepresents(graph), context.getPredicateResource(graph));
     }
 
     public static Object compileAndEvaluate(ReadGraph graph, Variable context) throws DatabaseException {
         SCLContext sclContext = SCLContext.getCurrent();
         Object oldGraph = sclContext.get("graph");
         try {
-            Function1<Variable,Object> exp = graph.syncRequest(new CompileValueRequest(graph, context),
-                    TransientCacheListener.<Function1<Variable,Object>>instance());
+            Function1<Object,Object> exp = graph.syncRequest(new CompileValueRequest(graph, context),
+                    TransientCacheListener.instance());
             sclContext.put("graph", graph);
             return exp.apply(context);
         } catch (DatabaseException e) {
@@ -66,6 +62,22 @@ public class CompileValueRequest extends AbstractExpressionCompilationRequest<Co
         }
     }
 
+    public static Function1<Object,Object> compile(ReadGraph graph, Resource literal, Resource predicate) throws DatabaseException {
+        SCLContext sclContext = SCLContext.getCurrent();
+        Object oldGraph = sclContext.get("graph");
+        try {
+            Function1<Object,Object> exp = graph.syncRequest(new CompileValueRequest(literal, predicate), TransientCacheListener.instance());
+            sclContext.put("graph", graph);
+            return exp;
+        } catch (DatabaseException e) {
+            throw (DatabaseException)e;
+        } catch (Throwable t) {
+            throw new DatabaseException(t);
+        } finally {
+            sclContext.put("graph", oldGraph);
+        }
+    }
+
     @Override
     protected String getExpressionText(ReadGraph graph)
             throws DatabaseException {