]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-4928: Slightly generalized how logical datatypes are configured, when modifyin...
authorAron Roberts <aron@socrates.berkeley.edu>
Tue, 27 Mar 2012 01:05:26 +0000 (18:05 -0700)
committerAron Roberts <aron@socrates.berkeley.edu>
Tue, 27 Mar 2012 01:05:26 +0000 (18:05 -0700)
services/common/src/main/java/org/collectionspace/services/common/init/ModifyFieldDatatypes.java

index 328cadfa278b7cdb4324a19476d7f735d862e5e1..c575579a756e4cc045a1607a2a454c2c64214ba4 100644 (file)
@@ -26,7 +26,10 @@ import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.sql.DataSource;
 
@@ -105,23 +108,37 @@ public class ModifyFieldDatatypes extends InitHandler implements IInitHandler {
         }
     }
 
-    // TODO: Consider refactoring this method to a general-purpose mechanism for retrieving
-    // datatypes appropriate to a particular database product, that corresponds
-    // to logical datatypes such as "LARGETEXT".
-    //
-    // Currently, this is hard-coded to a single logical datatype.
     private String getDatatypeFromLogicalType(DatabaseProductType databaseProductType, String logicalDatatype) throws Exception {
+        final Map<DatabaseProductType,Map<String,String>> DATABASE_DATATYPES =
+                new HashMap<DatabaseProductType,Map<String,String>>();
+        // Define the logical datatypes and database-specific datatypes associated
+        // with each database system.
         final String LARGE_TEXT_DATATYPE = "LARGETEXT";
+        final String[] DATATYPES = { LARGE_TEXT_DATATYPE };
+        // final String DATE_DATATYPE = "DATE";
+        // final String[] DATATYPES = { LARGE_TEXT_DATATYPE, DATE_DATATYPE };
+        final DatabaseProductType[] DATABASE_PRODUCT_TYPES =
+            { DatabaseProductType.POSTGRESQL, DatabaseProductType.MYSQL };
+        Map<String,String> postgresqlDatatypeMap = new HashMap<String,String>();
+        postgresqlDatatypeMap.put("LARGETEXT", "text");
+        // postgresqlDatatypeMap.put("DATE", "date");
+        DATABASE_DATATYPES.put(DatabaseProductType.POSTGRESQL, postgresqlDatatypeMap);
+        Map<String,String> mysqlDatatypeMap = new HashMap<String,String>();
+        mysqlDatatypeMap.put("LARGETEXT", "TEXT");
+        // mysqlDatatypeMap.put("DATE", "DATE");
+        DATABASE_DATATYPES.put(DatabaseProductType.MYSQL, mysqlDatatypeMap);
+
         String datatype = "";
-        if (!logicalDatatype.equalsIgnoreCase(LARGE_TEXT_DATATYPE)) {
+        if (!Arrays.asList(DATABASE_PRODUCT_TYPES).contains(databaseProductType)) {
+            throw new Exception("Unrecognized database system " + databaseProductType);
+        }
+        if (!Arrays.asList(DATATYPES).contains(logicalDatatype.toUpperCase())) {
             throw new Exception("Unrecognized logical datatype " + logicalDatatype);
         }
-        if (databaseProductType == DatabaseProductType.MYSQL) {
-            datatype = "TEXT";
-        } else if (databaseProductType == DatabaseProductType.POSTGRESQL) {
-            datatype = "TEXT";
-        } else {
-            throw new Exception("Unrecognized database system " + databaseProductType);
+        datatype = DATABASE_DATATYPES.get(databaseProductType).get(logicalDatatype.toUpperCase());
+        if (datatype == null) {
+            throw new Exception("Unrecognized logical datatype " + logicalDatatype
+                    + " for database system " + databaseProductType);
         }
         return datatype;
     }