fix #5971: admin menu is visible only if connected and user has role manager
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / store / CdmStore.java
index 8d96d335990f46e0da8826e6be52b0a63e9667af..f8a87dea58c430e3534df40aeb7ed1885a97cb24 100644 (file)
@@ -28,19 +28,36 @@ import eu.etaxonomy.cdm.api.application.CdmApplicationState;
 import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
 import eu.etaxonomy.cdm.api.cache.CdmServiceCacher;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.service.IAgentService;
+import eu.etaxonomy.cdm.api.service.ICollectionService;
 import eu.etaxonomy.cdm.api.service.ICommonService;
+import eu.etaxonomy.cdm.api.service.INameService;
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;
+import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
+import eu.etaxonomy.cdm.api.service.IReferenceService;
 import eu.etaxonomy.cdm.api.service.IService;
+import eu.etaxonomy.cdm.api.service.IUserService;
+import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService;
+import eu.etaxonomy.cdm.api.service.molecular.IPrimerService;
 import eu.etaxonomy.cdm.config.ICdmSource;
 import eu.etaxonomy.cdm.database.DbSchemaValidation;
+import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.common.User;
+import eu.etaxonomy.cdm.model.description.PolytomousKey;
+import eu.etaxonomy.cdm.model.molecular.Amplification;
+import eu.etaxonomy.cdm.model.molecular.Primer;
+import eu.etaxonomy.cdm.model.name.NonViralName;
+import eu.etaxonomy.cdm.model.occurrence.Collection;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
 import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator;
 import eu.etaxonomy.cdm.persistence.hibernate.permission.Role;
 import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
 import eu.etaxonomy.taxeditor.io.ExportManager;
 import eu.etaxonomy.taxeditor.io.ImportManager;
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.remoting.cache.CdmRemoteCacheManager;
@@ -48,7 +65,8 @@ import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
 import eu.etaxonomy.taxeditor.session.mock.MockCdmEntitySessionManager;
 import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 import eu.etaxonomy.taxeditor.ui.dialog.RemotingLoginDialog;
-import eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart;
+import eu.etaxonomy.taxeditor.util.ProgressMonitorClientManager;
+import eu.etaxonomy.taxeditor.webapp.CDMServer;
 
 /**
  * This implementation of ICdmDataRepository depends on hibernate sessions to
@@ -85,8 +103,12 @@ public class CdmStore {
 
     private static UseObjectStore useObjectInitializer = new UseObjectStore();
 
+    private static ProgressMonitorClientManager progressMonitorClientManager = new ProgressMonitorClientManager();
+
     private static CdmStoreConnector job;
 
+    private static CDMServer managedServer;
+
     private Language language;
 
     private ICdmSource cdmSource;
@@ -102,17 +124,30 @@ public class CdmStore {
      *
      * @return a {@link eu.etaxonomy.taxeditor.store.CdmStore} object.
      */
-    protected static CdmStore getDefault({
+    protected static CdmStore getDefault(boolean connecting){
         if (instance != null && instance.isConnected) {
             return instance;
         } else{// if (instance == null || !instance.isConnected) {
+            if (connecting){
+                MessagingUtils.dataSourceNotAvailableWarningDialog(instance);
+            }else{
+                MessagingUtils.noDataSourceWarningDialog(instance);
+            }
 
-            MessagingUtils.noDataSourceWarningDialog(instance);
 
-            AbstractUtility.showView(CdmDataSourceViewPart.ID);
             return null;
         }
     }
+    /**
+     * <p>
+     * getDefault
+     * </p>
+     *
+     * @return a {@link eu.etaxonomy.taxeditor.store.CdmStore} object.
+     */
+    protected static CdmStore getDefault(){
+       return getDefault(false);
+    }
 
     /**
      * Initialize the with the last edited datasource
@@ -178,8 +213,8 @@ public class CdmStore {
         if(isActive()) {
             // before we connect we clear the entity caches and the sessions
             CdmRemoteCacheManager.removeEntityCaches();
-            if(getCurrentSessionManager() != null) {
-                getCurrentSessionManager().disposeAll();
+            if(getCurrentSessionManager(true) != null) {
+                getCurrentSessionManager(true).disposeAll();
             }
         }
         MessagingUtils.info("Connecting to datasource: " + cdmSource);
@@ -241,9 +276,8 @@ public class CdmStore {
     static void setInstance(ICdmApplicationConfiguration applicationController,
             ICdmSource cdmSource) {
         instance = new CdmStore(applicationController, cdmSource);
-        if(getCurrentSessionManager().isRemoting()) {
-            CdmApplicationState.setCdmServiceCacher(new CdmServiceCacher());
-        }
+        CdmApplicationState.setCdmServiceCacher(new CdmServiceCacher());
+
     }
 
     private CdmStore(ICdmApplicationConfiguration applicationController,
@@ -321,10 +355,14 @@ public class CdmStore {
             return mockCdmEntitySessionManager;
         }
     }
-
     public static  ICdmEntitySessionManager getCurrentSessionManager() {
-        if (getDefault() != null) {
-            return getDefault().getSessionManager();
+        return getCurrentSessionManager(false);
+    }
+
+
+    public static  ICdmEntitySessionManager getCurrentSessionManager(boolean connecting) {
+        if (getDefault(connecting) != null) {
+            return getDefault(connecting).getSessionManager();
         }
         return null;
 
@@ -523,6 +561,10 @@ public class CdmStore {
         return editorManager;
     }
 
+    public static ProgressMonitorClientManager getProgressMonitorClientManager() {
+        return progressMonitorClientManager;
+    }
+
     /*
      * IMPORT/EXPORT FACTORIES
      */
@@ -587,4 +629,47 @@ public class CdmStore {
         return cdmSource;
     }
 
+
+    public static <T extends CdmBase> IService<T> getService(T cdmBase){
+        IService<T> service = null;
+        if(cdmBase!=null){
+            //get corresponding service
+            if(cdmBase.isInstanceOf(Reference.class)){
+                service = (IService<T>) getService(IReferenceService.class);
+            }
+            else if (cdmBase.isInstanceOf(AgentBase.class)){
+                service = (IService<T>) getService(IAgentService.class);
+            }
+            else if (cdmBase instanceof NonViralName) {
+                service = (IService<T>) getService(INameService.class);
+            }
+            else if (cdmBase instanceof SpecimenOrObservationBase) {
+                service = (IService<T>) getService(IOccurrenceService.class);
+            }
+            else if (cdmBase instanceof Collection) {
+                service = (IService<T>) getService(ICollectionService.class);
+            }
+            else if (cdmBase instanceof User) {
+                service = (IService<T>) getService(IUserService.class);
+            }
+            else if (cdmBase instanceof Primer) {
+                service = (IService<T>) getService(IPrimerService.class);
+            }
+            else if (cdmBase instanceof Amplification) {
+                service = (IService<T>) getService(IAmplificationService.class);
+            } else if (cdmBase instanceof PolytomousKey) {
+                service = (IService<T>) getService(IPolytomousKeyService.class);
+            }
+        }
+        return service;
+    }
+
+    public static void setManagedServer(CDMServer server) {
+        managedServer = server;
+    }
+
+    public static CDMServer getManagedServer() {
+        return managedServer;
+    }
+
 }