⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interopprovider.cpp

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        case PG_HOSTEDACCESSPOINT:        {            instances = enumHostedAccessPointInstances();            break;        }        default:            PEG_METHOD_EXIT();            throw CIMNotSupportedException(className.getString() +              " not supported by Interop Provider enumerate");    }    // Filter and deliver the resulting instances    for (Uint32 i = 0 ; i < instances.size() ; i++)    {        normalizeInstance(instances[i], ref, false,            false, propertyList);    }    PEG_METHOD_EXIT();    return instances;}//// Class that determines whether or not the origin class in an association// operation is valid for the given association class, and also determines// the origin and target "roles". These values generally correspond to the// role and resultRole parameter of an associators/associatorNames operation.//bool InteropProvider::validAssocClassForObject(    const CIMName & assocClass, const CIMName & originClass,    const CIMNamespaceName & opNamespace,    String & originProperty, String & targetProperty){    PEG_METHOD_ENTER(TRC_CONTROLPROVIDER,        "InteropProvider::validAssocClassForObject()");    TARGET_CLASS assocClassEnum = translateClassInput(assocClass);    TARGET_CLASS originClassEnum;    // If the association class is PG_ElementConformsToProfile, we'll have to    // do some special processing in case the origin instance for the operation    // is managed by another provider.    if(assocClassEnum == PG_ELEMENTCONFORMSTOPROFILE)    {        // Test if the origin is an element managed by another provider        // that has implemented a registered profile.        if(opNamespace != PEGASUS_NAMESPACENAME_INTEROP ||            (originClass != PEGASUS_CLASSNAME_PG_REGISTEREDPROFILE &&            originClass != PEGASUS_CLASSNAME_PG_OBJECTMANAGER))        {            //            // Search the cached conformingElements list for the originClass,            // returning false if it is not found            //            bool found = false;            PEGASUS_ASSERT(conformingElements.size() ==                elementNamespaces.size());            for(Uint32 i = 0, n = conformingElements.size(); i < n; ++i)            {                CIMNameArray & elementList = conformingElements[i];                CIMNamespaceArray & namespaceList = elementNamespaces[i];                PEGASUS_ASSERT(elementList.size() == namespaceList.size());                for(Uint32 j = 0, m = elementList.size(); j < m; ++j)                {                    CIMName & curElement = elementList[j];                    if((curElement == originClass ||                      curElement.getString().find(PEGASUS_DYNAMIC) == 0) &&                      opNamespace == namespaceList[j])                    {                        found = true;                        break;                    }                }                if(found)                    break;            }            if(!found)                return false;        }    }    else    {        // Otherwise, just get the enum value representing the origin class        // for this operation        originClassEnum = translateClassInput(originClass);    }    CIMName expectedTargetRole;    CIMName expectedOriginRole;    //    // 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    // is not valid for the supplied association class.    //    switch(assocClassEnum)    {      case PG_NAMESPACEINMANAGER:          if(originClassEnum == PG_OBJECTMANAGER)          {              expectedTargetRole = PROPERTY_DEPENDENT;              expectedOriginRole = PROPERTY_ANTECEDENT;          }          else if(originClassEnum == PG_NAMESPACE)          {              expectedTargetRole = PROPERTY_ANTECEDENT;              expectedOriginRole = PROPERTY_DEPENDENT;          }          break;      case PG_COMMMECHANISMFORMANAGER:          if(originClassEnum == PG_OBJECTMANAGER)          {              expectedTargetRole = PROPERTY_DEPENDENT;              expectedOriginRole = PROPERTY_ANTECEDENT;          }          else if(originClassEnum == PG_CIMXMLCOMMUNICATIONMECHANISM)          {              expectedTargetRole = PROPERTY_ANTECEDENT;              expectedOriginRole = PROPERTY_DEPENDENT;          }          break;      case PG_ELEMENTCONFORMSTOPROFILE:          if(originClass.equal(PEGASUS_CLASSNAME_PG_REGISTEREDPROFILE))          {              expectedTargetRole =                  ELEMENTCONFORMSTOPROFILE_PROPERTY_MANAGEDELEMENT;              expectedOriginRole =                  ELEMENTCONFORMSTOPROFILE_PROPERTY_CONFORMANTSTANDARD;          }          else          {              expectedTargetRole =                  ELEMENTCONFORMSTOPROFILE_PROPERTY_CONFORMANTSTANDARD;              expectedOriginRole =                  ELEMENTCONFORMSTOPROFILE_PROPERTY_MANAGEDELEMENT;          }          break;      case PG_SUBPROFILEREQUIRESPROFILE:          if(originClassEnum == PG_REGISTEREDPROFILE)          {              expectedTargetRole = PROPERTY_DEPENDENT;              expectedOriginRole = PROPERTY_ANTECEDENT;          }          else if(originClassEnum == PG_REGISTEREDSUBPROFILE)          {              expectedTargetRole = PROPERTY_ANTECEDENT;              expectedOriginRole = PROPERTY_DEPENDENT;          }          break;      case PG_ELEMENTSOFTWAREIDENTITY:          if(originClassEnum == PG_SOFTWAREIDENTITY)          {              expectedTargetRole = PROPERTY_DEPENDENT;              expectedOriginRole = PROPERTY_ANTECEDENT;          }          else if(originClassEnum == PG_REGISTEREDPROFILE ||              originClassEnum == PG_REGISTEREDSUBPROFILE)          {              expectedTargetRole = PROPERTY_ANTECEDENT;              expectedOriginRole = PROPERTY_DEPENDENT;          }          break;      case PG_INSTALLEDSOFTWAREIDENTITY:          if(originClassEnum == PG_SOFTWAREIDENTITY)          {              expectedTargetRole = INSTALLEDSOFTWAREIDENTITY_PROPERTY_SYSTEM;              expectedOriginRole =                  INSTALLEDSOFTWAREIDENTITY_PROPERTY_INSTALLEDSOFTWARE;          }          else if(originClassEnum == PG_COMPUTERSYSTEM)          {              expectedTargetRole =                  INSTALLEDSOFTWAREIDENTITY_PROPERTY_INSTALLEDSOFTWARE;              expectedOriginRole = INSTALLEDSOFTWAREIDENTITY_PROPERTY_SYSTEM;          }          break;      case PG_HOSTEDACCESSPOINT:          if(originClassEnum == PG_COMPUTERSYSTEM)          {              expectedTargetRole = PROPERTY_DEPENDENT;              expectedOriginRole = PROPERTY_ANTECEDENT;          }          else if(originClassEnum == PG_CIMXMLCOMMUNICATIONMECHANISM)          {              expectedTargetRole = PROPERTY_ANTECEDENT;              expectedOriginRole = PROPERTY_DEPENDENT;          }      case PG_HOSTEDOBJECTMANAGER:          if(originClassEnum == PG_COMPUTERSYSTEM)          {              expectedTargetRole = PROPERTY_DEPENDENT;              expectedOriginRole = PROPERTY_ANTECEDENT;          }          else if(originClassEnum == PG_OBJECTMANAGER)          {              expectedTargetRole = PROPERTY_ANTECEDENT;              expectedOriginRole = PROPERTY_DEPENDENT;          }          break;      default:          break;    }    //    // The rest of this method checks to see if target role and origin roles    // were found for the association and origin class combination and, if    // found, checks against the input target and origin roles if provided.    // Failure for any of these tests points to an invalid association    // traversal request.    //    if(expectedTargetRole.isNull() ||        expectedOriginRole.isNull())    {        PEG_METHOD_EXIT();        return false;    }    if(targetProperty.size() == 0)    {        targetProperty = expectedTargetRole.getString();    }    else if(!expectedTargetRole.equal(targetProperty))    {        PEG_METHOD_EXIT();        return false;    }    if(originProperty.size() == 0)    {        originProperty = expectedOriginRole.getString();    }    else if(!expectedOriginRole.equal(originProperty))    {        PEG_METHOD_EXIT();        return false;    }        PEG_METHOD_EXIT();    return true;}//// Local version of the references operation. It validates the input// parameters, setting the origin and target property values if not set// already, and then performs an enumeration on the association class. It then// filters the results of that enumeration to see if one of the reference// properties matches the objectName parameter passed into the method. If so,// then it is added to the array of association instances to be returned.//Array<CIMInstance> InteropProvider::localReferences(    const OperationContext & context,    const CIMObjectPath & objectName,    const CIMName & assocClass,    String & originProperty,    String & targetProperty,    const CIMPropertyList & propertyList,    const CIMName & targetClass){    PEG_METHOD_ENTER(TRC_CONTROLPROVIDER,        "InteropProvider::localReferences()");    Array<CIMInstance> instances;    CIMName originClass = objectName.getClassName();    Array<CIMName> targetSubclasses;    CIMNamespaceName lastTargetNamespace;    CIMNamespaceName originNamespace(objectName.getNameSpace());    // Check that the association traversal request is valid    if(validAssocClassForObject(assocClass, objectName.getClassName(),        originNamespace, originProperty, targetProperty))    {        // retrieve all of the association class instances        Array<CIMInstance> localInstances = localEnumerateInstances(context,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -