1 package org.simantics.db.common.request;
\r
3 import org.simantics.db.ReadGraph;
\r
4 import org.simantics.db.Resource;
\r
5 import org.simantics.db.common.utils.Functions;
\r
6 import org.simantics.db.exception.DatabaseException;
\r
7 import org.simantics.db.exception.RuntimeDatabaseException;
\r
8 import org.simantics.layer0.Layer0;
\r
9 import org.simantics.scl.reflection.ReflectionUtils;
\r
10 import org.simantics.scl.reflection.ValueNotFoundException;
\r
11 import org.simantics.scl.runtime.function.FunctionImpl3;
\r
14 * Adapts a resource to (SCL) value.
\r
15 * @author Hannu Niemistö
\r
17 public class AdaptValue extends ResourceRead<Object> {
\r
19 public AdaptValue(Resource resource) {
\r
23 private static final FunctionImpl3<ReadGraph,Resource,Object,Object> functionApplication = new FunctionImpl3<ReadGraph,Resource,Object,Object>() {
\r
26 public Object apply(ReadGraph graph, Resource resource, Object context) {
\r
28 return Functions.exec(graph, resource, graph, resource, context);
\r
29 } catch (DatabaseException e) {
\r
30 throw new RuntimeDatabaseException(e);
\r
37 public Object perform(ReadGraph graph) throws DatabaseException {
\r
38 String uri = graph.getURI(resource);
\r
40 if(Layer0.URIs.Functions_functionApplication.equals(uri)) return functionApplication;
\r
41 return ReflectionUtils.getValue(uri).getValue();
\r
42 } catch (ValueNotFoundException e) {
\r
43 throw new DatabaseException("Couldn't adapt the value " + uri, e);
\r