00001
00027 package org.objectweb.jonas_ejb.lib;
00028
00029 import java.util.Hashtable;
00030
00047 public class JavaType {
00048
00049
00050 private static Hashtable tableDefaultValues = new Hashtable();
00051 static {
00052 tableDefaultValues.put(java.lang.Boolean.TYPE, "false");
00053 tableDefaultValues.put(java.lang.Character.TYPE, "'\u0000'");
00054 tableDefaultValues.put(java.lang.Byte.TYPE, "(byte)0");
00055 tableDefaultValues.put(java.lang.Short.TYPE, "(short)0");
00056 tableDefaultValues.put(java.lang.Integer.TYPE, "0");
00057 tableDefaultValues.put(java.lang.Long.TYPE, "0L");
00058 tableDefaultValues.put(java.lang.Float.TYPE, "0.0f");
00059 tableDefaultValues.put(java.lang.Double.TYPE, "0.0d");
00060 }
00061
00065 public static boolean isVoid(Class c) {
00066 return (c.equals(java.lang.Void.TYPE));
00067 }
00068
00072 public static String getName(Class c) {
00073 String name;
00074 if (c.isArray()) {
00075 name = getName(c.getComponentType()) + "[]";
00076 } else {
00077
00078 name = c.getName().replace('$', '.');
00079 }
00080 return (name);
00081 }
00082
00087 public static boolean isSerializable(Class c) {
00088 boolean isSerializable = false;
00089 if (c.isArray()) {
00090 isSerializable = isSerializable(c.getComponentType());
00091 } else if (c.isPrimitive()) {
00092 isSerializable = true;
00093 } else {
00094 isSerializable = java.io.Serializable.class.isAssignableFrom(c);
00095 }
00096 return (isSerializable);
00097 }
00098
00105 public static boolean isValidForRmi(Class c) {
00106 return (JavaType.isSerializable(c) || java.rmi.Remote.class.isAssignableFrom(c));
00107 }
00108
00113 public static boolean isCollecOrEnum(Class c) {
00114 return (java.util.Collection.class.isAssignableFrom(c) || java.util.Enumeration.class.isAssignableFrom(c));
00115 }
00116
00123 public static String getSQLGetMethod(Class c) {
00124 return (JavaTypesForSQL.getSQLGetMethod(c));
00125 }
00126
00133 public static String getSQLSetMethod(Class c) {
00134 return (JavaTypesForSQL.getSQLSetMethod(c));
00135 }
00136
00140 public static boolean isXxxObjectMethod(String name) {
00141 return (name.equals("getObject") || name.equals("setObject"));
00142 }
00143
00149 public static String getSQLType(Class c) {
00150 return (JavaTypesForSQL.getSQLType(c));
00151 }
00152
00158 public static String getDefaultValue(Class c) {
00159 String val = null;
00160 if (c.isPrimitive()) {
00161 val = (String) tableDefaultValues.get(c);
00162 } else {
00163 val = new String("null");
00164 }
00165 if (val == null) {
00166 throw new Error("JavaType ERROR: No default value for the class " + c.getName());
00167 }
00168 return (val);
00169 }
00170
00171 public static Boolean toObject(boolean val) {
00172 return new Boolean(val);
00173 }
00174 public static Byte toObject(byte val) {
00175 return new Byte(val);
00176 }
00177 public static Short toObject(short val) {
00178 return new Short(val);
00179 }
00180 public static Integer toObject(int val) {
00181 return new Integer(val);
00182 }
00183 public static Long toObject(long val) {
00184 return new Long(val);
00185 }
00186 public static Float toObject(float val) {
00187 return new Float(val);
00188 }
00189 public static Double toObject(double val) {
00190 return new Double(val);
00191 }
00192 public static Character toObject(char val) {
00193 return new Character(val);
00194 }
00195 public static Object toObject(Object val) {
00196 return val;
00197 }
00198
00210 public static String toStringObject(String name, Class c) {
00211 if (c.isPrimitive()) {
00212 if (c == Boolean.TYPE) {
00213 return "Boolean.valueOf(" + name + ")";
00214 } else if (c == Byte.TYPE) {
00215 return "new Byte(" + name + ")";
00216 } else if (c == Character.TYPE) {
00217 return "new Character(" + name + ")";
00218 } else if (c == Short.TYPE) {
00219 return "new Short(" + name + ")";
00220 } else if (c == Integer.TYPE) {
00221 return "new Integer(" + name + ")";
00222 } else if (c == Long.TYPE) {
00223 return "new Long(" + name + ")";
00224 } else if (c == Float.TYPE) {
00225 return "new Float(" + name + ")";
00226 } else if (c == Double.TYPE) {
00227 return "new Double(" + name + ")";
00228 } else {
00229 return name;
00230 }
00231 } else {
00232 return name;
00233 }
00234 }
00235
00236
00237 }
00238
00239
00246 class JavaTypesForSQL {
00247
00248 private static JavaTypesForSQL mTypesForSQL = new JavaTypesForSQL();
00249 private static Hashtable mGets;
00250 private static Hashtable mSets;
00251 private static Hashtable mSQLTypes;
00252
00253 private JavaTypesForSQL() {
00254
00255 mGets = new Hashtable();
00256 mSets = new Hashtable();
00257 mSQLTypes = new Hashtable();
00258
00259 mGets.put(java.lang.Boolean.TYPE, "getBoolean");
00260 mSets.put(java.lang.Boolean.TYPE, "setBoolean");
00261 mSQLTypes.put(java.lang.Boolean.TYPE, "Types.BIT");
00262 mGets.put(java.lang.Byte.TYPE, "getByte");
00263 mSets.put(java.lang.Byte.TYPE, "setByte");
00264 mSQLTypes.put(java.lang.Byte.TYPE, "Types.TINYINT");
00265 mGets.put(java.lang.Short.TYPE, "getShort");
00266 mSets.put(java.lang.Short.TYPE, "setShort");
00267 mSQLTypes.put(java.lang.Short.TYPE, "Types.SMALLINT");
00268 mGets.put(java.lang.Integer.TYPE, "getInt");
00269 mSets.put(java.lang.Integer.TYPE, "setInt");
00270 mSQLTypes.put(java.lang.Integer.TYPE, "Types.INTEGER");
00271 mGets.put(java.lang.Long.TYPE, "getLong");
00272 mSets.put(java.lang.Long.TYPE, "setLong");
00273 mSQLTypes.put(java.lang.Long.TYPE, "Types.BIGINT");
00274 mGets.put(java.lang.Float.TYPE, "getFloat");
00275 mSets.put(java.lang.Float.TYPE, "setFloat");
00276 mSQLTypes.put(java.lang.Float.TYPE, "Types.FLOAT");
00277 mGets.put(java.lang.Double.TYPE, "getDouble");
00278 mSets.put(java.lang.Double.TYPE, "setDouble");
00279 mSQLTypes.put(java.lang.Double.TYPE, "Types.DOUBLE");
00280
00281
00282
00283 mGets.put(java.lang.String.class, "getString");
00284 mSets.put(java.lang.String.class, "setString");
00285 mSQLTypes.put(java.lang.String.class, "Types.VARCHAR");
00286 mGets.put(java.sql.Date.class, "getDate");
00287 mSets.put(java.sql.Date.class, "setDate");
00288 mSQLTypes.put(java.sql.Date.class, "Types.DATE");
00289 mGets.put(java.sql.Time.class, "getTime");
00290 mSets.put(java.sql.Time.class, "setTime");
00291 mSQLTypes.put(java.sql.Time.class, "Types.TIME");
00292 mGets.put(java.sql.Timestamp.class, "getTimestamp");
00293 mSets.put(java.sql.Timestamp.class, "setTimestamp");
00294 mSQLTypes.put(java.sql.Timestamp.class, "Types.TIMESTAMP");
00295 mGets.put(java.lang.Boolean.class, "getBoolean");
00296 mSets.put(java.lang.Boolean.class, "setObject");
00297 mSQLTypes.put(java.lang.Boolean.class, "Types.BIT");
00298 mGets.put(java.lang.Integer.class, "getInt");
00299 mSets.put(java.lang.Integer.class, "setObject");
00300 mSQLTypes.put(java.lang.Integer.class, "Types.INTEGER");
00301 mGets.put(java.lang.Long.class, "getLong");
00302 mSets.put(java.lang.Long.class, "setObject");
00303 mSQLTypes.put(java.lang.Long.class, "Types.BIGINT");
00304 mGets.put(java.lang.Float.class, "getFloat");
00305 mSets.put(java.lang.Float.class, "setObject");
00306 mSQLTypes.put(java.lang.Float.class, "Types.REAL");
00307 mGets.put(java.lang.Double.class, "getDouble");
00308 mSets.put(java.lang.Double.class, "setObject");
00309 mSQLTypes.put(java.lang.Double.class, "Types.DOUBLE");
00310 mGets.put(java.lang.Byte.class, "getByte");
00311 mSets.put(java.lang.Byte.class, "setObject");
00312 mSQLTypes.put(java.lang.Byte.class, "Types.TINYINT");
00313 mGets.put(java.lang.Short.class, "getShort");
00314 mSets.put(java.lang.Short.class, "setObject");
00315 mSQLTypes.put(java.lang.Short.class, "Types.SMALLINT");
00316 mGets.put(java.math.BigDecimal.class, "getBigDecimal");
00317 mSets.put(java.math.BigDecimal.class, "setObject");
00318 mSQLTypes.put(java.math.BigDecimal.class, "Types.NUMERIC");
00319 mGets.put(java.math.BigInteger.class, "getBigDecimal");
00320 mSets.put(java.math.BigInteger.class, "setObject");
00321 mSQLTypes.put(java.math.BigInteger.class, "Types.NUMERIC");
00322 }
00323
00330 static String getSQLGetMethod(Class c) {
00331 String val = null;
00332 val = (String) mGets.get(c);
00333 if (val == null) {
00334 if (c.isArray()) {
00335
00336 Class component = c.getComponentType();
00337 if (component != null) {
00338 if (component.equals(java.lang.Byte.TYPE)) {
00339 val = new String("getBytes");
00340 } else if (JavaType.isSerializable(component)) {
00341 val = new String("getSerializable");
00342 }
00343 }
00344 } else if (JavaType.isSerializable(c)) {
00345
00346 val = new String("getSerializable");
00347 }
00348 }
00349 return (val);
00350 }
00351
00358 static String getSQLSetMethod(Class c) {
00359 String val = null;
00360 val = (String) mSets.get(c);
00361 if (val == null) {
00362 if (c.isArray()) {
00363
00364 Class component = c.getComponentType();
00365 if (component != null) {
00366 if (component.equals(java.lang.Byte.TYPE)) {
00367 val = new String("setBytes");
00368 } else if (JavaType.isSerializable(component)) {
00369 val = new String("setSerializable");
00370 }
00371 }
00372 } else if (JavaType.isSerializable(c)) {
00373
00374 val = new String("setSerializable");
00375 }
00376 }
00377 return (val);
00378 }
00379
00385 static String getSQLType(Class c) {
00386 String val = null;
00387 val = (String) mSQLTypes.get(c);
00388 if (val == null) {
00389 val = new String("Types.OTHER");
00390 if (c.isArray()) {
00391
00392 Class component = c.getComponentType();
00393 if (component != null) {
00394 if (component.equals(java.lang.Byte.TYPE)) {
00395 val = new String("Types.VARBINARY");
00396 } else if (JavaType.isSerializable(component)) {
00397 val = new String("Types.VARBINARY");
00398 }
00399 }
00400 } else if (JavaType.isSerializable(c)) {
00401
00402 val = new String("Types.VARBINARY");
00403 }
00404 }
00405 return (val);
00406 }
00407
00408 }
00409
00410
00411