(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.6 and 1.90

version 1.6, 2001/04/25 22:20:53 version 1.90, 2008/12/01 17:49:47
Line 1 
Line 1 
 //%/////////////////////////////////////////////////////////////////////////////  //%LICENSE////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000 The Open Group, BMC Software, Tivoli Systems, IBM  // Licensed to The Open Group (TOG) under one or more contributor license
   // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
   // this work for additional information regarding copyright ownership.
   // 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 // Permission is hereby granted, free of charge, to any person obtaining a
 // copy of this software and associated documentation files (the "Software"), // copy of this software and associated documentation files (the "Software"),
Line 9 
Line 14 
 // and/or sell copies of the Software, and to permit persons to whom the // and/or sell copies of the Software, and to permit persons to whom the
 // Software is furnished to do so, subject to the following conditions: // Software is furnished to do so, subject to the following conditions:
 // //
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR  // The above copyright notice and this permission notice shall be included
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,  // in all copies or substantial portions of the Software.
 // 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)  // 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.
 // //
 // Modified By:  //////////////////////////////////////////////////////////////////////////
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
 #include "CIMClass.h"  #include "CIMClassRep.h"
 #include "DeclContext.h" #include "DeclContext.h"
 #include "Indentor.h"  #include "Resolver.h"
 #include "CIMName.h" #include "CIMName.h"
 #include "CIMQualifierNames.h" #include "CIMQualifierNames.h"
 #include "XmlWriter.h"  #include "CIMScope.h"
   #include <Pegasus/Common/Tracer.h>
   #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;
  
 CIMClassRep::CIMClassRep( CIMClassRep::CIMClassRep(
     const String& className,      const CIMName& className,
     const String& superClassName)      const CIMName& superClassName)
     : _className(className), _superClassName(superClassName), _resolved(false)      :
       CIMObjectRep(CIMObjectPath(String(), CIMNamespaceName(), className)),
       _superClassName(superClassName)
 { {
     if (!CIMName::legal(className))  
         throw IllegalName();  
   
     if (superClassName.getLength() && !CIMName::legal(superClassName))  
         throw IllegalName();  
 } }
  
 CIMClassRep::~CIMClassRep() CIMClassRep::~CIMClassRep()
 { {
   
 } }
  
 Boolean CIMClassRep::isAssociation() const Boolean CIMClassRep::isAssociation() const
 { {
     Uint32 pos = findQualifier(CIMQualifierNames::ASSOCIATION);      Uint32 index = findQualifier(CIMQualifierNames::ASSOCIATION);
  
     if (pos == Uint32(-1))      if (index == PEG_NOT_FOUND)
         return false;         return false;
  
     Boolean flag;     Boolean flag;
  
     const CIMValue& value = getQualifier(pos).getValue();      const CIMValue& value = getQualifier(index).getValue();
  
     if (value.getType() != CIMType::BOOLEAN)      if (value.getType() != CIMTYPE_BOOLEAN)
         return false;         return false;
  
     value.get(flag);     value.get(flag);
Line 71 
Line 78 
  
 Boolean CIMClassRep::isAbstract() const Boolean CIMClassRep::isAbstract() const
 { {
     Uint32 pos = findQualifier(CIMQualifierNames::ABSTRACT);      Uint32 index = findQualifier(CIMQualifierNames::ABSTRACT);
  
     if (pos == Uint32(-1))      if (index == PEG_NOT_FOUND)
         return false;         return false;
  
     Boolean flag;     Boolean flag;
     const CIMValue& value = getQualifier(pos).getValue();      const CIMValue& value = getQualifier(index).getValue();
  
     if (value.getType() != CIMType::BOOLEAN)      if (value.getType() != CIMTYPE_BOOLEAN)
         return false;         return false;
  
     value.get(flag);     value.get(flag);
     return flag;     return flag;
 } }
  
 void CIMClassRep::setSuperClassName(const String& superClassName)  
 {  
     if (!CIMName::legal(superClassName))  
         throw IllegalName();  
   
     _superClassName = superClassName;  
 }  
   
 void CIMClassRep::addProperty(const CIMProperty& x) void CIMClassRep::addProperty(const CIMProperty& x)
 { {
     if (!x)      if (x.isUninitialized())
         throw UnitializedHandle();          throw UninitializedObjectException();
  
     // Reject addition of duplicate property name:     // Reject addition of duplicate property name:
  
     if (findProperty(x.getName()) != Uint32(-1))      if (findProperty(x.getName()) != PEG_NOT_FOUND)
         throw AlreadyExists();  
   
     // Reject addition of references to non-associations:  
   
     if (!isAssociation() && x.getValue().getType() == CIMType::REFERENCE)  
         throw AddedReferenceToClass(_className);  
   
     // Set the class origin:  
     // ATTN: put this check in other places:  
   
     if (x.getClassOrigin().getLength() == 0)  
         CIMProperty(x).setClassOrigin(_className);  
   
     // Add the property:  
   
     _properties.append(x);  
 }  
   
 void CIMClassRep::removeProperty(Uint32 pos)  
 { {
     if (pos >= _properties.getSize())          MessageLoaderParms parms(
         throw OutOfBounds();              "Common.CIMClassRep.PROPERTY",
               "property \"$0\"",
               x.getName().getString());
           throw AlreadyExistsException(parms);
 } }
  
 Uint32 CIMClassRep::findProperty(const String& name)      // Reject addition of a reference property without a referenceClassName
 {  
     for (Uint32 i = 0, n = _properties.getSize(); i < n; i++)  
     {  
         if (CIMName::equal(_properties[i].getName(), name))  
             return i;  
     }  
   
     return Uint32(-1);  
 }  
  
 CIMProperty CIMClassRep::getProperty(Uint32 pos)      if ((x.getType() == CIMTYPE_REFERENCE) &&
           (x.getReferenceClassName().isNull()))
 { {
     if (pos >= _properties.getSize())          throw TypeMismatchException();
         throw OutOfBounds();  
   
     return _properties[pos];  
 } }
  
 Uint32 CIMClassRep::getPropertyCount() const      // Add the property:
 {  
     return _properties.getSize();      _properties.append(x);
 } }
  
 void CIMClassRep::addMethod(const CIMMethod& x) void CIMClassRep::addMethod(const CIMMethod& x)
 { {
     if (!x)      if (x.isUninitialized())
         throw UnitializedHandle();          throw UninitializedObjectException();
  
     // Reject duplicate method names:     // Reject duplicate method names:
  
     if (findMethod(x.getName()) != Uint32(-1))      if (findMethod(x.getName()) != PEG_NOT_FOUND)
         throw AlreadyExists();  
   
     // Add the method:  
   
     _methods.append(x);  
 }  
   
 Uint32 CIMClassRep::findMethod(const String& name)  
 { {
     for (Uint32 i = 0, n = _methods.getSize(); i < n; i++)          MessageLoaderParms parms(
     {              "Common.CIMClassRep.METHOD",
         if (CIMName::equal(_methods[i].getName(), name))              "method \"$0\"",
             return i;              x.getName().getString());
     }          throw AlreadyExistsException(parms);
   
     return Uint32(-1);  
 } }
  
 CIMMethod CIMClassRep::getMethod(Uint32 pos)      // Add the method:
 {  
     if (pos >= _methods.getSize())  
         throw OutOfBounds();  
   
     return _methods[pos];  
 }  
  
 Uint32 CIMClassRep::getMethodCount() const      _methods.append(x);
 {  
     return _methods.getSize();  
 } }
  
 void CIMClassRep::resolve( void CIMClassRep::resolve(
     DeclContext* context,     DeclContext* context,
     const String& nameSpace)      const CIMNamespaceName& nameSpace)
 { {
 #if 0      PEG_METHOD_ENTER(TRC_OBJECTRESOLUTION, "CIMClassRep::resolve()");
     if (_resolved)  
         throw ClassAlreadyResolved(_className);  
 #endif  
  
     if (!context)     if (!context)
         throw NullPointer();         throw NullPointer();
  
     if (_superClassName.getLength())      PEG_TRACE((TRC_OBJECTRESOLUTION, Tracer::LEVEL4,
     {          "CIMClassRep::resolve  class = %s, superclass = %s",
         //----------------------------------------------------------------------          (const char*)_reference.getClassName().getString().getCString(),
         // First check to see if the super-class really exists:          (const char*)_superClassName.getString().getCString()));
         //----------------------------------------------------------------------  
       if (!_superClassName.isNull())
         CIMConstClass superClass      {
             = context->lookupClass(nameSpace, _superClassName);          //----------------------------------------------------------------------
           // First check to see if the super-class really exists and the
         if (!superClass)          // subclassing legal:
             throw NoSuchSuperClass(_superClassName);          //----------------------------------------------------------------------
           CIMConstClass superClass =
 #if 0              context->lookupClass(nameSpace, _superClassName);
         if (!superClass._rep->_resolved)  
             throw ClassNotResolved(_superClassName);          if (superClass.isUninitialized())
 #endif              throw PEGASUS_CIM_EXCEPTION(CIM_ERR_INVALID_SUPERCLASS,
                   _superClassName.getString());
   
           // If subclass is abstract but superclass not, throw CIM Exception
   
           /* ATTN:KS-24 Mar 2002 P1 - Test this and confirm that rule is correct
           if isAbstract() && !superclass.isAbstract()
               throw PEGASUS_CIM_EXCEPTION(
                   CIM_ERR_INVALID_SUPERCLASS, _superClassName);
           */
           /*if (superclass.isTrueQualifier(CIMQualifierNames::TERMINAL)
               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
         // set the class-origin:         // set the class-origin:
         //----------------------------------------------------------------------         //----------------------------------------------------------------------
  
         for (Uint32 i = 0, n = _properties.getSize(); i < n; i++)          Boolean isAssociationClass = isAssociation();
   
           for (Uint32 i = 0, n = _properties.size(); i < n; i++)
         {         {
             CIMProperty& property = _properties[i];             CIMProperty& property = _properties[i];
             Uint32 pos = superClass.findProperty(property.getName());  
  
             if (pos == Uint32(-1))              if (!isAssociationClass &&
                   property.getValue().getType() == CIMTYPE_REFERENCE)
               {
                   throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER,
                       MessageLoaderParms(
                           "Common.CIMClassRep.NON_ASSOCIATION_CLASS_CONTAINS_"
                               "REFERENCE_PROPERTY",
                           "Non-assocation class contains reference property"));
               }
   
   
               Uint32 index = superClass.findProperty(property.getName());
   
               if (index == PEG_NOT_FOUND)
               {
                   Resolver::resolveProperty(
                       property, context, nameSpace, false, true);
                   if (property.getClassOrigin().isNull())
             {             {
                 property.resolve(context, nameSpace, false);                      property.setClassOrigin(getClassName());
                   }
                   property.setPropagated(false);
             }             }
             else             else
             {             {
                 CIMConstProperty superClassProperty = superClass.getProperty(pos);                  CIMConstProperty superClassProperty =
                 property.resolve(context, nameSpace, false, superClassProperty);                      superClass.getProperty(index);
                   Resolver::resolveProperty(property, context,
                       nameSpace, false, superClassProperty, true);
                   if (property.getClassOrigin().isNull())
                   {
                       property.setClassOrigin(
                           superClassProperty.getClassOrigin());
                   }
             }             }
         }         }
  
Line 254 
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 pos = Uint32(-1);              Uint32 index = findProperty(superClassProperty.getName());
   
             for (Uint32 j = m, n = _properties.getSize(); j < n; j++)  
             {  
                 if (CIMName::equal(  
                     _properties[j].getName(),  
                     superClassProperty.getName()))  
                 {  
                     pos = j;  
                     break;  
                 }  
             }  
  
             // 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
             // origin was set above.             // origin was set above.
  
             if (pos == Uint32(-1))              CIMProperty superproperty = superClassProperty.clone();
   
               if (index == PEG_NOT_FOUND)
             {             {
                 CIMProperty property = superClassProperty.clone();                  superproperty.setPropagated(true);
                 property.setPropagated(true);                  _properties.insert(m++, superproperty);
                 _properties.insert(m++, property);              }
               else
               {
                   // Property Qualifiers must propagate if allowed
                   // If property exists in the superclass and in the subclass,
                   // then, enumerate the qualifiers of the superclass's property.
                   // If a qualifier is defined on the superclass's property
                   // but not on the subclass's, then add it to the subclass's
                   // property's qualifier list.
                   CIMProperty subproperty = _properties[index];
                   for (Uint32 j = 0, qc = superproperty.getQualifierCount();
                        j < qc; j++)
                   {
                       CIMQualifier superClassQualifier =
                           superproperty.getQualifier(j);
                       const CIMName name = superClassQualifier.getName();
                       if (subproperty.findQualifier(name) == PEG_NOT_FOUND)
                       {
                           subproperty.addQualifier(superClassQualifier);
                       }
                   } // end iteration over superclass property's qualifiers
             }             }
         }         }
  
Line 284 
Line 285 
         // set the class-origin:         // set the class-origin:
         //----------------------------------------------------------------------         //----------------------------------------------------------------------
  
         for (Uint32 i = 0, n = _methods.getSize(); i < n; i++)          for (Uint32 i = 0, n = _methods.size(); i < n; i++)
         {         {
             CIMMethod& method = _methods[i];             CIMMethod& method = _methods[i];
             Uint32 pos = superClass.findMethod(method.getName());              Uint32 index = superClass.findMethod(method.getName());
  
             if (pos == Uint32(-1))              if (index == PEG_NOT_FOUND)
             {             {
                 method.resolve(context, nameSpace);                  Resolver::resolveMethod(method, context, nameSpace);
                   if (method.getClassOrigin().isNull())
                   {
                       method.setClassOrigin(getClassName());
                   }
                   method.setPropagated(false);
             }             }
             else             else
             {             {
                 CIMConstMethod superClassMethod = superClass.getMethod(pos);                  CIMConstMethod superClassMethod = superClass.getMethod(index);
                 method.resolve(context, nameSpace, superClassMethod);                  Resolver::resolveMethod(
                       method, context, nameSpace, superClassMethod);
             }             }
         }         }
  
Line 313 
Line 320 
             // 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 pos = Uint32(-1);              Uint32 index = PEG_NOT_FOUND;
               /**********************     KS move to simpler version
             for (Uint32 j = m, n = _methods.getSize(); j < n; j++)              for (Uint32 j = m, n = _methods.size(); j < n; j++)
             {             {
                 if (CIMName::equal(                  if (_methods[j].getName() == superClassMethod.getName())
                     _methods[j].getName(),  
                     superClassMethod.getName()))  
                 {                 {
                     pos = j;                      index = j;
                     break;                     break;
                 }                 }
             }             }
Line 330 
Line 335 
             // clone and insert it. Otherwise, the method's class origin             // clone and insert it. Otherwise, the method's class origin
             // has already been set above.             // has already been set above.
  
             if (pos == Uint32(-1))              if (index == 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);
             }             }
               */
               if ((index = findMethod(superClassMethod.getName())) ==
                   PEG_NOT_FOUND)
               {
                   CIMMethod method = superClassMethod.clone();
                   method.setPropagated(true);
                   _methods.insert(m++, method);
               }
   
         }         }
  
         //----------------------------------------------------------------------         //----------------------------------------------------------------------
         // Validate the qualifiers of this class:         // Validate the qualifiers of this class:
         //----------------------------------------------------------------------         //----------------------------------------------------------------------
   
         _qualifiers.resolve(         _qualifiers.resolve(
             context,             context,
             nameSpace,             nameSpace,
             isAssociation() ? CIMScope::ASSOCIATION : CIMScope::CLASS,             isAssociation() ? CIMScope::ASSOCIATION : CIMScope::CLASS,
             false,             false,
             superClass._rep->_qualifiers);              superClass._rep->_qualifiers,
               true);
     }     }
     else      else     // No SuperClass exsts
     {     {
         //----------------------------------------------------------------------         //----------------------------------------------------------------------
         // Resolve each property:         // Resolve each property:
         //----------------------------------------------------------------------         //----------------------------------------------------------------------
  
         for (Uint32 i = 0, n = _properties.getSize(); i < n; i++)          for (Uint32 i = 0, n = _properties.size(); i < n; i++)
             _properties[i].resolve(context, nameSpace, false);          {
                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.getSize(); i < n; i++)          for (Uint32 i = 0, n = _methods.size(); i < n; i++)
             _methods[i].resolve(context, nameSpace);          {
               Resolver::resolveMethod (_methods[i], context, nameSpace);
               _methods[i].setClassOrigin(getClassName());
               _methods[i].setPropagated(false);
           }
  
         //----------------------------------------------------------------------         //----------------------------------------------------------------------
         // Resolve the qualifiers:         // Resolve the qualifiers:
Line 376 
Line 399 
             nameSpace,             nameSpace,
             isAssociation() ? CIMScope::ASSOCIATION : CIMScope::CLASS,             isAssociation() ? CIMScope::ASSOCIATION : CIMScope::CLASS,
             false,             false,
             dummy);              dummy,
               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 ";  
     out << " NAME=\"" << _className << "\" ";  
   
     if (_superClassName.getLength())  
         out << " SUPERCLASS=\"" << _superClassName << "\" ";  
  
     out << ">\n";      // Create the new instance representation
       CIMInstanceRep* newInstanceRep = new CIMInstanceRep(
           CIMObjectPath(String::EMPTY,
                         CIMNamespaceName(),
                         _reference.getClassName()));
  
     // Qualifiers:      // Copy qualifiers if required
       if (includeQualifiers)
     _qualifiers.toXml(out);      {
           for (Uint32 i = 0 ; i < getQualifierCount() ; i++)
     // Parameters:          {
               newInstanceRep->_qualifiers.add(getQualifier(i).clone());
     for (Uint32 i = 0, n = _properties.getSize(); i < n; i++)          }
         _properties[i].toXml(out);      }
   
     // Methods:  
   
     for (Uint32 i = 0, n = _methods.getSize(); i < n; i++)  
         _methods[i].toXml(out);  
  
     // Class closing element:      newInstanceRep->_properties.reserveCapacity(_properties.size());
  
     out << "</CLASS>\n";      // Copy Properties
 }      for (Uint32 i = 0 ; i < _properties.size() ; i++)
       {
           CIMConstProperty cp = getProperty(i);
           CIMName name = cp.getName();
           Array<CIMName> pl = propertyList.getPropertyNameArray();
           if (propertyList.isNull() || Contains(pl, name))
           {
               CIMProperty p;
  
 void CIMClassRep::print(std::ostream &os) const              if (includeQualifiers)
 { {
     Array<Sint8> tmp;                  p = getProperty(i).clone();
     toXml(tmp);  
     tmp.append('\0');  
     XmlWriter::indentedPrint(os, tmp.getData(), 4);  
     // cout << tmp.getData() << endl;  
 } }
               else
 CIMClassRep::CIMClassRep()  
 { {
                   p = CIMProperty(cp.getName(),
                                   cp.getValue(),
                                   cp.getArraySize(),
                                   cp.getReferenceClassName(),
                                   cp.getClassOrigin());
 } }
  
 CIMClassRep::CIMClassRep(const CIMClassRep& x) :              // Delete class origin attribute if required
     Sharable(),              if (!includeClassOrigin)
     _className(x._className),  
     _superClassName(x._superClassName),  
     _resolved(x._resolved)  
 { {
     x._qualifiers.cloneTo(_qualifiers);                  p.setClassOrigin(CIMName());
               }
     _properties.reserve(x._properties.getSize());  
  
     for (Uint32 i = 0, n = x._properties.getSize(); i < n; i++)              newInstanceRep->_properties.append(p);
         _properties.append(x._properties[i].clone());          }
       }
  
     _methods.reserve(x._methods.getSize());      // Create new CIMInstance from CIMInstanceRep
       CIMInstance newInstance(newInstanceRep);
  
     for (Uint32 i = 0, n = x._methods.getSize(); i < n; i++)      return newInstance;
         _methods.append(x._methods[i].clone());  
 } }
  
 CIMClassRep& CIMClassRep::operator=(const CIMClassRep& x)  CIMClassRep::CIMClassRep(const CIMClassRep& x) :
       CIMObjectRep(x),
       _superClassName(x._superClassName)
 { {
     return *this;      _methods.reserveCapacity(x._methods.size());
   
       for (Uint32 i = 0, n = x._methods.size(); i < n; i++)
           _methods.append(x._methods[i].clone());
 } }
  
 Boolean CIMClassRep::identical(const CIMClassRep* x) const  Boolean CIMClassRep::identical(const CIMObjectRep* x) const
 { {
     if (_className != x->_className)      if (!CIMObjectRep::identical(x))
         return false;  
   
     if (_superClassName != x->_superClassName)  
         return false;         return false;
  
     if (!_qualifiers.identical(x->_qualifiers))      const CIMClassRep* tmprep = dynamic_cast<const CIMClassRep*>(x);
       if (!tmprep)
         return false;         return false;
  
     // Compare properties:      // If the pointers are the same, the objects must be identical
       if (this == tmprep)
     {     {
         const Array<CIMProperty>& tmp1 = _properties;          return true;
         const Array<CIMProperty>& tmp2 = x->_properties;      }
  
         if (tmp1.getSize() != tmp2.getSize())      if (!_superClassName.equal (tmprep->_superClassName))
             return false;             return false;
  
         for (Uint32 i = 0, n = tmp1.getSize(); i < n; i++)      //
         {      // Check methods:
             if (!tmp1[i].identical(tmp2[i]))      //
                 return false;  
         }  
     }  
   
     // Compare methods:  
  
     {     {
         const Array<CIMMethod>& tmp1 = _methods;          const MethodSet& tmp1 = _methods;
         const Array<CIMMethod>& tmp2 = x->_methods;          const MethodSet& tmp2 = tmprep->_methods;
  
         if (tmp1.getSize() != tmp2.getSize())          if (tmp1.size() != tmp2.size())
             return false;             return false;
  
         for (Uint32 i = 0, n = tmp1.getSize(); i < n; i++)          for (Uint32 i = 0, n = tmp1.size(); i < n; i++)
         {         {
             if (!tmp1[i].identical(tmp2[i]))             if (!tmp1[i].identical(tmp2[i]))
                 return false;                 return false;
  
             if (tmp1[i].getClassOrigin() != tmp2[i].getClassOrigin())              if (!tmp1[i].getClassOrigin().equal (tmp2[i].getClassOrigin()))
                 return false;                 return false;
  
             if (tmp1[i].getPropagated() != tmp2[i].getPropagated())             if (tmp1[i].getPropagated() != tmp2[i].getPropagated())
Line 500 
Line 517 
         }         }
     }     }
  
     if (_resolved != x->_resolved)  
         return false;  
   
     return true;     return true;
 } }
  
 void CIMClassRep::getKeyNames(Array<String>& keyNames) const  void CIMClassRep::getKeyNames(Array<CIMName>& keyNames) const
 { {
     keyNames.clear();     keyNames.clear();
  
Line 514 
Line 528 
     {     {
         CIMConstProperty property = getProperty(i);         CIMConstProperty property = getProperty(i);
  
         if (property.isKey())          if (CIMPropertyInternal::isKeyProperty(property))
           {
             keyNames.append(property.getName());             keyNames.append(property.getName());
     }     }
 } }
   }
   
   Boolean CIMClassRep::hasKeys() const
   {
       for (Uint32 i = 0, n = getPropertyCount(); i < n; i++)
       {
           CIMConstProperty property = getProperty(i);
           if (CIMPropertyInternal::isKeyProperty(property))
           {
               return true;
           }
       }
       return false;
   }
  
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END
   


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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2