/**\r
* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
+* European Distributed Institute of Taxonomy\r
* http://www.e-taxonomy.eu\r
-* \r
+*\r
* The contents of this file are subject to the Mozilla Public License Version 1.1\r
* See LICENSE.TXT at the top of this package for the full license terms.\r
*/\r
\r
package eu.etaxonomy.cdm.database;\r
\r
+import java.sql.DatabaseMetaData;\r
+import java.sql.SQLException;\r
import java.util.ArrayList;\r
import java.util.List;\r
\r
;\r
\r
/**\r
- * \r
+ *\r
*/\r
private static final String P6SPY_DRIVER_CLASS_NAME = "com.p6spy.engine.spy.P6SpyDriver";\r
private boolean useP6Spy = false;\r
- \r
- \r
+\r
+\r
/**\r
* @return the useP6Spy\r
*/\r
//TODO Exception\r
}\r
}\r
- \r
+\r
public IDatabaseType getDatabaseType(){\r
return dbType;\r
}\r
- \r
+\r
//Logger\r
private static final Logger logger = Logger.getLogger(DatabaseTypeEnum.class);\r
protected IDatabaseType dbType;\r
- \r
- \r
+\r
+\r
/**\r
* @return\r
*/\r
public String getName(){\r
return dbType.getName();\r
}\r
- \r
+\r
/**\r
* @return\r
*/\r
public String getDriverClassName(){\r
if(useP6Spy){\r
return P6SPY_DRIVER_CLASS_NAME;\r
- \r
+\r
} else {\r
- return dbType.getClassString(); \r
+ return dbType.getClassString();\r
}\r
}\r
- \r
+\r
/**\r
* Returns the DataSource class that the datasource needs to create a spring bean\r
* @return the DataSource class\r
public Class<? extends DataSource> getDataSourceClass(){\r
return dbType.getDataSourceClass();\r
}\r
- \r
+\r
/**\r
* @return\r
*/\r
public String getUrl(){\r
return dbType.getUrlString();\r
}\r
- \r
+\r
/**\r
* @return\r
*/\r
public String getHibernateDialectCanonicalName(){\r
return dbType.getHibernateDialectCanonicalName();\r
}\r
- \r
+\r
/**\r
* @return\r
*/\r
}\r
\r
/**\r
- * returns the connection string \r
+ * returns the connection string\r
* @param server the server, e.g. IP-Address\r
* @param database the database name on the server (e.g. "testDB")\r
* @param port the port number\r
*/\r
public String getConnectionString(ICdmDataSource cdmDataSource){\r
String result = dbType.getConnectionString(cdmDataSource);\r
- logger.debug("Connection String: " + result); \r
+ logger.debug("Connection String: " + result);\r
return result;\r
}\r
- \r
+\r
/**\r
- * Returns the {@link Dialect hiberante dialect} used for this database type.\r
+ * Returns the {@link Dialect hibernate dialect} used for this database type.\r
* @return hibernate dialect\r
*/\r
public Dialect getHibernateDialect(){\r
*/\r
public String getInitMethod(){\r
String result = dbType.getInitMethod();\r
- logger.debug("InitMethod: " + result); \r
+ logger.debug("InitMethod: " + result);\r
return result;\r
}\r
- \r
+\r
/**\r
* Returns the Name of the destroying method to be used when a hibernate datasource representing this database is destroyed\r
* @return String name of the destroy method\r
*/\r
public String getDestroyMethod(){\r
String result = dbType.getDestroyMethod();\r
- logger.debug("DestroyMethod: " + result); \r
+ logger.debug("DestroyMethod: " + result);\r
return result;\r
}\r
- \r
+\r
/**\r
* Returns a List of all available DatabaseEnums.\r
* @return List of DatabaseEnums\r
* @param strDriverClass\r
* @return the according DatabaseTypeEnum. Null if the driver class does not exist.\r
*/\r
- public static DatabaseTypeEnum getDatabaseEnumByDriverClass(String strDriverClass){\r
- for (DatabaseTypeEnum dbEnum : DatabaseTypeEnum.values()){\r
+ public static DatabaseTypeEnum byDriverClass(String strDriverClass){\r
+ if (strDriverClass == null){\r
+ return null;\r
+ }\r
+ for (DatabaseTypeEnum dbEnum : DatabaseTypeEnum.values()){\r
if (dbEnum.getDriverClassName().equals(strDriverClass)){\r
return dbEnum;\r
}\r
}\r
- logger.warn("Unknown driver class " + strDriverClass==null ? "null" : strDriverClass);\r
+ logger.info("Unknown driver class: " + strDriverClass);\r
return null;\r
}\r
- \r
- \r
\r
- \r
+ /**\r
+ * @param metaData\r
+ * @return\r
+ */\r
+ public static DatabaseTypeEnum byDatabaseMetaData(DatabaseMetaData metaData) {\r
+ if (metaData == null){\r
+ return null;\r
+ }\r
+\r
+ //driver\r
+ String driver = null;\r
+ try {\r
+ driver = metaData.getDriverName();\r
+ } catch (SQLException e) {\r
+ //do nothing\r
+ }\r
+ DatabaseTypeEnum result = byDriverClass(driver);\r
+ if (result != null){\r
+ return result;\r
+ }\r
+\r
+ //product\r
+ String product = null;\r
+ try {\r
+ product = metaData.getDatabaseProductName();\r
+ } catch (SQLException e) {\r
+ //do nothing\r
+ }\r
+ if (product == null){\r
+ return null;\r
+ }\r
+ if (product.toLowerCase().matches("\\.*mysql\\.*")){\r
+ return MySQL;\r
+ }else if (product.toLowerCase().matches("\\.*hsqldb\\.*")) {\r
+ return HSqlDb;\r
+ }else if (product.toLowerCase().matches("\\.*oracle\\.*")) {\r
+ return Oracle;\r
+ }else if (product.toLowerCase().matches("\\.*sybase\\.*")) {\r
+ return Sybase;\r
+ }else if (product.toLowerCase().matches("\\.*odbc\\.*")) {\r
+ return ODBC;\r
+ }else if (product.toLowerCase().matches("\\.*postgresql\\.*")) {\r
+ return PostgreSQL;\r
+ }else if (product.toLowerCase().matches("\\.*sqlserver\\.*")) {\r
+ //TODO we need to distinguish versions here once we have sql server 2008 database enum\r
+// metaData.getDatabaseProductVersion()\r
+ return SqlServer2005;\r
+ }else if (product.toLowerCase().matches("\\.*h2\\.*")) {\r
+ return H2;\r
+ }\r
+ return null;\r
+ }\r
+\r
+\r
+\r
+\r
}\r
\r