-package org.simantics.modeling;\r
-\r
-import java.util.HashSet;\r
-import java.util.Set;\r
-\r
-import org.simantics.Simantics;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.common.request.ReadRequest;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.util.Layer0Utils;\r
-import org.simantics.db.layer0.variable.Variable;\r
-import org.simantics.db.layer0.variable.Variables;\r
-import org.simantics.project.exception.ProjectException;\r
-import org.simantics.project.features.AbstractProjectFeature;\r
-import org.simantics.scl.runtime.function.Function1;\r
-import org.simantics.scl.runtime.tuple.Tuple0;\r
-\r
-public class LifeCycleProcesses extends AbstractProjectFeature {\r
- \r
- Set<LifeCycleContext> contexts = new HashSet<LifeCycleContext>();\r
-\r
- @Override\r
- public void configure() throws ProjectException {\r
-\r
- try {\r
-\r
- Simantics.getSession().syncRequest(new ReadRequest() {\r
-\r
- @Override\r
- public void run(ReadGraph graph) throws DatabaseException {\r
-\r
- ModelingResources MOD = ModelingResources.getInstance(graph);\r
- for(Resource indexRoot : Layer0Utils.listIndexRoots(graph)) {\r
- for(Resource lcp : ModelingUtils.searchByTypeShallow(graph, indexRoot, MOD.LifeCycleProcess)) {\r
- \r
-// System.err.println("Loading life cycle process " + graph.getURI(lcp));\r
- Function1<LifeCycleContext,Tuple0> load = null; \r
- Function1<LifeCycleContext,Tuple0> unload = null;\r
- Variable loadProperty = Variables.tryGetProperty(graph, lcp, MOD.LifeCycleProcess_load);\r
- if (loadProperty != null) {\r
- load = loadProperty.getPossibleValue(graph);\r
- }\r
- Variable unloadProperty = Variables.tryGetProperty(graph, lcp, MOD.LifeCycleProcess_unload);\r
- if (unloadProperty != null) {\r
- unload = unloadProperty.getPossibleValue(graph);\r
- }\r
-\r
- LifeCycleContext lcc = new LifeCycleContext(lcp, load, unload);\r
- contexts.add(lcc);\r
- \r
- }\r
- }\r
- \r
- }\r
- \r
- });\r
- \r
- } catch (DatabaseException e) {\r
- \r
- throw new ProjectException(e);\r
- \r
- }\r
- \r
- for(LifeCycleContext context : contexts) {\r
- context.load();\r
- }\r
- \r
- }\r
-\r
- @Override\r
- public void deconfigure() throws ProjectException {\r
-\r
- for(LifeCycleContext context : contexts) {\r
- context.unload();\r
- }\r
-\r
- }\r
- \r
-}\r
+package org.simantics.modeling;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.simantics.Simantics;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.QueryIndexUtils;
+import org.simantics.db.layer0.util.Layer0Utils;
+import org.simantics.db.layer0.variable.Variable;
+import org.simantics.db.layer0.variable.Variables;
+import org.simantics.db.request.Read;
+import org.simantics.project.exception.ProjectException;
+import org.simantics.project.features.AbstractProjectFeature;
+import org.simantics.scl.runtime.function.Function1;
+import org.simantics.scl.runtime.tuple.Tuple0;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class LifeCycleProcesses extends AbstractProjectFeature {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(LifeCycleProcesses.class);
+
+ Set<LifeCycleContext> contexts = Collections.emptySet();
+
+ @Override
+ public void configure() throws ProjectException {
+ try {
+ this.contexts = Simantics.getSession().syncRequest(new Read<Set<LifeCycleContext>>() {
+
+ @Override
+ public Set<LifeCycleContext> perform(ReadGraph graph) throws DatabaseException {
+ Set<LifeCycleContext> contexts = new HashSet<>();
+
+ ModelingResources MOD = ModelingResources.getInstance(graph);
+ for(Resource indexRoot : Layer0Utils.listIndexRoots(graph)) {
+ for(Resource lcp : QueryIndexUtils.searchByTypeShallow(graph, indexRoot, MOD.LifeCycleProcess)) {
+
+ LOGGER.trace("Loading life cycle process " + graph.getURI(lcp));
+ Function1<LifeCycleContext,Tuple0> load = null;
+ Function1<LifeCycleContext,Tuple0> unload = null;
+ Variable loadProperty = Variables.tryGetProperty(graph, lcp, MOD.LifeCycleProcess_load);
+ if (loadProperty != null) {
+ load = loadProperty.getPossibleValue(graph);
+ }
+ Variable unloadProperty = Variables.tryGetProperty(graph, lcp, MOD.LifeCycleProcess_unload);
+ if (unloadProperty != null) {
+ unload = unloadProperty.getPossibleValue(graph);
+ }
+
+ LifeCycleContext lcc = new LifeCycleContext(lcp, load, unload);
+ contexts.add(lcc);
+
+ }
+ }
+
+ return contexts;
+ }
+ });
+
+ contexts.forEach(LifeCycleContext::load);
+
+ } catch (DatabaseException e) {
+ throw new ProjectException(e);
+ }
+ }
+
+ @Override
+ public void deconfigure() throws ProjectException {
+ contexts.forEach(LifeCycleContext::unload);
+ }
+
+}