Fix typo
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / DatabaseTypeEnum.java
index 59adfe73f4d2257972acd5995d7f8c78240da0c0..abc7216c1c4e4ba019608a5cd4afc05596b43deb 100644 (file)
@@ -1,14 +1,16 @@
 /**\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
@@ -44,12 +46,12 @@ public enum DatabaseTypeEnum {
        ;\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
@@ -93,57 +95,57 @@ public enum DatabaseTypeEnum {
                 //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 that the datasource needs to create a spring bean\r
+        * Returns the DataSource class that the datasource needs to create a spring bean\r
         * @return the DataSource class\r
         */\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
@@ -152,7 +154,7 @@ public enum DatabaseTypeEnum {
     }\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
@@ -160,12 +162,12 @@ public enum DatabaseTypeEnum {
      */\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
@@ -179,20 +181,20 @@ public enum DatabaseTypeEnum {
         */\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
@@ -210,18 +212,74 @@ public enum DatabaseTypeEnum {
      * @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