Thu, 31 Aug 2017 18:10:36 +0800
merge
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 */
26 package com.sun.corba.se.impl.dynamicany;
28 import org.omg.CORBA.TypeCode;
29 import org.omg.CORBA.TCKind;
30 import org.omg.CORBA.Any;
31 import org.omg.CORBA.TypeCodePackage.BadKind;
32 import org.omg.CORBA.TypeCodePackage.Bounds;
33 import org.omg.DynamicAny.*;
34 import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
35 import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
36 import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode;
38 import com.sun.corba.se.spi.orb.ORB ;
39 import com.sun.corba.se.spi.logging.CORBALogDomains ;
40 import com.sun.corba.se.impl.logging.ORBUtilSystemException ;
42 abstract class DynValueCommonImpl extends DynAnyComplexImpl implements DynValueCommon
43 {
44 //
45 // Constructors
46 //
48 protected boolean isNull;
50 private DynValueCommonImpl() {
51 this(null, (Any)null, false);
52 isNull = true;
53 }
55 protected DynValueCommonImpl(ORB orb, Any any, boolean copyValue) {
56 super(orb, any, copyValue);
57 isNull = checkInitComponents();
58 }
60 protected DynValueCommonImpl(ORB orb, TypeCode typeCode) {
61 super(orb, typeCode);
62 isNull = true;
63 }
65 //
66 // DynValueCommon methods
67 //
69 // Returns TRUE if this object represents a null valuetype
70 public boolean is_null() {
71 return isNull;
72 }
74 // Changes the representation to a null valuetype.
75 public void set_to_null() {
76 isNull = true;
77 clearData();
78 }
80 // If this object represents a null valuetype then this operation
81 // replaces it with a newly constructed value with its components
82 // initialized to default values as in DynAnyFactory::create_dyn_any_from_type_code.
83 // If this object represents a non-null valuetype, then this operation has no effect.
84 public void set_to_value() {
85 if (isNull) {
86 isNull = false;
87 // the rest is done lazily
88 }
89 // else: there is nothing to do
90 }
92 //
93 // Methods differing from DynStruct
94 //
96 // Required to raise InvalidValue if this is a null value type.
97 public org.omg.DynamicAny.NameValuePair[] get_members ()
98 throws org.omg.DynamicAny.DynAnyPackage.InvalidValue
99 {
100 if (status == STATUS_DESTROYED) {
101 throw wrapper.dynAnyDestroyed() ;
102 }
103 if (isNull) {
104 throw new InvalidValue();
105 }
106 checkInitComponents();
107 return nameValuePairs;
108 }
110 // Required to raise InvalidValue if this is a null value type.
111 public org.omg.DynamicAny.NameDynAnyPair[] get_members_as_dyn_any ()
112 throws org.omg.DynamicAny.DynAnyPackage.InvalidValue
113 {
114 if (status == STATUS_DESTROYED) {
115 throw wrapper.dynAnyDestroyed() ;
116 }
117 if (isNull) {
118 throw new InvalidValue();
119 }
120 checkInitComponents();
121 return nameDynAnyPairs;
122 }
124 //
125 // Overridden methods
126 //
128 // Overridden to change to non-null status.
129 public void set_members (org.omg.DynamicAny.NameValuePair[] value)
130 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
131 org.omg.DynamicAny.DynAnyPackage.InvalidValue
132 {
133 super.set_members(value);
134 // If we didn't get an exception then this must be a valid non-null value
135 isNull = false;
136 }
138 // Overridden to change to non-null status.
139 public void set_members_as_dyn_any (org.omg.DynamicAny.NameDynAnyPair[] value)
140 throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
141 org.omg.DynamicAny.DynAnyPackage.InvalidValue
142 {
143 super.set_members_as_dyn_any(value);
144 // If we didn't get an exception then this must be a valid non-null value
145 isNull = false;
146 }
147 }