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