package org.simantics.db.common.request;
-import org.simantics.db.ExternalValue;
import org.simantics.db.ReadGraph;
import org.simantics.db.Resource;
import org.simantics.db.common.utils.Functions;
import org.simantics.db.exception.DatabaseException;
import org.simantics.db.exception.RuntimeDatabaseException;
import org.simantics.layer0.Layer0;
+import org.simantics.scl.reflection.ReflectionUtils;
+import org.simantics.scl.reflection.ValueNotFoundException;
import org.simantics.scl.runtime.function.FunctionImpl3;
/**
super(resource);
}
- public static final FunctionImpl3 functionApplication = new FunctionImpl3<ReadGraph,Resource,Object,Object>() {
+ private static final FunctionImpl3<ReadGraph,Resource,Object,Object> functionApplication = new FunctionImpl3<ReadGraph,Resource,Object,Object>() {
@Override
public Object apply(ReadGraph graph, Resource resource, Object context) {
@Override
public Object perform(ReadGraph graph) throws DatabaseException {
String uri = graph.getURI(resource);
- if(Layer0.URIs.Functions_functionApplication.equals(uri)) return functionApplication;
-
- ExternalValue ev = graph.adapt(resource, ExternalValue.class);
- return ev.getValue(graph, resource);
-
+ try {
+ if(Layer0.URIs.Functions_functionApplication.equals(uri)) return functionApplication;
+ return ReflectionUtils.getValue(uri).getValue();
+ } catch (ValueNotFoundException e) {
+ throw new DatabaseException("Couldn't adapt the value " + uri, e);
+ }
}
}