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

Diff for /pegasus/src/Pegasus/ControlProviders/InteropProvider/InteropProvider.cpp between version 1.66.4.1 and 1.69.4.2

version 1.66.4.1, 2007/04/04 11:04:46 version 1.69.4.2, 2008/02/22 23:13:52
Line 27 
Line 27 
 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // 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. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 // //
 //==============================================================================  //=============================================================================
   //
   //%////////////////////////////////////////////////////////////////////////////
  
 /////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
 //  Interop Provider - This provider services those classes from the //  Interop Provider - This provider services those classes from the
Line 123 
Line 125 
         opClass != PEGASUS_CLASSNAME_PG_ELEMENTCONFORMSTOPROFILE)         opClass != PEGASUS_CLASSNAME_PG_ELEMENTCONFORMSTOPROFILE)
     {     {
         AutoMutex mut(interopMut);         AutoMutex mut(interopMut);
         return cimomHandle.getInstance(context, opNamespace,          CIMInstance gotInstance = cimomHandle.getInstance(
             instanceName, false, false, false, propertyList);                                           context,
                                            opNamespace,
                                            instanceName,
                                            false,
                                            false,
                                            false,
                                            propertyList);
           PEG_METHOD_EXIT();
           return gotInstance;
     }     }
  
     // Create reference from host, namespace, class components of     // Create reference from host, namespace, class components of
