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

Diff for /pegasus/src/Pegasus/Common/CIMClassRep.cpp between version 1.59 and 1.90

version 1.59, 2004/04/26 16:32:28 version 1.90, 2008/12/01 17:49:47
Line 1 
Line 1 
 //%2003////////////////////////////////////////////////////////////////////////  //%LICENSE////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001, 2002  BMC Software, Hewlett-Packard Development  // Licensed to The Open Group (TOG) under one or more contributor license
 // Company, L. P., IBM Corp., The Open Group, Tivoli Systems.  // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;  // this work for additional information regarding copyright ownership.
 // IBM Corp.; EMC Corporation, The Open Group.  // Each contributor licenses this file to you under the OpenPegasus Open
   // Source License; you may not use this file except in compliance with the
   // License.
 // //
 // Permission is hereby granted, free of charge, to any person obtaining a copy  // Permission is hereby granted, free of charge, to any person obtaining a
 // of this software and associated documentation files (the "Software"), to  // copy of this software and associated documentation files (the "Software"),
 // deal in the Software without restriction, including without limitation the  // to deal in the Software without restriction, including without limitation
 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or  // the rights to use, copy, modify, merge, publish, distribute, sublicense,
 // sell copies of the Software, and to permit persons to whom the Software is  // and/or sell copies of the Software, and to permit persons to whom the
 // furnished to do so, subject to the following conditions:  // Software is furnished to do so, subject to the following conditions:
 // //
 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN  // The above copyright notice and this permission notice shall be included
 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED  // in all copies or substantial portions of the Software.
 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT  
 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR  
 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT  
 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  
 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION  
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  
 // //
 //==============================================================================  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
   // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
   // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
   // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
   // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 // //
 // Author: Mike Brasher (mbrasher@bmc.com)  //////////////////////////////////////////////////////////////////////////
 //  
 // Modified By: Karl Schopmeyer(k.schopmeyer@attglobal.net)  
 //              Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)  
 //              Carol Ann Krug Graves, Hewlett-Packard Company  
 //                (carolann_graves@hp.com)  
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
 #include "CIMClassRep.h" #include "CIMClassRep.h"
 #include "DeclContext.h" #include "DeclContext.h"
 #include "Resolver.h" #include "Resolver.h"
 #include "Indentor.h"  
 #include "CIMName.h" #include "CIMName.h"
 #include "CIMQualifierNames.h" #include "CIMQualifierNames.h"
 #include "CIMScope.h" #include "CIMScope.h"
 #include "XmlWriter.h"  
 #include "MofWriter.h"  
 #include <Pegasus/Common/Tracer.h> #include <Pegasus/Common/Tracer.h>
 #include <Pegasus/Common/MessageLoader.h> //l10n  #include <Pegasus/Common/MessageLoader.h>
   #include "StrLit.h"
   #include "CIMInstanceRep.h"
   #include "CIMPropertyInternal.h"
   #include "CIMMethodRep.h"
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
 PEGASUS_USING_STD; PEGASUS_USING_STD;
Line 95 
Line 93 
     return flag;     return flag;
 } }
  
 void CIMClassRep::setSuperClassName(const CIMName& superClassName)  
 {  
     _superClassName = superClassName;  
 }  
   
 void CIMClassRep::addProperty(const CIMProperty& x) void CIMClassRep::addProperty(const CIMProperty& x)
 { {
     if (x.isUninitialized())     if (x.isUninitialized())
Line 107 
Line 100 
  
     // Reject addition of duplicate property name:     // Reject addition of duplicate property name:
  
     if (findProperty(x.getName()) != PEG_NOT_FOUND){      if (findProperty(x.getName()) != PEG_NOT_FOUND)
         //l10n      {
                 //throw AlreadyExistsException          MessageLoaderParms parms(
             //("property \"" + x.getName().getString () + "\"");              "Common.CIMClassRep.PROPERTY",
         MessageLoaderParms parms("Common.CIMClassRep.PROPERTY",  
                                                          "property \"$0\"",                                                          "property \"$0\"",
                                                          x.getName().getString());                                                          x.getName().getString());
         throw AlreadyExistsException(parms);         throw AlreadyExistsException(parms);
   
     }     }
  
     // Reject addition of a reference property without a referenceClassName     // Reject addition of a reference property without a referenceClassName
