1 9 package org.jboss.portal.setup.impl.dl.dbloader.hibernate; 10 11 12 import java.io.ByteArrayInputStream ; 13 import java.util.HashMap ; 14 import java.sql.Types ; 15 import java.sql.PreparedStatement ; 16 import java.sql.Statement ; 17 18 import org.jboss.portal.setup.PortalSetupException; 19 import org.hibernate.type.LiteralType; 20 import org.hibernate.type.Type; 21 import org.hibernate.type.TypeFactory; 22 import org.hibernate.type.NullableType; 23 24 31 public class TypeResolver 32 { 33 34 private static final HashMap g_SQLStandardTypes = new HashMap (); 35 36 37 static 38 { 39 40 g_SQLStandardTypes.put("bit", new Integer (Types.BIT)); 41 g_SQLStandardTypes.put("bigint", new Integer (Types.BIGINT)); 42 g_SQLStandardTypes.put("smallint", new Integer (Types.SMALLINT)); 43 g_SQLStandardTypes.put("tinyint", new Integer (Types.TINYINT)); 44 g_SQLStandardTypes.put("integer", new Integer (Types.BIT)); 45 g_SQLStandardTypes.put("char(1)", new Integer (Types.CHAR)); 46 g_SQLStandardTypes.put("varchar($l)", new Integer (Types.VARCHAR)); 47 g_SQLStandardTypes.put("FLOAT", new Integer (Types.FLOAT)); 48 g_SQLStandardTypes.put("double", new Integer (Types.DOUBLE)); 49 g_SQLStandardTypes.put("timestamp", new Integer (Types.TIMESTAMP)); 50 g_SQLStandardTypes.put("varbinary($l)", new Integer (Types.VARBINARY)); 51 g_SQLStandardTypes.put("varbinary($l)", new Integer (Types.VARBINARY)); 52 g_SQLStandardTypes.put("numeric(19, $l)", new Integer (Types.NUMERIC)); 53 g_SQLStandardTypes.put("blob", new Integer (Types.BLOB)); 54 g_SQLStandardTypes.put("clob", new Integer (Types.CLOB)); 55 56 } 57 58 61 private TypeResolver() 62 { 63 64 } 65 66 73 public static String resolveValueByType(String type, Object value, LiteralType lType) throws PortalSetupException 74 { 75 Object newValue = value; 76 String strValue = null; 77 if (null != type && null != lType) 78 { 79 80 String lowCase = type.toLowerCase(); 81 Type basicType = TypeFactory.basic(lowCase); 82 try 83 { 84 if (basicType != null && lType != null) 85 { 86 if (!basicType.getClass().getName().equals(lType.getClass().getName())) 87 { 88 newValue = resolveValueBySqlType(value, ((NullableType)basicType).sqlType()); 89 strValue = '\'' + ((NullableType)basicType).toString(value) + '\''; 91 } 92 } 93 else 94 { 95 int index = ((NullableType)lType).sqlType(); 96 int sqlTypeIndex = ((Integer )g_SQLStandardTypes.get(lowCase)).intValue(); 97 if (index > 0 && sqlTypeIndex != index) 98 { 99 newValue = resolveValueBySqlType(value, sqlTypeIndex); 102 strValue = newValue.toString(); 103 104 } 105 else 106 { 107 108 strValue = lType.objectToSQLString(value); 109 110 } 111 } 112 } 113 catch (Exception e) 114 { 115 throw new PortalSetupException("failed to convert object value to string for type: " + type, e); 116 } 117 } 118 else 119 { 120 if (null != lType) 121 { 122 try 123 { 124 strValue = lType.objectToSQLString(value); 125 } 126 catch (Exception e) 127 { 128 throw new PortalSetupException("failed to convert object value to string for type: " + type, e); 129 } 130 } 131 else 132 { 133 strValue = value.toString(); 134 } 135 } 136 return newValue.toString(); 137 } 138 139 140 145 static Object resolveValueBySqlType(Object value, int sqlType) 146 { 147 switch (sqlType) 148 { 149 case java.sql.Types.LONGVARBINARY: 150 if (((byte[])value).length != 0) 151 { ByteArrayInputStream blobStream = 153 new ByteArrayInputStream ((byte[])value); 154 return blobStream; 155 } 156 break; 157 case java.sql.Types.DATE: 158 if (!(value instanceof java.sql.Date ) && 160 (value instanceof java.util.Date )) 161 { 162 java.util.Date myDate = (java.util.Date )value; 163 value = new java.sql.Date (myDate.getTime()); 164 } 165 166 return value; 167 case java.sql.Types.TIME: 168 if (!(value instanceof java.sql.Time ) && 170 (value instanceof java.util.Date )) 171 { 172 java.util.Date myDate = (java.util.Date )value; 173 value = new java.sql.Time (myDate.getTime()); 174 } 175 return value; 176 case java.sql.Types.TIMESTAMP: 177 if (!(value instanceof java.sql.Timestamp ) && 179 (value instanceof java.util.Date )) 180 { 181 java.util.Date myDate = (java.util.Date )value; 182 value = new java.sql.Timestamp (myDate.getTime()); 183 } 184 return value; 185 default: return value; 187 188 } 189 return value; 190 } 191 } 192 | Popular Tags |