]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/SCLAction.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / SCLAction.java
1 package org.simantics.modeling;\r
2 \r
3 import org.simantics.Simantics;\r
4 import org.simantics.db.ReadGraph;\r
5 import org.simantics.db.Resource;\r
6 import org.simantics.db.common.request.ResourceRead;\r
7 import org.simantics.db.exception.DatabaseException;\r
8 import org.simantics.db.layer0.adapter.ActionFactory;\r
9 import org.simantics.db.layer0.variable.Variable;\r
10 import org.simantics.db.layer0.variable.Variables;\r
11 import org.simantics.diagram.Logger;\r
12 import org.simantics.scl.runtime.function.Function1;\r
13 \r
14 public class SCLAction implements ActionFactory {\r
15 \r
16         final private Resource rule;\r
17     \r
18     public SCLAction(ReadGraph graph, Resource rule) throws DatabaseException {\r
19         this.rule = rule;\r
20     }\r
21     \r
22     static class RuleFunctionRequest extends ResourceRead<Function1<Resource,Object>> {\r
23 \r
24                 protected RuleFunctionRequest(Resource rule) {\r
25                         super(rule);\r
26                 }\r
27 \r
28                 @Override\r
29                 public Function1<Resource, Object> perform(ReadGraph graph) throws DatabaseException {\r
30                 Variable ruleVariable = Variables.getVariable(graph, resource);\r
31                 ModelingResources MOD = ModelingResources.getInstance(graph);\r
32                 return ruleVariable.getPossiblePropertyValue(graph, MOD.SCLAction_action);\r
33                 }\r
34         \r
35     }\r
36     \r
37     public static class SCLActionRunnable implements Runnable {\r
38         \r
39         public Resource rule;\r
40         public Resource target;\r
41         \r
42         public SCLActionRunnable(Resource rule, Resource target) {\r
43                 this.rule = rule;\r
44                 this.target = target;\r
45         }\r
46         \r
47                 @Override\r
48                 public void run() {\r
49                         Resource resource = (Resource)target;\r
50                         Simantics.getSession().markUndoPoint();\r
51                         try {\r
52                                 Function1<Resource, Object> function = Simantics.getSession().syncRequest(new RuleFunctionRequest(rule));\r
53                                 function.apply(resource);\r
54                         } catch (DatabaseException e) {\r
55                                 Logger.defaultLogError(e);\r
56                         }\r
57                 }\r
58         \r
59     }\r
60 \r
61         @Override\r
62         public Runnable create(final Object target) {\r
63                 return new SCLActionRunnable(rule, (Resource)target);\r
64         }\r
65 \r
66 }\r