(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.71.2.1 and 1.80

version 1.71.2.1, 2006/02/10 16:09:33 version 1.80, 2007/12/17 12:21:24
Line 29 
Line 29 
 // //
 //============================================================================== //==============================================================================
 // //
 // 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)  
 //              David Dillard, VERITAS Software Corp.  
 //                  (david.dillard@veritas.com)  
 //  
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
 #include "CIMClassRep.h" #include "CIMClassRep.h"
Line 50 
Line 41 
 #include "XmlWriter.h" #include "XmlWriter.h"
 #include "MofWriter.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 "CIMNameUnchecked.h" #include "CIMNameUnchecked.h"
 #include "StrLit.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 116 
Line 110 
  
     // 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 147 
Line 139 
  
     // 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 165 
Line 155 
  
 Uint32 CIMClassRep::findMethod(const CIMName& name) const Uint32 CIMClassRep::findMethod(const CIMName& name) const
 { {
     for (Uint32 i = 0, n = _methods.size(); i < n; i++)      return _methods.find(name, generateCIMNameTag(name));
     {  
         if (name.equal(_methods[i].getName()))  
             return i;  
     }  
   
     return PEG_NOT_FOUND;  
 } }
  
 CIMMethod CIMClassRep::getMethod(Uint32 index) CIMMethod CIMClassRep::getMethod(Uint32 index)
Line 214 
Line 198 
  
     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 0
                 if (!superClass._rep->_resolved)                 if (!superClass._rep->_resolved)
                         throw ClassNotResolved(_superClassName);                         throw ClassNotResolved(_superClassName);
Line 235 
Line 217 
  
                 /* 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 254 
Line 238 
             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"));
   
   
             }             }
  
  
Line 269 
Line 250 
  
                         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())                             if (property.getClassOrigin().isNull())
                             {                             {
                                 property.setClassOrigin(getClassName());                                 property.setClassOrigin(getClassName());
Line 310 
Line 291 
                         /*       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 (_properties[j].getName() == superClassProperty.getName())
                                                                    superClassProperty.getName()))  
                                 {                                 {
                                         index = j;                                         index = j;
                                         break;                                         break;
Line 348 
Line 328 
                                                                                         superproperty.getQualifier(i);                                                                                         superproperty.getQualifier(i);
                                         const CIMName 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)
                                         {                                         {
                                                 subproperty.addQualifier(superClassQualifier);                                                 subproperty.addQualifier(superClassQualifier);
   
                                         }                                         }
                                         */                                         */
                                         for (Uint32 j = 0, m = subproperty.getQualifierCount();                                         for (Uint32 j = 0, m = subproperty.getQualifierCount();
Line 370 
Line 350 
                                                 subproperty.addQualifier(superClassQualifier);                                                 subproperty.addQualifier(superClassQualifier);
                                         }                                         }
                                         /*                                         /*
                                         if ((index = subproperty.findQualifier(name)) == PEG_NOT_FOUND)                      if ((index = subproperty.findQualifier(name)) ==
                           PEG_NOT_FOUND)
                                         {                                         {
                                                 subproperty.addQualifier(superClassQualifier);                                                 subproperty.addQualifier(superClassQualifier);
                                         }                                         }
Line 391 
Line 372 
  
                         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 419 
Line 404 
                         /**********************  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 438 
Line 422 
                                 _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 463 
Line 448 
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 // 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,               Resolver::resolveProperty(
                         nameSpace, false, true);                   _properties[i], context, nameSpace, false, true);
                     _properties[i].setClassOrigin(getClassName());                     _properties[i].setClassOrigin(getClassName());
                     _properties[i].setPropagated(false);                     _properties[i].setPropagated(false);
                 }                 }
Line 478 
Line 462 
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
  
                 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 503 
Line 491 
     const CIMPropertyList& propertyList) const     const CIMPropertyList& propertyList) const
 { {
  
     // Create the new instance      // Create the new instance representation
     CIMInstance newInstance(_reference.getClassName());      CIMInstanceRep* newInstanceRep = new CIMInstanceRep(
           CIMObjectPath(String::EMPTY,
                         CIMNamespaceName(),
                         _reference.getClassName()));
  
     // Copy qualifiers if required     // Copy qualifiers if required
     if (includeQualifiers)     if (includeQualifiers)
     {     {
         for (Uint32 i = 0 ; i < getQualifierCount() ; i++)         for (Uint32 i = 0 ; i < getQualifierCount() ; i++)
         {         {
             newInstance.addQualifier(getQualifier(i).clone());              newInstanceRep->_qualifiers.add(getQualifier(i).clone());
         }         }
     }     }
  
       newInstanceRep->_properties.reserveCapacity(_properties.size());
   
     // Copy Properties     // Copy Properties
     for (Uint32 i = 0 ; i < _properties.size() ; i++)     for (Uint32 i = 0 ; i < _properties.size() ; i++)
     {     {
         CIMConstProperty p = getProperty(i);          CIMConstProperty cp = getProperty(i);
         CIMName name = p.getName();          CIMName name = cp.getName();
         Array<CIMName> pl = propertyList.getPropertyNameArray();         Array<CIMName> pl = propertyList.getPropertyNameArray();
         if (propertyList.isNull() || Contains(pl, name))         if (propertyList.isNull() || Contains(pl, name))
         {         {
             CIMProperty p = getProperty(i).clone();              CIMProperty p;
             if (!includeQualifiers && p.getQualifierCount() != 0)  
             {              if (includeQualifiers)
                 for (Uint32 j = 0 ; j < getQualifierCount() ; j++)  
                 {                 {
                     p.removeQualifier(i - 1);                  p = getProperty(i).clone();
                 }                 }
               else
               {
                   p = CIMProperty(cp.getName(),
                                   cp.getValue(),
                                   cp.getArraySize(),
                                   cp.getReferenceClassName(),
                                   cp.getClassOrigin());
             }             }
   
               // Delete class origin attribute if required
             if (!includeClassOrigin)             if (!includeClassOrigin)
             {             {
                 p.setClassOrigin(CIMName());                 p.setClassOrigin(CIMName());
             }             }
             newInstance.addProperty(p);  
  
             // Delete class origin attribute if required              newInstanceRep->_properties.append(p);
         }         }
     }     }
  
     return(newInstance);      // Create new CIMInstance from CIMInstanceRep
       CIMInstance newInstance(newInstanceRep);
   
       return newInstance;
 } }
  
 void CIMClassRep::toXml(Buffer& out) const void CIMClassRep::toXml(Buffer& out) const
Line 556 
Line 559 
  
     out << STRLIT(">\n");     out << STRLIT(">\n");
  
     // Qualifiers:      // Append Class Qualifiers:
  
     _qualifiers.toXml(out);     _qualifiers.toXml(out);
  
     // Parameters:      // Append Property definitions:
  
     for (Uint32 i = 0, n = _properties.size(); i < n; i++)     for (Uint32 i = 0, n = _properties.size(); i < n; i++)
         XmlWriter::appendPropertyElement(out, _properties[i]);         XmlWriter::appendPropertyElement(out, _properties[i]);
  
     // Methods:      // Append Method definitions:
  
     for (Uint32 i = 0, n = _methods.size(); i < n; i++)     for (Uint32 i = 0, n = _methods.size(); i < n; i++)
         XmlWriter::appendMethodElement(out, _methods[i]);         XmlWriter::appendMethodElement(out, _methods[i]);
Line 574 
Line 577 
  
     out << STRLIT("</CLASS>\n");     out << STRLIT("</CLASS>\n");
 } }
   
 /** toMof prepares an 8-bit string with the MOF for the class. /** toMof prepares an 8-bit string with the MOF for the class.
     The BNF for this is:     The BNF for this is:
     <pre>     <pre>
Line 613 
Line 617 
         // Generate MOF if this property not propagated         // 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
           // The inital "false" indicates to format as property declaration.
         if (!_properties[i].getPropagated())         if (!_properties[i].getPropagated())
             MofWriter::appendPropertyElement(out, _properties[i]);              MofWriter::appendPropertyElement(true, out, _properties[i]);
     }     }
  
     // Format the Methods:  for non-propagated methods     // Format the Methods:  for non-propagated methods
Line 629 
Line 634 
     out << STRLIT("\n};\n");     out << STRLIT("\n};\n");
 } }
  
   
 CIMClassRep::CIMClassRep()  
 {  
 }  
   
 CIMClassRep::CIMClassRep(const CIMClassRep& x) : CIMClassRep::CIMClassRep(const CIMClassRep& x) :
     CIMObjectRep(x),     CIMObjectRep(x),
     _superClassName(x._superClassName)     _superClassName(x._superClassName)
Line 653 
Line 653 
     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 661 
Line 667 
     //     //
  
     {     {
         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 694 
Line 700 
     {     {
         CIMConstProperty property = getProperty(i);         CIMConstProperty property = getProperty(i);
  
         Uint32 index;          if (CIMPropertyInternal::isKeyProperty(property))
         if ((index = property.findQualifier(          {
             CIMNameUnchecked("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(  
             CIMNameUnchecked("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.71.2.1  
changed lines
  Added in v.1.80

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2