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
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
return DatabaseTypeEnum.getDatabaseEnumByDriverClass(getDataSource().getDriverClassName());\r
}\r
\r
-\r
-\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.api.service.IDatabaseService#getDriverClassName()\r
*/\r
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
return ds;\r
}\r
\r
+\r
+\r
// public void createDatabase(){\r
// this.connectToDatabase(databaseTypeEnum, server, database, username, password)\r
// \r
* 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
* @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
*/\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
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
return null;\r
}\r
\r
- \r
+\r
/**\r
* @param parent\r
* @param elementName\r
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
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
*/\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
//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
}\r
}\r
\r
+ \r
/**\r
* Deletes a dataSource\r
* @param dataSource\r
*/\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
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
/** 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
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
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
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