Line 126 
Line 117 
         throw TypeMismatchException();         throw TypeMismatchException();
     }     }
  
     // Set the class origin:  
     // ATTN: put this check in other places:  
   
     if (x.getClassOrigin().isNull())  
         CIMProperty(x).setClassOrigin(_reference.getClassName());  
   
     // Add the property:     // Add the property:
  
     _properties.append(x);     _properties.append(x);
Line 144 
Line 129 
  
     // Reject duplicate method names:     // Reject duplicate method names:
  
     if (findMethod(x.getName()) != PEG_NOT_FOUND){      if (findMethod(x.getName()) != PEG_NOT_FOUND)
         //l10n      {
                 //throw AlreadyExistsException          MessageLoaderParms parms(
             //("method \"" + x.getName().getString() + "\"");              "Common.CIMClassRep.METHOD",
         MessageLoaderParms parms("Common.CIMClassRep.METHOD",  
                                                          "method \"$0\"",                                                          "method \"$0\"",
                                                          x.getName().getString());                                                          x.getName().getString());
         throw AlreadyExistsException(parms);         throw AlreadyExistsException(parms);
   
     }     }
  
     // Add the method:     // Add the method:
Line 160 
Line 143 
     _methods.append(x);     _methods.append(x);
 } }
  
 Uint32 CIMClassRep::findMethod(const CIMName& name) const  
 {  
     for (Uint32 i = 0, n = _methods.size(); i < n; i++)  
     {  
         if (name.equal(_methods[i].getName()))  
             return i;  
     }  
   
     return PEG_NOT_FOUND;  
 }  
   
 CIMMethod CIMClassRep::getMethod(Uint32 index)  
 {  
     if (index >= _methods.size())  
         throw IndexOutOfBoundsException();  
   
     return _methods[index];  
 }  
   
 Uint32 CIMClassRep::getMethodCount() const  
 {  
     return _methods.size();  
 }  
   
 void CIMClassRep::removeMethod(Uint32 index)  
 {  
     if (index >= _methods.size())  
         throw IndexOutOfBoundsException();  
   
     _methods.remove(index);  
 }  
   
 void CIMClassRep::resolve( void CIMClassRep::resolve(
     DeclContext* context,     DeclContext* context,
     const CIMNamespaceName& nameSpace)     const CIMNamespaceName& nameSpace)
 { {
         PEG_METHOD_ENTER(TRC_OBJECTRESOLUTION, "CIMClassRep::resolve()");         PEG_METHOD_ENTER(TRC_OBJECTRESOLUTION, "CIMClassRep::resolve()");
 #if 0  
     if (_resolved)  
         throw ClassAlreadyResolved(_reference.getClassName());  
 #endif  
     if (!context)     if (!context)
         throw NullPointer();         throw NullPointer();
  
         PEG_TRACE_STRING(TRC_OBJECTRESOLUTION, Tracer::LEVEL3,      PEG_TRACE((TRC_OBJECTRESOLUTION, Tracer::LEVEL4,
                 String("CIMClassRep::resolve  class = ") +          "CIMClassRep::resolve  class = %s, superclass = %s",
                 _reference.getClassName().getString() + ", superclass = " +          (const char*)_reference.getClassName().getString().getCString(),
                 _superClassName.getString());          (const char*)_superClassName.getString().getCString()));
  
     if (!_superClassName.isNull())     if (!_superClassName.isNull())
         {         {
                 //cout << "KSTEST Class Resolve with Super class " << getClassName()  
                 //<< " superClass " << _superClassName << endl;  
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 // First check to see if the super-class really exists and the subclassing legal:          // First check to see if the super-class really exists and the
           // subclassing legal:
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 CIMConstClass superClass          CIMConstClass superClass =
                         = context->lookupClass(nameSpace, _superClassName);              context->lookupClass(nameSpace, _superClassName);
  
                 if (superClass.isUninitialized())                 if (superClass.isUninitialized())
                         throw PEGASUS_CIM_EXCEPTION(CIM_ERR_INVALID_SUPERCLASS,                         throw PEGASUS_CIM_EXCEPTION(CIM_ERR_INVALID_SUPERCLASS,
                           _superClassName.getString());                           _superClassName.getString());
  
   
 #if 0  
                 if (!superClass._rep->_resolved)  
                         throw ClassNotResolved(_superClassName);  
 #endif  
                 // If subclass is abstract but superclass not, throw CIM Exception                 // If subclass is abstract but superclass not, throw CIM Exception
  
                 /* ATTN:KS-24 Mar 2002 P1 - Test this and confirm that rule is correct                 /* ATTN:KS-24 Mar 2002 P1 - Test this and confirm that rule is correct
                 if isAbstract() && !superclass.isAbstract()                 if isAbstract() && !superclass.isAbstract()
                         throw PEGASUS_CIM_EXCEPTION(CIM_ERR_INVALID_SUPERCLASS,_superClassName);              throw PEGASUS_CIM_EXCEPTION(
                   CIM_ERR_INVALID_SUPERCLASS, _superClassName);
                 */                 */
                 /*if(superclass.isTrueQualifier(CIMQualifierNames::TERMINAL)                 /*if(superclass.isTrueQualifier(CIMQualifierNames::TERMINAL)
                         throw PEGASUS_CIM_EXCEPTION(CIM_ERR_INVALID_SUPERCLASS,_superClassName);              throw PEGASUS_CIM_EXCEPTION(
                   CIM_ERR_INVALID_SUPERCLASS, _superClassName);
                 */                 */
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 // Iterate all the properties of *this* class. Resolve each one and                 // Iterate all the properties of *this* class. Resolve each one and
Line 251 
Line 195 
                         if (!isAssociationClass &&                         if (!isAssociationClass &&
                             property.getValue().getType() == CIMTYPE_REFERENCE)                             property.getValue().getType() == CIMTYPE_REFERENCE)
                         {                         {
                                 //l10n  
                             //throw PEGASUS_CIM_EXCEPTION(CIM_ERR_INVALID_PARAMETER,  
                                 //"Non-assocation class contains reference property");  
                             throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER,                             throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER,
                                                 MessageLoaderParms("Common.CIMClassRep.NON_ASSOCIATION_CLASS_CONTAINS_REFERENCE_PROPERTY",                      MessageLoaderParms(
                           "Common.CIMClassRep.NON_ASSOCIATION_CLASS_CONTAINS_"
                               "REFERENCE_PROPERTY",
                                                                                    "Non-assocation class contains reference property"));                                                                                    "Non-assocation class contains reference property"));
   
                         }                         }
  
   
                         Uint32 index = superClass.findProperty(property.getName());                         Uint32 index = superClass.findProperty(property.getName());
  
                         if (index == PEG_NOT_FOUND)                         if (index == PEG_NOT_FOUND)
                         {                         {
                             Resolver::resolveProperty (property, context,                  Resolver::resolveProperty(
                                 nameSpace, false, true);                      property, context, nameSpace, false, true);
                   if (property.getClassOrigin().isNull())
                   {
                       property.setClassOrigin(getClassName());
                   }
                   property.setPropagated(false);
                         }                         }
                         else                         else
                         {                         {
Line 273 
Line 221 
                                 superClass.getProperty(index);                                 superClass.getProperty(index);
                             Resolver::resolveProperty (property, context,                             Resolver::resolveProperty (property, context,
                                 nameSpace, false, superClassProperty, true);                                 nameSpace, false, superClassProperty, true);
                   if (property.getClassOrigin().isNull())
                   {
                       property.setClassOrigin(
                           superClassProperty.getClassOrigin());
                   }
                         }                         }
                 }                 }
  
