ref #8162 adapt cdmlip to new term package structure
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / application / CdmApplicationController.java
index bea2a40c16ffdaf764947df33325ae6d1a306290..c2e944132362fec489ed0e13fb63af2747b4be68 100644 (file)
@@ -1,5 +1,3 @@
-
-// $Id$\r
 /**\r
  * Copyright (C) 2007 EDIT\r
  * European Distributed Institute of Taxonomy\r
 \r
 package eu.etaxonomy.cdm.api.application;\r
 \r
-import java.util.EnumSet;
-import java.util.List;
-import java.util.UUID;
-
-import org.apache.log4j.Logger;
-import org.hibernate.SessionFactory;
-import org.springframework.beans.MutablePropertyValues;
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
-import org.springframework.context.ApplicationListener;
-import org.springframework.context.support.AbstractApplicationContext;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
-import org.springframework.security.authentication.ProviderManager;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContext;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.transaction.PlatformTransactionManager;
-import org.springframework.transaction.TransactionStatus;
-
-import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
-import eu.etaxonomy.cdm.api.service.IAgentService;
-import eu.etaxonomy.cdm.api.service.IAnnotationService;
-import eu.etaxonomy.cdm.api.service.IClassificationService;
-import eu.etaxonomy.cdm.api.service.ICollectionService;
-import eu.etaxonomy.cdm.api.service.ICommonService;
-import eu.etaxonomy.cdm.api.service.IDatabaseService;
-import eu.etaxonomy.cdm.api.service.IDescriptionService;
-import eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService;
-import eu.etaxonomy.cdm.api.service.IEntityValidationService;
-import eu.etaxonomy.cdm.api.service.IEventBaseService;
-import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
-import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
-import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;
-import eu.etaxonomy.cdm.api.service.IGroupService;
-import eu.etaxonomy.cdm.api.service.IIdentificationKeyService;
-import eu.etaxonomy.cdm.api.service.ILocationService;
-import eu.etaxonomy.cdm.api.service.IMediaService;
-import eu.etaxonomy.cdm.api.service.IMetadataService;
-import eu.etaxonomy.cdm.api.service.INameService;
-import eu.etaxonomy.cdm.api.service.IOccurrenceService;
-import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService;
-import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
-import eu.etaxonomy.cdm.api.service.IPreferenceService;
-import eu.etaxonomy.cdm.api.service.IProgressMonitorService;
-import eu.etaxonomy.cdm.api.service.IReferenceService;
-import eu.etaxonomy.cdm.api.service.IService;
-import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
-import eu.etaxonomy.cdm.api.service.ITaxonService;
-import eu.etaxonomy.cdm.api.service.ITermService;
-import eu.etaxonomy.cdm.api.service.IUserService;
-import eu.etaxonomy.cdm.api.service.IVocabularyService;
-import eu.etaxonomy.cdm.api.service.IWorkingSetService;
-import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService;
-import eu.etaxonomy.cdm.api.service.molecular.IPrimerService;
-import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
-import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
-import eu.etaxonomy.cdm.common.monitor.NullProgressMonitor;
-import eu.etaxonomy.cdm.common.monitor.SubProgressMonitor;
-import eu.etaxonomy.cdm.database.CdmPersistentDataSource;
-import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
-import eu.etaxonomy.cdm.database.DbSchemaValidation;
-import eu.etaxonomy.cdm.database.ICdmDataSource;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;
-import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
-import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator;
+import java.util.EnumSet;\r
+import java.util.List;\r
+import java.util.Properties;\r
+import java.util.UUID;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hibernate.SessionFactory;\r
+import org.springframework.beans.MutablePropertyValues;\r
+import org.springframework.beans.factory.config.BeanDefinition;\r
+import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;\r
+import org.springframework.context.ApplicationListener;\r
+import org.springframework.context.support.AbstractApplicationContext;\r
+import org.springframework.core.io.ClassPathResource;\r
+import org.springframework.core.io.Resource;\r
+import org.springframework.security.authentication.ProviderManager;\r
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;\r
+import org.springframework.security.core.Authentication;\r
+import org.springframework.security.core.context.SecurityContext;\r
+import org.springframework.security.core.context.SecurityContextHolder;\r
+import org.springframework.transaction.PlatformTransactionManager;\r
+import org.springframework.transaction.TransactionStatus;\r
+\r
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
+import eu.etaxonomy.cdm.api.service.IAgentService;\r
+import eu.etaxonomy.cdm.api.service.IAnnotationService;\r
+import eu.etaxonomy.cdm.api.service.IClassificationService;\r
+import eu.etaxonomy.cdm.api.service.ICollectionService;\r
+import eu.etaxonomy.cdm.api.service.ICommonService;\r
+import eu.etaxonomy.cdm.api.service.IDatabaseService;\r
+import eu.etaxonomy.cdm.api.service.IDescriptionService;\r
+import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;\r
+import eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService;\r
+import eu.etaxonomy.cdm.api.service.IEntityValidationService;\r
+import eu.etaxonomy.cdm.api.service.IEventBaseService;\r
+import eu.etaxonomy.cdm.api.service.IFeatureNodeService;\r
+import eu.etaxonomy.cdm.api.service.IFeatureTreeService;\r
+import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;\r
+import eu.etaxonomy.cdm.api.service.IGroupService;\r
+import eu.etaxonomy.cdm.api.service.IIdentificationKeyService;\r
+import eu.etaxonomy.cdm.api.service.ILocationService;\r
+import eu.etaxonomy.cdm.api.service.IMediaService;\r
+import eu.etaxonomy.cdm.api.service.IMetadataService;\r
+import eu.etaxonomy.cdm.api.service.INameService;\r
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;\r
+import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService;\r
+import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;\r
+import eu.etaxonomy.cdm.api.service.IPreferenceService;\r
+import eu.etaxonomy.cdm.api.service.IProgressMonitorService;\r
+import eu.etaxonomy.cdm.api.service.IReferenceService;\r
+import eu.etaxonomy.cdm.api.service.IRegistrationService;\r
+import eu.etaxonomy.cdm.api.service.IRightsService;\r
+import eu.etaxonomy.cdm.api.service.ITaxonNodeService;\r
+import eu.etaxonomy.cdm.api.service.ITaxonService;\r
+import eu.etaxonomy.cdm.api.service.ITermService;\r
+import eu.etaxonomy.cdm.api.service.IUserService;\r
+import eu.etaxonomy.cdm.api.service.IVocabularyService;\r
+import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService;\r
+import eu.etaxonomy.cdm.api.service.molecular.IPrimerService;\r
+import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;\r
+import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;\r
+import eu.etaxonomy.cdm.common.monitor.NullProgressMonitor;\r
+import eu.etaxonomy.cdm.common.monitor.SubProgressMonitor;\r
+import eu.etaxonomy.cdm.database.CdmPersistentDataSource;\r
+import eu.etaxonomy.cdm.database.DataSourceNotFoundException;\r
+import eu.etaxonomy.cdm.database.DbSchemaValidation;\r
+import eu.etaxonomy.cdm.database.ICdmDataSource;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.term.DefinedTermBase;\r
+import eu.etaxonomy.cdm.persistence.hibernate.HibernateConfiguration;\r
+import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;\r
+import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator;\r
 \r
 /**\r
  * @author a.mueller\r
  */\r
