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 kumpf 1.27 // Modified By: Carol Ann Krug Graves, Hewlett-Packard Company
27 // (carolann_graves@hp.com)
|
28 mike 1.10 //
29 //%/////////////////////////////////////////////////////////////////////////////
30
31 #include "CIMQualifier.h"
|
32 kumpf 1.19 #include "CIMQualifierRep.h"
|
33 mike 1.10 #include "Indentor.h"
34 #include "CIMName.h"
35 #include "Exception.h"
36 #include "XmlWriter.h"
|
37 kumpf 1.24 #include "MofWriter.h"
|
38 mike 1.10
39 PEGASUS_NAMESPACE_BEGIN
|
40 karl 1.13 PEGASUS_USING_STD;
|
41 kumpf 1.19
|
42 mike 1.10 ////////////////////////////////////////////////////////////////////////////////
43 //
44 // CIMQualifierRep
45 //
46 ////////////////////////////////////////////////////////////////////////////////
47
48 CIMQualifierRep::CIMQualifierRep(
|
49 kumpf 1.28 const CIMName& name,
|
50 mike 1.10 const CIMValue& value,
51 Uint32 flavor,
52 Boolean propagated)
53 :
54 _name(name),
55 _value(value),
56 _flavor(flavor),
57 _propagated(propagated)
58 {
|
59 karl 1.17 //cout << "KSTEST Qualifer create " << name << " Flavor " << flavor << endl;
|
60 kumpf 1.27 if (_value.getType() == CIMTYPE_NONE)
|
61 mike 1.10 throw NullType();
62 }
63
64 CIMQualifierRep::~CIMQualifierRep()
65 {
66
67 }
68
|
69 kumpf 1.28 void CIMQualifierRep::setName(const CIMName& name)
|
70 mike 1.10 {
71 _name = name;
72 }
73
|
74 karl 1.17 void CIMQualifierRep::resolveFlavor(Uint32 inheritedFlavor, Boolean inherited)
75 {
76 // ATTN: KS P3 Needs more tests and expansion so we treate first different
77 // from inheritance
78
79 // if the turnoff flags set, reset the functions.
80 if((inheritedFlavor & CIMFlavor::RESTRICTED) != 0) {
81 unsetFlavor(CIMFlavor::TOSUBCLASS + CIMFlavor::TOINSTANCE);
82 }
83 if((inheritedFlavor & CIMFlavor::DISABLEOVERRIDE)) {
84 unsetFlavor(CIMFlavor::ENABLEOVERRIDE);
85 }
86
87 _flavor = inheritedFlavor | _flavor;
88 }
89
|
90 mike 1.10 static const char* _toString(Boolean x)
91 {
92 return x ? "true" : "false";
93 }
94
95 void CIMQualifierRep::toXml(Array<Sint8>& out) const
96 {
97 out << "<QUALIFIER";
98 out << " NAME=\"" << _name << "\"";
|
99 kumpf 1.27 out << " TYPE=\"" << cimTypeToString (_value.getType ()) << "\"";
|
100 mike 1.10
101 if (_propagated != false)
102 out << " PROPAGATED=\"" << _toString(_propagated) << "\"";
103
|
104 kumpf 1.25 XmlWriter::appendQualifierFlavorEntity(out, _flavor);
|
105 mike 1.10
106 out << ">\n";
|
107 karl 1.12
|
108 kumpf 1.22 XmlWriter::appendValueElement(out, _value);
|
109 mike 1.10
110 out << "</QUALIFIER>\n";
111 }
112
|
113 mike 1.11 /** toMof Generates MOF output for a qualifier.
114 The BNF for this is:
115 <pre>
116 qualifier = qualifierName [ qualifierParameter ] [ ":" 1*flavor]
117
118 qualifierParameter = "(" constantValue ")" | arrayInitializer
119
120 arrayInitializer = "{" constantValue*( "," constantValue)"}"
121 </pre>
122 */
|
123 karl 1.14 void CIMQualifierRep::toMof(Array<Sint8>& out) const
|
124 mike 1.11 {
125 // Output Qualifier name
126 out << _name;
127
128 /* If the qualifier is Boolean, we do not put out a value. This is
129 the way MOF is shown. Note that we should really be checking
|
130 karl 1.17 the qualifierdecl to compare with the default.
|
131 mike 1.11 Also if the value is Null, we do not put out a value because
132 no value has been set. Assumes that qualifiers are built
133 with NULL set if no value has been placed in the qualifier.
134 */
135 Boolean hasValueField = false;
|
136 karl 1.17 if (!_value.isNull())
|
137 mike 1.11 {
|
138 kumpf 1.27 if (_value.getType() == CIMTYPE_BOOLEAN)
|
139 karl 1.17 {
140 Boolean b;
141 _value.get(b);
142 if(!b)
143 out << " (false)";
144 }
145 else
146 {
147 out << " (";
148 hasValueField = true;
|
149 kumpf 1.24 MofWriter::appendValueElement(out, _value);
|
150 karl 1.17 out << ")";
151 }
|
152 mike 1.11 }
153
154 // output the flavors
155 String flavorString;
|
156 kumpf 1.25 flavorString = MofWriter::getQualifierFlavor(_flavor);
|
157 mike 1.11 if (flavorString.size())
158 {
|
159 karl 1.17 out << " : ";
160 out << flavorString;
|
161 mike 1.11 }
|
162 karl 1.15 }
163
164
|
165 mike 1.10 CIMQualifierRep::CIMQualifierRep()
166 {
167
168 }
169
170 CIMQualifierRep::CIMQualifierRep(const CIMQualifierRep& x) :
171 Sharable(),
172 _name(x._name),
173 _value(x._value),
174 _flavor(x._flavor),
175 _propagated(x._propagated)
176 {
177
178 }
179
180 Boolean CIMQualifierRep::identical(const CIMQualifierRep* x) const
181 {
182 return
183 this == x ||
|
184 kumpf 1.28 _name.equal(x->_name) &&
|
185 mike 1.10 _value == x->_value &&
186 _flavor == x->_flavor &&
187 _propagated == x->_propagated;
188 }
189
190 void CIMQualifierRep::setValue(const CIMValue& value)
191 {
192 _value = value;
193
|
194 kumpf 1.27 if (_value.getType() == CIMTYPE_NONE)
|
195 mike 1.10 throw NullType();
196 }
197
198 PEGASUS_NAMESPACE_END
|