DynAnyBasicImpl.java revision 608:7e06bf1dcb09
1/* 2 * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package com.sun.corba.se.impl.dynamicany; 27 28import org.omg.CORBA.Any; 29import org.omg.CORBA.TypeCode; 30import org.omg.CORBA.TypeCodePackage.BadKind; 31import org.omg.CORBA.TCKind; 32 33import org.omg.DynamicAny.*; 34import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; 35import org.omg.DynamicAny.DynAnyPackage.InvalidValue; 36import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode; 37 38import com.sun.corba.se.spi.orb.ORB ; 39import com.sun.corba.se.spi.logging.CORBALogDomains ; 40import com.sun.corba.se.impl.logging.ORBUtilSystemException ; 41 42public class DynAnyBasicImpl extends DynAnyImpl 43{ 44 // 45 // Constructors 46 // 47 48 private DynAnyBasicImpl() { 49 this(null, (Any)null, false); 50 } 51 52 protected DynAnyBasicImpl(ORB orb, Any any, boolean copyValue) { 53 super(orb, any, copyValue); 54 // set the current position to 0 if any has components, otherwise to -1. 55 index = NO_INDEX; 56 } 57 58 protected DynAnyBasicImpl(ORB orb, TypeCode typeCode) { 59 super(orb, typeCode); 60 // set the current position to 0 if any has components, otherwise to -1. 61 index = NO_INDEX; 62 } 63 64 // 65 // DynAny interface methods 66 // 67 68 public void assign (org.omg.DynamicAny.DynAny dyn_any) 69 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch 70 { 71 if (status == STATUS_DESTROYED) { 72 throw wrapper.dynAnyDestroyed() ; 73 } 74 super.assign(dyn_any); 75 index = NO_INDEX; 76 } 77 78 public void from_any (org.omg.CORBA.Any value) 79 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 80 org.omg.DynamicAny.DynAnyPackage.InvalidValue 81 { 82 if (status == STATUS_DESTROYED) { 83 throw wrapper.dynAnyDestroyed() ; 84 } 85 super.from_any(value); 86 index = NO_INDEX; 87 } 88 89 // Spec: Returns a copy of the internal Any 90 public org.omg.CORBA.Any to_any() { 91 if (status == STATUS_DESTROYED) { 92 throw wrapper.dynAnyDestroyed() ; 93 } 94 return DynAnyUtil.copy(any, orb); 95 } 96 97 public boolean equal (org.omg.DynamicAny.DynAny dyn_any) { 98 if (status == STATUS_DESTROYED) { 99 throw wrapper.dynAnyDestroyed() ; 100 } 101 if (dyn_any == this) { 102 return true; 103 } 104 // If the other DynAny is a constructed one we don't want it to have 105 // to create its Any representation just for this test. 106 if ( ! any.type().equal(dyn_any.type())) { 107 return false; 108 } 109 //System.out.println("Comparing anys"); 110 return any.equal(getAny(dyn_any)); 111 } 112 113 public void destroy() { 114 if (status == STATUS_DESTROYED) { 115 throw wrapper.dynAnyDestroyed() ; 116 } 117 if (status == STATUS_DESTROYABLE) { 118 status = STATUS_DESTROYED; 119 } 120 } 121 122 public org.omg.DynamicAny.DynAny copy() { 123 if (status == STATUS_DESTROYED) { 124 throw wrapper.dynAnyDestroyed() ; 125 } 126 // The flag "true" indicates copying the Any value 127 try { 128 return DynAnyUtil.createMostDerivedDynAny(any, orb, true); 129 } catch (InconsistentTypeCode ictc) { 130 return null; // impossible 131 } 132 } 133 134 public org.omg.DynamicAny.DynAny current_component() 135 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch 136 { 137 return null; 138 } 139 140 public int component_count() { 141 return 0; 142 } 143 144 public boolean next() { 145 return false; 146 } 147 148 public boolean seek(int index) { 149 return false; 150 } 151 152 public void rewind() { 153 } 154 155 public void insert_boolean(boolean value) 156 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 157 org.omg.DynamicAny.DynAnyPackage.InvalidValue 158 { 159 if (status == STATUS_DESTROYED) { 160 throw wrapper.dynAnyDestroyed() ; 161 } 162 if (any.type().kind().value() != TCKind._tk_boolean) 163 throw new TypeMismatch(); 164 any.insert_boolean(value); 165 } 166 167 public void insert_octet(byte value) 168 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 169 org.omg.DynamicAny.DynAnyPackage.InvalidValue 170 { 171 if (status == STATUS_DESTROYED) { 172 throw wrapper.dynAnyDestroyed() ; 173 } 174 if (any.type().kind().value() != TCKind._tk_octet) 175 throw new TypeMismatch(); 176 any.insert_octet(value); 177 } 178 179 public void insert_char(char value) 180 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 181 org.omg.DynamicAny.DynAnyPackage.InvalidValue 182 { 183 if (status == STATUS_DESTROYED) { 184 throw wrapper.dynAnyDestroyed() ; 185 } 186 if (any.type().kind().value() != TCKind._tk_char) 187 throw new TypeMismatch(); 188 any.insert_char(value); 189 } 190 191 public void insert_short(short value) 192 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 193 org.omg.DynamicAny.DynAnyPackage.InvalidValue 194 { 195 if (status == STATUS_DESTROYED) { 196 throw wrapper.dynAnyDestroyed() ; 197 } 198 if (any.type().kind().value() != TCKind._tk_short) 199 throw new TypeMismatch(); 200 any.insert_short(value); 201 } 202 203 public void insert_ushort(short value) 204 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 205 org.omg.DynamicAny.DynAnyPackage.InvalidValue 206 { 207 if (status == STATUS_DESTROYED) { 208 throw wrapper.dynAnyDestroyed() ; 209 } 210 if (any.type().kind().value() != TCKind._tk_ushort) 211 throw new TypeMismatch(); 212 any.insert_ushort(value); 213 } 214 215 public void insert_long(int value) 216 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 217 org.omg.DynamicAny.DynAnyPackage.InvalidValue 218 { 219 if (status == STATUS_DESTROYED) { 220 throw wrapper.dynAnyDestroyed() ; 221 } 222 if (any.type().kind().value() != TCKind._tk_long) 223 throw new TypeMismatch(); 224 any.insert_long(value); 225 } 226 227 public void insert_ulong(int value) 228 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 229 org.omg.DynamicAny.DynAnyPackage.InvalidValue 230 { 231 if (status == STATUS_DESTROYED) { 232 throw wrapper.dynAnyDestroyed() ; 233 } 234 if (any.type().kind().value() != TCKind._tk_ulong) 235 throw new TypeMismatch(); 236 any.insert_ulong(value); 237 } 238 239 public void insert_float(float value) 240 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 241 org.omg.DynamicAny.DynAnyPackage.InvalidValue 242 { 243 if (status == STATUS_DESTROYED) { 244 throw wrapper.dynAnyDestroyed() ; 245 } 246 if (any.type().kind().value() != TCKind._tk_float) 247 throw new TypeMismatch(); 248 any.insert_float(value); 249 } 250 251 public void insert_double(double value) 252 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 253 org.omg.DynamicAny.DynAnyPackage.InvalidValue 254 { 255 if (status == STATUS_DESTROYED) { 256 throw wrapper.dynAnyDestroyed() ; 257 } 258 if (any.type().kind().value() != TCKind._tk_double) 259 throw new TypeMismatch(); 260 any.insert_double(value); 261 } 262 263 public void insert_string(String value) 264 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 265 org.omg.DynamicAny.DynAnyPackage.InvalidValue 266 { 267 if (status == STATUS_DESTROYED) { 268 throw wrapper.dynAnyDestroyed() ; 269 } 270 if (any.type().kind().value() != TCKind._tk_string) 271 throw new TypeMismatch(); 272 if (value == null) 273 throw new InvalidValue(); 274 // Throw InvalidValue if this is a bounded string and the length is exceeded 275 try { 276 if (any.type().length() > 0 && any.type().length() < value.length()) 277 throw new InvalidValue(); 278 } catch (BadKind bad) { // impossible 279 } 280 any.insert_string(value); 281 } 282 283 public void insert_reference(org.omg.CORBA.Object value) 284 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 285 org.omg.DynamicAny.DynAnyPackage.InvalidValue 286 { 287 if (status == STATUS_DESTROYED) { 288 throw wrapper.dynAnyDestroyed() ; 289 } 290 if (any.type().kind().value() != TCKind._tk_objref) 291 throw new TypeMismatch(); 292 any.insert_Object(value); 293 } 294 295 public void insert_typecode(org.omg.CORBA.TypeCode value) 296 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 297 org.omg.DynamicAny.DynAnyPackage.InvalidValue 298 { 299 if (status == STATUS_DESTROYED) { 300 throw wrapper.dynAnyDestroyed() ; 301 } 302 if (any.type().kind().value() != TCKind._tk_TypeCode) 303 throw new TypeMismatch(); 304 any.insert_TypeCode(value); 305 } 306 307 public void insert_longlong(long value) 308 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 309 org.omg.DynamicAny.DynAnyPackage.InvalidValue 310 { 311 if (status == STATUS_DESTROYED) { 312 throw wrapper.dynAnyDestroyed() ; 313 } 314 if (any.type().kind().value() != TCKind._tk_longlong) 315 throw new TypeMismatch(); 316 any.insert_longlong(value); 317 } 318 319 public void insert_ulonglong(long value) 320 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 321 org.omg.DynamicAny.DynAnyPackage.InvalidValue 322 { 323 if (status == STATUS_DESTROYED) { 324 throw wrapper.dynAnyDestroyed() ; 325 } 326 if (any.type().kind().value() != TCKind._tk_ulonglong) 327 throw new TypeMismatch(); 328 any.insert_ulonglong(value); 329 } 330 331 public void insert_wchar(char value) 332 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 333 org.omg.DynamicAny.DynAnyPackage.InvalidValue 334 { 335 if (status == STATUS_DESTROYED) { 336 throw wrapper.dynAnyDestroyed() ; 337 } 338 if (any.type().kind().value() != TCKind._tk_wchar) 339 throw new TypeMismatch(); 340 any.insert_wchar(value); 341 } 342 343 public void insert_wstring(String value) 344 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 345 org.omg.DynamicAny.DynAnyPackage.InvalidValue 346 { 347 if (status == STATUS_DESTROYED) { 348 throw wrapper.dynAnyDestroyed() ; 349 } 350 if (any.type().kind().value() != TCKind._tk_wstring) 351 throw new TypeMismatch(); 352 if (value == null) 353 throw new InvalidValue(); 354 // Throw InvalidValue if this is a bounded string and the length is exceeded 355 try { 356 if (any.type().length() > 0 && any.type().length() < value.length()) 357 throw new InvalidValue(); 358 } catch (BadKind bad) { // impossible 359 } 360 any.insert_wstring(value); 361 } 362 363 public void insert_any(org.omg.CORBA.Any value) 364 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 365 org.omg.DynamicAny.DynAnyPackage.InvalidValue 366 { 367 if (status == STATUS_DESTROYED) { 368 throw wrapper.dynAnyDestroyed() ; 369 } 370 if (any.type().kind().value() != TCKind._tk_any) 371 throw new TypeMismatch(); 372 any.insert_any(value); 373 } 374 375 public void insert_dyn_any (org.omg.DynamicAny.DynAny value) 376 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 377 org.omg.DynamicAny.DynAnyPackage.InvalidValue 378 { 379 if (status == STATUS_DESTROYED) { 380 throw wrapper.dynAnyDestroyed() ; 381 } 382 if (any.type().kind().value() != TCKind._tk_any) 383 throw new TypeMismatch(); 384 // _REVISIT_ Copy value here? 385 any.insert_any(value.to_any()); 386 } 387 388 public void insert_val(java.io.Serializable value) 389 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 390 org.omg.DynamicAny.DynAnyPackage.InvalidValue 391 { 392 if (status == STATUS_DESTROYED) { 393 throw wrapper.dynAnyDestroyed() ; 394 } 395 int kind = any.type().kind().value(); 396 if (kind != TCKind._tk_value && kind != TCKind._tk_value_box) 397 throw new TypeMismatch(); 398 any.insert_Value(value); 399 } 400 401 public java.io.Serializable get_val() 402 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 403 org.omg.DynamicAny.DynAnyPackage.InvalidValue 404 { 405 if (status == STATUS_DESTROYED) { 406 throw wrapper.dynAnyDestroyed() ; 407 } 408 int kind = any.type().kind().value(); 409 if (kind != TCKind._tk_value && kind != TCKind._tk_value_box) 410 throw new TypeMismatch(); 411 return any.extract_Value(); 412 } 413 414 public boolean get_boolean() 415 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 416 org.omg.DynamicAny.DynAnyPackage.InvalidValue 417 { 418 if (status == STATUS_DESTROYED) { 419 throw wrapper.dynAnyDestroyed() ; 420 } 421 if (any.type().kind().value() != TCKind._tk_boolean) 422 throw new TypeMismatch(); 423 return any.extract_boolean(); 424 } 425 426 public byte get_octet() 427 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 428 org.omg.DynamicAny.DynAnyPackage.InvalidValue 429 { 430 if (status == STATUS_DESTROYED) { 431 throw wrapper.dynAnyDestroyed() ; 432 } 433 if (any.type().kind().value() != TCKind._tk_octet) 434 throw new TypeMismatch(); 435 return any.extract_octet(); 436 } 437 438 public char get_char() 439 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 440 org.omg.DynamicAny.DynAnyPackage.InvalidValue 441 { 442 if (status == STATUS_DESTROYED) { 443 throw wrapper.dynAnyDestroyed() ; 444 } 445 if (any.type().kind().value() != TCKind._tk_char) 446 throw new TypeMismatch(); 447 return any.extract_char(); 448 } 449 450 public short get_short() 451 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 452 org.omg.DynamicAny.DynAnyPackage.InvalidValue 453 { 454 if (status == STATUS_DESTROYED) { 455 throw wrapper.dynAnyDestroyed() ; 456 } 457 if (any.type().kind().value() != TCKind._tk_short) 458 throw new TypeMismatch(); 459 return any.extract_short(); 460 } 461 462 public short get_ushort() 463 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 464 org.omg.DynamicAny.DynAnyPackage.InvalidValue 465 { 466 if (status == STATUS_DESTROYED) { 467 throw wrapper.dynAnyDestroyed() ; 468 } 469 if (any.type().kind().value() != TCKind._tk_ushort) 470 throw new TypeMismatch(); 471 return any.extract_ushort(); 472 } 473 474 public int get_long() 475 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 476 org.omg.DynamicAny.DynAnyPackage.InvalidValue 477 { 478 if (status == STATUS_DESTROYED) { 479 throw wrapper.dynAnyDestroyed() ; 480 } 481 if (any.type().kind().value() != TCKind._tk_long) 482 throw new TypeMismatch(); 483 return any.extract_long(); 484 } 485 486 public int get_ulong() 487 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 488 org.omg.DynamicAny.DynAnyPackage.InvalidValue 489 { 490 if (status == STATUS_DESTROYED) { 491 throw wrapper.dynAnyDestroyed() ; 492 } 493 if (any.type().kind().value() != TCKind._tk_ulong) 494 throw new TypeMismatch(); 495 return any.extract_ulong(); 496 } 497 498 public float get_float() 499 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 500 org.omg.DynamicAny.DynAnyPackage.InvalidValue 501 { 502 if (status == STATUS_DESTROYED) { 503 throw wrapper.dynAnyDestroyed() ; 504 } 505 if (any.type().kind().value() != TCKind._tk_float) 506 throw new TypeMismatch(); 507 return any.extract_float(); 508 } 509 510 public double get_double() 511 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 512 org.omg.DynamicAny.DynAnyPackage.InvalidValue 513 { 514 if (status == STATUS_DESTROYED) { 515 throw wrapper.dynAnyDestroyed() ; 516 } 517 if (any.type().kind().value() != TCKind._tk_double) 518 throw new TypeMismatch(); 519 return any.extract_double(); 520 } 521 522 public String get_string() 523 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 524 org.omg.DynamicAny.DynAnyPackage.InvalidValue 525 { 526 if (status == STATUS_DESTROYED) { 527 throw wrapper.dynAnyDestroyed() ; 528 } 529 if (any.type().kind().value() != TCKind._tk_string) 530 throw new TypeMismatch(); 531 return any.extract_string(); 532 } 533 534 public org.omg.CORBA.Object get_reference() 535 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 536 org.omg.DynamicAny.DynAnyPackage.InvalidValue 537 { 538 if (status == STATUS_DESTROYED) { 539 throw wrapper.dynAnyDestroyed() ; 540 } 541 if (any.type().kind().value() != TCKind._tk_objref) 542 throw new TypeMismatch(); 543 return any.extract_Object(); 544 } 545 546 public org.omg.CORBA.TypeCode get_typecode() 547 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 548 org.omg.DynamicAny.DynAnyPackage.InvalidValue 549 { 550 if (status == STATUS_DESTROYED) { 551 throw wrapper.dynAnyDestroyed() ; 552 } 553 if (any.type().kind().value() != TCKind._tk_TypeCode) 554 throw new TypeMismatch(); 555 return any.extract_TypeCode(); 556 } 557 558 public long get_longlong() 559 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 560 org.omg.DynamicAny.DynAnyPackage.InvalidValue 561 { 562 if (status == STATUS_DESTROYED) { 563 throw wrapper.dynAnyDestroyed() ; 564 } 565 if (any.type().kind().value() != TCKind._tk_longlong) 566 throw new TypeMismatch(); 567 return any.extract_longlong(); 568 } 569 570 public long get_ulonglong() 571 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 572 org.omg.DynamicAny.DynAnyPackage.InvalidValue 573 { 574 if (status == STATUS_DESTROYED) { 575 throw wrapper.dynAnyDestroyed() ; 576 } 577 if (any.type().kind().value() != TCKind._tk_ulonglong) 578 throw new TypeMismatch(); 579 return any.extract_ulonglong(); 580 } 581 582 public char get_wchar() 583 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 584 org.omg.DynamicAny.DynAnyPackage.InvalidValue 585 { 586 if (status == STATUS_DESTROYED) { 587 throw wrapper.dynAnyDestroyed() ; 588 } 589 if (any.type().kind().value() != TCKind._tk_wchar) 590 throw new TypeMismatch(); 591 return any.extract_wchar(); 592 } 593 594 public String get_wstring() 595 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 596 org.omg.DynamicAny.DynAnyPackage.InvalidValue 597 { 598 if (status == STATUS_DESTROYED) { 599 throw wrapper.dynAnyDestroyed() ; 600 } 601 if (any.type().kind().value() != TCKind._tk_wstring) 602 throw new TypeMismatch(); 603 return any.extract_wstring(); 604 } 605 606 public org.omg.CORBA.Any get_any() 607 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 608 org.omg.DynamicAny.DynAnyPackage.InvalidValue 609 { 610 if (status == STATUS_DESTROYED) { 611 throw wrapper.dynAnyDestroyed() ; 612 } 613 if (any.type().kind().value() != TCKind._tk_any) 614 throw new TypeMismatch(); 615 return any.extract_any(); 616 } 617 618 public org.omg.DynamicAny.DynAny get_dyn_any() 619 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, 620 org.omg.DynamicAny.DynAnyPackage.InvalidValue 621 { 622 if (status == STATUS_DESTROYED) { 623 throw wrapper.dynAnyDestroyed() ; 624 } 625 if (any.type().kind().value() != TCKind._tk_any) 626 throw new TypeMismatch(); 627 // _REVISIT_ Copy value here? 628 try { 629 return DynAnyUtil.createMostDerivedDynAny(any.extract_any(), orb, true); 630 } catch (InconsistentTypeCode ictc) { 631 // The spec doesn't allow us to throw back this exception 632 // incase the anys any if of type Principal, native or abstract interface. 633 return null; 634 } 635 } 636} 637