package org.simantics.db.layer0.scl;
-import gnu.trove.map.hash.THashMap;
-
import java.util.ArrayList;
import java.util.List;
+import org.simantics.databoard.Bindings;
import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
import org.simantics.db.exception.DatabaseException;
import org.simantics.db.exception.RuntimeDatabaseException;
import org.simantics.db.request.Read;
+import org.simantics.layer0.Layer0;
import org.simantics.scl.compiler.common.names.Name;
import org.simantics.scl.compiler.constants.StringConstant;
import org.simantics.scl.compiler.elaboration.expressions.EApply;
import org.simantics.scl.runtime.SCLContext;
import org.simantics.scl.runtime.function.Function1;
import org.simantics.utils.datastructures.Pair;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import gnu.trove.map.hash.THashMap;
/**
* <p>This is a base implementation for compiling expressions stored into
public abstract class AbstractExpressionCompilationRequest<CompilationContext extends AbstractExpressionCompilationContext,EvaluationContext>
implements Read<Function1<EvaluationContext,Object>> {
+ private static final Logger LOGGER = LoggerFactory.getLogger(AbstractExpressionCompilationRequest.class);
+
protected static final Type RESOURCE = Types.con("Simantics/DB", "Resource");
protected static final Type VARIABLE = Types.con("Simantics/Variables", "Variable");
protected static Name PROPERTY_VALUE = Name.create("Simantics/Variables", "propertyValue");
return false;
}
+ @SuppressWarnings("unchecked")
private Function1<EvaluationContext, Object> eval(ExpressionEvaluator evaluator, ReadGraph graph) throws DatabaseException {
Object oldGraph = SCLContext.getCurrent().put("graph", graph);
try {
return (Function1<EvaluationContext,Object>)evaluator.eval();
} catch(RuntimeDatabaseException e) {
- e.printStackTrace();
+ LOGGER.error("Failed to evaluate SCL expression", e);
if(e.getCause() instanceof DatabaseException)
throw (DatabaseException)e.getCause();
else
throw new SCLDatabaseException(b.toString()+b2.toString(), b2.toString(), e.getErrors());
} catch(Throwable e) {
// Should not happen!
- e.printStackTrace();
+ LOGGER.error("This error should never happen", e);
throw new RuntimeException(e);
} finally {
SCLContext.getCurrent().put("graph", oldGraph);
return concreteEffects;
} catch(MatchException e) {
// Should not happen!
- e.printStackTrace();
+ LOGGER.error("Failed to get expression effects", e);
throw new RuntimeException(e);
}
}
- @SuppressWarnings("unchecked")
@Override
public Function1<EvaluationContext,Object> perform(final ReadGraph graph) throws DatabaseException {
CompilationContext context = getCompilationContext(graph);
else
return base;
}
+
+ protected static String resolveExpectedValueType(ReadGraph graph, Resource predicate) throws DatabaseException {
+ Layer0 L0 = Layer0.getInstance(graph);
+ return graph.getPossibleRelatedValue(predicate, L0.RequiresValueType, Bindings.STRING);
+ }
+
}