X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.modeling%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fscl%2FSCLSessionManager.java;h=af036026b7b90a25829366d41f9a5929cd645d80;hp=8572dff386cfb877e450948a3f24fd23beadc7b0;hb=82ed7c74dbd83a2a557e781b8674b3262b52da54;hpb=969bd23cab98a79ca9101af33334000879fb60c5 diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/scl/SCLSessionManager.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/scl/SCLSessionManager.java index 8572dff38..af036026b 100644 --- a/bundles/org.simantics.modeling/src/org/simantics/modeling/scl/SCLSessionManager.java +++ b/bundles/org.simantics.modeling/src/org/simantics/modeling/scl/SCLSessionManager.java @@ -1,58 +1,62 @@ -package org.simantics.modeling.scl; - -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -import org.simantics.db.layer0.variable.NodeSupport; -import org.simantics.scl.compiler.commands.CommandSession; -import org.simantics.scl.osgi.SCLOsgi; -import org.simantics.scl.runtime.reporting.SCLReportingHandler; - -public class SCLSessionManager { - static ConcurrentHashMap CONNECTIONS = - new ConcurrentHashMap(); - - static ConcurrentHashMap> SUPPORTS = - new ConcurrentHashMap>(); - - public static SCLRealm sclRealmById(String id) { - // CONNECTIONS is ConcurrentHashMap so no synchronization is needed here - return CONNECTIONS.get(id); - } - - public static synchronized NodeSupport getOrCreateNodeSupport(String id) { - NodeSupport result = SUPPORTS.get(id); - if(result == null) { - SCLRealm realm = getOrCreateSCLRealm(id); - result = new NodeSupport(realm.getNodeManager()); - SUPPORTS.put(id, result); - } - return result; - } - - public static synchronized SCLRealm createRealm() { - String id = UUID.randomUUID().toString(); - return createRealm(id); - } - - public static synchronized SCLRealm getOrCreateSCLRealm(String id) { - SCLRealm session = sclRealmById(id); - if(session == null) - return createRealm(id); - else - return session; - } - - private static SCLRealm createRealm(String id) { - CommandSession connection = new CommandSession(SCLOsgi.MODULE_REPOSITORY, SCLReportingHandler.DEFAULT); - SCLRealm realm = new SCLRealm(connection, id); - CONNECTIONS.put(id, realm); - return realm; - } - - public static synchronized void removeRealm(String id) { - CONNECTIONS.remove(id); - // if node support has been created remove it as well - SUPPORTS.remove(id); - } -} +package org.simantics.modeling.scl; + +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +import org.simantics.db.layer0.variable.NodeSupport; +import org.simantics.scl.compiler.commands.CommandSession; +import org.simantics.scl.osgi.SCLOsgi; +import org.simantics.scl.runtime.reporting.SCLReportingHandler; + +public class SCLSessionManager { + static ConcurrentHashMap CONNECTIONS = + new ConcurrentHashMap(); + + static ConcurrentHashMap> SUPPORTS = + new ConcurrentHashMap>(); + + public static SCLRealm sclRealmById(String id) { + // CONNECTIONS is ConcurrentHashMap so no synchronization is needed here + return CONNECTIONS.get(id); + } + + public static synchronized NodeSupport getOrCreateNodeSupport(String id) { + NodeSupport result = SUPPORTS.get(id); + if(result == null) { + SCLRealm realm = getOrCreateSCLRealm(id); + result = new NodeSupport(realm.getNodeManager()); + SUPPORTS.put(id, result); + } + return result; + } + + public static synchronized SCLRealm createRealm() { + String id = UUID.randomUUID().toString(); + return createRealm(id); + } + + public static synchronized SCLRealm getOrCreateSCLRealm(String id) { + SCLRealm session = sclRealmById(id); + if(session == null) + return createRealm(id); + else + return session; + } + + private static SCLRealm createRealm(String id) { + CommandSession connection = new CommandSession(SCLOsgi.MODULE_REPOSITORY, SCLReportingHandler.DEFAULT); + SCLRealm realm = new SCLRealm(connection, id); + CONNECTIONS.put(id, realm); + return realm; + } + + public static synchronized void removeRealm(String id) { + SCLRealm realm = CONNECTIONS.remove(id); + if (realm != null) + realm.close(); + // if node support has been created remove it as well + NodeSupport support = SUPPORTS.remove(id); + if (support != null) + support.dispose(); + } +}