JavaType.java

00001 
00027 package org.objectweb.jonas_ejb.lib;
00028 
00029 import java.util.Hashtable;
00030 
00047 public class JavaType {
00048 
00049     // Default values for Java primitive type
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             // The '$' in the name of a inner class is no more allowed since JDK 1.4.2
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         //mGets.put(java.lang.Character.TYPE, "????");
00281         //mSets.put(java.lang.Character.TYPE, "????");
00282         //mSQLTypes.put(java.lang.Character.TYPE, "???");
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                 // See if c is byte[] or serializable[]
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                 // See if c is serializable
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                 // See if c is byte[] or serializable[]
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                 // See if c is serializable
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                 // See if c is byte[] or serializable[]
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                 // See if c is serializable
00402                 val = new String("Types.VARBINARY");
00403             }
00404         }
00405         return (val);
00406     }
00407 
00408 }
00409 
00410 
00411 

Generated on Tue Feb 15 15:05:49 2005 for JOnAS by  doxygen 1.3.9.1