Line 291 
Line 244 
                         // insert it (setting the propagated flag). Otherwise, change                         // insert it (setting the propagated flag). Otherwise, change
                         // the class-origin and propagated flag accordingly.                         // the class-origin and propagated flag accordingly.
  
                         Uint32 index = PEG_NOT_FOUND;              Uint32 index = findProperty(superClassProperty.getName());
                         /*       ATTN: KS move to simpler version of the find  
                         for (Uint32 j = m, n = _properties.size(); j < n; j++)  
                         {  
                                 if (CIMName::equal(_properties[j].getName(),  
                                                                    superClassProperty.getName()))  
                                 {  
                                         index = j;  
                                         break;  
                                 }  
                         }  
                         */  
                         index = findProperty(superClassProperty.getName());  
  
                         // If property exists in super class but not in this one, then                         // If property exists in super class but not in this one, then
                         // clone and insert it. Otherwise, the properties class                         // clone and insert it. Otherwise, the properties class
Line 325 
Line 266 
                                 // but not on the subclass's, then add it to the subclass's                                 // but not on the subclass's, then add it to the subclass's
                                 // property's qualifier list.                                 // property's qualifier list.
                                 CIMProperty subproperty = _properties[index];                                 CIMProperty subproperty = _properties[index];
                                 for (Uint32 i = 0, n = superproperty.getQualifierCount();                  for (Uint32 j = 0, qc = superproperty.getQualifierCount();
                                         i < n; i++)                       j < qc; j++)
                                 {                                 {
                                         Uint32 index = PEG_NOT_FOUND;  
                                         CIMQualifier superClassQualifier =                                         CIMQualifier superClassQualifier =
                                                                                         superproperty.getQualifier(i);                          superproperty.getQualifier(j);
                                         const CIMName name = superClassQualifier.getName();                                         const CIMName name = superClassQualifier.getName();
                                         /* ATTN KS This is replacement find function.                      if (subproperty.findQualifier(name) == PEG_NOT_FOUND)
                                         if((Uint32 j = subproperty.findQualifier(q.getName()) == PEG_NOT_FOUND)  
                                         {                                         {
                                                 subproperty.addQualifier(superClassQualifier);                                                 subproperty.addQualifier(superClassQualifier);
   
                                         }  
                                         */  
                                         for (Uint32 j = 0, m = subproperty.getQualifierCount();  
                                                  j < m;  
                                                  j++)  
                                         {  
                                                 CIMConstQualifier q = subproperty.getQualifier(j);  
                                                 if (name.equal(q.getName()))  
                                                 {  
                                                         index = j;  
                                                         break;  
                                                 }                                                 }
                                         }  // end comparison of subclass property's qualifiers  
                                         if (index == PEG_NOT_FOUND)  
                                         {  
                                                 subproperty.addQualifier(superClassQualifier);  
                                         }  
                                         /*  
                                         if ((index = subproperty.findQualifier(name)) == PEG_NOT_FOUND)  
                                         {  
                                                 subproperty.addQualifier(superClassQualifier);  
                                         }  
                                         */  
                                 } // end iteration over superclass property's qualifiers                                 } // end iteration over superclass property's qualifiers
                         }                         }
                 }                 }
