fixing failing ODBC test
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / CdmPersistentDataSource.java
index 3f832380f91169541a02ee523900037455ed9713..20a4522f43f9700bff573f2e0503eb057b9f95ef 100644 (file)
@@ -14,11 +14,6 @@ import static eu.etaxonomy.cdm.common.XmlHelp.insertXmlBean;
 import static eu.etaxonomy.cdm.common.XmlHelp.insertXmlValueProperty;\r
 import static eu.etaxonomy.cdm.common.XmlHelp.saveToXml;\r
 \r
-import java.io.File;\r
-import java.io.FileInputStream;\r
-import java.io.FileNotFoundException;\r
-import java.io.FileOutputStream;\r
-import java.io.IOException;\r
 import java.util.ArrayList;\r
 import java.util.Enumeration;\r
 import java.util.Iterator;\r
@@ -31,9 +26,7 @@ import org.apache.log4j.Logger;
 import org.hibernate.cache.internal.NoCachingRegionFactory;\r
 import org.hibernate.cache.spi.RegionFactory;\r
 import org.jdom.Attribute;\r
-import org.jdom.Document;\r
 import org.jdom.Element;\r
-import org.jdom.output.Format;\r
 import org.springframework.beans.MutablePropertyValues;\r
 import org.springframework.beans.factory.config.BeanDefinition;\r
 import org.springframework.beans.factory.config.PropertiesFactoryBean;\r
@@ -42,9 +35,12 @@ import org.springframework.beans.factory.support.RootBeanDefinition;
 \r
 import com.mchange.v2.c3p0.ComboPooledDataSource;\r
 \r
-import eu.etaxonomy.cdm.api.application.CdmApplicationUtils;\r
 import eu.etaxonomy.cdm.common.CdmUtils;\r
 import eu.etaxonomy.cdm.common.XmlHelp;\r
+import eu.etaxonomy.cdm.config.CdmPersistentSourceUtils;\r
+import eu.etaxonomy.cdm.config.CdmPersistentXMLSource;\r
+import eu.etaxonomy.cdm.config.CdmPersistentXMLSource.CdmSourceProperties;\r
+import eu.etaxonomy.cdm.config.ICdmPersistentSource;\r
 import eu.etaxonomy.cdm.database.types.IDatabaseType;\r
 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
 \r
@@ -52,65 +48,29 @@ import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
 /**\r
  * class to access an CdmDataSource\r
  */\r
