(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.29 and 1.57

version 1.29, 2002/03/25 16:27:51 version 1.57, 2003/07/31 14:24:33
Line 1 
Line 1 
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001 The Open group, BMC Software, Tivoli Systems, IBM  // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM,
   // The Open Group, Tivoli Systems
 // //
 // 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 copy
 // of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
Line 22 
Line 23 
 // //
 // Author: Mike Brasher (mbrasher@bmc.com) // Author: Mike Brasher (mbrasher@bmc.com)
 // //
 // Modified By:  // 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 "CIMClass.h"  #include "CIMClassRep.h"
 #include "DeclContext.h" #include "DeclContext.h"
   #include "Resolver.h"
 #include "Indentor.h" #include "Indentor.h"
 #include "CIMName.h" #include "CIMName.h"
 #include "CIMQualifierNames.h" #include "CIMQualifierNames.h"
   #include "CIMScope.h"
 #include "XmlWriter.h" #include "XmlWriter.h"
   #include "MofWriter.h"
   #include <Pegasus/Common/Tracer.h>
   #include <Pegasus/Common/MessageLoader.h> //l10n
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
 PEGASUS_USING_STD; PEGASUS_USING_STD;
  
 CIMClassRep::CIMClassRep( CIMClassRep::CIMClassRep(
     const CIMReference& reference,      const CIMName& className,
     const String& superClassName)      const CIMName& superClassName)
     :     :
     CIMObjectRep(reference),      CIMObjectRep(CIMObjectPath(String(), CIMNamespaceName(), className)),
     _superClassName(superClassName)     _superClassName(superClassName)
 { {
     if (superClassName.size() && !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 == PEG_NOT_FOUND)      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 72 
Line 78 
  
 Boolean CIMClassRep::isAbstract() const Boolean CIMClassRep::isAbstract() const
 { {
     Uint32 pos = findQualifier(CIMQualifierNames::ABSTRACT);      Uint32 index = findQualifier(CIMQualifierNames::ABSTRACT);
  
     if (pos == PEG_NOT_FOUND)      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)  void CIMClassRep::setSuperClassName(const CIMName& superClassName)
 { {
     if (!CIMName::legal(superClassName))  
         throw IllegalName();  
   
     _superClassName = superClassName;     _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()) != PEG_NOT_FOUND)      if (findProperty(x.getName()) != PEG_NOT_FOUND){
         throw AlreadyExists();          //l10n
                   //throw AlreadyExistsException
     // Reject addition of references to non-associations:              //("property \"" + x.getName().getString () + "\"");
           MessageLoaderParms parms("Common.CIMClassRep.PROPERTY",
                                                            "property \"$0\"",
                                                            x.getName().getString());
           throw AlreadyExistsException(parms);
  
     if (!isAssociation() && x.getValue().getType() == CIMType::REFERENCE)      }
         throw AddedReferenceToClass(_reference.getClassName());  
  
     // Set the class origin:     // Set the class origin:
     // ATTN: put this check in other places:     // ATTN: put this check in other places:
  
     if (x.getClassOrigin().size() == 0)      if (x.getClassOrigin().isNull())
         CIMProperty(x).setClassOrigin(_reference.getClassName());         CIMProperty(x).setClassOrigin(_reference.getClassName());
  
     // Add the property:     // Add the property:
Line 123 
Line 129 
  
 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()) != PEG_NOT_FOUND)      if (findMethod(x.getName()) != PEG_NOT_FOUND){
         throw AlreadyExists();          //l10n
                   //throw AlreadyExistsException
               //("method \"" + x.getName().getString() + "\"");
           MessageLoaderParms parms("Common.CIMClassRep.METHOD",
                                                            "method \"$0\"",
                                                            x.getName().getString());
           throw AlreadyExistsException(parms);
   
       }
  
     // Add the method:     // Add the method:
  
     _methods.append(x);     _methods.append(x);
 } }
  
 Uint32 CIMClassRep::findMethod(const String& name)  Uint32 CIMClassRep::findMethod(const CIMName& name) const
 { {
     for (Uint32 i = 0, n = _methods.size(); i < n; i++)     for (Uint32 i = 0, n = _methods.size(); i < n; i++)
     {     {
         if (CIMName::equal(_methods[i].getName(), name))          if (name.equal(_methods[i].getName()))
             return i;             return i;
     }     }
  
     return PEG_NOT_FOUND;     return PEG_NOT_FOUND;
 } }
  
 Boolean CIMClassRep::existsMethod(const String& name)  CIMMethod CIMClassRep::getMethod(Uint32 index)
 {  
     return(findMethod(name) == PEG_NOT_FOUND) ? false : true;  
 }  
   
 CIMMethod CIMClassRep::getMethod(Uint32 pos)  
 { {
     if (pos >= _methods.size())      if (index >= _methods.size())
         throw OutOfBounds();          throw IndexOutOfBoundsException();
  
     return _methods[pos];      return _methods[index];
 } }
  
 Uint32 CIMClassRep::getMethodCount() const Uint32 CIMClassRep::getMethodCount() const
