]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.common/src/org/simantics/db/common/request/AdaptValue.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.common / src / org / simantics / db / common / request / AdaptValue.java
1 package org.simantics.db.common.request;\r
2 \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
12 \r
13 /**\r
14  * Adapts a resource to (SCL) value.\r
15  * @author Hannu Niemistö\r
16  */\r
17 public class AdaptValue extends ResourceRead<Object> {\r
18     \r
19     public AdaptValue(Resource resource) {\r
20         super(resource);\r
21     }\r
22 \r
23     private static final FunctionImpl3<ReadGraph,Resource,Object,Object> functionApplication = new FunctionImpl3<ReadGraph,Resource,Object,Object>() {\r
24 \r
25                 @Override\r
26                 public Object apply(ReadGraph graph, Resource resource, Object context) {\r
27                         try {\r
28                                 return Functions.exec(graph, resource, graph, resource, context);\r
29                         } catch (DatabaseException e) {\r
30                                 throw new RuntimeDatabaseException(e);\r
31                         }\r
32                 }\r
33 \r
34         };\r
35     \r
36     @Override\r
37     public Object perform(ReadGraph graph) throws DatabaseException {\r
38         String uri = graph.getURI(resource);        \r
39         try {\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
44         }\r
45     }\r
46 \r
47 }\r