You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by wi...@apache.org on 2007/07/24 00:19:29 UTC

svn commit: r558881 - /openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionaryFactory.java

Author: wisneskid
Date: Mon Jul 23 15:19:28 2007
New Revision: 558881

URL: http://svn.apache.org/viewvc?view=rev&rev=558881
Log:
OPENJPA-266 process dbdictionaryPlugin values for vendor specific DB Dictionary.

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionaryFactory.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionaryFactory.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionaryFactory.java?view=diff&rev=558881&r1=558880&r2=558881
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionaryFactory.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionaryFactory.java Mon Jul 23 15:19:28 2007
@@ -27,6 +27,7 @@
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
+import org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl;
 import org.apache.openjpa.lib.conf.Configurations;
 import org.apache.openjpa.lib.log.Log;
 import org.apache.openjpa.lib.util.J2DoPrivHelper;
@@ -77,9 +78,9 @@
      */
     public static DBDictionary calculateDBDictionary(JDBCConfiguration conf,
         String url, String driver, String props) {
-        String dclass = dictionaryClassForString(url);
+        String dclass = dictionaryClassForString(url, conf);
         if (dclass == null)
-            dclass = dictionaryClassForString(driver);
+            dclass = dictionaryClassForString(driver, conf);
         if (dclass == null)
             return null;
         return newDBDictionary(conf, dclass, props);
@@ -94,10 +95,10 @@
         try {
             conn = ds.getConnection();
             DatabaseMetaData meta = conn.getMetaData();
-            String dclass = dictionaryClassForString(meta.getURL());
+            String dclass = dictionaryClassForString(meta.getURL(), conf);
             if (dclass == null)
                 dclass = dictionaryClassForString
-                    (meta.getDatabaseProductName());
+                    (meta.getDatabaseProductName(), conf);
             if (dclass == null)
                 dclass = DBDictionary.class.getName();
             return newDBDictionary(conf, dclass, props, conn);
@@ -170,15 +171,15 @@
     /**
      * Guess the dictionary class name to use based on the product string.
      */
-    private static String dictionaryClassForString(String prod) {
+    private static String dictionaryClassForString(String prod, JDBCConfiguration conf) {
         if (StringUtils.isEmpty(prod))
             return null;
         prod = prod.toLowerCase();
 
         if (prod.indexOf("oracle") != -1)
-            return ORACLE_DICT_NAME;
+            return getDBDictionaryPluginValue(conf, "oracle");
         if (prod.indexOf("sqlserver") != -1)
-            return SQLServerDictionary.class.getName();
+            return getDBDictionaryPluginValue(conf, "sqlserver");
         if (prod.indexOf("jsqlconnect") != -1)
             return SQLServerDictionary.class.getName();
         if (prod.indexOf("mysql") != -1)
@@ -223,7 +224,7 @@
         // appear in the URL of another database (like if the db is named
         // "testdb2" or something)
         if (prod.indexOf("db2") != -1 || prod.indexOf("as400") != -1)
-            return DB2Dictionary.class.getName();
+            return getDBDictionaryPluginValue(conf, "db2");
 
         // known dbs that we don't support
         if (prod.indexOf("cloudscape") != -1)
@@ -607,5 +608,16 @@
         }
 
         return buf.toString();
+    }
+    
+    private static String getDBDictionaryPluginValue(JDBCConfiguration conf
+        , String alias) {
+        String[] aliases = ((JDBCConfigurationImpl) conf)
+            .dbdictionaryPlugin.getAliases();
+        for (int i = 0; i < aliases.length; i++) {
+            if (StringUtils.equals(alias, aliases[i]))
+                return aliases[++i];
+        }
+        return null;
     }
 }