/**\r
* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
+* European Distributed Institute of Taxonomy\r
* http://www.e-taxonomy.eu\r
-* \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
import java.util.Enumeration;\r
import java.util.Properties;\r
\r
+import org.apache.commons.lang.StringUtils;\r
import org.apache.log4j.Logger;\r
-import org.hibernate.cache.CacheProvider;\r
-import org.hibernate.cache.NoCacheProvider;\r
+import org.hibernate.cache.internal.NoCachingRegionFactory;\r
+import org.hibernate.cache.spi.RegionFactory;\r
+import org.hibernate.cfg.Environment;\r
import org.springframework.beans.MutablePropertyValues;\r
import org.springframework.beans.factory.config.BeanDefinition;\r
import org.springframework.beans.factory.config.PropertiesFactoryBean;\r
import org.springframework.beans.factory.support.RootBeanDefinition;\r
\r
import eu.etaxonomy.cdm.common.CdmUtils;\r
-import eu.etaxonomy.cdm.database.DatabaseTypeEnum;\r
-import eu.etaxonomy.cdm.database.DbSchemaValidation;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
\r
/**\r
* @author a.mueller\r
*\r
*/\r
-public class CdmDataSource implements ICdmDataSource {\r
+public class CdmDataSource extends CdmDataSourceBase {\r
+ @SuppressWarnings("unused")\r
private static final Logger logger = Logger.getLogger(CdmDataSource.class);\r
- \r
+\r
private DatabaseTypeEnum dbType;\r
private String server;\r
- private String database; \r
+ private String database;\r
private int port = -1;\r
private String username;\r
private String password;\r
- \r
+ private NomenclaturalCode nomenclaturalCode;\r
+\r
private String filePath;\r
private H2Mode mode;\r
\r
private DbSchemaValidation hbm2dll = DbSchemaValidation.VALIDATE;\r
private boolean showSql = false;\r
private boolean formatSql = false;\r
- private Class<? extends CacheProvider> cacheProviderClass = NoCacheProvider.class;;\r
+ private boolean registerSearchListener = false;\r
+ private Class<? extends RegionFactory> cacheProviderClass = NoCachingRegionFactory.class;\r
\r
- static public CdmDataSource NewMySqlInstance(String server, String database, String username, String password){\r
- return new CdmDataSource(DatabaseTypeEnum.MySQL, server, database, -1, username, password, null, null);\r
+ public static CdmDataSource NewInstance(DatabaseTypeEnum dbType, String server, String database, String username, String password){\r
+ return new CdmDataSource(dbType, server, database, -1, username, password, null, null, null);\r
}\r
- \r
- static public CdmDataSource NewMySqlInstance(String server, String database, int port, String username, String password){\r
- return new CdmDataSource(DatabaseTypeEnum.MySQL, server, database, port, username, password, null, null);\r
+\r
+ public static CdmDataSource NewInstance(DatabaseTypeEnum dbType, String server, String database, int port, String username, String password){\r
+ return new CdmDataSource(dbType, server, database, port, username, password, null, null, null);\r
}\r
\r
- static public CdmDataSource NewSqlServer2005Instance(String server, String database, String username, String password){\r
- return new CdmDataSource(DatabaseTypeEnum.SqlServer2005, server, database, -1, username, password, null, null);\r
+ public static CdmDataSource NewInstance(DatabaseTypeEnum dbType, String server, String database, String username, String password , NomenclaturalCode code){\r
+ return new CdmDataSource(dbType, server, database, -1, username, password, null, null, code);\r
}\r
- \r
- static public CdmDataSource NewSqlServer2005Instance(String server, String database, int port, String username, String password){\r
- return new CdmDataSource(DatabaseTypeEnum.SqlServer2005, server, database, port, username, password, null, null);\r
+\r
+ public static CdmDataSource NewInstance(DatabaseTypeEnum dbType, String server, String database, int port, String username, String password , NomenclaturalCode code){\r
+ return new CdmDataSource(dbType, server, database, port, username, password, null, null, code);\r
}\r
\r
- /** in work */\r
+\r
+ static public CdmDataSource NewMySqlInstance(String server, String database, String username, String password ){\r
+ return new CdmDataSource(DatabaseTypeEnum.MySQL, server, database, -1, username, password, null, null, null);\r
+ }\r
+\r
+ static public CdmDataSource NewMySqlInstance(String server, String database, String username, String password , NomenclaturalCode code){\r
+ return new CdmDataSource(DatabaseTypeEnum.MySQL, server, database, -1, username, password, null, null, code);\r
+ }\r
+\r
+ static public CdmDataSource NewMySqlInstance(String server, String database, int port, String username, String password, NomenclaturalCode code){\r
+ return new CdmDataSource(DatabaseTypeEnum.MySQL, server, database, port, username, password, null, null, code);\r
+ }\r
+\r
+ static public CdmDataSource NewPostgreSQLInstance(String server, String database, int port, String username, String password, NomenclaturalCode code){\r
+ return new CdmDataSource(DatabaseTypeEnum.PostgreSQL, server, database, port, username, password, null, null, code);\r
+ }\r
+\r
+ static public CdmDataSource NewSqlServer2005Instance(String server, String database, int port, String username, String password, NomenclaturalCode code){\r
+ return new CdmDataSource(DatabaseTypeEnum.SqlServer2005, server, database, port, username, password, null, null, code);\r
+ }\r
+\r
+ static public CdmDataSource NewSqlServer2005Instance(String server, String database, int port, String username, String password /*, NomenclaturalCode code*/){\r
+ return new CdmDataSource(DatabaseTypeEnum.SqlServer2005, server, database, port, username, password, null, null, null);\r
+ }\r
+\r
+\r
+ /** in work\r
+ * @param code TODO*/\r
static public CdmDataSource NewH2EmbeddedInstance(String database, String username, String password){\r
+ return NewH2EmbeddedInstance(database, username, password, null, null);\r
+ }\r
+\r
+ /** in work\r
+ * @param code TODO*/\r
+ static public CdmDataSource NewH2EmbeddedInstance(String database, String username, String password, NomenclaturalCode code){\r
+ return NewH2EmbeddedInstance(database, username, password, null, code);\r
+ }\r
+\r
+ /** in work\r
+ * @param code TODO*/\r
+ static public CdmDataSource NewH2EmbeddedInstance(String database, String username, String password, String filePath, NomenclaturalCode code){\r
//FIXME in work\r
int port = -1;\r
H2Mode mode = H2Mode.EMBEDDED;\r
- CdmDataSource dataSource = new CdmDataSource(DatabaseTypeEnum.H2, null, database, port, username, password, null, null);\r
+ CdmDataSource dataSource = new CdmDataSource(DatabaseTypeEnum.H2, null, database, port, username, password, null, mode, code);\r
return dataSource;\r
}\r
\r
H2Mode mode = H2Mode.IN_MEMORY;\r
String username = "sa";\r
String password = "";\r
- CdmDataSource dataSource = new CdmDataSource(DatabaseTypeEnum.H2, null, null, port, username, password, null, null);\r
+ CdmDataSource dataSource = new CdmDataSource(DatabaseTypeEnum.H2, null, null, port, username, password, null, mode, null);\r
return dataSource;\r
}\r
\r
- \r
+\r
/**\r
* @param server\r
* @param database\r
* @param port\r
*/\r
- protected CdmDataSource(DatabaseTypeEnum dbType, String server, String database, int port, String username, String password, String filePath, H2Mode mode) {\r
+ protected CdmDataSource(DatabaseTypeEnum dbType, String server, String database, int port, String username, String password, String filePath, H2Mode mode, NomenclaturalCode code) {\r
super();\r
this.dbType = dbType;\r
this.server = server;\r
this.destroyMethodName = dbType.getDestroyMethod();\r
this.filePath = filePath;\r
this.mode = mode;\r
+ this.nomenclaturalCode = code;\r
}\r
- \r
- \r
+\r
+\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.database.ICdmDataSource#getName()\r
+ * A CdmDataSource does not have a name representation therefor the database name is returned\r
*/\r
public String getName() {\r
return database;\r
}\r
- \r
+\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.api.application.ICdmDataSource#getDatasourceBean()\r
*/\r
public BeanDefinition getDatasourceBean(){\r
- AbstractBeanDefinition bd = new RootBeanDefinition(dbType.getDriverManagerDataSourceClass());\r
+ AbstractBeanDefinition bd = new RootBeanDefinition(dbType.getDataSourceClass());\r
//attributes\r
bd.setLazyInit(isLazy);\r
if (! CdmUtils.Nz(initMethodName).trim().equals("") ){\r
if (! CdmUtils.Nz(destroyMethodName).trim().equals("") ){\r
bd.setInitMethodName(destroyMethodName);\r
}\r
- \r
+\r
//properties\r
MutablePropertyValues props = new MutablePropertyValues();\r
Properties persistentProperties = getDatasourceProperties();\r
- Enumeration<String> keys = (Enumeration)persistentProperties.keys(); \r
+ Enumeration<Object> keys = (Enumeration<Object>)persistentProperties.keys();\r
while (keys.hasMoreElements()){\r
String key = (String)keys.nextElement();\r
props.addPropertyValue(key, persistentProperties.getProperty(key));\r
+ Properties a = Environment.getProperties();\r
}\r
\r
bd.setPropertyValues(props);\r
return bd;\r
}\r
- \r
+\r
/**\r
- * Returns the list of properties that are defined in the datasource \r
- * @return \r
+ * Returns the list of properties that are defined in the datasource\r
+ * @return\r
*/\r
private Properties getDatasourceProperties(){\r
Properties result = new Properties();\r
result.put("password", password);\r
return result;\r
}\r
- \r
+\r
\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.api.application.ICdmDataSource#getHibernatePropertiesBean(eu.etaxonomy.cdm.database.CdmPersistentDataSource.HBM2DDL)\r
public BeanDefinition getHibernatePropertiesBean(DbSchemaValidation hbm2dll){\r
boolean showSql = false;\r
boolean formatSql = false;\r
- Class<? extends CacheProvider> cacheProviderClass = NoCacheProvider.class;\r
- return getHibernatePropertiesBean(hbm2dll, showSql, formatSql, cacheProviderClass);\r
+ boolean registerSearchListener = false;\r
+ Class<? extends RegionFactory> cacheProviderClass = NoCachingRegionFactory.class;\r
+ return getHibernatePropertiesBean(hbm2dll, showSql, formatSql, registerSearchListener, cacheProviderClass);\r
}\r
- \r
+\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.api.application.ICdmDataSource#getHibernatePropertiesBean(eu.etaxonomy.cdm.database.CdmPersistentDataSource.HBM2DDL, java.lang.Boolean, java.lang.Boolean, java.lang.Class)\r
*/\r
- public BeanDefinition getHibernatePropertiesBean(DbSchemaValidation hbm2dll, Boolean showSql, Boolean formatSql, Class<? extends CacheProvider> cacheProviderClass){\r
+ public BeanDefinition getHibernatePropertiesBean(DbSchemaValidation hbm2dll, Boolean showSql, Boolean formatSql, Boolean registerSearchListener, Class<? extends RegionFactory> cacheProviderClass){\r
//Hibernate default values\r
if (hbm2dll == null){\r
hbm2dll = this.hbm2dll;\r
if (cacheProviderClass == null){\r
cacheProviderClass = this.cacheProviderClass;\r
}\r
- \r
+ if(registerSearchListener == null){\r
+ registerSearchListener = this.registerSearchListener;\r
+ }\r
+\r
DatabaseTypeEnum dbtype = dbType;\r
AbstractBeanDefinition bd = new RootBeanDefinition(PropertiesFactoryBean.class);\r
MutablePropertyValues hibernateProps = new MutablePropertyValues();\r
Properties props = new Properties();\r
props.setProperty("hibernate.hbm2ddl.auto", hbm2dll.toString());\r
props.setProperty("hibernate.dialect", dbtype.getHibernateDialect());\r
- props.setProperty("hibernate.cache.provider_class", cacheProviderClass.getName());\r
+// OLD:props.setProperty("hibernate.cache.provider_class", cacheProviderClass.getName());\r
+ props.setProperty("hibernate.cache.region.factory_class", cacheProviderClass.getName());\r
props.setProperty("hibernate.show_sql", String.valueOf(showSql));\r
props.setProperty("hibernate.format_sql", String.valueOf(formatSql));\r
+ props.setProperty("hibernate.search.autoregister_listeners", String.valueOf(registerSearchListener));\r
\r
hibernateProps.addPropertyValue("properties",props);\r
bd.setPropertyValues(hibernateProps);\r
return database;\r
}\r
\r
+ public DatabaseTypeEnum getDatabaseType() {\r
+ return dbType;\r
+ }\r
+\r
public String getFilePath() {\r
return filePath;\r
}\r
\r
public H2Mode getMode() {\r
return mode;\r
- } \r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.database.ICdmDataSource#getPassword()\r
+ */\r
+ public String getPassword() {\r
+ return password;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.database.ICdmDataSource#getUserName()\r
+ */\r
+ public String getUsername() {\r
+ return username;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.database.ICdmDataSource#getNomenclaturalCode()\r
+ */\r
+ public NomenclaturalCode getNomenclaturalCode() {\r
+ return nomenclaturalCode;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ if (StringUtils.isBlank(this.database)){\r
+ return super.toString();\r
+ }else{\r
+ String result = "DataSource<" + dbType.getConnectionString(this).replace(CdmUtils.Nz(password), "") + ">";\r
+ return result;\r
+ }\r
+ }\r
+ \r
+ \r
+\r
}\r
\r