#5297 Add remoting progress monitoring
[taxeditor.git] / eu.etaxonomy.taxeditor.cdmlib / src / main / java / eu / etaxonomy / taxeditor / session / CdmEntitySessionManager.java
index 80bc0caba5cd87406ef1ea017d416c63eaf8142a..5582df7778e457e8d27144591902fa9de0bfe464 100644 (file)
@@ -38,7 +38,9 @@ public class CdmEntitySessionManager implements ICdmEntitySessionManager {
 
     private final List<ICdmEntitySessionManagerObserver> sessionObservers = new ArrayList<ICdmEntitySessionManagerObserver>();
 
-    private ICdmEntitySession activeSession;
+    //private ICdmEntitySession activeSession;
+
+    private final InheritableThreadLocal<ICdmEntitySession> tlActiveSession = new InheritableThreadLocal<ICdmEntitySession>();
 
     private  NullSession nullSession;
 
@@ -76,11 +78,12 @@ public class CdmEntitySessionManager implements ICdmEntitySessionManager {
 
     @Override
     public ICdmEntitySession getActiveSession() {
-        return activeSession;
+        return tlActiveSession.get();
     }
 
+
     private void setActiveSession(ICdmEntitySession activeSession) {
-        this.activeSession = activeSession;
+       this. tlActiveSession.set(activeSession);
         notifyObservers();
     }
 
@@ -123,18 +126,18 @@ public class CdmEntitySessionManager implements ICdmEntitySessionManager {
      */
     @Override
     public <T extends Object> T load(T obj, boolean update) {
-        if(activeSession == null) {
+        if(tlActiveSession.get() == null) {
             return obj;
         } else {
-            return activeSession.load(obj, update);
+            return tlActiveSession.get().load(obj, update);
         }
     }
 
 
     @Override
     public <T extends CdmBase> void update() {
-        if(activeSession != null) {
-            activeSession.update();
+        if(tlActiveSession.get() != null) {
+            tlActiveSession.get().update();
         }
     }
 
@@ -143,10 +146,10 @@ public class CdmEntitySessionManager implements ICdmEntitySessionManager {
      */
     @Override
     public <T extends CdmBase> T load(T cdmBase, boolean update) {
-        if(activeSession == null) {
+        if(tlActiveSession.get() == null) {
             return cdmBase;
         }
-        return activeSession.load(cdmBase, update);
+        return tlActiveSession.get().load(cdmBase, update);
     }
 
 
@@ -155,10 +158,10 @@ public class CdmEntitySessionManager implements ICdmEntitySessionManager {
      */
     @Override
     public UpdateResult load(UpdateResult updateResult, boolean update) {
-        if(activeSession == null) {
+        if(tlActiveSession.get() == null) {
             return updateResult;
         }
-        return activeSession.load(updateResult, update);
+        return tlActiveSession.get().load(updateResult, update);
     }
 
 
@@ -167,10 +170,10 @@ public class CdmEntitySessionManager implements ICdmEntitySessionManager {
      */
     @Override
     public MergeResult load(MergeResult mergeResult, boolean update) {
-        if(activeSession == null) {
+        if(tlActiveSession.get() == null) {
             return mergeResult;
         }
-        return activeSession.load(mergeResult, update);
+        return tlActiveSession.get().load(mergeResult, update);
     }
 
 
@@ -179,10 +182,10 @@ public class CdmEntitySessionManager implements ICdmEntitySessionManager {
      */
     @Override
     public <T extends CdmBase> Collection<T> load(Collection<T> cdmBaseList, boolean update) {
-        if(activeSession == null) {
+        if(tlActiveSession.get() == null) {
             return cdmBaseList;
         }
-        return activeSession.load(cdmBaseList, update);
+        return tlActiveSession.get().load(cdmBaseList, update);
     }
 
 
@@ -195,7 +198,7 @@ public class CdmEntitySessionManager implements ICdmEntitySessionManager {
             logger.info("No Session connected to owner, nothing to do");
             return;
         }
-        if(session == activeSession) {
+        if(session == tlActiveSession.get()) {
             setActiveSession(null);
         }
         ownerSessionMap.remove(owner);