Schema update for referenceType persistence #2615
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / CdmDataSource.java
index db204631efc4b31b2763495fc3e8034907435454..3ab21af96cbcc8dd7ca6a4ba4b17ce972cc15a45 100644 (file)
@@ -1,8 +1,8 @@
 /**\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
@@ -12,9 +12,11 @@ package eu.etaxonomy.cdm.database;
 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
@@ -22,8 +24,7 @@ import org.springframework.beans.factory.support.AbstractBeanDefinition;
 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
@@ -32,14 +33,15 @@ import eu.etaxonomy.cdm.database.DbSchemaValidation;
 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
@@ -50,30 +52,69 @@ public class CdmDataSource extends CdmDataSourceBase {
        private boolean showSql = false;\r
        private boolean formatSql = false;\r
        private boolean registerSearchListener = false;\r
-       private Class<? extends CacheProvider> cacheProviderClass = NoCacheProvider.class;;\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, mode);\r
+               CdmDataSource dataSource = new CdmDataSource(DatabaseTypeEnum.H2, null, database, port, username, password, null, mode, code);\r
                return dataSource;\r
        }\r
 \r
@@ -84,17 +125,17 @@ public class CdmDataSource extends CdmDataSourceBase {
                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, mode);\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
@@ -106,9 +147,10 @@ public class CdmDataSource extends CdmDataSourceBase {
                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
@@ -116,13 +158,12 @@ public class CdmDataSource extends CdmDataSourceBase {
        public String getName() {\r
                return database;\r
        }\r
-       \r
+\r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.api.application.ICdmDataSource#getDatasourceBean()\r
         */\r
-       @SuppressWarnings("unchecked")\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
@@ -131,23 +172,24 @@ public class CdmDataSource extends CdmDataSourceBase {
                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
@@ -158,7 +200,7 @@ public class CdmDataSource extends CdmDataSourceBase {
                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
@@ -167,14 +209,14 @@ public class CdmDataSource extends CdmDataSourceBase {
                boolean showSql = false;\r
                boolean formatSql = false;\r
                boolean registerSearchListener = false;\r
-               Class<? extends CacheProvider> cacheProviderClass = NoCacheProvider.class;\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, Boolean registerSearchListener, 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
@@ -191,7 +233,7 @@ public class CdmDataSource extends CdmDataSourceBase {
                if(registerSearchListener == null){\r
                        registerSearchListener = this.registerSearchListener;\r
                }\r
-               \r
+\r
                DatabaseTypeEnum dbtype = dbType;\r
                AbstractBeanDefinition bd = new RootBeanDefinition(PropertiesFactoryBean.class);\r
                MutablePropertyValues hibernateProps = new MutablePropertyValues();\r
@@ -199,7 +241,8 @@ public class CdmDataSource extends CdmDataSourceBase {
                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
@@ -232,7 +275,7 @@ public class CdmDataSource extends CdmDataSourceBase {
        public DatabaseTypeEnum getDatabaseType() {\r
                return dbType;\r
        }\r
-       \r
+\r
        public String getFilePath() {\r
                return filePath;\r
        }\r
@@ -264,8 +307,24 @@ public class CdmDataSource extends CdmDataSourceBase {
                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
 \r