reverting back the cdm application configuration refatoring
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / DatabaseServiceHibernateImpl.java
index 84cbf8440eddf4318e55f51d64f9c5be672f74d6..3ee1a9ec27078512c9c1d22da1cc23876d0da531 100644 (file)
@@ -1,21 +1,35 @@
+// $Id$\r
 /**\r
- * \r
- */\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
 package eu.etaxonomy.cdm.api.service;\r
 \r
 import org.apache.log4j.Logger;\r
 import org.hibernate.SessionFactory;\r
+import org.springframework.beans.BeansException;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.context.ApplicationContext;\r
 import org.springframework.context.ApplicationContextAware;\r
-import org.springframework.jdbc.datasource.DriverManagerDataSource;\r
-import org.springframework.orm.hibernate3.SessionFactoryUtils;\r
+import org.springframework.jdbc.datasource.AbstractDriverBasedDataSource;\r
+import org.springframework.orm.hibernate4.SessionFactoryUtils;\r
 import org.springframework.stereotype.Service;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
 import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
+import eu.etaxonomy.cdm.database.CdmDataSource;\r
 import eu.etaxonomy.cdm.database.CdmPersistentDataSource;\r
+import eu.etaxonomy.cdm.database.DataSourceNotFoundException;\r
 import eu.etaxonomy.cdm.database.DatabaseTypeEnum;\r
+import eu.etaxonomy.cdm.database.H2Mode;\r
+import eu.etaxonomy.cdm.database.ICdmDataSource;\r
+import eu.etaxonomy.cdm.model.common.init.TermNotFoundException;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
 \r
 \r
 \r
@@ -24,8 +38,8 @@ import eu.etaxonomy.cdm.database.DatabaseTypeEnum;
  *\r
  */\r
 @Service\r
