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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2