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