001: /*
002: * Copyright 2000-2003 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package com.sun.corba.se.impl.dynamicany;
027:
028: import org.omg.CORBA.Any;
029: import org.omg.CORBA.TypeCode;
030: import org.omg.CORBA.TypeCodePackage.BadKind;
031: import org.omg.CORBA.TCKind;
032:
033: import org.omg.DynamicAny.*;
034: import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
035: import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
036: import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode;
037:
038: import com.sun.corba.se.spi.orb.ORB;
039: import com.sun.corba.se.spi.logging.CORBALogDomains;
040: import com.sun.corba.se.impl.logging.ORBUtilSystemException;
041:
042: public class DynAnyBasicImpl extends DynAnyImpl {
043: //
044: // Constructors
045: //
046:
047: private DynAnyBasicImpl() {
048: this (null, (Any) null, false);
049: }
050:
051: protected DynAnyBasicImpl(ORB orb, Any any, boolean copyValue) {
052: super (orb, any, copyValue);
053: // set the current position to 0 if any has components, otherwise to -1.
054: index = NO_INDEX;
055: }
056:
057: protected DynAnyBasicImpl(ORB orb, TypeCode typeCode) {
058: super (orb, typeCode);
059: // set the current position to 0 if any has components, otherwise to -1.
060: index = NO_INDEX;
061: }
062:
063: //
064: // DynAny interface methods
065: //
066:
067: public void assign(org.omg.DynamicAny.DynAny dyn_any)
068: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch {
069: if (status == STATUS_DESTROYED) {
070: throw wrapper.dynAnyDestroyed();
071: }
072: super .assign(dyn_any);
073: index = NO_INDEX;
074: }
075:
076: public void from_any(org.omg.CORBA.Any value)
077: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
078: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
079: if (status == STATUS_DESTROYED) {
080: throw wrapper.dynAnyDestroyed();
081: }
082: super .from_any(value);
083: index = NO_INDEX;
084: }
085:
086: // Spec: Returns a copy of the internal Any
087: public org.omg.CORBA.Any to_any() {
088: if (status == STATUS_DESTROYED) {
089: throw wrapper.dynAnyDestroyed();
090: }
091: return DynAnyUtil.copy(any, orb);
092: }
093:
094: public boolean equal(org.omg.DynamicAny.DynAny dyn_any) {
095: if (status == STATUS_DESTROYED) {
096: throw wrapper.dynAnyDestroyed();
097: }
098: if (dyn_any == this ) {
099: return true;
100: }
101: // If the other DynAny is a constructed one we don't want it to have
102: // to create its Any representation just for this test.
103: if (!any.type().equal(dyn_any.type())) {
104: return false;
105: }
106: //System.out.println("Comparing anys");
107: return any.equal(getAny(dyn_any));
108: }
109:
110: public void destroy() {
111: if (status == STATUS_DESTROYED) {
112: throw wrapper.dynAnyDestroyed();
113: }
114: if (status == STATUS_DESTROYABLE) {
115: status = STATUS_DESTROYED;
116: }
117: }
118:
119: public org.omg.DynamicAny.DynAny copy() {
120: if (status == STATUS_DESTROYED) {
121: throw wrapper.dynAnyDestroyed();
122: }
123: // The flag "true" indicates copying the Any value
124: try {
125: return DynAnyUtil.createMostDerivedDynAny(any, orb, true);
126: } catch (InconsistentTypeCode ictc) {
127: return null; // impossible
128: }
129: }
130:
131: public org.omg.DynamicAny.DynAny current_component()
132: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch {
133: return null;
134: }
135:
136: public int component_count() {
137: return 0;
138: }
139:
140: public boolean next() {
141: return false;
142: }
143:
144: public boolean seek(int index) {
145: return false;
146: }
147:
148: public void rewind() {
149: }
150:
151: public void insert_boolean(boolean value)
152: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
153: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
154: if (status == STATUS_DESTROYED) {
155: throw wrapper.dynAnyDestroyed();
156: }
157: if (any.type().kind().value() != TCKind._tk_boolean)
158: throw new TypeMismatch();
159: any.insert_boolean(value);
160: }
161:
162: public void insert_octet(byte value)
163: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
164: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
165: if (status == STATUS_DESTROYED) {
166: throw wrapper.dynAnyDestroyed();
167: }
168: if (any.type().kind().value() != TCKind._tk_octet)
169: throw new TypeMismatch();
170: any.insert_octet(value);
171: }
172:
173: public void insert_char(char value)
174: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
175: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
176: if (status == STATUS_DESTROYED) {
177: throw wrapper.dynAnyDestroyed();
178: }
179: if (any.type().kind().value() != TCKind._tk_char)
180: throw new TypeMismatch();
181: any.insert_char(value);
182: }
183:
184: public void insert_short(short value)
185: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
186: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
187: if (status == STATUS_DESTROYED) {
188: throw wrapper.dynAnyDestroyed();
189: }
190: if (any.type().kind().value() != TCKind._tk_short)
191: throw new TypeMismatch();
192: any.insert_short(value);
193: }
194:
195: public void insert_ushort(short value)
196: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
197: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
198: if (status == STATUS_DESTROYED) {
199: throw wrapper.dynAnyDestroyed();
200: }
201: if (any.type().kind().value() != TCKind._tk_ushort)
202: throw new TypeMismatch();
203: any.insert_ushort(value);
204: }
205:
206: public void insert_long(int value)
207: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
208: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
209: if (status == STATUS_DESTROYED) {
210: throw wrapper.dynAnyDestroyed();
211: }
212: if (any.type().kind().value() != TCKind._tk_long)
213: throw new TypeMismatch();
214: any.insert_long(value);
215: }
216:
217: public void insert_ulong(int value)
218: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
219: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
220: if (status == STATUS_DESTROYED) {
221: throw wrapper.dynAnyDestroyed();
222: }
223: if (any.type().kind().value() != TCKind._tk_ulong)
224: throw new TypeMismatch();
225: any.insert_ulong(value);
226: }
227:
228: public void insert_float(float value)
229: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
230: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
231: if (status == STATUS_DESTROYED) {
232: throw wrapper.dynAnyDestroyed();
233: }
234: if (any.type().kind().value() != TCKind._tk_float)
235: throw new TypeMismatch();
236: any.insert_float(value);
237: }
238:
239: public void insert_double(double value)
240: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
241: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
242: if (status == STATUS_DESTROYED) {
243: throw wrapper.dynAnyDestroyed();
244: }
245: if (any.type().kind().value() != TCKind._tk_double)
246: throw new TypeMismatch();
247: any.insert_double(value);
248: }
249:
250: public void insert_string(String value)
251: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
252: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
253: if (status == STATUS_DESTROYED) {
254: throw wrapper.dynAnyDestroyed();
255: }
256: if (any.type().kind().value() != TCKind._tk_string)
257: throw new TypeMismatch();
258: if (value == null)
259: throw new InvalidValue();
260: // Throw InvalidValue if this is a bounded string and the length is exceeded
261: try {
262: if (any.type().length() > 0
263: && any.type().length() < value.length())
264: throw new InvalidValue();
265: } catch (BadKind bad) { // impossible
266: }
267: any.insert_string(value);
268: }
269:
270: public void insert_reference(org.omg.CORBA.Object value)
271: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
272: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
273: if (status == STATUS_DESTROYED) {
274: throw wrapper.dynAnyDestroyed();
275: }
276: if (any.type().kind().value() != TCKind._tk_objref)
277: throw new TypeMismatch();
278: any.insert_Object(value);
279: }
280:
281: public void insert_typecode(org.omg.CORBA.TypeCode value)
282: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
283: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
284: if (status == STATUS_DESTROYED) {
285: throw wrapper.dynAnyDestroyed();
286: }
287: if (any.type().kind().value() != TCKind._tk_TypeCode)
288: throw new TypeMismatch();
289: any.insert_TypeCode(value);
290: }
291:
292: public void insert_longlong(long value)
293: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
294: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
295: if (status == STATUS_DESTROYED) {
296: throw wrapper.dynAnyDestroyed();
297: }
298: if (any.type().kind().value() != TCKind._tk_longlong)
299: throw new TypeMismatch();
300: any.insert_longlong(value);
301: }
302:
303: public void insert_ulonglong(long value)
304: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
305: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
306: if (status == STATUS_DESTROYED) {
307: throw wrapper.dynAnyDestroyed();
308: }
309: if (any.type().kind().value() != TCKind._tk_ulonglong)
310: throw new TypeMismatch();
311: any.insert_ulonglong(value);
312: }
313:
314: public void insert_wchar(char value)
315: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
316: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
317: if (status == STATUS_DESTROYED) {
318: throw wrapper.dynAnyDestroyed();
319: }
320: if (any.type().kind().value() != TCKind._tk_wchar)
321: throw new TypeMismatch();
322: any.insert_wchar(value);
323: }
324:
325: public void insert_wstring(String value)
326: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
327: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
328: if (status == STATUS_DESTROYED) {
329: throw wrapper.dynAnyDestroyed();
330: }
331: if (any.type().kind().value() != TCKind._tk_wstring)
332: throw new TypeMismatch();
333: if (value == null)
334: throw new InvalidValue();
335: // Throw InvalidValue if this is a bounded string and the length is exceeded
336: try {
337: if (any.type().length() > 0
338: && any.type().length() < value.length())
339: throw new InvalidValue();
340: } catch (BadKind bad) { // impossible
341: }
342: any.insert_wstring(value);
343: }
344:
345: public void insert_any(org.omg.CORBA.Any value)
346: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
347: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
348: if (status == STATUS_DESTROYED) {
349: throw wrapper.dynAnyDestroyed();
350: }
351: if (any.type().kind().value() != TCKind._tk_any)
352: throw new TypeMismatch();
353: any.insert_any(value);
354: }
355:
356: public void insert_dyn_any(org.omg.DynamicAny.DynAny value)
357: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
358: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
359: if (status == STATUS_DESTROYED) {
360: throw wrapper.dynAnyDestroyed();
361: }
362: if (any.type().kind().value() != TCKind._tk_any)
363: throw new TypeMismatch();
364: // _REVISIT_ Copy value here?
365: any.insert_any(value.to_any());
366: }
367:
368: public void insert_val(java.io.Serializable value)
369: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
370: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
371: if (status == STATUS_DESTROYED) {
372: throw wrapper.dynAnyDestroyed();
373: }
374: int kind = any.type().kind().value();
375: if (kind != TCKind._tk_value && kind != TCKind._tk_value_box)
376: throw new TypeMismatch();
377: any.insert_Value(value);
378: }
379:
380: public java.io.Serializable get_val()
381: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
382: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
383: if (status == STATUS_DESTROYED) {
384: throw wrapper.dynAnyDestroyed();
385: }
386: int kind = any.type().kind().value();
387: if (kind != TCKind._tk_value && kind != TCKind._tk_value_box)
388: throw new TypeMismatch();
389: return any.extract_Value();
390: }
391:
392: public boolean get_boolean()
393: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
394: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
395: if (status == STATUS_DESTROYED) {
396: throw wrapper.dynAnyDestroyed();
397: }
398: if (any.type().kind().value() != TCKind._tk_boolean)
399: throw new TypeMismatch();
400: return any.extract_boolean();
401: }
402:
403: public byte get_octet()
404: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
405: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
406: if (status == STATUS_DESTROYED) {
407: throw wrapper.dynAnyDestroyed();
408: }
409: if (any.type().kind().value() != TCKind._tk_octet)
410: throw new TypeMismatch();
411: return any.extract_octet();
412: }
413:
414: public char get_char()
415: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
416: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
417: if (status == STATUS_DESTROYED) {
418: throw wrapper.dynAnyDestroyed();
419: }
420: if (any.type().kind().value() != TCKind._tk_char)
421: throw new TypeMismatch();
422: return any.extract_char();
423: }
424:
425: public short get_short()
426: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
427: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
428: if (status == STATUS_DESTROYED) {
429: throw wrapper.dynAnyDestroyed();
430: }
431: if (any.type().kind().value() != TCKind._tk_short)
432: throw new TypeMismatch();
433: return any.extract_short();
434: }
435:
436: public short get_ushort()
437: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
438: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
439: if (status == STATUS_DESTROYED) {
440: throw wrapper.dynAnyDestroyed();
441: }
442: if (any.type().kind().value() != TCKind._tk_ushort)
443: throw new TypeMismatch();
444: return any.extract_ushort();
445: }
446:
447: public int get_long()
448: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
449: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
450: if (status == STATUS_DESTROYED) {
451: throw wrapper.dynAnyDestroyed();
452: }
453: if (any.type().kind().value() != TCKind._tk_long)
454: throw new TypeMismatch();
455: return any.extract_long();
456: }
457:
458: public int get_ulong()
459: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
460: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
461: if (status == STATUS_DESTROYED) {
462: throw wrapper.dynAnyDestroyed();
463: }
464: if (any.type().kind().value() != TCKind._tk_ulong)
465: throw new TypeMismatch();
466: return any.extract_ulong();
467: }
468:
469: public float get_float()
470: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
471: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
472: if (status == STATUS_DESTROYED) {
473: throw wrapper.dynAnyDestroyed();
474: }
475: if (any.type().kind().value() != TCKind._tk_float)
476: throw new TypeMismatch();
477: return any.extract_float();
478: }
479:
480: public double get_double()
481: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
482: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
483: if (status == STATUS_DESTROYED) {
484: throw wrapper.dynAnyDestroyed();
485: }
486: if (any.type().kind().value() != TCKind._tk_double)
487: throw new TypeMismatch();
488: return any.extract_double();
489: }
490:
491: public String get_string()
492: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
493: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
494: if (status == STATUS_DESTROYED) {
495: throw wrapper.dynAnyDestroyed();
496: }
497: if (any.type().kind().value() != TCKind._tk_string)
498: throw new TypeMismatch();
499: return any.extract_string();
500: }
501:
502: public org.omg.CORBA.Object get_reference()
503: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
504: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
505: if (status == STATUS_DESTROYED) {
506: throw wrapper.dynAnyDestroyed();
507: }
508: if (any.type().kind().value() != TCKind._tk_objref)
509: throw new TypeMismatch();
510: return any.extract_Object();
511: }
512:
513: public org.omg.CORBA.TypeCode get_typecode()
514: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
515: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
516: if (status == STATUS_DESTROYED) {
517: throw wrapper.dynAnyDestroyed();
518: }
519: if (any.type().kind().value() != TCKind._tk_TypeCode)
520: throw new TypeMismatch();
521: return any.extract_TypeCode();
522: }
523:
524: public long get_longlong()
525: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
526: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
527: if (status == STATUS_DESTROYED) {
528: throw wrapper.dynAnyDestroyed();
529: }
530: if (any.type().kind().value() != TCKind._tk_longlong)
531: throw new TypeMismatch();
532: return any.extract_longlong();
533: }
534:
535: public long get_ulonglong()
536: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
537: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
538: if (status == STATUS_DESTROYED) {
539: throw wrapper.dynAnyDestroyed();
540: }
541: if (any.type().kind().value() != TCKind._tk_ulonglong)
542: throw new TypeMismatch();
543: return any.extract_ulonglong();
544: }
545:
546: public char get_wchar()
547: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
548: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
549: if (status == STATUS_DESTROYED) {
550: throw wrapper.dynAnyDestroyed();
551: }
552: if (any.type().kind().value() != TCKind._tk_wchar)
553: throw new TypeMismatch();
554: return any.extract_wchar();
555: }
556:
557: public String get_wstring()
558: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
559: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
560: if (status == STATUS_DESTROYED) {
561: throw wrapper.dynAnyDestroyed();
562: }
563: if (any.type().kind().value() != TCKind._tk_wstring)
564: throw new TypeMismatch();
565: return any.extract_wstring();
566: }
567:
568: public org.omg.CORBA.Any get_any()
569: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
570: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
571: if (status == STATUS_DESTROYED) {
572: throw wrapper.dynAnyDestroyed();
573: }
574: if (any.type().kind().value() != TCKind._tk_any)
575: throw new TypeMismatch();
576: return any.extract_any();
577: }
578:
579: public org.omg.DynamicAny.DynAny get_dyn_any()
580: throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
581: org.omg.DynamicAny.DynAnyPackage.InvalidValue {
582: if (status == STATUS_DESTROYED) {
583: throw wrapper.dynAnyDestroyed();
584: }
585: if (any.type().kind().value() != TCKind._tk_any)
586: throw new TypeMismatch();
587: // _REVISIT_ Copy value here?
588: try {
589: return DynAnyUtil.createMostDerivedDynAny(
590: any.extract_any(), orb, true);
591: } catch (InconsistentTypeCode ictc) {
592: // The spec doesn't allow us to throw back this exception
593: // incase the anys any if of type Principal, native or abstract interface.
594: return null;
595: }
596: }
597: }
|