1 26 27 package org.objectweb.openccm.corba.trader; 28 29 import org.omg.CORBA.TCKind ; 31 import org.omg.DynamicAny.DynSequenceHelper ; 32 import org.objectweb.openccm.corba.TypeCodeUtils; 33 34 40 public abstract class TraderTypeCodeUtils { 41 42 private TraderTypeCodeUtils() { 43 } 44 45 55 public static org.omg.CORBA.TypeCode 56 getTypeCode(String typeCodeId) { 57 org.omg.CORBA.ORB orb = org.objectweb.openccm.corba.TheORB.getORB(); 58 if (typeCodeId.equals("boolean")) 59 return orb.get_primitive_tc(TCKind.tk_boolean); 60 if (typeCodeId.equals("char")) 61 return orb.get_primitive_tc(TCKind.tk_char); 62 if (typeCodeId.equals("wchar")) 63 return orb.get_primitive_tc(TCKind.tk_wchar); 64 if (typeCodeId.equals("double")) 65 return orb.get_primitive_tc(TCKind.tk_double); 66 if (typeCodeId.equals("float")) 67 return orb.get_primitive_tc(TCKind.tk_float); 68 if (typeCodeId.equals("short")) 69 return orb.get_primitive_tc(TCKind.tk_short); 70 if (typeCodeId.equals("unsigned short")) 71 return orb.get_primitive_tc(TCKind.tk_ushort); 72 if (typeCodeId.equals("long")) 73 return orb.get_primitive_tc(TCKind.tk_long); 74 if (typeCodeId.equals("unsigned long")) 75 return orb.get_primitive_tc(TCKind.tk_ulong); 76 if (typeCodeId.equals("longlong")) 77 return orb.get_primitive_tc(TCKind.tk_longlong); 78 if (typeCodeId.equals("unsigned longlong")) 79 return orb.get_primitive_tc(TCKind.tk_ulonglong); 80 if (typeCodeId.equals("longdouble")) 81 return orb.get_primitive_tc(TCKind.tk_longdouble); 82 if (typeCodeId.equals("octet")) 83 return orb.get_primitive_tc(TCKind.tk_octet); 84 if (typeCodeId.equals("string")) 85 return orb.get_primitive_tc(TCKind.tk_string); 86 if (typeCodeId.equals("wstring")) 87 return orb.get_primitive_tc(TCKind.tk_wstring); 88 if (typeCodeId.startsWith("sequence")) { 89 int idx = typeCodeId.indexOf("<"); 90 String content_type = typeCodeId.substring(idx+1, typeCodeId.length()-1); 91 org.omg.CORBA.TypeCode content_tc = getTypeCode(content_type); 92 switch (content_tc.kind().value()) { 93 default : return orb.create_sequence_tc(0, content_tc); 109 } 110 } 111 112 return null ; } 114 115 134 public static org.omg.CORBA.Any 135 insertInAny(org.omg.CORBA.TypeCode orig_tc, String value) 136 { 137 org.omg.CORBA.Any the_any = org.objectweb.openccm.corba.TheORB.getORB().create_any(); 138 org.omg.CORBA.TypeCode tc = orig_tc; 139 while (tc.kind() == TCKind.tk_alias) { 140 try { 141 tc = tc.content_type(); 142 } catch (org.omg.CORBA.TypeCodePackage.BadKind ex) {} 143 } 144 int kind = tc.kind().value(); 145 try { 146 switch (kind) { 147 case TCKind._tk_short : { 148 short v = Short.parseShort(value); 149 the_any.insert_short(v); 150 break; 151 } 152 case TCKind._tk_ushort : { 153 short v = Short.parseShort(value); 154 the_any.insert_ushort(v); 155 break; 156 } 157 case TCKind._tk_long : { 158 int v = Integer.parseInt(value); 159 the_any.insert_long(v); 160 break; 161 } 162 case TCKind._tk_ulong : { 163 int v = Integer.parseInt(value); 164 the_any.insert_ulong(v); 165 break; 166 } 167 case TCKind._tk_longlong : { 168 long v = Long.parseLong(value); 169 the_any.insert_longlong(v); 170 break; 171 } 172 case TCKind._tk_ulonglong : { 173 long v = Long.parseLong(value); 174 the_any.insert_ulonglong(v); 175 break; 176 } 177 case TCKind._tk_float : { 178 float v = Float.parseFloat(value); 179 the_any.insert_float(v); 180 break; 181 } 182 case TCKind._tk_double : { 183 double v = Double.parseDouble(value); 184 the_any.insert_double(v); 185 break; 186 } 187 case TCKind._tk_wchar : { 188 char v = value.charAt(0); 189 the_any.insert_wchar(v); 190 break; 191 } 192 case TCKind._tk_char : { 193 char v = value.charAt(0); 194 the_any.insert_char(v); 195 break; 196 } 197 case TCKind._tk_wstring : { 198 the_any.insert_wstring(value); 199 break; 200 } 201 case TCKind._tk_string : { 202 the_any.insert_string(value); 203 break; 204 } 205 case TCKind._tk_octet : { 206 byte v = Byte.parseByte(value); 207 the_any.insert_octet(v); 208 break; 209 } 210 case TCKind._tk_boolean : { 211 boolean v = new Boolean (value).booleanValue(); 212 the_any.insert_boolean(v); 213 break; 214 } 215 case TCKind._tk_alias : { 216 return insertInAny(TypeCodeUtils.getOrigType(tc), value); 217 } 218 case TCKind._tk_sequence : { 219 222 228 String content = value.substring(value.indexOf('(')+1, value.indexOf(')')); 230 java.util.StringTokenizer st = new java.util.StringTokenizer (content, ","); 231 232 try { 233 234 org.omg.DynamicAny.DynAny dyn_any = org.objectweb.openccm.corba.TheDynamicAnyFactory.getFactory().create_dyn_any_from_type_code(tc); 236 org.omg.DynamicAny.DynSequence dyn_seq = DynSequenceHelper.narrow(dyn_any); 237 238 org.omg.CORBA.Any [] values = new org.omg.CORBA.Any [st.countTokens()]; 241 dyn_seq.set_length(st.countTokens()); 242 243 org.omg.CORBA.TypeCode content_tc = null; 245 try { 246 content_tc = tc.content_type(); 247 } catch (org.omg.CORBA.TypeCodePackage.BadKind ex) { 248 System.err.println("in a content catch"); 249 } 251 252 switch (content_tc.kind().value()) { 254 case TCKind._tk_short : { 255 int i=0; 256 while (st.hasMoreTokens()) { 257 values[i] = org.objectweb.openccm.corba.TheORB.getORB().create_any(); 258 values[i].insert_short(Short.parseShort(st.nextToken().trim())); 259 i++; 260 } 261 break; 262 } 263 case TCKind._tk_ushort : { 264 int i=0; 265 while (st.hasMoreTokens()) { 266 values[i] = org.objectweb.openccm.corba.TheORB.getORB().create_any(); 267 values[i].insert_ushort(Short.parseShort(st.nextToken().trim())); 268 i++; 269 } 270 break; 271 } 272 case TCKind._tk_long : { 273 int i=0; 274 while (st.hasMoreTokens()) { 275 values[i] = org.objectweb.openccm.corba.TheORB.getORB().create_any(); 276 values[i].insert_long(Integer.parseInt(st.nextToken().trim())); 277 i++; 278 } 279 break; 280 } 281 case TCKind._tk_ulong : { 282 int i=0; 283 while (st.hasMoreTokens()) { 284 values[i] = org.objectweb.openccm.corba.TheORB.getORB().create_any(); 285 values[i].insert_ulong(Integer.parseInt(st.nextToken().trim())); 286 i++; 287 } 288 break; 289 } 290 case TCKind._tk_longlong : { 291 int i=0; 292 while (st.hasMoreTokens()) { 293 values[i] = org.objectweb.openccm.corba.TheORB.getORB().create_any(); 294 values[i].insert_longlong(Long.parseLong(st.nextToken().trim())); 295 i++; 296 } 297 break; 298 } 299 case TCKind._tk_ulonglong : { 300 int i=0; 301 while (st.hasMoreTokens()) { 302 values[i] = org.objectweb.openccm.corba.TheORB.getORB().create_any(); 303 values[i].insert_ulonglong(Long.parseLong(st.nextToken().trim())); 304 i++; 305 } 306 break; 307 } 308 case TCKind._tk_float : { 309 int i=0; 310 while (st.hasMoreTokens()) { 311 values[i] = org.objectweb.openccm.corba.TheORB.getORB().create_any(); 312 values[i].insert_float(Float.parseFloat(st.nextToken().trim())); 313 i++; 314 } 315 break; 316 } 317 case TCKind._tk_double : { 318 int i=0; 319 while (st.hasMoreTokens()) { 320 values[i] = org.objectweb.openccm.corba.TheORB.getORB().create_any(); 321 values[i].insert_double(Double.parseDouble(st.nextToken().trim())); 322 i++; 323 } 324 break; 325 } 326 case TCKind._tk_wchar : { 327 int i=0; 328 while (st.hasMoreTokens()) { 329 String val = st.nextToken().trim(); 330 if ( ! val.startsWith("'") || 332 ! val.endsWith("'") || 333 val.length() != 3 ) 334 return null; 335 values[i] = org.objectweb.openccm.corba.TheORB.getORB().create_any(); 337 values[i].insert_wchar(val.charAt(1)); 338 i++; 339 } 340 break; 341 } 342 case TCKind._tk_char : { 343 int i=0; 344 while (st.hasMoreTokens()) { 345 String val = st.nextToken().trim(); 346 if ( ! val.startsWith("'") || 348 ! val.endsWith("'") || 349 val.length() != 3 ) 350 return null; 351 values[i] = org.objectweb.openccm.corba.TheORB.getORB().create_any(); 353 values[i].insert_char(val.charAt(1)); 354 i++; 355 } 356 break; 357 } 358 case TCKind._tk_wstring : { 359 int i=0; 360 while (st.hasMoreTokens()) { 361 String val = st.nextToken().trim(); 362 if ( ! val.startsWith("\"") || 364 ! val.endsWith("\"") ) 365 return null; 366 values[i] = org.objectweb.openccm.corba.TheORB.getORB().create_any(); 367 values[i].insert_wstring(val.substring(1, val.length()-1)); 368 i++; 369 } 370 break; 371 } 372 case TCKind._tk_string : { 373 int i=0; 374 while (st.hasMoreTokens()) { 375 String val = st.nextToken().trim(); 376 if ( ! val.startsWith("\"") || 378 ! val.endsWith("\"") ) 379 return null; 380 values[i] = org.objectweb.openccm.corba.TheORB.getORB().create_any(); 381 values[i].insert_string(val.substring(1, val.length()-1)); 382 i++; 383 } 384 break; 385 } 386 case TCKind._tk_octet : { 387 int i=0; 388 while (st.hasMoreTokens()) { 389 values[i] = org.objectweb.openccm.corba.TheORB.getORB().create_any(); 390 values[i].insert_octet(Byte.parseByte(st.nextToken().trim())); 391 i++; 392 } 393 break; 394 } 395 case TCKind._tk_boolean : { 396 int i=0; 397 while (st.hasMoreTokens()) { 398 values[i] = org.objectweb.openccm.corba.TheORB.getORB().create_any(); 399 values[i].insert_boolean(Boolean.valueOf(st.nextToken().trim()).booleanValue()); 400 i++; 401 } 402 break; 403 } 404 } 405 dyn_seq.set_elements(values); 406 return dyn_seq.to_any(); 407 } catch (org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode ex) { 408 } catch (org.omg.DynamicAny.DynAnyPackage.InvalidValue ex) { 409 } catch (org.omg.DynamicAny.DynAnyPackage.TypeMismatch ex) { 410 } 411 return null; 412 } 413 default : return null; 414 } 415 return the_any; 416 } catch (NumberFormatException ex) { 417 throw new org.objectweb.util.misc.api.ExceptionWrapper(ex, "cannot insert in any"); 418 } 419 } 420 521 529 536 } 712 | Popular Tags |