-@Transactional\r
-public class DatabaseServiceHibernateImpl extends ServiceBase implements IDatabaseService, ApplicationContextAware {\r
+@Transactional(readOnly = true)\r
+public class DatabaseServiceHibernateImpl  implements IDatabaseService, ApplicationContextAware {\r
        private static final Logger logger = Logger.getLogger(DatabaseServiceHibernateImpl.class);\r
        \r
        private static final String TMP_DATASOURCE = "tmp"; \r
@@ -35,9 +49,6 @@ public class DatabaseServiceHibernateImpl extends ServiceBase implements IDataba
        \r
        @Autowired\r
        protected ApplicationContext appContext;\r
-//     public void setApplicationContext(ApplicationContext appContext){\r
-//             this.appContext = appContext;\r
-//     }\r
        \r
        private CdmApplicationController application;\r
        public void setApplicationController(CdmApplicationController cdmApplicationController){\r
@@ -48,7 +59,7 @@ public class DatabaseServiceHibernateImpl extends ServiceBase implements IDataba
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.api.service.IDatabaseService#connectToDatasource(eu.etaxonomy.cdm.database.CdmDataSource)\r
         */\r
-       public boolean connectToDatasource(CdmPersistentDataSource dataSource) {\r
+       public boolean connectToDatasource(CdmPersistentDataSource dataSource) throws TermNotFoundException{\r
                this.application.changeDataSource(dataSource);\r
                logger.debug("DataSource changed to " + dataSource.getName());\r
                return true;\r
@@ -58,8 +69,9 @@ public class DatabaseServiceHibernateImpl extends ServiceBase implements IDataba
         * @see eu.etaxonomy.cdm.api.service.IDatabaseService#connectToDatabase(eu.etaxonomy.cdm.database.DatabaseTypeEnum, java.lang.String, java.lang.String, java.lang.String, java.lang.String, int)\r
         */\r
        public boolean connectToDatabase(DatabaseTypeEnum databaseTypeEnum, String server,\r
-                       String database, String username, String password, int port) {\r
-               CdmPersistentDataSource tmpDataSource =  saveDataSource(TMP_DATASOURCE, databaseTypeEnum, server, database, username, password);\r
+                       String database, String username, String password, int port, String filePath, H2Mode mode, NomenclaturalCode code) throws TermNotFoundException  {\r
+               ICdmDataSource dataSource = CdmDataSource.NewInstance(databaseTypeEnum, server, database, port, username, password, code);\r
+               CdmPersistentDataSource tmpDataSource =  saveDataSource(TMP_DATASOURCE, dataSource);\r
                boolean result = connectToDatasource(tmpDataSource);\r
                CdmPersistentDataSource.delete(tmpDataSource);\r
                return result;\r
@@ -70,57 +82,42 @@ public class DatabaseServiceHibernateImpl extends ServiceBase implements IDataba
         * @see eu.etaxonomy.cdm.api.service.IDatabaseService#connectToDatabase(eu.etaxonomy.cdm.database.DatabaseTypeEnum, java.lang.String, java.lang.String, java.lang.String, java.lang.String)\r
         */\r
        public boolean connectToDatabase(DatabaseTypeEnum databaseTypeEnum, String server,\r
-                       String database, String username, String password) {\r
-               return connectToDatabase(databaseTypeEnum, server, database, username, password, databaseTypeEnum.getDefaultPort()) ;\r
-       }\r
-\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.IDatabaseService#saveDataSource(eu.etaxonomy.cdm.database.DatabaseTypeEnum, java.lang.String, java.lang.String, java.lang.String, java.lang.String)\r
-        */\r
-       public CdmPersistentDataSource saveDataSource(String strDataSourceName, DatabaseTypeEnum databaseTypeEnum,\r
-                       String server, String database, String username, String password) {\r
-               return CdmPersistentDataSource.save(strDataSourceName, databaseTypeEnum, server, database, username, password);\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.IDatabaseService#useLocalHsqldb(java.lang.String, java.lang.String, boolean, boolean)\r
-        */\r
-       public CdmPersistentDataSource saveLocalHsqldb(String strDataSourceName, String databasePath, String databaseName, String username, String password, boolean silent, boolean startServer) {\r
-               return CdmPersistentDataSource.saveLocalHsqlDb(strDataSourceName, databasePath, databaseName, username, password);\r
+                       String database, String username, String password)  throws TermNotFoundException {\r
+               return connectToDatabase(databaseTypeEnum, server, database, username, password, databaseTypeEnum.getDefaultPort(), null, null, null) ;\r
        }\r
        \r
        /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.IDatabaseService#useLocalHsqldb()\r
-        */\r
-       public boolean useLocalDefaultHsqldb() {\r
-               CdmPersistentDataSource dataSource = CdmPersistentDataSource.NewLocalHsqlInstance();\r
-                       return connectToDatasource(dataSource);\r
-       }\r
-\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.IDatabaseService#useLocalHsqldb(java.lang.String, java.lang.String, boolean, boolean)\r
+        * @see eu.etaxonomy.cdm.api.service.IDatabaseService#saveDataSource(java.lang.String, eu.etaxonomy.cdm.database.ICdmDataSource)\r
         */\r
-       public boolean useLocalHsqldb(String databasePath, String databaseName, String username, String password, boolean silent, boolean startServer) {\r
-               CdmPersistentDataSource dataSource = saveLocalHsqldb("tmpHsqlDb", databasePath, databaseName, username, password, silent, startServer);\r
-               return connectToDatasource(dataSource);\r
+       public CdmPersistentDataSource saveDataSource(String strDataSourceName,\r
+                       ICdmDataSource dataSource) {\r
+               return CdmPersistentDataSource.save(strDataSourceName, dataSource);\r
        }\r
        \r
-\r
        /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.IDatabaseService#getDatabaseTypeName()\r
+        * @see eu.etaxonomy.cdm.api.service.IDatabaseService#updateDataSource(java.lang.String, eu.etaxonomy.cdm.database.CdmPersistentDataSource)\r
         */\r
-       public DatabaseTypeEnum getDatabaseEnum() {\r
-               return DatabaseTypeEnum.getDatabaseEnumByDriverClass(getDataSource().getDriverClassName());\r
+       public CdmPersistentDataSource updateDataSource(String strDataSourceName,\r
+                       CdmPersistentDataSource dataSource) throws DataSourceNotFoundException {\r
+               return CdmPersistentDataSource.update(strDataSourceName, dataSource);\r
        }\r
 \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.IDatabaseService#getDriverClassName()\r
-        */\r
-       public String getDriverClassName() {\r
-               return getDataSource().getDriverClassName();\r
-       }\r
+       \r
+//TODO removed 04.02.2009 as spring 2.5.6 does not support DriverManagerDataSource.getDriverClassName anymore\r
+//Let's see if this is not needed by any other application\r
+//     /* (non-Javadoc)\r
+//      * @see eu.etaxonomy.cdm.api.service.IDatabaseService#getDatabaseTypeName()\r
+//      */\r
+//     public DatabaseTypeEnum getDatabaseEnum() {\r
+//             return DatabaseTypeEnum.getDatabaseEnumByDriverClass(getDataSource().getDriverClassName());\r
+//     }\r
+//\r
+//     /* (non-Javadoc)\r
+//      * @see eu.etaxonomy.cdm.api.service.IDatabaseService#getDriverClassName()\r
+//      */\r
+//     public String getDriverClassName() {\r
+//             return ( getDataSource()).getDriverClassName();\r
+//     }\r
 \r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.api.service.IDatabaseService#getUrl()\r
@@ -136,31 +133,16 @@ public class DatabaseServiceHibernateImpl extends ServiceBase implements IDataba
                return getDataSource().getUsername();\r
        }\r
 \r
-\r
-       //returns the DriverManagerDataSource from hibernate\r
-       private DriverManagerDataSource getDataSource(){\r
-               DriverManagerDataSource ds = (DriverManagerDataSource)SessionFactoryUtils.getDataSource(factory);\r
+    //  returns the AbstractDriverBasedDataSource from hibernate \r
+       // (generalized in order to also allow using SimpleDriverDataSource)\r
+       private AbstractDriverBasedDataSource getDataSource(){\r
+               AbstractDriverBasedDataSource ds = (AbstractDriverBasedDataSource)SessionFactoryUtils.getDataSource(factory);\r
                return ds;\r
        }\r
 \r
 \r
-\r
-//     public void createDatabase(){\r
-//             this.connectToDatabase(databaseTypeEnum, server, database, username, password)\r
-//             \r
-//             \r
-//             loader.loadDefaultTerms(WaterbodyOrCountry.class);\r
-//             loader.loadDefaultTerms(Language.class);\r
-//             loader.loadDefaultTerms(Continent.class);\r
-//             loader.loadDefaultTerms(Rank.class);\r
-//             loader.loadDefaultTerms(TypeDesignationStatus.class);\r
-//             loader.loadDefaultTerms(NomenclaturalStatusType.class);\r
-//             loader.loadDefaultTerms(SynonymRelationshipType.class);\r
-//             loader.loadDefaultTerms(HybridRelationshipType.class);\r
-//             loader.loadDefaultTerms(NameRelationshipType.class);\r
-//             loader.loadDefaultTerms(ConceptRelationshipType.class);\r
-//     \r
-//     }\r
-\r
-\r
+       public void setApplicationContext(ApplicationContext applicationContext)\r
+                       throws BeansException {\r
+               this.appContext = applicationContext;\r
+       }\r
 }\r