]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/scl/SCLSessionManager.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / scl / SCLSessionManager.java
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
new file mode 100644 (file)
index 0000000..8572dff
--- /dev/null
@@ -0,0 +1,58 @@
+package org.simantics.modeling.scl;\r
+\r
+import java.util.UUID;\r
+import java.util.concurrent.ConcurrentHashMap;\r
+\r
+import org.simantics.db.layer0.variable.NodeSupport;\r
+import org.simantics.scl.compiler.commands.CommandSession;\r
+import org.simantics.scl.osgi.SCLOsgi;\r
+import org.simantics.scl.runtime.reporting.SCLReportingHandler;\r
+\r
+public class SCLSessionManager {\r
+    static ConcurrentHashMap<String, SCLRealm> CONNECTIONS =\r
+            new ConcurrentHashMap<String, SCLRealm>(); \r
+    \r
+    static ConcurrentHashMap<String, NodeSupport<String>> SUPPORTS =\r
+            new ConcurrentHashMap<String, NodeSupport<String>>(); \r
+    \r
+    public static SCLRealm sclRealmById(String id) {\r
+        // CONNECTIONS is ConcurrentHashMap so no synchronization is needed here\r
+        return CONNECTIONS.get(id);\r
+    }\r
+    \r
+    public static synchronized NodeSupport<String> getOrCreateNodeSupport(String id) {\r
+        NodeSupport<String> result = SUPPORTS.get(id);\r
+        if(result == null) {\r
+            SCLRealm realm = getOrCreateSCLRealm(id);\r
+            result = new NodeSupport<String>(realm.getNodeManager());\r
+            SUPPORTS.put(id, result);\r
+        }\r
+        return result;\r
+    }\r
+    \r
+    public static synchronized SCLRealm createRealm() {\r
+        String id = UUID.randomUUID().toString();\r
+        return createRealm(id);\r
+    }\r
+    \r
+    public static synchronized SCLRealm getOrCreateSCLRealm(String id) {\r
+        SCLRealm session = sclRealmById(id);\r
+        if(session == null)\r
+            return createRealm(id);\r
+        else\r
+            return session;\r
+    }\r
+    \r
+    private static SCLRealm createRealm(String id) {\r
+        CommandSession connection = new CommandSession(SCLOsgi.MODULE_REPOSITORY, SCLReportingHandler.DEFAULT);\r
+        SCLRealm realm = new SCLRealm(connection, id);\r
+        CONNECTIONS.put(id, realm);\r
+        return realm;\r
+    }\r
+    \r
+    public static synchronized void removeRealm(String id) {\r
+        CONNECTIONS.remove(id);\r
+        // if node support has been created remove it as well\r
+        SUPPORTS.remove(id);\r
+    }\r
+}\r