-public class CdmApplicationController implements ICdmApplicationConfiguration {\r
+public class CdmApplicationController implements ICdmRepository {\r
        private static final Logger logger = Logger.getLogger(CdmApplicationController.class);\r
 \r
        public static final String DEFAULT_APPLICATION_CONTEXT_RESOURCE = "/eu/etaxonomy/cdm/defaultApplicationContext.xml";\r
 \r
        public AbstractApplicationContext applicationContext;\r
-       protected ICdmApplicationConfiguration configuration;\r
+       protected ICdmRepository configuration;\r
        private final Resource applicationContextResource;\r
 \r
        private final IProgressMonitor progressMonitor;\r
@@ -146,12 +147,19 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
 \r
        public static CdmApplicationController NewInstance(Resource applicationContextResource, ICdmDataSource dataSource,\r
                        DbSchemaValidation dbSchemaValidation, boolean omitTermLoading){\r
-               return CdmApplicationController.NewInstance(applicationContextResource, dataSource, dbSchemaValidation, omitTermLoading, null);\r
+               return CdmApplicationController.NewInstance(applicationContextResource, dataSource, dbSchemaValidation,\r
+                       null, omitTermLoading, null);\r
        }\r
-\r
+    public static CdmApplicationController NewInstance(Resource applicationContextResource, ICdmDataSource dataSource,\r
+            DbSchemaValidation dbSchemaValidation, boolean omitTermLoading, IProgressMonitor progressMonitor){\r
+        return new CdmApplicationController(applicationContextResource, dataSource, dbSchemaValidation,\r
+                null, omitTermLoading, progressMonitor, null);\r
+    }\r
        public static CdmApplicationController NewInstance(Resource applicationContextResource, ICdmDataSource dataSource,\r
-                       DbSchemaValidation dbSchemaValidation, boolean omitTermLoading, IProgressMonitor progressMonitor){\r
-               return new CdmApplicationController(applicationContextResource, dataSource, dbSchemaValidation, omitTermLoading, progressMonitor, null);\r
+                       DbSchemaValidation dbSchemaValidation, HibernateConfiguration hibernateConfig,\r
+                       boolean omitTermLoading, IProgressMonitor progressMonitor){\r
+               return new CdmApplicationController(applicationContextResource, dataSource, dbSchemaValidation,\r
+                       hibernateConfig, omitTermLoading, progressMonitor, null);\r
        }\r
 \r
 \r
@@ -198,7 +206,8 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
         * @param omitTermLoading\r
         */\r
        protected CdmApplicationController(Resource applicationContextResource, ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation,\r
-                       boolean omitTermLoading, IProgressMonitor progressMonitor, List<ApplicationListener> listeners){\r
+               HibernateConfiguration hibernateConfig,\r
+               boolean omitTermLoading, IProgressMonitor progressMonitor, List<ApplicationListener> listeners){\r
                logger.info("Start CdmApplicationController with datasource: " + dataSource.getName());\r
 \r
                if (dbSchemaValidation == null) {\r
@@ -207,7 +216,7 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
                this.applicationContextResource = applicationContextResource != null ? applicationContextResource : getClasspathResource();\r
                this.progressMonitor = progressMonitor != null ? progressMonitor : new NullProgressMonitor();\r
 \r
-               setNewDataSource(dataSource, dbSchemaValidation, omitTermLoading, listeners);\r
+               setNewDataSource(dataSource, dbSchemaValidation, hibernateConfig, omitTermLoading, listeners);\r
        }\r
 \r
 \r
@@ -217,8 +226,9 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
         *\r
         * @param dataSource\r
         */\r
-       private boolean setNewDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading,\r
-                       List<ApplicationListener> listeners){\r
+       private boolean setNewDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation,\r
+               HibernateConfiguration hibernateConfig,\r
+               boolean omitTermLoading, List<ApplicationListener> listeners){\r
 \r
                if (dbSchemaValidation == null) {\r
                        dbSchemaValidation = defaultDbSchemaValidation;\r
@@ -239,7 +249,7 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
                applicationContext.registerBeanDefinition("dataSource", datasourceBean);\r
                progressMonitor.worked(1);\r
 \r
-               BeanDefinition hibernatePropBean = dataSource.getHibernatePropertiesBean(dbSchemaValidation);\r
+               BeanDefinition hibernatePropBean = dataSource.getHibernatePropertiesBean(dbSchemaValidation, hibernateConfig);\r
                applicationContext.registerBeanDefinition("hibernateProperties", hibernatePropBean);\r
 \r
                XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(applicationContext);\r
@@ -256,7 +266,7 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
                }\r
 \r
                if (listeners != null) {\r
-                       for (ApplicationListener listener : listeners) {\r
+                       for (ApplicationListener<?> listener : listeners) {\r
                                applicationContext.addApplicationListener(listener);\r
                        }\r
                }\r
@@ -279,6 +289,35 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
                return true;\r
        }\r
 \r
+       /**\r
+     * Overrides all default with values in hibernate config, if defined\r
+     * @param hibernatePropBean\r
+     * @param hibernateConfig\r
+     */\r
+    private void registerHibernateConfig(BeanDefinition hibernatePropBean, HibernateConfiguration hibernateConfig) {\r
+        setHibernateProperty(hibernatePropBean, HibernateConfiguration.REGISTER_ENVERS,\r
+                hibernateConfig.getRegisterEnvers());\r
+        setHibernateProperty(hibernatePropBean, HibernateConfiguration.REGISTER_SEARCH,\r
+                hibernateConfig.getRegisterSearch());\r
+        setHibernateProperty(hibernatePropBean, HibernateConfiguration.SHOW_SQL,\r
+                hibernateConfig.getShowSql());\r
+        setHibernateProperty(hibernatePropBean, HibernateConfiguration.FORMAT_SQL,\r
+                hibernateConfig.getFormatSql());\r
+    }\r
+\r
+\r
+    private void setHibernateProperty(BeanDefinition hibernatePropBean, String key, Boolean value) {\r
+           if (value != null){\r
+               setHibernateProperty(hibernatePropBean, key, String.valueOf(value));\r
+           }\r
+       }\r
+    private void setHibernateProperty(BeanDefinition hibernatePropBean, String key, String value) {\r
+        if (value != null){\r
+            Properties props = (Properties)hibernatePropBean.getPropertyValues().get("properties");\r
+            props.setProperty(key, value);\r
+        }\r
+    }\r
+\r
 \r
        /**\r
         * Tests if some DefinedTermsAreMissing.\r
@@ -304,7 +343,7 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
         */\r
        public boolean changeDataSource(ICdmDataSource dataSource){\r
                //logger.info("Change datasource to : " + dataSource);\r
-               return setNewDataSource(dataSource, DbSchemaValidation.VALIDATE, false, null);\r
+               return setNewDataSource(dataSource, DbSchemaValidation.VALIDATE, null, false, null);\r
        }\r
 \r
 \r
@@ -316,7 +355,7 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
         */\r
        public boolean changeDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation){\r
                //logger.info("Change datasource to : " + dataSource);\r
-               return setNewDataSource(dataSource, dbSchemaValidation, false, null);\r
+               return setNewDataSource(dataSource, dbSchemaValidation, null, false, null);\r
        }\r
 \r
 \r
@@ -329,7 +368,7 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
         */\r
        public boolean changeDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading){\r
                logger.info("Change datasource to : " + dataSource);\r
-               return setNewDataSource(dataSource, dbSchemaValidation, omitTermLoading, null);\r
+               return setNewDataSource(dataSource, dbSchemaValidation, null, omitTermLoading, null);\r
        }\r
 \r
 \r
@@ -343,7 +382,7 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
        public boolean changeDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading,\r
                        List<ApplicationListener> listeners){\r
                logger.info("Change datasource to : " + dataSource);\r
-               return setNewDataSource(dataSource, dbSchemaValidation, omitTermLoading, listeners);\r
+               return setNewDataSource(dataSource, dbSchemaValidation, null, omitTermLoading, listeners);\r
        }\r
 \r
 \r
