00001 00026 package org.objectweb.jonas_ejb.lib; 00027 00028 import javax.ejb.EJBLocalObject; 00029 import org.objectweb.jorm.type.api.PType; 00030 import org.objectweb.jorm.type.api.PTypeSpace; 00031 import org.objectweb.jorm.naming.api.PNamingContext; 00032 import org.objectweb.jorm.naming.api.PExceptionNaming; 00033 import org.objectweb.medor.type.lib.PTypeSpaceMedor; 00034 00035 00042 public class JormType { 00043 00050 public static PType getPType(java.lang.Class cl, boolean isPkField) { 00051 if (cl.equals(Boolean.TYPE)) { 00052 return PTypeSpace.BOOLEAN; 00053 } else if (cl.equals(Boolean.class)) { 00054 return PTypeSpace.OBJBOOLEAN; 00055 } else if (cl.equals(Character.TYPE)) { 00056 return PTypeSpace.CHAR; 00057 } else if (cl.equals(Character.class)) { 00058 return PTypeSpace.OBJCHAR; 00059 } else if (cl.equals(Byte.TYPE)) { 00060 return PTypeSpace.BYTE; 00061 } else if (cl.equals(Byte.class)) { 00062 return PTypeSpace.OBJBYTE; 00063 } else if (cl.equals(Short.TYPE)) { 00064 return PTypeSpace.SHORT; 00065 } else if (cl.equals(Short.class)) { 00066 return PTypeSpace.OBJSHORT; 00067 } else if (cl.equals(Integer.TYPE)) { 00068 return PTypeSpace.INT; 00069 } else if (cl.equals(Integer.class)) { 00070 return PTypeSpace.OBJINT; 00071 } else if (cl.equals(Long.TYPE)) { 00072 return PTypeSpace.LONG; 00073 } else if (cl.equals(Long.class)) { 00074 return PTypeSpace.OBJLONG; 00075 } else if (cl.equals(Float.TYPE)) { 00076 return PTypeSpace.FLOAT; 00077 } else if (cl.equals(Float.class)) { 00078 if (isPkField) { 00079 return (JormType.getPType(FloatPkFieldMapping.getStorageType(), false)); 00080 } else { 00081 return PTypeSpace.OBJFLOAT; 00082 } 00083 } else if (cl.equals(Double.TYPE)) { 00084 return PTypeSpace.DOUBLE; 00085 } else if (cl.equals(Double.class)) { 00086 return PTypeSpace.OBJDOUBLE; 00087 } else if (cl.equals(String.class)) { 00088 return PTypeSpace.STRING; 00089 } else if (cl.equals(java.util.Date.class) 00090 || cl.equals(java.sql.Date.class) 00091 || cl.equals(java.sql.Time.class) 00092 || cl.equals(java.sql.Timestamp.class)) { 00093 return PTypeSpace.DATE; 00094 } else if (cl.equals(java.math.BigDecimal.class)) { 00095 return PTypeSpace.BIGDECIMAL; 00096 } else if (EJBLocalObject.class.isAssignableFrom(cl)) { 00097 return PTypeSpaceMedor.PNAME; 00098 } else if (cl.isArray() && java.lang.Byte.TYPE.equals(cl.getComponentType())) { 00099 return PTypeSpace.BYTEARRAY; 00100 } else if (cl.isArray() && java.lang.Character.TYPE.equals(cl.getComponentType())) { 00101 return PTypeSpace.CHARARRAY; 00102 } 00103 return PTypeSpace.SERIALIZED; 00104 } 00105 00112 public static String getPTypeDef(Class cl, boolean isPkField) { 00113 if (cl.equals(Boolean.TYPE)) { 00114 return "PTypeSpace.BOOLEAN"; 00115 } else if (cl.equals(Boolean.class)) { 00116 return "PTypeSpace.OBJBOOLEAN"; 00117 } else if (cl.equals(String.class)) { 00118 return "PTypeSpace.STRING"; 00119 } else if (cl.equals(Character.TYPE)) { 00120 return "PTypeSpace.CHAR"; 00121 } else if (cl.equals(Character.class)) { 00122 return "PTypeSpace.OBJCHAR"; 00123 } else if (cl.equals(Byte.TYPE)) { 00124 return "PTypeSpace.BYTE"; 00125 } else if (cl.equals(Byte.class)) { 00126 return "PTypeSpace.OBJBYTE"; 00127 } else if (cl.equals(Short.TYPE)) { 00128 return "PTypeSpace.SHORT"; 00129 } else if (cl.equals(Short.class)) { 00130 return "PTypeSpace.OBJSHORT"; 00131 } else if (cl.equals(Integer.TYPE)) { 00132 return "PTypeSpace.INT"; 00133 } else if (cl.equals(Integer.class)) { 00134 return "PTypeSpace.OBJINT"; 00135 } else if (cl.equals(Long.TYPE)) { 00136 return "PTypeSpace.LONG"; 00137 } else if (cl.equals(Long.class)) { 00138 return "PTypeSpace.OBJLONG"; 00139 } else if (cl.equals(Float.TYPE)) { 00140 return "PTypeSpace.FLOAT"; 00141 } else if (cl.equals(Float.class)) { 00142 if (isPkField) { 00143 return (JormType.getPTypeDef(FloatPkFieldMapping.getStorageType(), false)); 00144 } else { 00145 return "PTypeSpace.OBJFLOAT"; 00146 } 00147 } else if (cl.equals(Double.TYPE)) { 00148 return "PTypeSpace.DOUBLE"; 00149 } else if (cl.equals(Double.class)) { 00150 return "PTypeSpace.OBJDOUBLE"; 00151 } else if (cl.equals(java.util.Date.class) 00152 || cl.equals(java.sql.Date.class) 00153 || cl.equals(java.sql.Time.class) 00154 || cl.equals(java.sql.Timestamp.class)) { 00155 return "PTypeSpace.DATE"; 00156 } else if (cl.equals(java.math.BigDecimal.class)) { 00157 return "PTypeSpace.BIGDECIMAL"; 00158 } else if (EJBLocalObject.class.isAssignableFrom(cl)) { 00159 return "PTypeSpaceMedor.PNAME"; 00160 } else if (cl.isArray() && java.lang.Byte.TYPE.equals(cl.getComponentType())) { 00161 return "PTypeSpace.BYTEARRAY"; 00162 } else if (cl.isArray() && java.lang.Character.TYPE.equals(cl.getComponentType())) { 00163 return "PTypeSpace.CHARARRAY"; 00164 } 00165 return "PTypeSpace.SERIALIZED"; 00166 } 00167 00177 public static short getCodingType(Class c, boolean isPkField) throws PExceptionNaming { 00178 if (c == null) { 00179 throw new PExceptionNaming("No CodingType associated to a null Class"); 00180 } 00181 return getCodingType(getPType(c, isPkField).getTypeCode()); 00182 } 00183 00192 public static short getCodingType(PType pt) throws PExceptionNaming { 00193 if (pt == null) { 00194 throw new PExceptionNaming("No CodingType associated to a null PType"); 00195 } 00196 return getCodingType(pt.getTypeCode()); 00197 } 00198 00207 public static short getCodingType(int typeCode) throws PExceptionNaming { 00208 switch(typeCode) { 00209 case PType.TYPECODE_CHAR: 00210 return PNamingContext.CTCHAR; 00211 case PType.TYPECODE_OBJCHAR: 00212 return PNamingContext.CTOCHAR; 00213 00214 case PType.TYPECODE_BYTE: 00215 return PNamingContext.CTBYTE; 00216 case PType.TYPECODE_OBJBYTE: 00217 return PNamingContext.CTOBYTE; 00218 00219 case PType.TYPECODE_SHORT: 00220 return PNamingContext.CTSHORT; 00221 case PType.TYPECODE_OBJSHORT: 00222 return PNamingContext.CTOSHORT; 00223 00224 case PType.TYPECODE_INT: 00225 return PNamingContext.CTINT; 00226 case PType.TYPECODE_OBJINT: 00227 return PNamingContext.CTOINT; 00228 00229 case PType.TYPECODE_LONG: 00230 return PNamingContext.CTLONG; 00231 case PType.TYPECODE_OBJLONG: 00232 return PNamingContext.CTOLONG; 00233 00234 case PType.TYPECODE_BYTEARRAY: 00235 return PNamingContext.CTBYTEARRAY; 00236 00237 case PType.TYPECODE_CHARARRAY: 00238 return PNamingContext.CTCHARARRAY; 00239 00240 case PType.TYPECODE_STRING: 00241 return PNamingContext.CTSTRING; 00242 00243 case PType.TYPECODE_DATE: 00244 return PNamingContext.CTDATE; 00245 00246 default: 00247 throw new PExceptionNaming("This type is not suportted: typeCode=" + typeCode); 00248 } 00249 } 00250 00251 }