(no commit message)
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 11 Dec 2007 10:23:49 +0000 (10:23 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 11 Dec 2007 10:23:49 +0000 (10:23 +0000)
cdmlibrary/src/main/java/eu/etaxonomy/cdm/api/service/DatabaseServiceHibernateImpl.java
cdmlibrary/src/main/java/eu/etaxonomy/cdm/api/service/IDatabaseService.java
cdmlibrary/src/main/java/eu/etaxonomy/cdm/common/CdmUtils.java
cdmlibrary/src/main/java/eu/etaxonomy/cdm/common/XmlHelp.java
cdmlibrary/src/main/java/eu/etaxonomy/cdm/database/CdmDataSource.java
cdmlibrary/src/main/java/eu/etaxonomy/cdm/database/LocalHsqldb.java

index 00b9285d283f94ebb5779d7c8f9680f0095b17d5..1fd330497b43645793ec61e165e7f8c76e6b6b51 100644 (file)
@@ -30,6 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
 import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
 import eu.etaxonomy.cdm.database.CdmDataSource;\r
 import eu.etaxonomy.cdm.database.DatabaseTypeEnum;\r
+import eu.etaxonomy.cdm.database.LocalHsqldb;\r
 import eu.etaxonomy.cdm.database.types.MySQLDatabaseType;\r
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
 import eu.etaxonomy.cdm.model.common.Language;\r
@@ -106,6 +107,30 @@ public class DatabaseServiceHibernateImpl extends ServiceBase implements IDataba
                        String server, String database, String username, String password) {\r
                return CdmDataSource.save(strDataSourceName, databaseTypeEnum, server, database, username, password);\r
        }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.api.service.IDatabaseService#useLocalHsqldb(java.lang.String, java.lang.String, boolean, boolean)\r
+        */\r
+       public CdmDataSource saveLocalHsqldb(String strDataSourceName, String databasePath, String databaseName, String username, String password, boolean silent, boolean startServer) {\r
+               return CdmDataSource.saveLocalHsqlDb(strDataSourceName, databasePath, databaseName, username, password);\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.api.service.IDatabaseService#useLocalHsqldb()\r
+        */\r
+       public boolean useLocalDefaultHsqldb() {\r
+                       CdmDataSource dataSource = CdmDataSource.NewLocalHsqlInstance();\r
+                       return connectToDatasource(dataSource);\r
+       }\r
+\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.api.service.IDatabaseService#useLocalHsqldb(java.lang.String, java.lang.String, boolean, boolean)\r
+        */\r
+       public boolean useLocalHsqldb(String databasePath, String databaseName, String username, String password, boolean silent, boolean startServer) {\r
+               CdmDataSource dataSource = saveLocalHsqldb("tmpHsqlDb", databasePath, databaseName, username, password, silent, startServer);\r
+               return connectToDatasource(dataSource);\r
+       }\r
        \r
 \r
        /* (non-Javadoc)\r
@@ -115,8 +140,6 @@ public class DatabaseServiceHibernateImpl extends ServiceBase implements IDataba
                return DatabaseTypeEnum.getDatabaseEnumByDriverClass(getDataSource().getDriverClassName());\r
        }\r
 \r
-\r
-\r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.api.service.IDatabaseService#getDriverClassName()\r
         */\r
@@ -138,24 +161,6 @@ public class DatabaseServiceHibernateImpl extends ServiceBase implements IDataba
                return getDataSource().getUsername();\r
        }\r
 \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.IDatabaseService#useLocalHsqldb()\r
