1 package org.simantics.modeling;
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;
13 public class ComponentTypeScriptRuntimeEnvironmentRequest extends ParametrizedPrimitiveRead<EnvironmentSpecification, RuntimeEnvironment> {
14 UpdateListener listener;
16 public ComponentTypeScriptRuntimeEnvironmentRequest(EnvironmentSpecification parameter) {
21 public void register(ReadGraph graph, Listener<RuntimeEnvironment> procedure) {
22 if(!procedure.isDisposed() && listener == null) {
23 listener = new UpdateListener() {
25 public void notifyAboutUpdate() {
26 createRuntimeEnvironment(graph, procedure, this);
30 createRuntimeEnvironment(graph, procedure, listener);
34 public void unregistered() {
36 listener.stopListening();
39 private void createRuntimeEnvironment(ReadGraph graph, Listener<RuntimeEnvironment> procedure, UpdateListener listener) {
40 SCLContext context = SCLContext.getCurrent();
41 Object oldGraph = context.put("graph", graph);
43 procedure.execute(SCLOsgi.MODULE_REPOSITORY.createRuntimeEnvironment(parameter, ComponentTypeScriptRuntimeEnvironmentRequest.class.getClassLoader(), listener));
45 catch (ImportFailureException e) {
46 procedure.exception(e);
49 context.put("graph", oldGraph);