(file) Return to CIMParamValueRep.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

  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           
 30 sage  1.3 #include <Pegasus/Common/Config.h>
 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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2