-        */\r
-       public boolean useLocalHsqldb() {\r
-               logger.error("Method not yet implemented");\r
-               return false;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.IDatabaseService#useLocalHsqldb(java.lang.String, java.lang.String, boolean, boolean)\r
-        */\r
-       public boolean useLocalHsqldb(String path, String databaseName,\r
-                       boolean silent, boolean startServer) {\r
-               // TODO Auto-generated method stub\r
-               logger.error("Method not yet implemented");\r
-               return false;\r
-       }\r
-       \r
 \r
        //returns the DriverManagerDataSource from hibernate\r
        private DriverManagerDataSource getDataSource(){\r
@@ -163,6 +168,8 @@ public class DatabaseServiceHibernateImpl extends ServiceBase implements IDataba
                return ds;\r
        }\r
 \r
+\r
+\r
 //     public void createDatabase(){\r
 //             this.connectToDatabase(databaseTypeEnum, server, database, username, password)\r
 //             \r
index a24ce765d14506da7ffdcd30e205c50440119146..528ecb3abfd159456dd37b5378f12609908670f3 100644 (file)
@@ -45,7 +45,7 @@ public interface IDatabaseService extends IService {
         * otherwise the hsql-server might still be running, if startet by cdmLibrary.\r
         * @return true if a connection could be established\r
         */\r
-       public boolean useLocalHsqldb();\r
+       public boolean useLocalDefaultHsqldb();\r
        \r
        /**\r
         * Set the database connection to the local Hsqldb-database using\r
@@ -61,7 +61,7 @@ public interface IDatabaseService extends IService {
         * @return true if a connection could be established\r
         * TODO exceptions\r
         */\r
-       public boolean useLocalHsqldb(String path, String databaseName, boolean silent, boolean startServer);\r
+       public boolean useLocalHsqldb(String databasePath, String databaseName, String username, String password, boolean silent, boolean startServer);\r
 \r
        /**\r
         * Connect to the database with the given parameters\r
@@ -104,5 +104,16 @@ public interface IDatabaseService extends IService {
         */\r
        public CdmDataSource saveDataSource(String strDataSourceName, DatabaseTypeEnum databaseTypeEnum, String server, String database, String username, String password);\r
        \r
+       /**\r
+        * Saves a new hsqldb datasource into the datasource config file.\r
+        * @param strDataSourceName\r
+        * @param path\r
+        * @param database\r
+        * @param username\r
+        * @param password\r
+        * @return the CdmDataSource, null if not successful.\r
+        */\r
+       public CdmDataSource saveLocalHsqldb(String strDataSourceName, String path, String database, String username, String password, boolean silent, boolean startServer);\r
+       \r
        public void setApplicationController(CdmApplicationController cdmApplicationController);\r
 }
\ No newline at end of file
index a9538eabce7df63b2d4e51c5ce128e791126975d..854bfc0b4f6b8ae4eacbbffdb0acc1e6168e61dd 100644 (file)
@@ -57,8 +57,8 @@ public class CdmUtils {
                                        fileResourceDir= file.getParentFile();\r
                                }else{\r
                                        String subPath = File.separator + "cdmResources" ;\r
-                                       //file = new File(System.getProperty("user.home") + File.separator + ".cdmLibrary" + File.separator + "writableResources" );\r
-                                       file = new File(System.getProperty("user.dir") + subPath );\r
+                                       file = new File(System.getProperty("user.home") + File.separator + ".cdmLibrary" + File.separator + "writableResources" );\r
+                                       //file = new File(System.getProperty("user.dir") + subPath );  //does not work in plugin-environmen (uses eclipse installation directory)\r
                                        \r
                                        file.mkdirs();\r
                                        copyResource(file, CdmDataSource.DATASOURCE_FILE_NAME);\r
index 243bd588a4c4be21d5d2920310f0b6b9571a53df..f476dd2f56f908b0bdd0b9a0ed0dedef25b08140 100644 (file)
@@ -74,7 +74,7 @@ public class XmlHelp {
                return null;\r
        }\r
        \r
-       \r
+\r
        /**\r
         * @param parent\r
         * @param elementName\r
index 97b6e9f00bdf97a25097cce7da8579743a7cf833..72f7ca1d0059d455462aebd3478b0d2a6443e40f 100644 (file)
@@ -13,6 +13,7 @@ import org.jdom.Attribute;
 import org.jdom.Document;\r
 import org.jdom.Element;\r
 import org.jdom.output.Format;\r
+import org.springframework.jdbc.datasource.DriverManagerDataSource;\r
 \r
 import eu.etaxonomy.cdm.common.CdmUtils;\r
 import eu.etaxonomy.cdm.common.XmlHelp;\r
@@ -54,6 +55,21 @@ public class CdmDataSource {
                        return null;\r
                }\r
        }\r
+       \r
+       \r
+       /**\r
+        * Returns the default CdmDataSource\r
+        * @return the default CdmDataSource\r
+        */\r
+       public final static CdmDataSource NewLocalHsqlInstance(){\r
+               try {\r
+                       return NewInstance("localDefaultHsql");\r
+               } catch (DataSourceNotFoundException e) {\r
+                       logger.error("Local datasource does not exist in config file");\r
+                       return null;\r
+               }\r
+       }\r
+       \r
        /**\r
         * Returns the CdmDataSource named by strDataSource\r
         * @param strDataSource\r
@@ -197,6 +213,34 @@ public class CdmDataSource {
         */\r
        public static CdmDataSource save(String strDataSourceName, DatabaseTypeEnum databaseTypeEnum, String server, String database, \r
                                int port, String username, String password){\r
+               Class<? extends DriverManagerDataSource> driverManagerDataSource =  DriverManagerDataSource.class;\r
+               return save(strDataSourceName, databaseTypeEnum, server, database, port, username, password, driverManagerDataSource, null, null, null, null, null);\r
+       }\r
+       \r
+       \r
+       public static CdmDataSource saveLocalHsqlDb(String strDataSourceName, String databasePath, String databaseName, String username, String password){\r
+               DatabaseTypeEnum databaseTypeEnum = DatabaseTypeEnum.HSqlDb;\r
+               Class<? extends DriverManagerDataSource> driverManagerDataSource =  LocalHsqldb.class;\r
+               String server = "localhost";\r
+               int port = databaseTypeEnum.getDefaultPort();\r
+               return save(strDataSourceName, databaseTypeEnum, server, databaseName, port, username, password, driverManagerDataSource, "init", "destroy", true, true, databasePath);\r
+       }\r
+       \r
+       //\r
+       private static CdmDataSource save(String strDataSourceName, \r
+                       DatabaseTypeEnum databaseTypeEnum, \r
+                       String server, \r
+                       String database, \r
+                       int port, \r
+                       String username, \r
+                       String password, \r
+                       Class<? extends DriverManagerDataSource> driverManagerDataSource,\r
+                       String initMethod,\r
+                       String destroyMethod,\r
+                       Boolean startSilent,\r
+                       Boolean startServer, \r
+                       String databasePath\r
+               ){\r
                //root\r
                Element root = getRoot(getDataSourceInputStream());\r
                if (root == null){\r
@@ -205,14 +249,22 @@ public class CdmDataSource {
                //bean\r
                Element bean = XmlHelp.getFirstAttributedChild(root, "bean", "id", getBeanName(strDataSourceName));\r
                if (bean != null){\r
-                       bean.detach();  //getParentElement().removeChildren("mysqlDataSource");//delete old version if necessary\r
+                       bean.detach();  //delete old version if necessary\r
                }\r
-               bean = insertXmlBean(root, getBeanName(strDataSourceName), "org.springframework.jdbc.datasource.DriverManagerDataSource");\r
+               bean = insertXmlBean(root, getBeanName(strDataSourceName), driverManagerDataSource.getName());\r
+               //attributes\r
+               bean.setAttribute("lazy-init", "true");\r
+               if (initMethod != null) {bean.setAttribute("init-method", initMethod);}\r
+               if (destroyMethod != null) {bean.setAttribute("destroy-method", destroyMethod);}\r
+               \r
                //set properties\r
                insertXmlValueProperty(bean, "driverClassName", databaseTypeEnum.getDriverClassName());\r
                insertXmlValueProperty(bean, "url", databaseTypeEnum.getConnectionString(server, database, port));\r
-               insertXmlValueProperty(bean, "username", username );\r
-               insertXmlValueProperty(bean, "password", password );\r
+               if (username != null) {insertXmlValueProperty(bean, "username", username );}\r
+               if (startSilent != null) {insertXmlValueProperty(bean, "startSilent", startSilent.toString() );}\r
+               if (startServer != null) {insertXmlValueProperty(bean, "startServer", startServer.toString() );}\r
+               if (startServer != null) {insertXmlValueProperty(bean, "databasePath", databasePath );}\r
+               \r
                //save\r
                saveToXml(root.getDocument(), getResourceDirectory(), DATASOURCE_FILE_NAME, format );\r
                try {\r
@@ -223,6 +275,7 @@ public class CdmDataSource {
                }\r
        }\r
        \r
+       \r
        /**\r
         * Deletes a dataSource\r
         * @param dataSource\r
index 0387af8f87b4cc2e12613c2dd1d8f02a5c1b7e8f..f6cca1ffbbbb0c8f4184d089aecf2bb4232d047a 100644 (file)
@@ -3,6 +3,7 @@
  */\r
 package eu.etaxonomy.cdm.database;\r
 \r
+import java.io.File;\r
 import java.sql.Connection;\r
 import java.sql.Driver;\r
 import java.sql.DriverManager;\r
@@ -14,6 +15,8 @@ import org.hsqldb.Server;
 import org.springframework.jdbc.CannotGetJdbcConnectionException;\r
 import org.springframework.jdbc.datasource.DriverManagerDataSource;\r
 \r
+import eu.etaxonomy.cdm.common.CdmUtils;\r
+\r
 /**\r
  * @author a.mueller\r
  *\r
@@ -29,7 +32,7 @@ public class LocalHsqldb extends DriverManagerDataSource {
        /** database name */\r
        protected String dbName = "cdm";\r
        /** path, where database should be stored in the file system */\r
-       protected String dbPath = getDefaultPath();\r
+       protected String databasePath = getDefaultPath();\r
        /** Server instance */\r
        protected Server hsqldbServer;\r
        /** if true starts server on init() */\r
@@ -146,9 +149,7 @@ public class LocalHsqldb extends DriverManagerDataSource {
                setUrl(getPureUrl() + getDbName());\r
        }\r
        \r
-       /*checked ob die hsqldb gestartet ist, wenn dies nicht der Fall ist, wird sie gestartet\r
-       TODO status: in work\r
-       */\r
+       //checks if hsqldb-server is started, if not it will be started \r
        private void startHsqldbServer(){\r
                try {\r
                        Driver driver = DriverManager.getDriver(getUrl());\r
@@ -166,12 +167,17 @@ public class LocalHsqldb extends DriverManagerDataSource {
                                logger.warn("Start HsqldbServer"); //TODO make it .info\r
                                hsqldbServer = new Server();\r
                                hsqldbServer.setSilent(this.isSilent);\r
+                               for (int i = 0; i < 10; i++){\r
+                                       logger.info("DatabaseName " + i + ": " + hsqldbServer.getDatabaseName(i, true));\r
+                                       logger.info("DatabaseName " + i + ": " + hsqldbServer.getDatabaseName(i, false));\r
+                                       logger.info("DatabasePath " + i + ": " + hsqldbServer.getDatabasePath(i, true));\r
+                                       logger.info("DatabasePath " + i + ": " + hsqldbServer.getDatabasePath(i, false));\r
+                                       logger.info("DatabaseType " + i + ": " + hsqldbServer.getDatabaseType(i));\r
+                               }\r
                                hsqldbServer.setDatabaseName(0, getDbName());\r
-                               hsqldbServer.setDatabasePath(0,  getDbPath());\r
+                               hsqldbServer.setDatabasePath(0,  getDatabasePath());\r
                                hsqldbServer.start();\r
                                hsqldbServer.checkRunning(true);\r
-                               //String[] args = {"org.hsqldb.Server"};\r
-                               // Server.main(args);\r
                        } catch (RuntimeException e1) {\r
                                logger.error("Local hsqlServer could not be started or connection to existing server could not be established.");\r
                        }\r
@@ -187,30 +193,30 @@ public class LocalHsqldb extends DriverManagerDataSource {
                        logger.info("stop HsqldbServer");\r
                        hsqldbServer.stop();\r
                }\r
-               //hsqldbServer.shutdown();\r
        }\r
        \r
        private static final String getDefaultPath(){\r
-               String path = System.getProperty("user.dir");\r
-               String sep = System.getProperty("file.separator");\r
-               return  path + sep + "db" +sep + "hsqldb" + sep + "localCdm";\r
+               //String path = System.getProperty("user.dir");\r
+               File path = CdmUtils.getWritableResourceDir();\r
+               String supPath = File.separator + "db" + File.separator + "LocalHsqldb"; \r
+               return  path + supPath;\r
        }\r
 \r
        /**\r
         * @return the dbPath\r
         */\r
-       public String getDbPath() {\r
-               return dbPath;\r
+       public String getDatabasePath() {\r
+               return databasePath;\r
        }\r
 \r
        /**\r
         * @param dbPath the dbPath to set\r
         */\r
-       public void setDbPath(String dbPath) {\r
-               if (dbPath.endsWith(sep)){\r
-                       dbPath = dbPath + "localCdm";\r
+       public void setDatabasePath(String databasePath) {\r
+               if (databasePath.endsWith(sep)){\r
+                       databasePath = databasePath + "localCdm";\r
                }\r
-               this.dbPath = dbPath;\r
+               this.databasePath = databasePath;\r
        }\r
 \r
        /**\r