package org.simantics.modeling;
-import java.util.ArrayList;
-
import org.simantics.db.ReadGraph;
import org.simantics.db.common.request.ParametrizedPrimitiveRead;
import org.simantics.db.procedure.Listener;
import org.simantics.scl.runtime.SCLContext;
public class ComponentTypeScriptRuntimeEnvironmentRequest extends ParametrizedPrimitiveRead<EnvironmentSpecification, RuntimeEnvironment> {
-
- // This array list is only needed to keep strong references to update listeners preventing their garbage collection.
- ArrayList<UpdateListener> listeners;
+ UpdateListener listener;
public ComponentTypeScriptRuntimeEnvironmentRequest(EnvironmentSpecification parameter) {
super(parameter);
@Override
public void register(ReadGraph graph, Listener<RuntimeEnvironment> procedure) {
- UpdateListener listener = null;
- if(!procedure.isDisposed()) {
+ if(!procedure.isDisposed() && listener == null) {
listener = new UpdateListener() {
@Override
public void notifyAboutUpdate() {
createRuntimeEnvironment(graph, procedure, this);
}
};
- if(listeners == null)
- listeners = new ArrayList<UpdateListener>(2);
- listeners.add(listener);
}
createRuntimeEnvironment(graph, procedure, listener);
}
+
+ @Override
+ public void unregistered() {
+ if(listener != null)
+ listener.stopListening();
+ }
private void createRuntimeEnvironment(ReadGraph graph, Listener<RuntimeEnvironment> procedure, UpdateListener listener) {
SCLContext context = SCLContext.getCurrent();