fixing failing ODBC test
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / CdmPersistentDataSource.java
index 2759ae18135c7eee47f0f2738aaf4aebb931a566..20a4522f43f9700bff573f2e0503eb057b9f95ef 100644 (file)
@@ -56,8 +56,14 @@ public class CdmPersistentDataSource extends CdmDataSourceBase implements ICdmPe
                \r
        private String beanName;\r
        private String dbUrl;\r
+       \r
+       private String database;\r
+       \r
+       /**\r
+        * This is strictly a <String, String> list of properties\r
+        */\r
        private Properties cdmSourceProperties;\r
-       private Properties dataSourceProperties;\r
+\r
        private List<Attribute> cdmSourceAttributes;\r
 \r
 \r
@@ -115,8 +121,7 @@ public class CdmPersistentDataSource extends CdmDataSourceBase implements ICdmPe
                        // properties from the persistent xml file \r
                        cdmSourceProperties = cdmPersistentXMLSource.getCdmSourceProperties();\r
                        cdmSourceAttributes = cdmPersistentXMLSource.getCdmSourceAttributes();\r
-                       // properties we must have for a data source\r
-                       dataSourceProperties = new Properties(cdmSourceProperties);\r
+                       \r
                        // added database specific properties if they are null\r
                        String url = getCdmSourceProperty(CdmSourceProperties.URL);\r
                        DatabaseTypeEnum dbTypeEnum = getDatabaseType();\r
@@ -125,19 +130,19 @@ public class CdmPersistentDataSource extends CdmDataSourceBase implements ICdmPe
                                if (getCdmSourceProperty(CdmSourceProperties.DATABASE) == null){\r
                                        String database = dbType.getDatabaseNameByConnectionString(url);\r
                                        if(database != null) {\r
-                                               dataSourceProperties.setProperty(CdmSourceProperties.DATABASE.toString(), database);\r
+                                               setDatabase(database);\r
                                        }\r
                                }\r
                                if(getCdmSourceProperty(CdmSourceProperties.SERVER) == null){\r
                                        String server = dbType.getServerNameByConnectionString(url);\r
                                        if(server != null) {\r
-                                               dataSourceProperties.setProperty(CdmSourceProperties.SERVER.toString(),server);\r
+                                               setServer(server);\r
                                        }\r
                                }\r
                                if(getCdmSourceProperty(CdmSourceProperties.PORT) == null){\r
                                        int port = dbType.getPortByConnectionString(url); \r
-                                       if(port > 0) {\r
-                                               dataSourceProperties.setProperty(CdmSourceProperties.PORT.toString(),String.valueOf(port));\r
+                                       if(port != 0) {\r
+                                               setPort(port);\r
                                        }\r
                                }\r
                        }\r
@@ -148,13 +153,18 @@ public class CdmPersistentDataSource extends CdmDataSourceBase implements ICdmPe
                return beanName;\r
        }\r
        \r
-       \r
        @Override\r
        public String getDatabase() {\r
-               return getCdmSourceProperty(CdmSourceProperties.DATABASE);\r
+               return database;\r
        }\r
 \r
 \r
+       @Override\r
+       public void setDatabase(String database) {\r
+               this.database = database;\r
+               \r
+       }\r
+               \r
        @Override\r
        public String getFilePath() {           \r
                return getCdmSourceProperty(CdmSourceProperties.FILEPATH);\r
@@ -166,15 +176,33 @@ public class CdmPersistentDataSource extends CdmDataSourceBase implements ICdmPe
                return H2Mode.fromString(getCdmSourceProperty(CdmSourceProperties.MODE));\r
        }\r
        \r
+       @Override\r
+       public void setMode(H2Mode h2Mode) {\r
+               cdmSourceProperties.put(CdmSourceProperties.MODE.toString(), h2Mode.name());\r
+               \r
+       }\r
+       \r
        @Override\r
        public String getUsername(){\r
                return getCdmSourceProperty(CdmSourceProperties.USERNAME);\r
        }\r
        \r
+       @Override\r
+       public void setUsername(String username) {\r
+               cdmSourceProperties.put(CdmSourceProperties.USERNAME.toString(), username);\r
+               \r
+       }\r
+       \r
        @Override\r
        public String getPassword(){\r
                return getCdmSourceProperty(CdmSourceProperties.PASSWORD);\r
        }\r
+       \r
+       @Override\r
+       public void setPassword(String password) {\r
+               cdmSourceProperties.put(CdmSourceProperties.PASSWORD.toString(), password);\r
+               \r
+       }\r
 \r
        @Override\r
        public NomenclaturalCode getNomenclaturalCode() {\r
@@ -183,22 +211,11 @@ public class CdmPersistentDataSource extends CdmDataSourceBase implements ICdmPe
        }\r
 \r
        @Override\r
