]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/LifeCycleProcesses.java
Merge commit 'd7afa23'
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / LifeCycleProcesses.java
1 package org.simantics.modeling;\r
2 \r
3 import java.util.HashSet;\r
4 import java.util.Set;\r
5 \r
6 import org.simantics.Simantics;\r
7 import org.simantics.db.ReadGraph;\r
8 import org.simantics.db.Resource;\r
9 import org.simantics.db.common.request.ReadRequest;\r
10 import org.simantics.db.exception.DatabaseException;\r
11 import org.simantics.db.layer0.util.Layer0Utils;\r
12 import org.simantics.db.layer0.variable.Variable;\r
13 import org.simantics.db.layer0.variable.Variables;\r
14 import org.simantics.project.exception.ProjectException;\r
15 import org.simantics.project.features.AbstractProjectFeature;\r
16 import org.simantics.scl.runtime.function.Function1;\r
17 import org.simantics.scl.runtime.tuple.Tuple0;\r
18 \r
19 public class LifeCycleProcesses extends AbstractProjectFeature {\r
20         \r
21         Set<LifeCycleContext> contexts = new HashSet<LifeCycleContext>();\r
22 \r
23         @Override\r
24         public void configure() throws ProjectException {\r
25 \r
26                 try {\r
27 \r
28                         Simantics.getSession().syncRequest(new ReadRequest() {\r
29 \r
30                                 @Override\r
31                                 public void run(ReadGraph graph) throws DatabaseException {\r
32 \r
33                                         ModelingResources MOD = ModelingResources.getInstance(graph);\r
34                                         for(Resource indexRoot : Layer0Utils.listIndexRoots(graph)) {\r
35                                                 for(Resource lcp : ModelingUtils.searchByTypeShallow(graph, indexRoot, MOD.LifeCycleProcess)) {\r
36                                                         \r
37 //                                                      System.err.println("Loading life cycle process " + graph.getURI(lcp));\r
38                                                         Function1<LifeCycleContext,Tuple0> load = null; \r
39                                                         Function1<LifeCycleContext,Tuple0> unload = null;\r
40                                                 Variable loadProperty = Variables.tryGetProperty(graph, lcp, MOD.LifeCycleProcess_load);\r
41                                                 if (loadProperty != null) {\r
42                                                     load = loadProperty.getPossibleValue(graph);\r
43                                                 }\r
44                                                 Variable unloadProperty = Variables.tryGetProperty(graph, lcp, MOD.LifeCycleProcess_unload);\r
45                                                 if (unloadProperty != null) {\r
46                                                     unload = unloadProperty.getPossibleValue(graph);\r
47                                                 }\r
48 \r
49                                                         LifeCycleContext lcc = new LifeCycleContext(lcp, load, unload);\r
50                                                         contexts.add(lcc);\r
51                                                         \r
52                                                 }\r
53                                         }\r
54                                         \r
55                                 }\r
56                                 \r
57                         });\r
58                         \r
59                 } catch (DatabaseException e) {\r
60                         \r
61                         throw new ProjectException(e);\r
62                         \r
63                 }\r
64                 \r
65                 for(LifeCycleContext context : contexts) {\r
66                         context.load();\r
67                 }\r
68                 \r
69         }\r
70 \r
71         @Override\r
72         public void deconfigure() throws ProjectException {\r
73 \r
74                 for(LifeCycleContext context : contexts) {\r
75                         context.unload();\r
76                 }\r
77 \r
78         }\r
79         \r
80 }\r