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

  1 karl  1.42 //%2005////////////////////////////////////////////////////////////////////////
  2 mike  1.13 //
  3 karl  1.40 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
  4            // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
  5            // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
  6 karl  1.39 // IBM Corp.; EMC Corporation, The Open Group.
  7 karl  1.40 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
  8            // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
  9 karl  1.42 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 10            // EMC Corporation; VERITAS Software Corporation; The Open Group.
 11 mike  1.13 //
 12            // Permission is hereby granted, free of charge, to any person obtaining a copy
 13 kumpf 1.24 // of this software and associated documentation files (the "Software"), to
 14            // deal in the Software without restriction, including without limitation the
 15            // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 16 mike  1.13 // sell copies of the Software, and to permit persons to whom the Software is
 17            // furnished to do so, subject to the following conditions:
 18 chip  1.44 //
 19 kumpf 1.24 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 20 mike  1.13 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
 21            // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 22 kumpf 1.24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 23            // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 24            // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 25 mike  1.13 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 26            // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 27            //
 28            //==============================================================================
 29            //
 30            // Author: Mike Brasher (mbrasher@bmc.com)
 31            //
 32 kumpf 1.27 // Modified By: Carol Ann Krug Graves, Hewlett-Packard Company
 33 david.dillard 1.41 //                  (carolann_graves@hp.com)
 34                    //              David Dillard, VERITAS Software Corp.
 35                    //                  (david.dillard@veritas.com)
 36 mike          1.13 //
 37                    //%/////////////////////////////////////////////////////////////////////////////
 38                    
 39 sage          1.15 #include <Pegasus/Common/Config.h>
 40 mike          1.13 #include "CIMMethod.h"
 41 kumpf         1.18 #include "CIMMethodRep.h"
 42 kumpf         1.27 #include "Resolver.h"
 43 mike          1.13 #include "Indentor.h"
 44                    #include "CIMName.h"
 45                    #include "CIMScope.h"
 46                    #include "XmlWriter.h"
 47 kumpf         1.23 #include "MofWriter.h"
 48 humberto      1.38 #include <Pegasus/Common/MessageLoader.h> //l10n
 49 mike          1.13 
 50                    PEGASUS_NAMESPACE_BEGIN
 51                    
 52 chip          1.44 CIMMethodRep::CIMMethodRep()
 53                    {
 54                    }
 55                    
 56                    CIMMethodRep::CIMMethodRep(const CIMMethodRep& x) :
 57                        Sharable(),
 58                        _name(x._name),
 59                        _type(x._type),
 60                        _classOrigin(x._classOrigin),
 61                        _propagated(x._propagated)
 62                    {
 63                        x._qualifiers.cloneTo(_qualifiers);
 64                    
 65                        _parameters.reserveCapacity(x._parameters.size());
 66                    
 67                        for (Uint32 i = 0, n = x._parameters.size(); i < n; i++)
 68                        {
 69                            _parameters.append(x._parameters[i].clone());
 70                        }
 71                    }
 72                    
 73 mike          1.13 CIMMethodRep::CIMMethodRep(
 74 kumpf         1.29     const CIMName& name,
 75 mike          1.13     CIMType type,
 76 kumpf         1.29     const CIMName& classOrigin,
 77 mike          1.13     Boolean propagated)
 78                        : _name(name), _type(type),
 79                        _classOrigin(classOrigin), _propagated(propagated)
 80                    {
 81 chip          1.44     // ensure name is not null
 82                        if(name.isNull())
 83                        {
 84                            throw UninitializedObjectException();
 85                        }
 86 mike          1.13 }
 87                    
 88                    CIMMethodRep::~CIMMethodRep()
 89                    {
 90                    }
 91                    
 92 kumpf         1.29 void CIMMethodRep::setName(const CIMName& name)
 93 mike          1.13 {
 94 chip          1.44     // ensure name is not null
 95                        if(name.isNull())
 96                        {
 97                            throw UninitializedObjectException();
 98                        }
 99                    
100 mike          1.13     _name = name;
101                    }
102                    
103 kumpf         1.29 void CIMMethodRep::setClassOrigin(const CIMName& classOrigin)
104 mike          1.13 {
105                        _classOrigin = classOrigin;
106                    }
107                    
108                    void CIMMethodRep::addParameter(const CIMParameter& x)
109                    {
110 kumpf         1.31     if (x.isUninitialized())
111 david.dillard 1.43         throw UninitializedObjectException();
112 mike          1.13 
113 humberto      1.38     if (findParameter(x.getName()) != PEG_NOT_FOUND){
114 david.dillard 1.43         //l10n
115                                    //throw AlreadyExistsException
116 humberto      1.38             //("parameter \"" + x.getName().getString () + "\"");
117                            MessageLoaderParms parms("Common.CIMMethodRep.PARAMETER",
118 david.dillard 1.43                                                          "parameter \"$0\"",
119                                                                             x.getName().getString());
120 humberto      1.38         throw AlreadyExistsException(parms);
121                        }
122 mike          1.13 
123                        _parameters.append(x);
124                    }
125                    
126 kumpf         1.29 Uint32 CIMMethodRep::findParameter(const CIMName& name) const
127 mike          1.13 {
128                        for (Uint32 i = 0, n = _parameters.size(); i < n; i++)
129                        {
130 david.dillard 1.43         if (name.equal(_parameters[i].getName()))
131                                return i;
132 mike          1.13     }
133                    
134                        return PEG_NOT_FOUND;
135                    }
136                    
137 kumpf         1.36 CIMParameter CIMMethodRep::getParameter(Uint32 index)
138 mike          1.13 {
139 kumpf         1.36     if (index >= _parameters.size())
140 david.dillard 1.43         throw IndexOutOfBoundsException();
141 mike          1.13 
142 kumpf         1.36     return _parameters[index];
143 mike          1.13 }
144                    
145 kumpf         1.36 void CIMMethodRep::removeParameter(Uint32 index)
146 kumpf         1.32 {
147 kumpf         1.36     if (index >= _parameters.size())
148 david.dillard 1.43         throw IndexOutOfBoundsException();
149 kumpf         1.32 
150 kumpf         1.36     _parameters.remove (index);
151 kumpf         1.32 }
152                    
153 mike          1.13 Uint32 CIMMethodRep::getParameterCount() const
154                    {
155                        return _parameters.size();
156                    }
157                    
158                    void CIMMethodRep::resolve(
159                        DeclContext* declContext,
160 kumpf         1.29     const CIMNamespaceName& nameSpace,
161 mike          1.13     const CIMConstMethod& inheritedMethod)
162                    {
163                        // ATTN: Check to see if this method has same signature as
164                        // inherited one.
165                    
166                        // Check for type mismatch between return types.
167                    
168 kumpf         1.31     PEGASUS_ASSERT(!inheritedMethod.isUninitialized());
169 mike          1.13 
170                        // Validate the qualifiers of the method (according to
171                        // superClass's method with the same name). This method
172                        // will throw an exception if the validation fails.
173                    
174                        _qualifiers.resolve(
175 david.dillard 1.43         declContext,
176                            nameSpace,
177                            CIMScope::METHOD,
178                            false,
179                            inheritedMethod._rep->_qualifiers,
180                            true);
181 mike          1.13 
182                        // Validate each of the parameters:
183                    
184 david.dillard 1.43     for (Uint32 i = 0; i < _parameters.size(); i++)
185                            Resolver::resolveParameter (_parameters[i], declContext, nameSpace);
186 mike          1.13 
187                        _classOrigin = inheritedMethod.getClassOrigin();
188                    }
189                    
190                    void CIMMethodRep::resolve(
191                        DeclContext* declContext,
192 kumpf         1.29     const CIMNamespaceName& nameSpace)
193 mike          1.13 {
194                        // Validate the qualifiers:
195                    
196                        CIMQualifierList dummy;
197                    
198                        _qualifiers.resolve(
199 david.dillard 1.43         declContext,
200                            nameSpace,
201                            CIMScope::METHOD,
202                            false,
203                            dummy,
204                            true);
205 mike          1.13 
206                        // Validate each of the parameters:
207                    
208 david.dillard 1.43     for (Uint32 i = 0; i < _parameters.size(); i++)
209                            Resolver::resolveParameter (_parameters[i], declContext, nameSpace);
210 mike          1.13 }
211                    
212                    static const char* _toString(Boolean x)
213                    {
214                        return x ? "true" : "false";
215                    }
216                    
217 david.dillard 1.41 void CIMMethodRep::toXml(Array<char>& out) const
218 mike          1.13 {
219                        out << "<METHOD";
220                    
221                        out << " NAME=\"" << _name << "\"";
222                    
223 kumpf         1.28     out << " TYPE=\"" << cimTypeToString (_type) << "\"";
224 mike          1.13 
225 kumpf         1.29     if (!_classOrigin.isNull())
226 david.dillard 1.43         out << " CLASSORIGIN=\"" << _classOrigin << "\"";
227 mike          1.13 
228                        if (_propagated != false)
229 david.dillard 1.43         out << " PROPAGATED=\"" << _toString(_propagated) << "\"";
230 mike          1.13 
231                        out << ">\n";
232                    
233                        _qualifiers.toXml(out);
234                    
235                        for (Uint32 i = 0, n = _parameters.size(); i < n; i++)
236 david.dillard 1.43         XmlWriter::appendParameterElement(out, _parameters[i]);
237 mike          1.13 
238                        out << "</METHOD>\n";
239                    }
240                    
241 mike          1.14 /**
242                        The BNF for this is;
243 david.dillard 1.43     methodDeclaration   =  [ qualifierList ] dataType methodName
244                                               "(" [ parameterList ] ")" ";"
245 mike          1.14 
246 david.dillard 1.43     parameterList       =  parameter *( "," parameter )
247 mike          1.14     Format with qualifiers on one line and declaration on another. Start
248                        with newline but none at the end.
249                    */
250 david.dillard 1.41 void CIMMethodRep::toMof(Array<char>& out) const   //ATTNKS:
251 mike          1.14 {
252                        // Output the qualifier list starting on new line
253                        if (_qualifiers.getCount())
254 david.dillard 1.43         out << "\n";
255 mike          1.14 
256                        _qualifiers.toMof(out);
257                    
258 david.dillard 1.43     // output the type, MethodName and ParmeterList left enclosure
259 kumpf         1.28     out << "\n" << cimTypeToString (_type) << " " << _name << "(";
260 mike          1.14 
261                        // output the param list separated by commas.
262 chip          1.44 
263 mike          1.14     for (Uint32 i = 0, n = _parameters.size(); i < n; i++)
264                        {
265 david.dillard 1.43         // If not first, output comma separator
266                            if (i)
267                                out << ", ";
268 mike          1.14 
269 david.dillard 1.43         MofWriter::appendParameterElement(out, _parameters[i]);
270 mike          1.14     }
271                    
272                        // output the parameterlist and method terminator
273                        out << ");";
274                    }
275                    
276                    
277 mike          1.13 Boolean CIMMethodRep::identical(const CIMMethodRep* x) const
278                    {
279 kumpf         1.37     if (!_name.equal (x->_name))
280 david.dillard 1.43         return false;
281 mike          1.13 
282                        if (_type != x->_type)
283 david.dillard 1.43         return false;
284 mike          1.13 
285                        if (!_qualifiers.identical(x->_qualifiers))
286 david.dillard 1.43         return false;
287 mike          1.13 
288                        if (_parameters.size() != x->_parameters.size())
289 david.dillard 1.43         return false;
290 mike          1.13 
291                        for (Uint32 i = 0, n = _parameters.size(); i < n; i++)
292                        {
293 david.dillard 1.43         if (!_parameters[i].identical(x->_parameters[i]))
294                                return false;
295 mike          1.13     }
296                    
297                        return true;
298                    }
299                    
300                    void CIMMethodRep::setType(CIMType type)
301                    {
302                        _type = type;
303                    }
304                    
305                    PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2