]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/scl/SCLSessionManager.java
Added some enforcement of immutability to structural user component UI's.
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / scl / SCLSessionManager.java
1 package org.simantics.modeling.scl;\r
2 \r
3 import java.util.UUID;\r
4 import java.util.concurrent.ConcurrentHashMap;\r
5 \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
10 \r
11 public class SCLSessionManager {\r
12     static ConcurrentHashMap<String, SCLRealm> CONNECTIONS =\r
13             new ConcurrentHashMap<String, SCLRealm>(); \r
14     \r
15     static ConcurrentHashMap<String, NodeSupport<String>> SUPPORTS =\r
16             new ConcurrentHashMap<String, NodeSupport<String>>(); \r
17     \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
21     }\r
22     \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
29         }\r
30         return result;\r
31     }\r
32     \r
33     public static synchronized SCLRealm createRealm() {\r
34         String id = UUID.randomUUID().toString();\r
35         return createRealm(id);\r
36     }\r
37     \r
38     public static synchronized SCLRealm getOrCreateSCLRealm(String id) {\r
39         SCLRealm session = sclRealmById(id);\r
40         if(session == null)\r
41             return createRealm(id);\r
42         else\r
43             return session;\r
44     }\r
45     \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
50         return realm;\r
51     }\r
52     \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
57     }\r
58 }\r