Line 376 
Line 292 
  
                         if (index == PEG_NOT_FOUND)                         if (index == PEG_NOT_FOUND)
                         {                         {
                             Resolver::resolveMethod (method, context,                  Resolver::resolveMethod(method, context, nameSpace);
                                 nameSpace);                  if (method.getClassOrigin().isNull())
                   {
                       method.setClassOrigin(getClassName());
                   }
                   method.setPropagated(false);
                         }                         }
                         else                         else
                         {                         {
                                 CIMConstMethod superClassMethod = superClass.getMethod(index);                                 CIMConstMethod superClassMethod = superClass.getMethod(index);
                             Resolver::resolveMethod (method, context,                  Resolver::resolveMethod(
                                 nameSpace, superClassMethod);                      method, context, nameSpace, superClassMethod);
                         }                         }
                 }                 }
  
Line 404 
Line 324 
                         /**********************  KS move to simpler version                         /**********************  KS move to simpler version
                         for (Uint32 j = m, n = _methods.size(); j < n; j++)                         for (Uint32 j = m, n = _methods.size(); j < n; j++)
                         {                         {
                                 if (CIMName::equal(_methods[j].getName(),                  if (_methods[j].getName() == superClassMethod.getName())
                                                                         superClassMethod.getName()))  
                                 {                                 {
                                         index = j;                                         index = j;
                                         break;                                         break;
Line 423 
Line 342 
                                 _methods.insert(m++, method);                                 _methods.insert(m++, method);
                         }                         }
                         */                         */
                         if((index = findMethod(superClassMethod.getName())) == PEG_NOT_FOUND)              if ((index = findMethod(superClassMethod.getName())) ==
                   PEG_NOT_FOUND)
                         {                         {
                                 CIMMethod method = superClassMethod.clone();                                 CIMMethod method = superClassMethod.clone();
                                 method.setPropagated(true);                                 method.setPropagated(true);
                                 _methods.insert(m++, method);                                 _methods.insert(m++, method);
                         }                         }
   
                 }                 }
  
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 // Validate the qualifiers of this class:                 // Validate the qualifiers of this class:
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 //cout << "KSTEST Class Qualifiers resolve for class" << getClassName() << endl;  
                 _qualifiers.resolve(                 _qualifiers.resolve(
                         context,                         context,
                         nameSpace,                         nameSpace,
Line 448 
Line 368 
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 // Resolve each property:                 // Resolve each property:
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 //cout << "KSTEST Class Resolve, No Super class " << getClassName() << endl;  
  
                 for (Uint32 i = 0, n = _properties.size(); i < n; i++)                 for (Uint32 i = 0, n = _properties.size(); i < n; i++)
                     Resolver::resolveProperty (_properties[i], context,          {
                         nameSpace, false, true);               Resolver::resolveProperty(
                    _properties[i], context, nameSpace, false, true);
                _properties[i].setClassOrigin(getClassName());
                _properties[i].setPropagated(false);
           }
  
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 // Resolve each method:                 // Resolve each method:
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
  
                 for (Uint32 i = 0, n = _methods.size(); i < n; i++)                 for (Uint32 i = 0, n = _methods.size(); i < n; i++)
           {
                     Resolver::resolveMethod (_methods[i], context, nameSpace);                     Resolver::resolveMethod (_methods[i], context, nameSpace);
               _methods[i].setClassOrigin(getClassName());
               _methods[i].setPropagated(false);
           }
  
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 // Resolve the qualifiers:                 // Resolve the qualifiers:
Line 475 
Line 402 
                         dummy,                         dummy,
                         true);                         true);
     }     }
   
     // _resolved = true;  
 } }
  
 void CIMClassRep::toXml(Array<Sint8>& out) const  CIMInstance CIMClassRep::buildInstance(Boolean includeQualifiers,
       Boolean includeClassOrigin,
       const CIMPropertyList& propertyList) const
 { {
     // Class opening element:  
  
     out << "<CLASS ";      // Create the new instance representation
     out << " NAME=\"" << _reference.getClassName() << "\" ";      CIMInstanceRep* newInstanceRep = new CIMInstanceRep(
           CIMObjectPath(String::EMPTY,
                         CIMNamespaceName(),
                         _reference.getClassName()));
  
     if (!_superClassName.isNull())      // Copy qualifiers if required
         out << " SUPERCLASS=\"" << _superClassName << "\" ";      if (includeQualifiers)
       {
     out << ">\n";          for (Uint32 i = 0 ; i < getQualifierCount() ; i++)
           {
     // Qualifiers:              newInstanceRep->_qualifiers.add(getQualifier(i).clone());
           }
     _qualifiers.toXml(out);  
   
     // Parameters:  
   
     for (Uint32 i = 0, n = _properties.size(); i < n; i++)  
         XmlWriter::appendPropertyElement(out, _properties[i]);  
   
     // Methods:  
   
     for (Uint32 i = 0, n = _methods.size(); i < n; i++)  
         XmlWriter::appendMethodElement(out, _methods[i]);  
   
     // Class closing element:  
   
     out << "</CLASS>\n";  
 } }
 /** toMof prepares an 8-bit string with the MOF for the class.  
     The BNF for this is:  
     <pre>  
     classDeclaration    =    [ qualifierList ]  
                              CLASS className [ alias ] [ superClass ]  
                              "{" *classFeature "}" ";"  
   
     superClass          =    :" className  
   
     classFeature        =    propertyDeclaration | methodDeclaration  
  
 */      newInstanceRep->_properties.reserveCapacity(_properties.size());
  
 void CIMClassRep::toMof(Array<Sint8>& out) const      // Copy Properties
       for (Uint32 i = 0 ; i < _properties.size() ; i++)
 { {
     // Get and format the class qualifiers          CIMConstProperty cp = getProperty(i);
     out << "\n//    Class " << _reference.getClassName();          CIMName name = cp.getName();
     if (_qualifiers.getCount())          Array<CIMName> pl = propertyList.getPropertyNameArray();
         out << "\n";          if (propertyList.isNull() || Contains(pl, name))
     out << "\n";          {
     _qualifiers.toMof(out);              CIMProperty p;
   
     // Separate qualifiers from Class Name  
     out << "\n";  
   
     // output class statement  
     out << "class " << _reference.getClassName();  
   
     if (!_superClassName.isNull())  
         out << " : " << _superClassName;  
   
     out << "\n{";  
  
     // format the Properties:              if (includeQualifiers)
     for (Uint32 i = 0, n = _properties.size(); i < n; i++)              {
                   p = getProperty(i).clone();
               }
               else
     {     {
         // Generate MOF if this property not propagated                  p = CIMProperty(cp.getName(),
         // Note that the test is required only because                                  cp.getValue(),
         // there is an error in getclass that does not                                  cp.getArraySize(),
         // test the localOnly flag.                                  cp.getReferenceClassName(),
         if (!_properties[i].getPropagated())                                  cp.getClassOrigin());
             MofWriter::appendPropertyElement(out, _properties[i]);  
     }     }
  
     // Format the Methods:  for non-propagated methods              // Delete class origin attribute if required
     for (Uint32 i = 0, n = _methods.size(); i < n; i++)              if (!includeClassOrigin)
     {     {
         if (!_methods[i].getPropagated())                  p.setClassOrigin(CIMName());
             MofWriter::appendMethodElement(out, _methods[i]);  
     }     }
  
     // Class closing element:              newInstanceRep->_properties.append(p);
     out << "\n};\n";          }
 } }
  
       // Create new CIMInstance from CIMInstanceRep
       CIMInstance newInstance(newInstanceRep);
  
 CIMClassRep::CIMClassRep()      return newInstance;
 {  
 } }
  
 CIMClassRep::CIMClassRep(const CIMClassRep& x) : CIMClassRep::CIMClassRep(const CIMClassRep& x) :
