]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.common/src/org/simantics/db/common/request/AdaptValue.java
b3eba37fbdb4a0e395a90ea75c21a82abd1ad089
[simantics/platform.git] / bundles / org.simantics.db.common / src / org / simantics / db / common / request / AdaptValue.java
1 package org.simantics.db.common.request;
2
3 import org.simantics.db.ComputationalValue;
4 import org.simantics.db.ReadGraph;
5 import org.simantics.db.Resource;
6 import org.simantics.db.common.utils.Functions;
7 import org.simantics.db.exception.DatabaseException;
8 import org.simantics.db.exception.RuntimeDatabaseException;
9 import org.simantics.layer0.Layer0;
10 import org.simantics.scl.runtime.function.FunctionImpl3;
11
12 /**
13  * Adapts a resource to (SCL) value.
14  * @author Hannu Niemistö
15  */
16 public class AdaptValue extends ResourceRead<Object> {
17     
18     public AdaptValue(Resource resource) {
19         super(resource);
20     }
21
22     public static final FunctionImpl3<ReadGraph,Resource,Object,Object> functionApplication = new FunctionImpl3<ReadGraph,Resource,Object,Object>() {
23
24                 @Override
25                 public Object apply(ReadGraph graph, Resource resource, Object context) {
26                         try {
27                                 return Functions.exec(graph, resource, graph, resource, context);
28                         } catch (DatabaseException e) {
29                                 throw new RuntimeDatabaseException(e);
30                         }
31                 }
32
33         };
34     
35     @Override
36     public Object perform(ReadGraph graph) throws DatabaseException {
37         String uri = graph.getURI(resource);        
38         if(Layer0.URIs.Functions_functionApplication.equals(uri)) return functionApplication;
39         ComputationalValue ev = graph.adapt(resource, ComputationalValue.class);
40         return ev.getValue(graph, resource);
41
42     }
43
44 }