1 mike 1.10 //%/////////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (c) 2000, 2001 The Open group, BMC Software, Tivoli Systems, IBM
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining a copy
6 // of this software and associated documentation files (the "Software"), to
7 // deal in the Software without restriction, including without limitation the
8 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
9 // sell copies of the Software, and to permit persons to whom the Software is
10 // furnished to do so, subject to the following conditions:
11 //
12 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
13 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
14 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
15 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
16 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
17 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
18 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
19 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 //
21 //==============================================================================
22 mike 1.10 //
23 // Author: Mike Brasher (mbrasher@bmc.com)
24 //
25 // Modified By:
26 //
27 //%/////////////////////////////////////////////////////////////////////////////
28
29 #include "CIMQualifier.h"
|
30 kumpf 1.19 #include "CIMQualifierRep.h"
|
31 mike 1.10 #include "Indentor.h"
32 #include "CIMName.h"
33 #include "Exception.h"
34 #include "XmlWriter.h"
35
36 PEGASUS_NAMESPACE_BEGIN
|
37 karl 1.13 PEGASUS_USING_STD;
|
38 kumpf 1.19
|
39 mike 1.10 ////////////////////////////////////////////////////////////////////////////////
40 //
41 // CIMQualifierRep
42 //
43 ////////////////////////////////////////////////////////////////////////////////
44
45 CIMQualifierRep::CIMQualifierRep(
46 const String& name,
47 const CIMValue& value,
48 Uint32 flavor,
49 Boolean propagated)
50 :
51 _name(name),
52 _value(value),
53 _flavor(flavor),
54 _propagated(propagated)
55 {
|
56 karl 1.17 //cout << "KSTEST Qualifer create " << name << " Flavor " << flavor << endl;
57 if (!CIMName::legal(name))
|
58 mike 1.10 throw IllegalName();
59
60 if (_value.getType() == CIMType::NONE)
61 throw NullType();
62 }
63
64 CIMQualifierRep::~CIMQualifierRep()
65 {
66
67 }
68
69 void CIMQualifierRep::setName(const String& name)
70 {
71 if (!CIMName::legal(name))
72 throw IllegalName();
73
74 _name = name;
75 }
76
|
77 karl 1.17 void CIMQualifierRep::resolveFlavor(Uint32 inheritedFlavor, Boolean inherited)
78 {
79 // ATTN: KS P3 Needs more tests and expansion so we treate first different
80 // from inheritance
81
82 // if the turnoff flags set, reset the functions.
83 if((inheritedFlavor & CIMFlavor::RESTRICTED) != 0) {
84 unsetFlavor(CIMFlavor::TOSUBCLASS + CIMFlavor::TOINSTANCE);
85 }
86 if((inheritedFlavor & CIMFlavor::DISABLEOVERRIDE)) {
87 unsetFlavor(CIMFlavor::ENABLEOVERRIDE);
88 }
89
90 _flavor = inheritedFlavor | _flavor;
91 }
92
|
93 mike 1.10 static const char* _toString(Boolean x)
94 {
95 return x ? "true" : "false";
96 }
97
98 void CIMQualifierRep::toXml(Array<Sint8>& out) const
99 {
100 out << "<QUALIFIER";
101 out << " NAME=\"" << _name << "\"";
|
102 kumpf 1.21 out << " TYPE=\"" << _value.getType().toString() << "\"";
|
103 mike 1.10
104 if (_propagated != false)
105 out << " PROPAGATED=\"" << _toString(_propagated) << "\"";
106
107 FlavorToXml(out, _flavor);
108
109 out << ">\n";
|
110 karl 1.12
|
111 kumpf 1.20 _value.toXml(out);
|
112 mike 1.10
113 out << "</QUALIFIER>\n";
114 }
115
116 void CIMQualifierRep::print(PEGASUS_STD(ostream) &os) const
117 {
118 Array<Sint8> tmp;
119 toXml(tmp);
120 tmp.append('\0');
121 os << tmp.getData() << PEGASUS_STD(endl);
122 }
123
|
124 mike 1.11 /** toMof Generates MOF output for a qualifier.
125 The BNF for this is:
126 <pre>
127 qualifier = qualifierName [ qualifierParameter ] [ ":" 1*flavor]
128
129 qualifierParameter = "(" constantValue ")" | arrayInitializer
130
131 arrayInitializer = "{" constantValue*( "," constantValue)"}"
132 </pre>
133 */
|
134 karl 1.14 void CIMQualifierRep::toMof(Array<Sint8>& out) const
|
135 mike 1.11 {
136 // Output Qualifier name
137 out << _name;
138
139 /* If the qualifier is Boolean, we do not put out a value. This is
140 the way MOF is shown. Note that we should really be checking
|
141 karl 1.17 the qualifierdecl to compare with the default.
|
142 mike 1.11 Also if the value is Null, we do not put out a value because
143 no value has been set. Assumes that qualifiers are built
144 with NULL set if no value has been placed in the qualifier.
145 */
146 Boolean hasValueField = false;
|
147 karl 1.17 if (!_value.isNull())
|
148 mike 1.11 {
|
149 karl 1.17 if (_value.getType() == CIMType::BOOLEAN)
150 {
151 Boolean b;
152 _value.get(b);
153 if(!b)
154 out << " (false)";
155 }
156 else
157 {
158 out << " (";
159 hasValueField = true;
160 _value.toMof(out);
161 out << ")";
162 }
|
163 mike 1.11 }
164
165 // output the flavors
166 String flavorString;
167 flavorString = FlavorToMof(_flavor);
168 if (flavorString.size())
169 {
|
170 karl 1.17 out << " : ";
171 out << flavorString;
|
172 mike 1.11 }
173 }
174
|
175 karl 1.15 void CIMQualifierRep::printMof(PEGASUS_STD(ostream) &os) const
176 {
177 Array<Sint8> tmp;
178 toMof(tmp);
179 tmp.append('\0');
180 os << tmp.getData() << PEGASUS_STD(endl);
181 }
182
183
|
184 mike 1.10 CIMQualifierRep::CIMQualifierRep()
185 {
186
187 }
188
189 CIMQualifierRep::CIMQualifierRep(const CIMQualifierRep& x) :
190 Sharable(),
191 _name(x._name),
192 _value(x._value),
193 _flavor(x._flavor),
194 _propagated(x._propagated)
195 {
196
197 }
198
199 Boolean CIMQualifierRep::identical(const CIMQualifierRep* x) const
200 {
201 return
202 this == x ||
203 CIMName::equal(_name, x->_name) &&
204 _value == x->_value &&
205 mike 1.10 _flavor == x->_flavor &&
206 _propagated == x->_propagated;
207 }
208
209 void CIMQualifierRep::setValue(const CIMValue& value)
210 {
211 _value = value;
212
213 if (_value.getType() == CIMType::NONE)
214 throw NullType();
215 }
216
217 PEGASUS_NAMESPACE_END
|