1 mike 1.2 //%/////////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (c) 2000, 2001 BMC Software, Hewlett-Packard Company, IBM,
4 // The Open Group, Tivoli Systems
5 //
6 // Permission is hereby granted, free of charge, to any person obtaining a copy
7 // 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 // 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 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
14 // 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 // 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 // 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 mike 1.2 //==============================================================================
23 //
24 // Author: Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)
25 //
26 // Modified By:
27 //
28 //%/////////////////////////////////////////////////////////////////////////////
29
|
31 mike 1.2 #include <cstdio>
32 #include "CIMParamValue.h"
33 #include "Indentor.h"
34 #include "CIMName.h"
35 #include "CIMScope.h"
36 #include "XmlWriter.h"
37
38 PEGASUS_NAMESPACE_BEGIN
39
40 CIMParamValueRep::CIMParamValueRep(
41 CIMParameter parameter,
42 CIMValue value,
43 Boolean isArray,
44 Uint32 arraySize,
45 const String& referenceClassName)
46 : _parameter(parameter), _value(value),
47 _isArray(isArray), _arraySize(arraySize),
48 _referenceClassName(referenceClassName)
49 {
50 if (_arraySize && !_isArray)
51 throw IncompatibleTypes();
52 mike 1.2
53 if (referenceClassName.size())
54 {
55 if (!CIMName::legal(referenceClassName))
56 throw IllegalName();
57 }
58 }
59
60 CIMParamValueRep::~CIMParamValueRep()
61 {
62
63 }
64
65 void CIMParamValueRep::resolve(
66 DeclContext* declContext,
67 const String& nameSpace)
68 {
69 // Validate the qualifiers of the method (according to
70 // superClass's method with the same name). This method
71 // will throw an exception if the validation fails.
72
73 mike 1.2 CIMQualifierList dummy;
74
75 _qualifiers.resolve(
76 declContext,
77 nameSpace,
78 CIMScope::PARAMETER,
79 false,
80 dummy);
81 }
82
83 void CIMParamValueRep::toXml(Array<Sint8>& out) const
84 {
85 if (_isArray)
86 {
87 out << " ARGUMENT.ARRAY";
88
89 out << " PARAMETER_NAME=\"" << _parameter.getName() << "\"";
90
91 out << " PARAMETER_TYPE=\"" << TypeToString(_parameter.getType()) << "\"";
92
93 out << " VALUE=\"";
94 mike 1.2 _value.toXml(out);
95 out << "\"";
96
97 if (_arraySize)
98 {
99 char buffer[32];
100 sprintf(buffer, "%d", _arraySize);
101 out << " ARRAYSIZE=\"" << buffer << "\"";
102 }
103
104 out << ">\n";
105
106 _qualifiers.toXml(out);
107
108 out << "</PARAMETER.ARRAY>\n";
109 }
110 else
111 {
112 out << " ARGUMENT";
113 out << " PARAMETER.NAME=\"" << _parameter.getName() << "\"";
114 out << " PARAMETER.TYPE=\"" << TypeToString(_parameter.getType()) << "\"";
115 mike 1.2 out << " PARAMETER.VALUE=\"";
116 _value.toXml(out);
117 out << "\"";
118 out << ">\n";
119 _qualifiers.toXml(out);
120 out << "</ARGUMENT>\n";
121 }
122 }
123
124 /** toMof - puts the Mof representation of the ParamValue object to
125 the output parameter array
126 The BNF for this conversion is:
127 parameterList = parameter *( "," parameter )
128
129 parameter = [ qualifierList ] (dataType|objectRef) parameterName
130 [ array ]
131
132 parameterName= IDENTIFIER
133
134 array = "[" [positiveDecimalValue] "]"
135
136 mike 1.2 Format on a single line.
137 */
138 void CIMParamValueRep::toMof(Array<Sint8>& out) const
139 {
140 // Output the qualifiers for the parameter
141 _qualifiers.toMof(out);
142
143 if (_qualifiers.getCount())
144 out << " ";
145
146 // Output the data parameter and value
147 out << _parameter.getName()
148 << " " << TypeToString(_parameter.getType())
149 << " ";
150 _value.toXml(out);
151
152 if (_isArray)
153 {
154 //Output the array indicator "[ [arraysize] ]"
155 if (_arraySize)
156 {
157 mike 1.2 char buffer[32];
158 sprintf(buffer, "[%d]", _arraySize);
159 out << buffer;
160 }
161 else
162 out << "[]";
163 }
164 }
165
166 void CIMParamValueRep::print(PEGASUS_STD(ostream) &os) const
167 {
168 Array<Sint8> tmp;
169 toXml(tmp);
170 tmp.append('\0');
171 os << tmp.getData() << PEGASUS_STD(endl);
172 }
173
174 Boolean CIMParamValueRep::identical(const CIMParamValueRep* x) const
175 {
176 if (_parameter != x->_parameter)
177 return false;
178 mike 1.2
179 if (_value != x->_value)
180 return false;
181
182 if (_referenceClassName != x->_referenceClassName)
183 return false;
184
185 if (!_qualifiers.identical(x->_qualifiers))
186 return false;
187
188 return true;
189 }
190
191 CIMParamValueRep::CIMParamValueRep()
192 {
193
194 }
195
196 CIMParamValueRep::CIMParamValueRep(const CIMParamValueRep& x) :
197 Sharable(),
198 _parameter(x._parameter),
199 mike 1.2 _value(x._value),
200 _isArray(x._isArray),
201 _arraySize(x._arraySize),
202 _referenceClassName(x._referenceClassName)
203 {
204 x._qualifiers.cloneTo(_qualifiers);
205 }
206
207 CIMParamValueRep& CIMParamValueRep::operator=(const CIMParamValueRep& x)
208 {
209 return *this;
210 }
211
212 void CIMParamValueRep::setParameter(CIMParameter parameter)
213 {
214 _parameter = parameter;
215
216 if (_referenceClassName.size() == 0)
217 {
218 throw MissingReferenceClassName();
219 }
220 mike 1.2 }
221
222 void CIMParamValueRep::setValue(CIMValue value)
223 {
224 _value = value;
225
226 if (_referenceClassName.size() == 0)
227 {
228 throw MissingReferenceClassName();
229 }
230 }
231
232 PEGASUS_NAMESPACE_END
|