fixes #805 and started to work on #835
[taxeditor.git] / taxeditor-store / src / main / java / eu / etaxonomy / taxeditor / store / CdmStore.java
index ad79d9bdc8c882223c81bc6b9eb84224fe80d3d1..77d7d858d5e76cc699ab61abbb26dad42dbd0aa1 100644 (file)
@@ -15,7 +15,11 @@ import java.util.List;
 import java.util.UUID;
 
 import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.Status;
+import org.springframework.security.Authentication;
+import org.springframework.security.context.SecurityContextHolder;
 import org.springframework.security.providers.ProviderManager;
+import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
 
 import eu.etaxonomy.cdm.api.application.CdmApplicationController;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
@@ -23,12 +27,14 @@ import eu.etaxonomy.cdm.api.service.ILocationService;
 import eu.etaxonomy.cdm.api.service.INameService;
 import eu.etaxonomy.cdm.api.service.IReferenceService;
 import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.api.service.IUserService;
 import eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator;
 import eu.etaxonomy.cdm.api.service.config.impl.TaxonServiceConfiguratorImpl;
 import eu.etaxonomy.cdm.database.DbSchemaValidation;
 import eu.etaxonomy.cdm.database.ICdmDataSource;
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
 import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.common.User;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.reference.Article;
 import eu.etaxonomy.cdm.model.reference.Book;
@@ -39,6 +45,7 @@ import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
 import eu.etaxonomy.cdm.persistence.query.MatchMode;
 import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
+import eu.etaxonomy.taxeditor.datasource.ChooseDatasourceDialog;
 
 /**
  * This implementation of ICdmDataRepository depends on hibernate sessions to store the data correctly 
@@ -66,6 +73,8 @@ public class CdmStore{
        private ConversationHolder globalReadOnlyConversation;
        
        private static DbSchemaValidation dbSchemaValidation;
+
+       private static LoginManager loginManager;
        
        /**
         * 
@@ -83,15 +92,37 @@ public class CdmStore{
        public static CdmStore getDefault(String applicationContextBean){
                if(instance == null){
                        logger.info("Initializing application context ...");
-                       ICdmDataSource cdmDatasource = CdmDataSourceRepository.getDefault().
-                                       getCurrentDataSource();
-                       
-                       instance = new CdmStore(cdmDatasource, getDbSchemaValidation(), applicationContextBean);
                        
-                       logger.info("Application context initialized.");
+                       // Prompt user for datasource if there are more than one
+                       if(CdmDataSourceRepository.getDefault().getAll().size() > 1){
+                               ChooseDatasourceDialog chooseDataSource = new ChooseDatasourceDialog(StoreUtil.getShell());
+                               if(chooseDataSource.open() == Status.OK){
+                                       initialize(applicationContextBean);
+
+                               }else{
+                                       // no datasource chosen.
+                                       logger.warn("No datasource chosen. Exiting now.");
+                                       System.exit(1);
+                               }       
+                       }else{
+                               // Start default cdm database
+                               initialize(applicationContextBean);
+                       }
+               
                }
                return instance;
        }
+       
+       private static CdmStore initialize(String applicationContextBean){      
+               
+               ICdmDataSource cdmDatasource = CdmDataSourceRepository.getDefault().getCurrentDataSource();
+               
+               CdmStore instance = new CdmStore(cdmDatasource, getDbSchemaValidation(), applicationContextBean);
+               
+               logger.info("Application context initialized.");
+               
+               return instance;
+       }
 
        /**
         * @return
@@ -210,6 +241,7 @@ public class CdmStore{
 
        public static ProviderManager getAuthenticationManager() { return getDefault().getApplicationControllerInternal().getAuthenticationManager();}
 
+       public static IUserService getUserService() { return getDefault().getApplicationControllerInternal().getUserService(); }
        
        /**
         * @param searchText
@@ -299,5 +331,14 @@ public class CdmStore{
                
                return nomReferenceTypeMap;
        }
-
+       
+       /**
+        * incomplete! do note use!
+        */
+       public static LoginManager getLoginManager(){
+               if(loginManager == null){
+                       loginManager = new LoginManager();
+               }
+               return loginManager;
+       }
 }