1 package org.simantics.modeling.scl;
\r
3 import java.util.UUID;
\r
4 import java.util.concurrent.ConcurrentHashMap;
\r
6 import org.simantics.db.layer0.variable.NodeSupport;
\r
7 import org.simantics.scl.compiler.commands.CommandSession;
\r
8 import org.simantics.scl.osgi.SCLOsgi;
\r
9 import org.simantics.scl.runtime.reporting.SCLReportingHandler;
\r
11 public class SCLSessionManager {
\r
12 static ConcurrentHashMap<String, SCLRealm> CONNECTIONS =
\r
13 new ConcurrentHashMap<String, SCLRealm>();
\r
15 static ConcurrentHashMap<String, NodeSupport<String>> SUPPORTS =
\r
16 new ConcurrentHashMap<String, NodeSupport<String>>();
\r
18 public static SCLRealm sclRealmById(String id) {
\r
19 // CONNECTIONS is ConcurrentHashMap so no synchronization is needed here
\r
20 return CONNECTIONS.get(id);
\r
23 public static synchronized NodeSupport<String> getOrCreateNodeSupport(String id) {
\r
24 NodeSupport<String> result = SUPPORTS.get(id);
\r
25 if(result == null) {
\r
26 SCLRealm realm = getOrCreateSCLRealm(id);
\r
27 result = new NodeSupport<String>(realm.getNodeManager());
\r
28 SUPPORTS.put(id, result);
\r
33 public static synchronized SCLRealm createRealm() {
\r
34 String id = UUID.randomUUID().toString();
\r
35 return createRealm(id);
\r
38 public static synchronized SCLRealm getOrCreateSCLRealm(String id) {
\r
39 SCLRealm session = sclRealmById(id);
\r
41 return createRealm(id);
\r
46 private static SCLRealm createRealm(String id) {
\r
47 CommandSession connection = new CommandSession(SCLOsgi.MODULE_REPOSITORY, SCLReportingHandler.DEFAULT);
\r
48 SCLRealm realm = new SCLRealm(connection, id);
\r
49 CONNECTIONS.put(id, realm);
\r
53 public static synchronized void removeRealm(String id) {
\r
54 CONNECTIONS.remove(id);
\r
55 // if node support has been created remove it as well
\r
56 SUPPORTS.remove(id);
\r