Line 165 
Line 174 
     return _methods.size();     return _methods.size();
 } }
  
 void CIMClassRep::removeMethod(Uint32 pos)  void CIMClassRep::removeMethod(Uint32 index)
 { {
     if (pos >= _methods.size())      if (index >= _methods.size())
         throw OutOfBounds();          throw IndexOutOfBoundsException();
  
     _methods.remove(pos);      _methods.remove(index);
 } }
  
 void CIMClassRep::resolve( void CIMClassRep::resolve(
     DeclContext* context,     DeclContext* context,
     const String& nameSpace)      const CIMNamespaceName& nameSpace)
 { {
           PEG_METHOD_ENTER(TRC_OBJECTRESOLUTION, "CIMClassRep::resolve()");
 #if 0 #if 0
     if (_resolved)     if (_resolved)
         throw ClassAlreadyResolved(_reference.getClassName());         throw ClassAlreadyResolved(_reference.getClassName());
Line 184 
Line 194 
     if (!context)     if (!context)
         throw NullPointer();         throw NullPointer();
  
     if (_superClassName.size())          PEG_TRACE_STRING(TRC_OBJECTRESOLUTION, Tracer::LEVEL3,
                   String("CIMClassRep::resolve  class = ") +
                   _reference.getClassName().getString() + ", superclass = " +
                   _superClassName.getString());
   
       if (!_superClassName.isNull())
         {         {
                 //cout << "KSTEST Class Resolve with Super class " << getClassName()                 //cout << "KSTEST Class Resolve with Super class " << getClassName()
                 //<< " superClass " << _superClassName << endl;                 //<< " superClass " << _superClassName << endl;
Line 194 
Line 209 
                 CIMConstClass superClass                 CIMConstClass superClass
                         = context->lookupClass(nameSpace, _superClassName);                         = context->lookupClass(nameSpace, _superClassName);
  
                 if (!superClass)                  if (superClass.isUninitialized())
                         throw PEGASUS_CIM_EXCEPTION(CIM_ERR_INVALID_SUPERCLASS,_superClassName);                          throw PEGASUS_CIM_EXCEPTION(CIM_ERR_INVALID_SUPERCLASS,
                             _superClassName.getString());
   
  
 #if 0 #if 0
                 if (!superClass._rep->_resolved)                 if (!superClass._rep->_resolved)
Line 207 
Line 224 
                 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)
                           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:
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
  
                   Boolean isAssociationClass = isAssociation();
   
                 for (Uint32 i = 0, n = _properties.size(); i < n; i++)                 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 == PEG_NOT_FOUND)                          if (!isAssociationClass &&
                               property.getValue().getType() == CIMTYPE_REFERENCE)
                         {                         {
                                 property.resolve(context, nameSpace, false, true);                                  //l10n
                               //throw PEGASUS_CIM_EXCEPTION(CIM_ERR_INVALID_PARAMETER,
                                   //"Non-assocation class contains reference property");
                               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);
                         }                         }
                         else                         else
                         {                         {
                                 CIMConstProperty superClassProperty =                                 CIMConstProperty superClassProperty =
                                 superClass.getProperty(pos);                                  superClass.getProperty(index);
                                 property.resolve(                              Resolver::resolveProperty (property, context,
                                         context, nameSpace, false, superClassProperty, true);                                  nameSpace, false, superClassProperty, true);
                         }                         }
                 }                 }
  