-public class CdmPersistentDataSource extends CdmDataSourceBase{\r
+public class CdmPersistentDataSource extends CdmDataSourceBase implements ICdmPersistentSource {\r
        private static final Logger logger = Logger.getLogger(CdmPersistentDataSource.class);\r
        \r
        public static final String DATASOURCE_BEAN_POSTFIX = "DataSource";\r
-       public final static String DATASOURCE_FILE_NAME = "cdm.datasources.xml";\r
-       public final static String DATASOURCE_PATH = "/eu/etaxonomy/cdm/";\r
+\r
+               \r
+       private String beanName;\r
+       private String dbUrl;\r
        \r
-       private final static Format format = Format.getPrettyFormat(); \r
-\r
-       public enum DbProperties{\r
-               DRIVER_CLASS,\r
-               URL,\r
-               SERVER, \r
-               DATABASE,\r
-               PORT,\r
-               MODE,\r
-               FILEPATH,\r
-               USERNAME,\r
-               PASSWORD, \r
-               NOMENCLATURAL_CODE;\r
-\r
-               @Override\r
-               public String toString(){\r
-                       switch (this){\r
-                               case DRIVER_CLASS:\r
-                                       return "driverClassName";\r
-                               case URL:\r
-                                       return "url";\r
-                               case SERVER:\r
-                                       return "server";\r
-                               case DATABASE:\r
-                                       return "database";\r
-                               case PORT:\r
-                                       return "port";\r
-                               case MODE:\r
-                                       return "mode";\r
-                               case FILEPATH:\r
-                                       return "filePath";\r
-                               case USERNAME:\r
-                                       return "username";\r
-                               case PASSWORD:\r
-                                       return "password";\r
-                               case NOMENCLATURAL_CODE:\r
-                                       return "nomenclaturalCode";\r
-                               default: \r
-                                       throw new IllegalArgumentException( "Unknown enumeration type" );\r
-                       }\r
-               }\r
-       }\r
+       private String database;\r
+       \r
+       /**\r
+        * This is strictly a <String, String> list of properties\r
+        */\r
+       private Properties cdmSourceProperties;\r
+\r
+       private List<Attribute> cdmSourceAttributes;\r
+\r
 \r
        /**\r
         * The Datasource class that Spring will use to set up the connection to the database\r
         */\r
-       private static String dataSourceClassName = ComboPooledDataSource.class.getName();\r
-       // we used dbcps BasicDataSource before\r
-//     private static String dataSourceClassName = BasicDataSource.class.getName();\r
-       \r
-       //name\r
-       protected String dataSourceName;\r
+       private static String dataSourceClassName = ComboPooledDataSource.class.getName();      \r
 \r
        \r
        /**\r
@@ -150,204 +110,139 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
         * @param strDataSource\r
         */\r
        private CdmPersistentDataSource(String strDataSource){\r
-               dataSourceName = strDataSource;\r
+               setName(strDataSource);\r
+               loadSource(strDataSource);              \r
        }\r
        \r
-       /**\r
-        * Returns the name of the bean.\r
-        * @return\r
-        */\r
-       public String getName(){\r
-               return dataSourceName;\r
+       private void loadSource(String strDataSource) {\r
+               CdmPersistentXMLSource cdmPersistentXMLSource = CdmPersistentXMLSource.NewInstance(strDataSource, DATASOURCE_BEAN_POSTFIX);\r
+               if(cdmPersistentXMLSource.getElement() != null) {\r
+                       beanName = cdmPersistentXMLSource.getBeanName();\r
+                       // properties from the persistent xml file \r
+                       cdmSourceProperties = cdmPersistentXMLSource.getCdmSourceProperties();\r
+                       cdmSourceAttributes = cdmPersistentXMLSource.getCdmSourceAttributes();\r
+                       \r
+                       // added database specific properties if they are null\r
+                       String url = getCdmSourceProperty(CdmSourceProperties.URL);\r
+                       DatabaseTypeEnum dbTypeEnum = getDatabaseType();\r
+                       if (dbTypeEnum != null && url != null){\r
+                               IDatabaseType dbType = dbTypeEnum.getDatabaseType();                            \r
+                               if (getCdmSourceProperty(CdmSourceProperties.DATABASE) == null){\r
+                                       String database = dbType.getDatabaseNameByConnectionString(url);\r
+                                       if(database != null) {\r
+                                               setDatabase(database);\r
+                                       }\r
+                               }\r
+                               if(getCdmSourceProperty(CdmSourceProperties.SERVER) == null){\r
+                                       String server = dbType.getServerNameByConnectionString(url);\r
+                                       if(server != null) {\r
+                                               setServer(server);\r
+                                       }\r
+                               }\r
+                               if(getCdmSourceProperty(CdmSourceProperties.PORT) == null){\r
+                                       int port = dbType.getPortByConnectionString(url); \r
+                                       if(port != 0) {\r
+                                               setPort(port);\r
+                                       }\r
+                               }\r
+                       }\r
+               }                                       \r
        }\r
        \r
-       \r
-       /**\r
-        * Returns the name of the bean Element in the xml config file.\r
-        * @return bean name\r
-        */\r
-       private static String getBeanName(String name){\r
-               return name == null? null : name + DATASOURCE_BEAN_POSTFIX;\r
+       public String getBeanName() {\r
+               return beanName;\r
        }\r
-\r
-\r
        \r
+       @Override\r
        public String getDatabase() {\r
-               return getDatabaseProperty(DbProperties.DATABASE);\r
+               return database;\r
        }\r
 \r
 \r
-       public String getFilePath() {\r
-               //TODO null\r
-               return getDatabaseProperty(DbProperties.FILEPATH);\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
        }\r
 \r
 \r
-       public H2Mode getMode() {\r
-               //TODO null\r
-               return H2Mode.fromString(getDatabaseProperty(DbProperties.MODE));\r
+       @Override\r
+       public H2Mode getMode() {               \r
+               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
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.database.ICdmDataSource#getNomenclaturalCode()\r
-        */\r
+       @Override\r
        public NomenclaturalCode getNomenclaturalCode() {\r
                // TODO null\r
-               return NomenclaturalCode.fromString(getDatabaseProperty(DbProperties.NOMENCLATURAL_CODE));\r
+               return NomenclaturalCode.fromString(getCdmSourceProperty(CdmSourceProperties.NOMENCLATURAL_CODE));\r
        }\r
 \r
-       public int getPort() {\r
-               String port = CdmUtils.Nz(getDatabaseProperty(DbProperties.PORT));\r
-               if ("".equals(port)){\r
-                       return -1;\r
-               }else{\r
-                       //TODO exception if non integer\r
-                       return Integer.valueOf(port);\r
-               }\r
+       @Override\r
+       public void setNomenclaturalCode(NomenclaturalCode nomenclaturalCode) {\r
+               cdmSourceProperties.put(CdmSourceProperties.NOMENCLATURAL_CODE.toString(), nomenclaturalCode.name());\r
        }\r
 \r
 \r
-       public String getServer() {\r
-               return getDatabaseProperty(DbProperties.SERVER);\r
-       }\r
 \r
-       /**\r
-        * Returns the database type of the data source. \r
-        * @return the database type of the data source. Null if the bean or the driver class property does not exist or the driver class is unknown.\r
-        */\r
+       @Override\r
        public DatabaseTypeEnum getDatabaseType(){\r
-               Element bean = getDatasourceBeanXml(this.dataSourceName);\r
-               if (bean == null){\r
-                       return null;\r
-               }else{\r
-                       Element driverProp = XmlHelp.getFirstAttributedChild(bean, "property", "name", "driverClassName");\r
-                       if (driverProp == null){\r
-                               logger.warn("Unknown property driverClass");\r
-                       return null;\r
-                       }else{\r
-                               String strDriverClass = driverProp.getAttributeValue("value");\r
-                               DatabaseTypeEnum dbType = DatabaseTypeEnum.getDatabaseEnumByDriverClass(strDriverClass);\r
-                               return dbType;\r
-                       }\r
-               }\r
-       }\r
-       \r
-       \r
-       /**\r
-        * Returns the database type of the data source. \r
-        * @return the database type of the data source. Null if the bean or the driver class property does not exist or the driver class is unknown.\r
-        */\r
-       protected String getDatabaseProperty(DbProperties property){\r
-               Element bean = getDatasourceBeanXml(this.dataSourceName);\r
-               String url;\r
-               String result = null;\r
-               if (bean != null){\r
-                       result = getPropertyValue(bean, property.toString());\r
-                       if (result == null){  //test if property is database, server or port which are included in the url\r
-                               url = getPropertyValue(bean, DbProperties.URL.toString());\r
-                               DatabaseTypeEnum dbTypeEnum = getDatabaseType();\r
-                               if (dbTypeEnum != null){\r
-                                       IDatabaseType dbType = dbTypeEnum.getDatabaseType();\r
-                                       if (property.equals(DbProperties.DATABASE)){\r
-                                               result = dbType.getDatabaseNameByConnectionString(url);\r
-                                       }else if(property.equals(DbProperties.SERVER)){\r
-                                               result = dbType.getServerNameByConnectionString(url);\r
-                                       }else if(property.equals(DbProperties.PORT)){\r
-                                               result = String.valueOf(dbType.getPortByConnectionString(url));\r
-                                       }else{\r
-                                               logger.debug("Unknown property: " + property);\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               return result;  \r
-       }\r
-       \r
-       private String getPropertyValue(Element bean, String property){\r
-               Element driverProp = XmlHelp.getFirstAttributedChild(bean, "property", "name", property);\r
-               if (driverProp == null){\r
-                       logger.debug("Unknown property: " + property);\r
-               return null;\r
-               }else{\r
-                       String strProperty = driverProp.getAttributeValue("value");\r
-                       return strProperty;\r
-               }\r
+               String strDriverClass = getCdmSourceProperty(CdmSourceProperties.DRIVER_CLASS);\r
+               DatabaseTypeEnum dbType = DatabaseTypeEnum.getDatabaseEnumByDriverClass(strDriverClass);\r
+               return dbType;\r
        }\r
+               \r
        \r
-\r
-\r
-       /**\r
-        * Returns the list of properties that are defined in the datasource    \r
-        * @return \r
-        */\r
-       @SuppressWarnings("unchecked")\r
-       public List<Attribute> getDatasourceAttributes(){\r
-               List<Attribute> result = new ArrayList<Attribute>();\r
-               Element bean = getDatasourceBeanXml(this.dataSourceName);\r
-               if (bean == null){\r
-                       return null;\r
-               }else{\r
-                       result = bean.getAttributes();\r
-               }\r
-               return result;\r
-       }       \r
-\r
-       /**\r
-        * Returns a defined property of the datasource\r
-        * @return the property of the data source. NULL if the datasource bean or the property does not exist.\r
-        */\r
-       public String getDatasourceProperty(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
+       public String getCdmSourceProperty(CdmSourceProperties property){               \r
+               return cdmSourceProperties.getProperty(property.toString(),null);\r
        }\r
 \r
-       \r
-       /**\r
-        * Returns the list of properties that are defined in the datasource    \r
-        * @return \r
-        */\r
-       public Properties getDatasourceProperties(){\r
-               Properties result = new Properties();\r
-               Element bean = getDatasourceBeanXml(this.dataSourceName);\r
-               if (bean == null){\r
-                       return null;\r
-               }else{\r
-                       List<Element> elProperties = XmlHelp.getAttributedChildList(bean, "property", "name");\r
-                       Iterator<Element> iterator = elProperties.iterator();\r
-                       while(iterator.hasNext()){\r
-                               Element next = iterator.next();\r
-                               String strName = next.getAttributeValue("name");\r
-                               String strValue = next.getAttributeValue("value");\r
-                               result.put(strName, strValue);\r
-                       }\r
-               }\r
-               return result;\r
-       }\r
-       \r
        /**\r
         * Returns a BeanDefinition object of type DataSource that contains\r
         * datsource properties (url, username, password, ...)\r
         * @return\r
         */\r
        @SuppressWarnings("unchecked")\r
+       @Override\r
        public BeanDefinition getDatasourceBean(){\r
-               DatabaseTypeEnum dbtype = DatabaseTypeEnum.getDatabaseEnumByDriverClass(getDatasourceProperty(DbProperties.DRIVER_CLASS));\r
+               DatabaseTypeEnum dbtype = \r
+                               DatabaseTypeEnum.getDatabaseEnumByDriverClass(getCdmSourceProperty(CdmSourceProperties.DRIVER_CLASS));\r
                \r
                AbstractBeanDefinition bd = new RootBeanDefinition(dbtype.getDataSourceClass());\r
                //attributes\r
-               Iterator<Attribute> iterator = getDatasourceAttributes().iterator();\r
+               Iterator<Attribute> iterator = cdmSourceAttributes.iterator();\r
                while(iterator.hasNext()){\r
                        Attribute attribute = iterator.next();\r
                        if (attribute.getName().equals("lazy-init")){\r
@@ -365,11 +260,17 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
                \r
                //properties\r
                MutablePropertyValues props = new MutablePropertyValues();\r
-               Properties persistentProperties = getDatasourceProperties();\r
-               Enumeration<String> keys = (Enumeration)persistentProperties.keys(); \r
+               \r
+               Enumeration<String> keys = (Enumeration)cdmSourceProperties.keys(); \r
                while (keys.hasMoreElements()){\r
                        String key = (String)keys.nextElement();\r
-                       props.addPropertyValue(key, persistentProperties.getProperty(key));\r
+                       \r
+                       if (key.equals("nomenclaturalCode") && cdmSourceProperties.getProperty(key).equals("ICBN")){\r
+                               //bugfix for old nomenclatural codes, remove if fixed elsewhere, see https://dev.e-taxonomy.eu/trac/ticket/3658\r
+                               props.addPropertyValue(key, NomenclaturalCode.ICNAFP.name());\r
+                       }else{\r
+                               props.addPropertyValue(key, cdmSourceProperties.getProperty(key));\r
+                       }\r
                }\r
 \r
                bd.setPropertyValues(props);\r
@@ -381,6 +282,7 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
         * @param showSql\r
         * @return\r
         */\r
+       @Override\r
        public BeanDefinition getHibernatePropertiesBean(DbSchemaValidation hbm2dll){\r
                boolean showSql = false;\r
                boolean formatSql = false;\r
@@ -395,6 +297,7 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
         * @param showSql\r
         * @return\r
         */\r
+       @Override\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
@@ -419,7 +322,7 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
 \r
                Properties props = new Properties();\r
                props.setProperty("hibernate.hbm2ddl.auto", hbm2dll.toString());\r
-               props.setProperty("hibernate.dialect", dbtype.getHibernateDialect());\r
+               props.setProperty("hibernate.dialect", dbtype.getHibernateDialectCanonicalName());\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
@@ -436,10 +339,47 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
         * @return true if a datasource with the given name exists in the according datasource config file.\r
         */\r
        public static boolean exists(String strDataSourceName){\r
-               Element bean = getDatasourceBeanXml(strDataSourceName);\r
+               Element bean = CdmPersistentSourceUtils.getCdmSourceBeanXml(strDataSourceName, DATASOURCE_BEAN_POSTFIX);\r
                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
@@ -481,16 +421,16 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
                ICdmDataSource dataSource = new CdmDataSource(databaseTypeEnum, server, database, portNumber, username, password, filePath, mode, code);\r
                                \r
                //root\r
-               Element root = getBeansRoot(getDataSourceInputStream());\r
+               Element root = getBeansRoot(CdmPersistentSourceUtils.getCdmSourceInputStream());\r
                if (root == null){\r
                        return null;\r
                }\r
                //bean\r
-               Element bean = XmlHelp.getFirstAttributedChild(root, "bean", "id", getBeanName(strDataSourceName));\r
+               Element bean = XmlHelp.getFirstAttributedChild(root, "bean", "id", CdmPersistentSourceUtils.getBeanName(strDataSourceName, DATASOURCE_BEAN_POSTFIX));\r
                if (bean != null){\r
                        bean.detach();  //delete old version if necessary\r
                }\r
-               bean = insertXmlBean(root, getBeanName(strDataSourceName), dataSourceClass.getName());\r
+               bean = insertXmlBean(root, CdmPersistentSourceUtils.getBeanName(strDataSourceName, DATASOURCE_BEAN_POSTFIX), dataSourceClass.getName());\r
                //attributes\r
                bean.setAttribute("lazy-init", "true");\r
                if (initMethod != null) {bean.setAttribute("init-method", initMethod);}\r
@@ -509,7 +449,10 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
                if (code != null) {insertXmlValueProperty(bean, "nomenclaturalCode", code.name());}\r
                \r
                //save\r
-               saveToXml(root.getDocument(), getResourceDirectory(), DATASOURCE_FILE_NAME, format );\r
+               saveToXml(root.getDocument(), \r
+                               CdmPersistentSourceUtils.getResourceDirectory(), \r
+                               CdmPersistentXMLSource.CDMSOURCE_FILE_NAME, \r
+                               XmlHelp.prettyFormat );\r
                try {\r
                        return NewInstance(strDataSourceName) ;\r
                } catch (DataSourceNotFoundException e) {\r
@@ -518,18 +461,6 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
                }\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
-               delete(CdmPersistentDataSource.NewInstance(strDataSourceName));\r
-               return save(strDataSourceName, dataSource);\r
-       }\r
 \r
        /**\r
         * Saves a datasource to the datasource config file. If strDataSourceName differs a new dataSource\r
@@ -548,9 +479,9 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
                \r
                if(dataSource.getDatabaseType().equals(DatabaseTypeEnum.H2)){\r
                        Class<? extends DataSource> dataSourceClass =  LocalH2.class;\r
-                       if(dataSource.getMode() == null){\r
+                       if(dataSource.getMode() == null) {\r
                                new IllegalArgumentException("H2 mode not specified");\r
-                       }\r
+                       }                       \r
                        return save(\r
                                        strDataSourceName, \r
                                        dataSource.getDatabaseType(), \r
@@ -561,7 +492,7 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
                                        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
@@ -569,7 +500,7 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
                        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
@@ -593,24 +524,10 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
        }\r
 \r
        private static String getCheckedDataSourceParameter(String parameter) throws IllegalArgumentException{          \r
-               if(parameter != null){\r
+               if(parameter != null) {\r
                        return parameter;\r
-               }else{\r
-                       new IllegalArgumentException("Non obsolete paramater was assigned a null value: " + parameter);\r
-                       return null;\r
-               }\r
-       }\r
-\r
-       /**\r
-        * Deletes a dataSource\r
-        * @param dataSource\r
-        */\r
-       public static void delete (CdmPersistentDataSource dataSource){\r
-               Element bean = getDatasourceBeanXml(dataSource.getName());\r
-               if (bean != null){\r
-                       Document doc = bean.getDocument();\r
-                       bean.detach();\r
-                       saveToXml(doc, getDataSourceOutputStream(), format );\r
+               } else {\r
+                       throw new IllegalArgumentException("Non obsolete paramater was assigned a null value: " + parameter);\r
                }\r
        }\r
        \r
@@ -623,7 +540,7 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
        static public List<CdmPersistentDataSource> getAllDataSources(){\r
                List<CdmPersistentDataSource> dataSources = new ArrayList<CdmPersistentDataSource>();\r
                \r
-               Element root = getBeansRoot(getDataSourceInputStream());\r
+               Element root = getBeansRoot(CdmPersistentSourceUtils.getCdmSourceInputStream());\r
                if (root == null){\r
                        return null;\r
                }else{\r
@@ -640,99 +557,8 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
                return dataSources;\r
        }\r
        \r
-       public String getUsername(){\r
-               return getDatasourceProperty(DbProperties.USERNAME);\r
-       }\r
-       \r
-       public String getPassword(){\r
-               return getDatasourceProperty(DbProperties.PASSWORD);\r
-       }\r
-\r
-\r
-       /* (non-Javadoc)\r
-        * @see java.lang.Object#toString()\r
-        */\r
-       public String toString(){\r
-               if (this.dataSourceName != null){\r
-                       return dataSourceName;\r
-               }else{\r
-                       return null;\r
-               }\r
-       }\r
-\r
-\r
-       \r
-       /**\r
-        * Returns the datasource config file input stream.\r
-        * @return data source config file input stream\r
-        */\r
-       static protected FileInputStream getDataSourceInputStream(){\r
-               String dir = getResourceDirectory();\r
-               File file = new File(dir + File.separator +  DATASOURCE_FILE_NAME);\r
-               return fileInputStream(file);\r
-       }\r
-       \r
-       \r
-       /**\r
-        * Returns the datasource config file outputStream.\r
-        * @return data source config file outputStream\r
-        */\r
-       static protected FileOutputStream getDataSourceOutputStream(){\r
-               String dir = getResourceDirectory();\r
-               File file = new File(dir + File.separator +  DATASOURCE_FILE_NAME);\r
-               return fileOutputStream(file);\r
-       }\r
-\r
-       /**\r
-        * Returns the jdom Element representing the data source bean in the config file.\r
-        * @return\r
-        */\r
-       private static Element getDatasourceBeanXml(String strDataSourceName){\r
-               FileInputStream inStream = getDataSourceInputStream();\r
-               Element root = getBeansRoot(inStream);\r
-               if (root == null){\r
-                       return null;\r
-               }else{\r
-               Element xmlBean = XmlHelp.getFirstAttributedChild(root, "bean", "id", getBeanName(strDataSourceName));\r
-                       if (xmlBean == null){\r
-                               //TODO warn or info\r
-                               logger.debug("Unknown Element 'bean id=" +strDataSourceName + "' ");\r
-                       };\r
-                       return xmlBean;\r
-               }\r
-       }\r
-       \r
-       // returns the directory containing the resources \r
-       private static String getResourceDirectory(){\r
-               try {\r
-                       File f = CdmApplicationUtils.getWritableResourceDir();\r
-                       return f.getPath();\r
-               } catch (IOException e) {\r
-                       logger.error(e);\r
-                       throw new RuntimeException(e);\r
-               }\r
-       }\r
-       \r
-       static private FileInputStream fileInputStream(File file){\r
-               try {\r
-                       FileInputStream fis = new FileInputStream(file);\r
-                       return fis;\r
-               } catch (FileNotFoundException e) {\r
-                       logger.warn("File " + file == null?"null":file.getAbsolutePath() + " does not exist in the file system");\r
-                       return null;\r
-               }\r
-       }\r
-       \r
-       static private FileOutputStream fileOutputStream(File file){\r
-               try {\r
-                       FileOutputStream fos = new FileOutputStream(file);\r
-                       return fos;\r
-               } catch (FileNotFoundException e) {\r
-                       logger.warn("File " + (file == null?"null":file.getAbsolutePath()) + " does not exist in the file system");\r
-                       return null;\r
-               }\r
-       }\r
        \r
+       @Override\r
        public boolean equals(Object obj){\r
                if (obj == null){\r
                        return false;\r
@@ -740,8 +566,26 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
                        return false;\r
                }else{\r
                        CdmPersistentDataSource dataSource = (CdmPersistentDataSource)obj;\r
-                       return (this.dataSourceName == dataSource.dataSourceName);\r
+                       return (getName() == dataSource.getName());\r
                }\r
 \r
        }\r
+       \r
+       @Override\r
+       public String toString(){\r
+               if (getName() != null){\r
+                       return getName();\r
+               }else{\r
+                       return null;\r
+               }\r
+       }\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
 }
\ No newline at end of file