(no commit message)
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 4 Mar 2008 17:13:07 +0000 (17:13 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 4 Mar 2008 17:13:07 +0000 (17:13 +0000)
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/CdmDataSource.java

index b0913e045cb00c3598a56cb684546b536e0a8897..ae4126383e90de559fa03ddf250587fb967868d5 100644 (file)
@@ -12,6 +12,8 @@ import java.util.Map;
 import java.util.Properties;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.hibernate.cache.CacheProvider;\r
+import org.hibernate.cache.NoCacheProvider;\r
 import org.jdom.Attribute;\r
 import org.jdom.Document;\r
 import org.jdom.Element;\r
@@ -45,6 +47,48 @@ public class CdmDataSource {
        public static final String DATASOURCE_BEAN_POSTFIX = "DataSource";\r
        public final static String DATASOURCE_FILE_NAME = "cdm.datasource.xml";\r
        private final static Format format = Format.getPrettyFormat(); \r
+\r
+       \r
+       public enum DbProperties{\r
+               DRIVER_CLASS,\r
+               URL,\r
+               USERNAME,\r
+               PASSWORD;\r
+\r
+               public String toString(){\r
+                       switch (this){\r
+                               case DRIVER_CLASS:\r
+                                       return "driverClassName";\r
+                               case URL:\r
+                                       return "url";\r
+                               case USERNAME:\r
+                                       return "username";\r
+                               case PASSWORD:\r
+                                       return "password";\r
+                               default: \r
+                                       throw new IllegalArgumentException( "Unknown enumeration type" );\r
+                       }\r
+               }\r
+       }\r
+       \r
+       public enum HBM2DDL{\r
+               VALIDATE,\r
+               UPDATE,\r
+               CREATE;\r
+\r
+               public String getHibernateString(){\r
+                       switch (this){\r
+                               case VALIDATE:\r
+                                       return "validate";\r
+                               case UPDATE:\r
+                                       return "update";\r
+                               case CREATE:\r
+                                       return "create";\r
+                               default: \r
+                                       throw new IllegalArgumentException( "Unknown enumeration type" );\r
+                       }\r
+               }\r
+       }\r
        \r
        //name\r
        protected String dataSourceName;\r
@@ -138,20 +182,77 @@ public class CdmDataSource {
                        }\r
                }\r
        }\r
+\r
        \r
+       \r
+       /**\r
+        * Returns the url of . \r
+        * @return the database type of the data source. Null if the bean or the url property does not exist.\r
+        */\r
+       public String getDbProperty(DbProperties dbProp){\r
+               Element bean = getDatasourceBeanXml(this.dataSourceName);\r
+               if (bean == null){\r
+                       return null;\r
+               }else{\r
+                       Element elProperty = XmlHelp.getFirstAttributedChild(bean, "property", "name", dbProp.toString());\r
+                       if (elProperty == null){\r
+                               logger.warn("Unknown property: " + dbProp.toString());\r
+                       return null;\r
+                       }else{\r
+                               String strValue = elProperty.getAttributeValue("value");\r
+                               return strValue;\r
+                       }\r
+               }\r
+       }\r
+       \r
+       /**\r
+        * Returns a BeanDefinition object of type  DriverManagerDataSource that contains\r
+        * datsource properties (url, username, password, ...)\r
+        * @return\r
+        */\r
        public BeanDefinition getDatasourceBean(){\r
                AbstractBeanDefinition bd = new RootBeanDefinition(DriverManagerDataSource.class);\r
-               DatabaseTypeEnum dbtype = getDatabaseType();\r
+               DatabaseTypeEnum dbtype = DatabaseTypeEnum.getDatabaseEnumByDriverClass(getDbProperty(DbProperties.DRIVER_CLASS));\r
                //TODO: read real values\r
                MutablePropertyValues props = new MutablePropertyValues();\r
                props.addPropertyValue("driverClassName", dbtype.getDriverClassName());\r
-               props.addPropertyValue("url", "jdbc:mysql://192.168.2.10/cdm_build");\r
-               props.addPropertyValue("username", "edit");\r
-               props.addPropertyValue("password", "wp5");\r
+               props.addPropertyValue("url", getDbProperty(DbProperties.URL));\r
+               props.addPropertyValue("username", getDbProperty(DbProperties.USERNAME));\r
+               props.addPropertyValue("password", getDbProperty(DbProperties.PASSWORD));\r
                bd.setPropertyValues(props);\r
                return bd;\r
        }\r