@@ -359,18 +398,11 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
                init();\r
        }\r
 \r
-\r
-       /*\r
-        * (non-Javadoc)\r
-        *\r
-        * @see java.lang.Object#finalize()\r
-        */\r
        @Override\r
        public void finalize(){\r
                close();\r
        }\r
 \r
-\r
        /**\r
         * closes the application\r
         */\r
@@ -405,7 +437,7 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
                                logger.info(beanName);\r
                        }\r
                }\r
-               configuration = (ICdmApplicationConfiguration) applicationContext.getBean("cdmApplicationDefaultConfiguration");\r
+               configuration = (ICdmRepository) applicationContext.getBean("cdmRepository");\r
                try {\r
                        //FIXME:Remoting catching exection to allow for remoting\r
                        getDatabaseService().setApplicationController(this);\r
@@ -442,7 +474,12 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
 \r
        @Override\r
        public final ITaxonNodeService getTaxonNodeService(){\r
-               return configuration.getTaxonNodeService();\r
+           try{\r
+               return configuration.getTaxonNodeService();\r
+           } catch (Exception e){\r
+               e.printStackTrace();\r
+           }\r
+           return null;\r
        }\r
 \r
 \r
@@ -489,13 +526,13 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
        @Override\r
        public ISequenceService getSequenceService(){\r
                return configuration.getSequenceService();\r
-       }
-
-       @Override
-       public IEventBaseService getEventBaseService() {
-           return configuration.getEventBaseService();
        }\r
-
+\r
+       @Override\r
+       public IEventBaseService getEventBaseService() {\r
+           return configuration.getEventBaseService();\r
+       }\r
+\r
 \r
 \r
        @Override\r
@@ -508,12 +545,12 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
        public final IMediaService getMediaService(){\r
                return configuration.getMediaService();\r
        }\r
-
-
-    @Override
-    public final IMetadataService getMetadataService(){
-        return configuration.getMetadataService();
-    }
+\r
+\r
+    @Override\r
+    public final IMetadataService getMetadataService(){\r
+        return configuration.getMetadataService();\r
+    }\r
 \r
 \r
        @Override\r
@@ -555,11 +592,11 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
        @Override\r
        public final IFeatureTreeService getFeatureTreeService(){\r
                return configuration.getFeatureTreeService();\r
-       }
-
-       @Override
-       public final IPreferenceService getPreferenceService(){
-           return configuration.getPreferenceService();
+       }\r
+\r
+       @Override\r
+       public final IPreferenceService getPreferenceService(){\r
+           return configuration.getPreferenceService();\r
        }\r
 \r
 \r
@@ -613,16 +650,9 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
                return configuration.getEntityConstraintViolationService();\r
        }\r
 \r
-\r
-       @Override\r
-       public final IService<CdmBase> getMainService(){\r
-               return configuration.getMainService();\r
-       }\r
-\r
-\r
        @Override\r
-       public final IWorkingSetService getWorkingSetService(){\r
-               return configuration.getWorkingSetService();\r
+       public final IDescriptiveDataSetService getDescriptiveDataSetService(){\r
+               return configuration.getDescriptiveDataSetService();\r
        }\r
 \r
 \r
@@ -714,5 +744,23 @@ public class CdmApplicationController implements ICdmApplicationConfiguration {
                return;\r
        }\r
 \r
+\r
+    /**\r
+     * {@inheritDoc}\r
+     */\r
+    @Override\r
+    public IRightsService getRightsService() {\r
+        return configuration.getRightsService();\r
+    }\r
+\r
+\r
+    /**\r
+     * {@inheritDoc}\r
+     */\r
+    @Override\r
+    public IRegistrationService getRegistrationService() {\r
+        return configuration.getRegistrationService();\r
+    }\r
+\r
 }\r
-
+\r