+// $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
*\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
\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
/* (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
* @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
* @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
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