Line 242 
Line 252 
                 ref.getNameSpace());                 ref.getNameSpace());
             break;             break;
         }         }
           case PG_ELEMENTCONFORMSTOPROFILE_RP_RP:
           {
               instances = enumElementConformsToProfileRPRPInstances(
                   context,
                   ref.getNameSpace());
               break;
           }
         case PG_SUBPROFILEREQUIRESPROFILE:         case PG_SUBPROFILEREQUIRESPROFILE:
         {         {
             instances = enumSubProfileRequiresProfileInstances();             instances = enumSubProfileRequiresProfileInstances();
Line 301 
Line 318 
 // role and resultRole parameter of an associators/associatorNames operation. // role and resultRole parameter of an associators/associatorNames operation.
 // //
 bool InteropProvider::validAssocClassForObject( bool InteropProvider::validAssocClassForObject(
     const CIMName & assocClass, const CIMName & originClass,      const OperationContext & context,
       const CIMName & assocClass,
       const CIMObjectPath & objectName,
     const CIMNamespaceName & opNamespace,     const CIMNamespaceName & opNamespace,
     String & originProperty, String & targetProperty)      String & originProperty,
       String & targetProperty)
 { {
     PEG_METHOD_ENTER(TRC_CONTROLPROVIDER,     PEG_METHOD_ENTER(TRC_CONTROLPROVIDER,
         "InteropProvider::validAssocClassForObject()");         "InteropProvider::validAssocClassForObject()");
     TARGET_CLASS assocClassEnum = translateClassInput(assocClass);     TARGET_CLASS assocClassEnum = translateClassInput(assocClass);
     TARGET_CLASS originClassEnum;     TARGET_CLASS originClassEnum;
       CIMName originClass = objectName.getClassName();
     // If the association class is PG_ElementConformsToProfile, we'll have to     // If the association class is PG_ElementConformsToProfile, we'll have to
     // do some special processing in case the origin instance for the operation     // do some special processing in case the origin instance for the operation
     // is managed by another provider.     // is managed by another provider.
Line 349 
Line 370 
             }             }
  
             if(!found)             if(!found)
               {
                   PEG_METHOD_EXIT();
                 return false;                 return false;
         }         }
     }     }
       }
     else     else
     {     {
         // Otherwise, just get the enum value representing the origin class         // Otherwise, just get the enum value representing the origin class
Line 362 
Line 386 
     CIMName expectedTargetRole;     CIMName expectedTargetRole;
     CIMName expectedOriginRole;     CIMName expectedOriginRole;
  
       Array<CIMName> propNames;
       String profileName;
       CIMPropertyList propertyList;
       CIMInstance tmpInstance;
       Uint32 index;
       propNames.clear();
   
     //     //
     // Set the target and origin role values. Note that if these values are     // Set the target and origin role values. Note that if these values are
     // not set following the switch block, that implies that the origin class     // not set following the switch block, that implies that the origin class
Line 409 
Line 440 
                   ELEMENTCONFORMSTOPROFILE_PROPERTY_MANAGEDELEMENT;                   ELEMENTCONFORMSTOPROFILE_PROPERTY_MANAGEDELEMENT;
           }           }
           break;           break;
         case PG_ELEMENTCONFORMSTOPROFILE_RP_RP:
             propNames.append(CIMName("RegisteredName"));
             propertyList = CIMPropertyList(propNames);
             tmpInstance = localGetInstance(
                 context,
                 objectName,
                 propertyList);
             index = tmpInstance.findProperty("RegisteredName");
             if (index != PEG_NOT_FOUND)
             {
                 const CIMValue &tmpVal =
                     tmpInstance.getProperty(index).getValue();
                 if (!tmpVal.isNull())
                 {
                     tmpVal.get(profileName);
                 }
             }
             if (String::compareNoCase(profileName, String("SMI-S")) == 0)
             {
                 expectedTargetRole =
                     ELEMENTCONFORMSTOPROFILE_PROPERTY_MANAGEDELEMENT;
                 expectedOriginRole =
                     ELEMENTCONFORMSTOPROFILE_PROPERTY_CONFORMANTSTANDARD;
             }
             else
             {
                 expectedTargetRole =
                     ELEMENTCONFORMSTOPROFILE_PROPERTY_CONFORMANTSTANDARD;
                 expectedOriginRole =
                     ELEMENTCONFORMSTOPROFILE_PROPERTY_MANAGEDELEMENT;
             }
             break;
       case PG_SUBPROFILEREQUIRESPROFILE:       case PG_SUBPROFILEREQUIRESPROFILE:
           if(originClassEnum == PG_REGISTEREDPROFILE)           if(originClassEnum == PG_REGISTEREDPROFILE)
           {           {
Line 421 
Line 484 
               expectedOriginRole = PROPERTY_DEPENDENT;               expectedOriginRole = PROPERTY_DEPENDENT;
           }           }
           break;           break;
         case PG_REFERENCEDPROFILE:
             if (originClassEnum == PG_REGISTEREDSUBPROFILE)
             {
                 expectedTargetRole = PROPERTY_ANTECEDENT;
                 expectedOriginRole = PROPERTY_DEPENDENT;
             }
             else if (originClassEnum == PG_REGISTEREDPROFILE)
             {
                 if ((targetProperty.size() != 0) &&
                     (originProperty.size() != 0) &&
                     String::equalNoCase(targetProperty, originProperty))
                 {
                     return false;
                 }
                 if (targetProperty.size() != 0)
                 {
                     if (!(String::equalNoCase(targetProperty, "Antecedent") ||
                         String::equalNoCase(targetProperty, "Dependent") ))
                     {
                         return false;
                     }
                 }
                 if (originProperty.size() != 0)
                 {
                     if (!(String::equalNoCase(originProperty, "Antecedent") ||
                         String::equalNoCase(originProperty, "Dependent") ))
                     {
                         return false;
                     }
                 }
                 if (String::equalNoCase(originProperty, "Antecedent") &&
                     targetProperty.size() == 0)
                 {
                     targetProperty = String("Dependent");
                 }
                 if (String::equalNoCase(originProperty, "Dependent") &&
                     targetProperty.size() == 0)
                 {
                     targetProperty = String("Antecedent");
                 }
                 if (String::equalNoCase(targetProperty, "Antecedent") &&
                     originProperty.size() == 0)
                 {
                     originProperty = String("Dependent");
                 }
                 if (String::equalNoCase(targetProperty, "Dependent") &&
                     originProperty.size() == 0)
                 {
                     originProperty = String("Antecedent");
                 }
                 return true;
             }
             break;
       case PG_ELEMENTSOFTWAREIDENTITY:       case PG_ELEMENTSOFTWAREIDENTITY:
           if(originClassEnum == PG_SOFTWAREIDENTITY)           if(originClassEnum == PG_SOFTWAREIDENTITY)
           {           {
Line 541 
Line 657 
     CIMNamespaceName originNamespace(objectName.getNameSpace());     CIMNamespaceName originNamespace(objectName.getNameSpace());
  
     // Check that the association traversal request is valid     // Check that the association traversal request is valid
     if(validAssocClassForObject(assocClass, objectName.getClassName(),      if (validAssocClassForObject(
         originNamespace, originProperty, targetProperty))          context,
           assocClass,
           objectName,
           originNamespace,
           originProperty,
           targetProperty))
     {     {
         // retrieve all of the association class instances         // retrieve all of the association class instances
         Array<CIMInstance> localInstances = localEnumerateInstances(context,         Array<CIMInstance> localInstances = localEnumerateInstances(context,
Line 737 
Line 858 
         //         //
         Array<CIMNamespaceName> namespaceNames =         Array<CIMNamespaceName> namespaceNames =
             repository->enumerateNameSpaces();             repository->enumerateNameSpaces();
           // get the PG_ElementConformstoProfile class without the qualifiers
           // and then add just the required ASSOCIATION qualifier, so that
           // resolveclass doesn't fail for the test/EmbeddedInstance/Dynamic
           // namespace, which uses the CIM25 schema that doesn't include any
           // of the new qualifiers added to this class in later versions of
           // the CIMSchema.
         CIMClass conformsClass = repository->getClass(         CIMClass conformsClass = repository->getClass(
             PEGASUS_NAMESPACENAME_INTEROP,             PEGASUS_NAMESPACENAME_INTEROP,
             PEGASUS_CLASSNAME_PG_ELEMENTCONFORMSTOPROFILE);              PEGASUS_CLASSNAME_PG_ELEMENTCONFORMSTOPROFILE, true, false);
           conformsClass.addQualifier(CIMQualifier(CIMName("ASSOCIATION"),
                                 CIMValue(true)));
         CIMClass profileClass = repository->getClass(         CIMClass profileClass = repository->getClass(
             PEGASUS_NAMESPACENAME_INTEROP,             PEGASUS_NAMESPACENAME_INTEROP,
             PEGASUS_CLASSNAME_PG_REGISTEREDPROFILE);              PEGASUS_CLASSNAME_PG_REGISTEREDPROFILE, true, false);
         for(Uint32 i = 0, n = namespaceNames.size(); i < n; ++i)         for(Uint32 i = 0, n = namespaceNames.size(); i < n; ++i)
         {         {
             // Check if the PG_ElementConformsToProfile class is present             // Check if the PG_ElementConformsToProfile class is present
             CIMNamespaceName & currentNamespace = namespaceNames[i];             CIMNamespaceName & currentNamespace = namespaceNames[i];
   
             CIMClass tmpCimClass;             CIMClass tmpCimClass;
             CIMClass tmpPgClass;             CIMClass tmpPgClass;
             CIMClass tmpPgProfileClass;             CIMClass tmpPgProfileClass;
Line 788 
Line 916 
             {             {
                 if(tmpPgClass.isUninitialized())                 if(tmpPgClass.isUninitialized())
                 {                 {
                       CIMClass newclass = conformsClass.clone();
                     CIMObjectPath newPath = conformsClass.getPath();                     CIMObjectPath newPath = conformsClass.getPath();
                     newPath.setNameSpace(currentNamespace);                     newPath.setNameSpace(currentNamespace);
                     conformsClass.setPath(newPath);                      newclass.setPath(newPath);
                     repository->createClass(currentNamespace,                     repository->createClass(currentNamespace,
                         conformsClass);                          newclass);
                 }                 }
                 if(tmpPgProfileClass.isUninitialized())                 if(tmpPgProfileClass.isUninitialized())
                 {                 {
                     CIMObjectPath newPath = conformsClass.getPath();                      CIMClass newclass = profileClass.clone();
                       CIMObjectPath newPath = profileClass.getPath();
                     newPath.setNameSpace(currentNamespace);                     newPath.setNameSpace(currentNamespace);
                     conformsClass.setPath(newPath);                      newclass.setPath(newPath);
                     repository->createClass(currentNamespace,                     repository->createClass(currentNamespace,
                         profileClass);                          newclass);
                 }                 }
             }             }
         }         }
Line 815 
Line 945 
 } }
  
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END
   
 // END OF FILE // END OF FILE


Legend:
Removed from v.1.66.4.1  
changed lines
  Added in v.1.69.4.2

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2