Line 588 
Line 484 
     if (!tmprep)     if (!tmprep)
         return false;         return false;
  
       // If the pointers are the same, the objects must be identical
       if (this == tmprep)
       {
           return true;
       }
   
     if (!_superClassName.equal (tmprep->_superClassName))     if (!_superClassName.equal (tmprep->_superClassName))
         return false;         return false;
  
Line 596 
Line 498 
     //     //
  
     {     {
         const Array<CIMMethod>& tmp1 = _methods;          const MethodSet& tmp1 = _methods;
         const Array<CIMMethod>& tmp2 = tmprep->_methods;          const MethodSet& tmp2 = tmprep->_methods;
  
         if (tmp1.size() != tmp2.size())         if (tmp1.size() != tmp2.size())
             return false;             return false;
Line 615 
Line 517 
         }         }
     }     }
  
     if (_resolved != tmprep->_resolved)  
         return false;  
   
     return true;     return true;
 } }
  
Line 629 
Line 528 
     {     {
         CIMConstProperty property = getProperty(i);         CIMConstProperty property = getProperty(i);
  
         Uint32 index;          if (CIMPropertyInternal::isKeyProperty(property))
         if ((index = property.findQualifier (CIMName ("key"))) != PEG_NOT_FOUND)  
         {         {
             CIMValue value;  
             value = property.getQualifier (index).getValue ();  
             if (!value.isNull ())  
             {  
                 Boolean isKey;  
                 value.get (isKey);  
                 if (isKey)  
                     keyNames.append(property.getName());                     keyNames.append(property.getName());
             }             }
         }         }
     }     }
 }  
  
 Boolean CIMClassRep::hasKeys() const Boolean CIMClassRep::hasKeys() const
 { {
     for (Uint32 i = 0, n = getPropertyCount(); i < n; i++)     for (Uint32 i = 0, n = getPropertyCount(); i < n; i++)
     {     {
         CIMConstProperty property = getProperty(i);         CIMConstProperty property = getProperty(i);
           if (CIMPropertyInternal::isKeyProperty(property))
         Uint32 index;  
         if ((index = property.findQualifier (CIMName ("key"))) != PEG_NOT_FOUND)  
         {         {
             CIMValue value;  
             value = property.getQualifier (index).getValue ();  
             if (!value.isNull ())  
             {  
                 Boolean isKey;  
                 value.get (isKey);  
                 if (isKey)  
                     return true;                     return true;
             }             }
         }         }
     }  
   
     return false;     return false;
 } }
  


Legend:
Removed from v.1.59  
changed lines
  Added in v.1.90

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2