]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/ComponentTypeScriptRuntimeEnvironmentRequest.java
Add utility class org.simantics.modeling.help.HelpContexts
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / ComponentTypeScriptRuntimeEnvironmentRequest.java
1 package org.simantics.modeling;
2
3 import org.simantics.db.ReadGraph;
4 import org.simantics.db.common.request.ParametrizedPrimitiveRead;
5 import org.simantics.db.procedure.Listener;
6 import org.simantics.scl.compiler.environment.specification.EnvironmentSpecification;
7 import org.simantics.scl.compiler.module.repository.ImportFailureException;
8 import org.simantics.scl.compiler.module.repository.UpdateListener;
9 import org.simantics.scl.compiler.runtime.RuntimeEnvironment;
10 import org.simantics.scl.osgi.SCLOsgi;
11 import org.simantics.scl.runtime.SCLContext;
12
13 public class ComponentTypeScriptRuntimeEnvironmentRequest extends ParametrizedPrimitiveRead<EnvironmentSpecification, RuntimeEnvironment> {
14     UpdateListener listener;
15     
16     public ComponentTypeScriptRuntimeEnvironmentRequest(EnvironmentSpecification parameter) {
17         super(parameter);
18     }
19
20     @Override
21     public void register(ReadGraph graph, Listener<RuntimeEnvironment> procedure) {
22         if(!procedure.isDisposed() && listener == null) {
23             listener = new UpdateListener() {
24                 @Override
25                 public void notifyAboutUpdate() {
26                     createRuntimeEnvironment(graph, procedure, this);
27                 }
28             };
29         }
30         createRuntimeEnvironment(graph, procedure, listener);
31     }
32
33     @Override
34     public void unregistered() {
35         if(listener != null)
36             listener.stopListening();
37     }
38     
39     private void createRuntimeEnvironment(ReadGraph graph, Listener<RuntimeEnvironment> procedure, UpdateListener listener) {
40         SCLContext context = SCLContext.getCurrent();
41         Object oldGraph = context.put("graph", graph);
42         try {
43             procedure.execute(SCLOsgi.MODULE_REPOSITORY.createRuntimeEnvironment(parameter, ComponentTypeScriptRuntimeEnvironmentRequest.class.getClassLoader(), listener));
44         }
45         catch (ImportFailureException e) {
46             procedure.exception(e);
47         }
48         finally {
49             context.put("graph", oldGraph);
50         }
51     }
52
53 }