]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.acorn/src/org/simantics/acorn/AcornSessionManagerImpl.java
Acorn: Fix WriteRunnable.runReally() and other fixes
[simantics/platform.git] / bundles / org.simantics.acorn / src / org / simantics / acorn / AcornSessionManagerImpl.java
index 1a1e16024d859907172baba4bc73bed478699d6b..f67a4aa7c6b702843647467f05a650b41a3aa102 100644 (file)
@@ -13,6 +13,7 @@ import org.simantics.db.common.utils.Logger;
 import org.simantics.db.event.SessionEvent;
 import org.simantics.db.event.SessionListener;
 import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.exception.RuntimeDatabaseException;
 import org.simantics.db.service.LifecycleSupport;
 import org.simantics.utils.datastructures.ListenerList;
 
@@ -23,8 +24,8 @@ public class AcornSessionManagerImpl implements SessionManager {
 
     private static AcornSessionManagerImpl INSTANCE;
     
-    private ConcurrentHashMap<SessionImplSocket, SessionImplSocket> sessionMap = new ConcurrentHashMap<SessionImplSocket, SessionImplSocket>();
-    private ListenerList<SessionListener> sessionListeners = new ListenerList<SessionListener>(SessionListener.class);
+    private ConcurrentHashMap<SessionImplDb, Database.Session> sessionMap = new ConcurrentHashMap<>();
+    private ListenerList<SessionListener> sessionListeners = new ListenerList<>(SessionListener.class);
     private SessionErrorHandler errorHandler;
 
        private Database database;
@@ -51,7 +52,7 @@ public class AcornSessionManagerImpl implements SessionManager {
             database = AcornDatabaseManager.getDatabase(dbFolder);
             Database.Session dbSession = database.newSession(sessionImpl);
             sessionImpl.connect(sessionReference, dbSession);
-            sessionMap.put(sessionImpl, sessionImpl);
+            sessionMap.put(sessionImpl, dbSession);
             fireSessionOpened(sessionImpl);
             ok = true;
         } catch (Throwable e) {
@@ -91,7 +92,7 @@ public class AcornSessionManagerImpl implements SessionManager {
 
     @Override
     public void shutdown(Session s, Throwable cause) {
-        SessionImplSocket sis = sessionMap.get(s);
+        SessionImplSocket sis = (SessionImplSocket) s;
         if (null == sis)
             return;
         try {
@@ -122,4 +123,10 @@ public class AcornSessionManagerImpl implements SessionManager {
         return database;
     }
 
+    public GraphClientImpl2 getClient() {
+        if (sessionMap.values().size() > 1)
+            throw new RuntimeDatabaseException("Currently only one GraphClientImpl2 per session is supported!");
+        org.simantics.db.Database.Session client = sessionMap.values().iterator().next();
+        return (GraphClientImpl2) client;
+    }
 }