-       public int getPort() {\r
-               String port = CdmUtils.Nz(getCdmSourceProperty(CdmSourceProperties.PORT));\r
-               if (port == null || "".equals(port)){\r
-                       return -1;\r
-               }else{\r
-                       //TODO exception if non integer\r
-                       return Integer.valueOf(port);\r
-               }\r
+       public void setNomenclaturalCode(NomenclaturalCode nomenclaturalCode) {\r
+               cdmSourceProperties.put(CdmSourceProperties.NOMENCLATURAL_CODE.toString(), nomenclaturalCode.name());\r
        }\r
 \r
 \r
-       @Override\r
-       public String getServer() {\r
-               return getCdmSourceProperty(CdmSourceProperties.SERVER);\r
-       }\r
-\r
 \r
        @Override\r
        public DatabaseTypeEnum getDatabaseType(){\r
@@ -206,13 +223,12 @@ public class CdmPersistentDataSource extends CdmDataSourceBase implements ICdmPe
                DatabaseTypeEnum dbType = DatabaseTypeEnum.getDatabaseEnumByDriverClass(strDriverClass);\r
                return dbType;\r
        }\r
-       \r
-       \r
-\r
+               \r
        \r
        public String getCdmSourceProperty(CdmSourceProperties property){               \r
-               return dataSourceProperties.getProperty(property.toString(),null);\r
+               return cdmSourceProperties.getProperty(property.toString(),null);\r
        }\r
+\r
        /**\r
         * Returns a BeanDefinition object of type DataSource that contains\r
         * datsource properties (url, username, password, ...)\r
@@ -327,6 +343,43 @@ public class CdmPersistentDataSource extends CdmDataSourceBase implements ICdmPe
                return (bean != null);\r
        }\r
 \r
+       /**\r
+        * @param strDataSourceName\r
+        * @param dataSource\r
+        * @param code \r
+        * @return\r
+        *                      the updated dataSource, null if not succesful\r
+        */\r
+       public static CdmPersistentDataSource update(String strDataSourceName,\r
+                       ICdmDataSource dataSource) throws DataSourceNotFoundException, IllegalArgumentException{\r
+               CdmPersistentSourceUtils.delete(CdmPersistentSourceUtils.getBeanName(strDataSourceName,DATASOURCE_BEAN_POSTFIX));\r
+               return save(strDataSourceName, dataSource);\r
+       }\r
+       \r
+       /**\r
+        * Replace the persisted datasource with another one.\r
+        * Used primarily for renaming a datasource.\r
+        * \r
+        * @param strDataSourceName\r
+        * @param dataSource\r
+        * @return\r
+        * @throws DataSourceNotFoundException\r
+        * @throws IllegalArgumentException\r
+        */\r
+       public static CdmPersistentDataSource replace(String strDataSourceName,\r
+                       ICdmDataSource dataSource) throws DataSourceNotFoundException, IllegalArgumentException{\r
+               CdmPersistentSourceUtils.delete(CdmPersistentSourceUtils.getBeanName(strDataSourceName,DATASOURCE_BEAN_POSTFIX));\r
+               return save(dataSource);\r
+       }\r
+       \r
+       /**\r
+        * @param dataSource\r
+        * @return\r
+        * @throws IllegalArgumentException\r
+        */\r
+       public static CdmPersistentDataSource save(ICdmDataSource dataSource)  throws IllegalArgumentException {\r
+               return save(dataSource.getName(),dataSource);\r
+       }\r
        \r
        /**\r
         * \r
@@ -408,18 +461,6 @@ public class CdmPersistentDataSource extends CdmDataSourceBase implements ICdmPe
                }\r
        }\r
        \r
-       /**\r
-        * @param strDataSourceName\r
-        * @param dataSource\r
-        * @param code \r
-        * @return\r
-        *                      the updated dataSource, null if not succesful\r
-        */\r
-       public static CdmPersistentDataSource update(String strDataSourceName,\r
-                       ICdmDataSource dataSource) throws DataSourceNotFoundException, IllegalArgumentException{\r
-               CdmPersistentSourceUtils.delete(CdmPersistentSourceUtils.getBeanName(strDataSourceName,DATASOURCE_BEAN_POSTFIX));\r
-               return save(strDataSourceName, dataSource);\r
-       }\r
 \r
        /**\r
         * Saves a datasource to the datasource config file. If strDataSourceName differs a new dataSource\r
@@ -451,7 +492,7 @@ public class CdmPersistentDataSource extends CdmDataSourceBase implements ICdmPe
                                        getCheckedDataSourceParameter(dataSource.getPassword()), \r
                                        dataSourceClass, \r
                                        null, null, null, null, \r
-                                       getCheckedDataSourceParameter(dataSource.getFilePath()), \r
+                                       dataSource.getFilePath(), \r
                                        dataSource.getMode(),\r
                                        dataSource.getNomenclaturalCode());\r
                }else{\r
@@ -459,7 +500,7 @@ public class CdmPersistentDataSource extends CdmDataSourceBase implements ICdmPe
                        Class<? extends DataSource> dataSourceClass;\r
                        try {\r
                                dataSourceClass = (Class<? extends DataSource>) Class.forName(dataSourceClassName);\r
-                               \r
+                               String server = getCheckedDataSourceParameter(dataSource.getServer());\r
                                CdmPersistentDataSource persistendDatasource =  save(\r
                                        strDataSourceName, \r
                                        dataSource.getDatabaseType(), \r
@@ -542,4 +583,9 @@ public class CdmPersistentDataSource extends CdmDataSourceBase implements ICdmPe
 \r
 \r
 \r
+\r
+\r
+\r
+\r
+\r
 }
\ No newline at end of file