1 23 24 package org.objectweb.jorm.type.api; 25 26 import java.io.Serializable ; 27 28 35 public class PType implements Serializable { 36 public final static int NOSIZE = -1; 37 public final static short TYPECODE_BOOLEAN = 0; 38 public final static short TYPECODE_CHAR = 1; 39 public final static short TYPECODE_BYTE = 2; 40 public final static short TYPECODE_SHORT = 3; 41 public final static short TYPECODE_INT = 4; 42 public final static short TYPECODE_LONG = 5; 43 public final static short TYPECODE_FLOAT = 6; 44 public final static short TYPECODE_DOUBLE = 7; 45 public final static short TYPECODE_OBJBOOLEAN = 8; 46 public final static short TYPECODE_OBJCHAR = 9; 47 public final static short TYPECODE_OBJBYTE = 10; 48 public final static short TYPECODE_OBJSHORT = 11; 49 public final static short TYPECODE_OBJINT = 12; 50 public final static short TYPECODE_OBJLONG = 13; 51 public final static short TYPECODE_OBJFLOAT = 14; 52 public final static short TYPECODE_OBJDOUBLE = 15; 53 public final static short TYPECODE_STRING = 16; 54 public final static short TYPECODE_DATE = 17; 55 public final static short TYPECODE_CHARARRAY = 18; 56 public final static short TYPECODE_BYTEARRAY = 19; 57 public final static short TYPECODE_SERIALIZED = 20; 58 public final static short TYPECODE_BIGINTEGER = 21; 59 public final static short TYPECODE_BIGDECIMAL = 22; 60 public final static short TYPECODE_REFERENCE = 23; 61 62 private short typeCode; 64 private String jormName; 66 private String javaName; 68 private String codingName; 70 private String progConstName; 72 private PTypeSpace typeSpace; 74 75 83 protected PType(short typecode, String jormname, String javaname, 84 String constname, String codingname) { 85 typeCode = typecode; 86 jormName = jormname; 87 javaName = javaname; 88 codingName = codingname; 89 progConstName = constname; 90 typeSpace = null; 91 } 92 93 100 protected PType(String classname, PTypeSpace typespace) { 101 typeCode = TYPECODE_REFERENCE; 102 jormName = classname; 103 javaName = "java.lang.Object"; 104 typeSpace = typespace; 105 } 106 107 115 public boolean isa(PType pt) { 116 switch (this.typeCode) { 117 case TYPECODE_BOOLEAN: 118 return pt.typeCode == TYPECODE_BOOLEAN; 119 case TYPECODE_CHAR: 120 switch (pt.typeCode) { 121 case TYPECODE_CHAR: 122 case TYPECODE_INT: 123 case TYPECODE_LONG: 124 case TYPECODE_FLOAT: 125 case TYPECODE_DOUBLE: 126 return true; 127 default : 128 return false; 129 } 130 case TYPECODE_BYTE: 131 switch (pt.typeCode) { 132 case TYPECODE_BYTE: 133 case TYPECODE_SHORT: 134 case TYPECODE_INT: 135 case TYPECODE_LONG: 136 case TYPECODE_FLOAT: 137 case TYPECODE_DOUBLE: 138 return true; 139 default : 140 return false; 141 } 142 case TYPECODE_SHORT: 143 switch (pt.typeCode) { 144 case TYPECODE_SHORT: 145 case TYPECODE_INT: 146 case TYPECODE_LONG: 147 case TYPECODE_FLOAT: 148 case TYPECODE_DOUBLE: 149 return true; 150 default : 151 return false; 152 } 153 case TYPECODE_INT: 154 switch (pt.typeCode) { 155 case TYPECODE_INT: 156 case TYPECODE_LONG: 157 case TYPECODE_FLOAT: 158 case TYPECODE_DOUBLE: 159 return true; 160 default : 161 return false; 162 } 163 case TYPECODE_LONG: 164 switch (pt.typeCode) { 165 case TYPECODE_LONG: 166 case TYPECODE_FLOAT: 167 case TYPECODE_DOUBLE: 168 return true; 169 default : 170 return false; 171 } 172 case TYPECODE_FLOAT: 173 switch (pt.typeCode) { 174 case TYPECODE_FLOAT: 175 case TYPECODE_DOUBLE: 176 return true; 177 default : 178 return false; 179 } 180 case TYPECODE_DOUBLE: 181 return pt.typeCode == TYPECODE_DOUBLE; 182 case TYPECODE_OBJBOOLEAN: 183 return (pt.typeCode == TYPECODE_OBJBOOLEAN) 184 || (pt.typeCode == TYPECODE_SERIALIZED); 185 case TYPECODE_OBJCHAR: 186 switch (pt.typeCode) { 187 case TYPECODE_OBJCHAR: 188 case TYPECODE_OBJINT: 189 case TYPECODE_OBJLONG: 190 case TYPECODE_OBJFLOAT: 191 case TYPECODE_OBJDOUBLE: 192 case TYPECODE_SERIALIZED: 193 return true; 194 default : 195 return false; 196 } 197 case TYPECODE_OBJBYTE: 198 switch (pt.typeCode) { 199 case TYPECODE_OBJBYTE: 200 case TYPECODE_OBJSHORT: 201 case TYPECODE_OBJINT: 202 case TYPECODE_OBJLONG: 203 case TYPECODE_OBJFLOAT: 204 case TYPECODE_OBJDOUBLE: 205 case TYPECODE_SERIALIZED: 206 return true; 207 default : 208 return false; 209 } 210 case TYPECODE_OBJSHORT: 211 switch (pt.typeCode) { 212 case TYPECODE_OBJSHORT: 213 case TYPECODE_OBJINT: 214 case TYPECODE_OBJLONG: 215 case TYPECODE_OBJFLOAT: 216 case TYPECODE_OBJDOUBLE: 217 case TYPECODE_SERIALIZED: 218 return true; 219 default : 220 return false; 221 } 222 case TYPECODE_OBJINT: 223 switch (pt.typeCode) { 224 case TYPECODE_OBJINT: 225 case TYPECODE_OBJLONG: 226 case TYPECODE_OBJFLOAT: 227 case TYPECODE_OBJDOUBLE: 228 case TYPECODE_SERIALIZED: 229 return true; 230 default : 231 return false; 232 } 233 case TYPECODE_OBJLONG: 234 switch (pt.typeCode) { 235 case TYPECODE_OBJLONG: 236 case TYPECODE_OBJFLOAT: 237 case TYPECODE_OBJDOUBLE: 238 case TYPECODE_SERIALIZED: 239 return true; 240 default : 241 return false; 242 } 243 case TYPECODE_OBJFLOAT: 244 switch (pt.typeCode) { 245 case TYPECODE_OBJFLOAT: 246 case TYPECODE_OBJDOUBLE: 247 case TYPECODE_SERIALIZED: 248 return true; 249 default : 250 return false; 251 } 252 case TYPECODE_OBJDOUBLE: 253 return (pt.typeCode == TYPECODE_OBJDOUBLE) 254 || (pt.typeCode == TYPECODE_SERIALIZED); 255 case TYPECODE_STRING: 256 return (pt.typeCode == TYPECODE_STRING) 257 || (pt.typeCode == TYPECODE_SERIALIZED); 258 case TYPECODE_DATE: 259 return (pt.typeCode == TYPECODE_DATE) 260 || (pt.typeCode == TYPECODE_SERIALIZED); 261 case TYPECODE_SERIALIZED: 262 return pt.typeCode == TYPECODE_SERIALIZED; 263 case TYPECODE_BIGDECIMAL: 264 return (pt.typeCode == TYPECODE_BIGDECIMAL) 265 || (pt.typeCode == TYPECODE_SERIALIZED); 266 case TYPECODE_REFERENCE: 267 if(pt.typeCode != TYPECODE_REFERENCE) { 268 return false; 269 } 270 PTypeSpace pts = typeSpace; 271 if (pts == null) { 272 pts = pt.getPTypeSpace(); 273 } 274 return pts.isa(this, pt); 275 } 276 return false; 277 } 278 279 public boolean equals(Object o) { 280 if (!(o instanceof PType)) { 281 return false; 282 } 283 PType p = (PType) o; 284 return (p.getTypeCode() == typeCode) 285 && (typeCode == TYPECODE_REFERENCE 286 ? jormName.equals(p.getJormName()) 287 : true); 288 } 289 290 295 public PType[] getInheritedPType() { 296 return null; 297 } 298 299 303 public String getJormName() { 304 return jormName; 305 } 306 307 311 public String getJavaName() { 312 return javaName; 313 } 314 315 319 public String getCodingName() { 320 return codingName; 321 } 322 323 327 public String getProgName() { 328 return progConstName; 329 } 330 331 335 public PType getNestedPType() { 336 return null; 337 } 338 339 343 public PTypeSpace getPTypeSpace() { 344 return typeSpace; 345 } 346 347 351 public PType[] getSubTypes() { 352 return typeSpace.getSubTypes(this); 353 } 354 355 359 public PType[] getDirectSubTypes() { 360 PType[] subtypes = typeSpace.getSubTypes(this); 361 if (subtypes.length == 0) { 362 return subtypes; 363 } 364 int nbOfDirectSubType = 0; 365 for(int i = 0; i<subtypes.length; i++) { 366 if (!subtypes[i].isDirectSubType(this)) { 367 subtypes[i] = null; 368 } else { 369 nbOfDirectSubType ++; 370 } 371 } 372 if (nbOfDirectSubType == 0) { 373 return new PType[0]; 374 } else if (nbOfDirectSubType == subtypes.length) { 375 return subtypes; 376 } else { 377 PType[] result = new PType[nbOfDirectSubType]; 378 for(int i = 0; i<subtypes.length; i++) { 379 if (subtypes[i] != null) { 380 result[--nbOfDirectSubType] = subtypes[i]; 381 } 382 } 383 return result; 384 } 385 } 386 387 public boolean isDirectSubType(PType parent) { 388 return isa(parent); 389 } 390 391 395 public int getTypeCode() { 396 return typeCode; 397 } 398 } 399 | Popular Tags |