-       public BeanDefinition getHibernatePropertiesBean(HBM2DDL hbm2dll, boolean showSql){\r
+       \r
+       /**\r
+        * @param hbm2dll\r
+        * @param showSql\r
+        * @return\r
+        */\r
+       public BeanDefinition getHibernatePropertiesBean(HBM2DDL hbm2dll){\r
+               boolean showSql = false;\r
+               boolean formatSql = false;\r
+               Class<? extends CacheProvider> cacheProviderClass = NoCacheProvider.class;\r
+               return getHibernatePropertiesBean(hbm2dll, showSql, formatSql, cacheProviderClass);\r
+       }\r
+       \r
+       \r
+       /**\r
+        * @param hbm2dll\r
+        * @param showSql\r
+        * @return\r
+        */\r
+       public BeanDefinition getHibernatePropertiesBean(HBM2DDL hbm2dll, Boolean showSql, Boolean formatSql, Class<? extends CacheProvider> cacheProviderClass){\r
+               //Hibernate default values\r
+               if (showSql == null){\r
+                       showSql = false;\r
+               }\r
+               if (formatSql == null){\r
+                       formatSql = false;\r
+               }\r
+               if (cacheProviderClass == null){\r
+                       cacheProviderClass = NoCacheProvider.class;\r
+               }\r
+               \r
                DatabaseTypeEnum dbtype = getDatabaseType();\r
                AbstractBeanDefinition bd = new RootBeanDefinition(PropertiesFactoryBean.class);\r
                MutablePropertyValues hibernateProps = new MutablePropertyValues();\r
@@ -159,15 +260,16 @@ public class CdmDataSource {
                Properties props = new Properties();\r
                props.setProperty("hibernate.hbm2ddl.auto", hbm2dll.getHibernateString());\r
                props.setProperty("hibernate.dialect", dbtype.getHibernateDialect());\r
-               props.setProperty("hibernate.cache.provider_class", "org.hibernate.cache.NoCacheProvider");\r
+               props.setProperty("hibernate.cache.provider_class", cacheProviderClass.getName());\r
                props.setProperty("hibernate.show_sql", String.valueOf(showSql));\r
-               props.setProperty("hibernate.format_sql", String.valueOf(false));\r
+               props.setProperty("hibernate.format_sql", String.valueOf(formatSql));\r
 \r
                hibernateProps.addPropertyValue("properties",props);\r
                bd.setPropertyValues(hibernateProps);\r
                return bd;\r
        }\r
        \r
+       \r
        /**\r
         * Tests existing of the datsource in the according config  file.\r
         * @return true if a datasource with the given name exists in the according datasource config file.\r
@@ -366,27 +468,6 @@ public class CdmDataSource {
                return f.getPath();\r
        }\r
        \r
-//     /**\r
-//      * Returns the session factory config file input stream.\r
-//      * @return session factory config file\r
-//      */\r
-//     private FileInputStream get22SessionFactoryInputStream(){\r
-//             String dir = getResourceDirectory();\r
-//             File file = new File(dir + File.separator +  SESSION_FACTORY_FILE);\r
-//             return fileInputStream(file);\r
-//     }\r
-//     \r
-//     /**\r
-//      * Returns the session factory output stream.\r
-//      * @return \r
-//      */\r
-//     private FileOutputStream get22SessionFactoryOutputStream(){\r
-//             String dir = getResourceDirectory();\r
-//             File file = new File(dir + File.separator +  SESSION_FACTORY_FILE);\r
-//             return fileOutputStream(file);\r
-//     }\r
-//     \r
-       \r
        static private FileInputStream fileInputStream(File file){\r
                try {\r
                        FileInputStream fis = new FileInputStream(file);\r