Line 245 
Line 281 
                         // 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 = PEG_NOT_FOUND;                          Uint32 index = PEG_NOT_FOUND;
                         /*       ATTN: KS move to simpler version of the find                         /*       ATTN: KS move to simpler version of the find
                         for (Uint32 j = m, n = _properties.size(); j < n; j++)                         for (Uint32 j = m, n = _properties.size(); j < n; j++)
                         {                         {
                                 if (CIMName::equal(_properties[j].getName(),                                 if (CIMName::equal(_properties[j].getName(),
                                                                    superClassProperty.getName()))                                                                    superClassProperty.getName()))
                                 {                                 {
                                         pos = j;                                          index = j;
                                         break;                                         break;
                                 }                                 }
                         }                         }
                         */                         */
                         pos = findProperty(superClassProperty.getName());                          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
                         // origin was set above.                         // origin was set above.
  
                         CIMProperty superproperty = superClassProperty.clone(true);                          CIMProperty superproperty = superClassProperty.clone();
  
                         if (pos == PEG_NOT_FOUND)                          if (index == PEG_NOT_FOUND)
                         {                         {
                                 superproperty.setPropagated(true);                                 superproperty.setPropagated(true);
                                 _properties.insert(m++, superproperty);                                 _properties.insert(m++, superproperty);
Line 278 
Line 314 
                                 // If a qualifier is defined on 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                                 // but not on the subclass's, then add it to the subclass's
                                 // property's qualifier list.                                 // property's qualifier list.
                                 CIMProperty subproperty = _properties[pos];                                  CIMProperty subproperty = _properties[index];
                                 for (Uint32 i = 0, n = superproperty.getQualifierCount();                                 for (Uint32 i = 0, n = superproperty.getQualifierCount();
                                         i < n; i++)                                         i < n; i++)
                                 {                                 {
                                         Uint32 pos = PEG_NOT_FOUND;                                          Uint32 index = PEG_NOT_FOUND;
                                         CIMQualifier superClassQualifier =                                         CIMQualifier superClassQualifier =
                                                                                         superproperty.getQualifier(i);                                                                                         superproperty.getQualifier(i);
                                         const String name = superClassQualifier.getName();                                          const CIMName name = superClassQualifier.getName();
                                         /* ATTN KS This is replacement find function.                                         /* ATTN KS This is replacement find function.
                                         if((Uint32 j = subproperty.findQualifier(q.getName()) == PEG_NOT_FOUND)                                         if((Uint32 j = subproperty.findQualifier(q.getName()) == PEG_NOT_FOUND)
                                         {                                         {
Line 298 
Line 334 
                                                  j++)                                                  j++)
                                         {                                         {
                                                 CIMConstQualifier q = subproperty.getQualifier(j);                                                 CIMConstQualifier q = subproperty.getQualifier(j);
                                                 if (CIMName::equal(name,                                                  if (name.equal(q.getName()))
                                                            q.getName()))  
                                                 {                                                 {
                                                         pos = j;                                                          index = j;
                                                         break;                                                         break;
                                                 }                                                 }
                                         }  // end comparison of subclass property's qualifiers                                         }  // end comparison of subclass property's qualifiers
                                         if (pos == PEG_NOT_FOUND)                                          if (index == PEG_NOT_FOUND)
                                         {                                         {
                                                 subproperty.addQualifier(superClassQualifier);                                                 subproperty.addQualifier(superClassQualifier);
                                         }                                         }
                                         /*                                         /*
                                         if ((pos = subproperty.findQualifier(name)) == PEG_NOT_FOUND)                                          if ((index = subproperty.findQualifier(name)) == PEG_NOT_FOUND)
                                         {                                         {
                                                 subproperty.addQualifier(superClassQualifier);                                                 subproperty.addQualifier(superClassQualifier);
                                         }                                         }
Line 327 
Line 362 
                 for (Uint32 i = 0, n = _methods.size(); 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 == PEG_NOT_FOUND)                          if (index == PEG_NOT_FOUND)
                         {                         {
                                 method.resolve(context, nameSpace);                              Resolver::resolveMethod (method, context,
                                   nameSpace);
                         }                         }
                         else                         else
                         {                         {
                                 CIMConstMethod superClassMethod = superClass.getMethod(pos);                                  CIMConstMethod superClassMethod = superClass.getMethod(index);
                                 method.resolve(context, nameSpace, superClassMethod);                              Resolver::resolveMethod (method, context,
                                   nameSpace, superClassMethod);
                         }                         }
                 }                 }
  
Line 353 
Line 390 
                         // 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 = PEG_NOT_FOUND;                          Uint32 index = PEG_NOT_FOUND;
                         /**********************  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 (CIMName::equal(_methods[j].getName(),
                                                                         superClassMethod.getName()))                                                                         superClassMethod.getName()))
                                 {                                 {
                                         pos = j;                                          index = j;
                                         break;                                         break;
                                 }                                 }
                         }                         }
Line 369 
Line 406 
                         // 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 == PEG_NOT_FOUND)                          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((pos = 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);
Line 404 
Line 441 
                 //cout << "KSTEST Class Resolve, No Super class " << getClassName() << endl;                 //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++)
                         _properties[i].resolve(context, nameSpace, false, true);                      Resolver::resolveProperty (_properties[i], context,
                           nameSpace, false, true);
  
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 // 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++)
                         _methods[i].resolve(context, nameSpace);                      Resolver::resolveMethod (_methods[i], context, nameSpace);
  
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 // Resolve the qualifiers:                 // Resolve the qualifiers:
Line 438 
Line 476 
     out << "<CLASS ";     out << "<CLASS ";
     out << " NAME=\"" << _reference.getClassName() << "\" ";     out << " NAME=\"" << _reference.getClassName() << "\" ";
  
     if (_superClassName.size())      if (!_superClassName.isNull())
         out << " SUPERCLASS=\"" << _superClassName << "\" ";         out << " SUPERCLASS=\"" << _superClassName << "\" ";
  
     out << ">\n";     out << ">\n";
Line 450 
Line 488 
     // Parameters:     // Parameters:
  
     for (Uint32 i = 0, n = _properties.size(); i < n; i++)     for (Uint32 i = 0, n = _properties.size(); i < n; i++)
         _properties[i].toXml(out);          XmlWriter::appendPropertyElement(out, _properties[i]);
  
     // Methods:     // Methods:
  
     for (Uint32 i = 0, n = _methods.size(); i < n; i++)     for (Uint32 i = 0, n = _methods.size(); i < n; i++)
         _methods[i].toXml(out);          XmlWriter::appendMethodElement(out, _methods[i]);
  
     // Class closing element:     // Class closing element:
  
Line 489 
Line 527 
     // output class statement     // output class statement
     out << "class " << _reference.getClassName();     out << "class " << _reference.getClassName();
  
     if (_superClassName.size())      if (!_superClassName.isNull())
         out << " : " << _superClassName;         out << " : " << _superClassName;
  
     out << "\n{";     out << "\n{";
Line 497 
Line 535 
     // format the Properties:     // format the Properties:
     for (Uint32 i = 0, n = _properties.size(); i < n; i++)     for (Uint32 i = 0, n = _properties.size(); i < n; i++)
     {     {
         // Generate MOF if this property not propogated          // Generate MOF if this property not propagated
         // Note that the test is required only because         // Note that the test is required only because
         // there is an error in getclass that does not         // there is an error in getclass that does not
         // test the localOnly flag.         // test the localOnly flag.
         if (!_properties[i].getPropagated())         if (!_properties[i].getPropagated())
             _properties[i].toMof(out);              MofWriter::appendPropertyElement(out, _properties[i]);
     }     }
  
     // Format the Methods:  for non-propagated methods     // Format the Methods:  for non-propagated methods
     for (Uint32 i = 0, n = _methods.size(); i < n; i++)     for (Uint32 i = 0, n = _methods.size(); i < n; i++)
     {     {
         if (!_methods[i].getPropagated())         if (!_methods[i].getPropagated())
         _methods[i].toMof(out);              MofWriter::appendMethodElement(out, _methods[i]);
     }     }
  
     // Class closing element:     // Class closing element:
     out << "\n};\n";     out << "\n};\n";
 } }
  
 void CIMClassRep::print(PEGASUS_STD(ostream) &os) const  
 {  
     Array<Sint8> tmp;  
     toXml(tmp);  
     tmp.append('\0');  
     XmlWriter::indentedPrint(os, tmp.getData(), 4);  
 }  
   
 void CIMClassRep::printMof(PEGASUS_STD(ostream) &os) const  
 {  
     Array<Sint8> tmp;  
     toMof(tmp);  
     tmp.append('\0');  
     os << tmp.getData() << PEGASUS_STD(endl);  
 }  
   
  
 CIMClassRep::CIMClassRep() CIMClassRep::CIMClassRep()
 { {
   
 } }
  
 CIMClassRep::CIMClassRep(const CIMClassRep& x) : CIMClassRep::CIMClassRep(const CIMClassRep& x) :
     CIMObjectRep(x),     CIMObjectRep(x),
     _superClassName(x._superClassName)     _superClassName(x._superClassName)
 { {
     _methods.reserve(x._methods.size());      _methods.reserveCapacity(x._methods.size());
  
     for (Uint32 i = 0, n = x._methods.size(); i < n; i++)     for (Uint32 i = 0, n = x._methods.size(); i < n; i++)
         _methods.append(x._methods[i].clone());         _methods.append(x._methods[i].clone());
 } }
  
 Boolean CIMClassRep::identical(const CIMClassRep* x) const  Boolean CIMClassRep::identical(const CIMObjectRep* x) const
 { {
     if (!CIMObjectRep::identical(x))     if (!CIMObjectRep::identical(x))
         return false;         return false;
  
     if (_superClassName != x->_superClassName)      const CIMClassRep* tmprep = dynamic_cast<const CIMClassRep*>(x);
       if (!tmprep)
           return false;
   
       if (!_superClassName.equal (tmprep->_superClassName))
         return false;         return false;
  
     //     //
Line 562 
Line 587 
  
     {     {
         const Array<CIMMethod>& tmp1 = _methods;         const Array<CIMMethod>& tmp1 = _methods;
         const Array<CIMMethod>& tmp2 = x->_methods;          const Array<CIMMethod>& tmp2 = tmprep->_methods;
  
         if (tmp1.size() != tmp2.size())         if (tmp1.size() != tmp2.size())
             return false;             return false;
Line 572 
Line 597 
             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 580 
Line 605 
         }         }
     }     }
  
     if (_resolved != x->_resolved)      if (_resolved != tmprep->_resolved)
         return false;         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 594 
Line 619 
     {     {
         CIMConstProperty property = getProperty(i);         CIMConstProperty property = getProperty(i);
  
         if (property.isKey())          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)
             keyNames.append(property.getName());             keyNames.append(property.getName());
     }     }
 } }
       }
   }
  
 Boolean CIMClassRep::hasKeys() const Boolean CIMClassRep::hasKeys() const
 { {
Line 605 
Line 641 
     {     {
         CIMConstProperty property = getProperty(i);         CIMConstProperty property = getProperty(i);
  
         if (getProperty(i).isKey())          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.29  
changed lines
  Added in v.1.57

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2