let ICdmDataSource implement javax.sql.DataSource #3910
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / DatabaseTypeEnum.java
index 81be5a7a5ee629ab8ae9cbc9420e4b32ee5d0cb0..9979d3049ecbd421e463059766b95773ade156cd 100644 (file)
@@ -1,19 +1,31 @@
 /**\r
- * \r
- */\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\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.util.ArrayList;\r
 import java.util.List;\r
 \r
+import javax.sql.DataSource;\r
+\r
 import org.apache.log4j.Logger;\r
+import org.hibernate.dialect.Dialect;\r
 \r
+import eu.etaxonomy.cdm.database.types.H2DatabaseType;\r
 import eu.etaxonomy.cdm.database.types.HSqlDbDatabaseType;\r
 import eu.etaxonomy.cdm.database.types.IDatabaseType;\r
 import eu.etaxonomy.cdm.database.types.MySQLDatabaseType;\r
 import eu.etaxonomy.cdm.database.types.OdbcDatabaseType;\r
+import eu.etaxonomy.cdm.database.types.OracleDatabaseType;\r
 import eu.etaxonomy.cdm.database.types.PostgreSQLDatabaseType;\r
-import eu.etaxonomy.cdm.database.types.SqlServerDatabaseType;\r
+import eu.etaxonomy.cdm.database.types.SqlServer2005DatabaseType;\r
+import eu.etaxonomy.cdm.database.types.SybaseDatabaseType;\r
 \r
 /**\r
  * @author a.mueller\r
@@ -24,9 +36,34 @@ public enum DatabaseTypeEnum {
        MySQL(2),\r
        ODBC(3),\r
        PostgreSQL(4),\r
-       SqlServer(5)\r
+       Oracle(5),\r
+       //SqlServer2000(6),\r
+       SqlServer2005(7),\r
+       Sybase(8),\r
+       H2(9)\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
+        * @return the useP6Spy\r
+        */\r
+       public boolean isUseP6Spy() {\r
+               return useP6Spy;\r
+       }\r
+\r
+       /**\r
+        * @param useP6Spy the useP6Spy to set\r
+        */\r
+       public void setUseP6Spy(boolean useP6Spy) {\r
+               this.useP6Spy = useP6Spy;\r
+       }\r
+\r
        /**\r
         * Constructor\r
         * @param i\r
@@ -42,13 +79,25 @@ public enum DatabaseTypeEnum {
                        this.dbType = new OdbcDatabaseType(); break;\r
                case 4:\r
                this.dbType = new PostgreSQLDatabaseType(); break;\r
-            case 5:\r
-               this.dbType = new SqlServerDatabaseType(); break;\r
+               case 5:\r
+               this.dbType = new OracleDatabaseType(); break;\r
+//            case 6:\r
+//             this.dbType = new SqlServer2000DatabaseType(); break;\r
+            case 7:\r
+               this.dbType = new SqlServer2005DatabaseType(); break;\r
+            case 8:\r
+               this.dbType = new SybaseDatabaseType(); break;\r
+            case 9:\r
+               this.dbType = new H2DatabaseType(); break;\r
             default:\r
                 //TODO Exception\r
         }\r
        }\r
        \r
+       public IDatabaseType getDatabaseType(){\r
+               return dbType;\r
+       }\r
+       \r
        //Logger\r
        private static final Logger logger = Logger.getLogger(DatabaseTypeEnum.class);\r
        protected IDatabaseType dbType;\r
@@ -65,7 +114,20 @@ public enum DatabaseTypeEnum {
         * @return\r
         */\r
        public String getDriverClassName(){\r
-               return dbType.getClassString();\r
+               if(useP6Spy){\r
+                       return P6SPY_DRIVER_CLASS_NAME;\r
+                       \r
+               } else {\r
+                       return dbType.getClassString();                 \r
+               }\r
+       }\r
+    \r
+       /**\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
@@ -78,8 +140,8 @@ public enum DatabaseTypeEnum {
        /**\r
         * @return\r
         */\r
-       public String getHibernateDialect(){\r
-               return dbType.getHibernateDialect();\r
+       public String getHibernateDialectCanonicalName(){\r
+               return dbType.getHibernateDialectCanonicalName();\r
        }\r
           \r
     /**\r
@@ -96,22 +158,38 @@ public enum DatabaseTypeEnum {
      * @param port the port number\r
      * @return the connection string\r
      */\r
-    public String getConnectionString(String server, String database, int port){\r
-       String result = dbType.getConnectionString(server, database, port);\r
+    public String getConnectionString(ICdmDataSource cdmDataSource){\r
+       String result = dbType.getConnectionString(cdmDataSource);\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
+        * @return hibernate dialect\r
+        */\r
+    public Dialect getHibernateDialect(){\r
+       Dialect result = dbType.getHibernateDialect();\r
+       return result;\r
+    }\r
 \r
        /**\r
-     * returns the connection string (using the default port)\r
-     * @param server the server, e.g. IP-Address\r
-     * @param database the database name on the server (e.g. "testDB")\r
-      * @return the connection string\r
-     */\r
-    public String getConnectionString(String server, String database){\r
-       String result = dbType.getConnectionString(server, database);\r
-       logger.debug("Connection String: " + result);   \r
+     * Returns the Name of the initialization method to be used when a hibernate datasource is created for this database\r
+        * @return String name of the init method\r
+        */\r
+    public String getInitMethod(){\r
+       String result = dbType.getInitMethod();\r
+       logger.debug("InitMethod: " + result);  \r
+        return result;\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
         return result;\r
     }\r
     \r
@@ -141,6 +219,9 @@ public enum DatabaseTypeEnum {
        logger.warn("Unknown driver class " + strDriverClass==null ? "null" : strDriverClass);\r
        return null;\r
     }\r
+    \r
+    \r
+\r
  \r
 }\r
 \r