Ejemplo n.º 1
0
    /**
      Lookup the instance representation, given keys provided from CIMOM

      \param[in]    keys   SCXInstance with property keys set
      \returns             Pointer to located instance

      \throws              SCXInvalidArgumentException
      \throws              SCXInternalErrorException
      \throws              SCXCIMInstanceNotFound   The instance with given keys cannot be found

      This method knows which the key properties of the entity are and returns
      pointer to that item if found.

    */
    SCXCoreLib::SCXHandle<SCXSystemLib::CPUInstance> CPUProvider::FindInstance(const SCXInstance& keys) const // private
    {
        // Start by extracting all key properties
        const SCXProperty& nameprop = GetKeyRef(L"Name", keys);

        for(size_t i=0; i<m_cpus->Size(); i++)
        {
            SCXCoreLib::SCXHandle<SCXSystemLib::CPUInstance> testinst = m_cpus->GetInstance(i);

            // Compare key values of input args and the current instance
            if (testinst->GetProcName() == nameprop.GetStrValue())
            {
                // Match
                return testinst;
            }
        }

        // As last resort, check if we the request is for the _Total instance
        if (m_cpus->GetTotalInstance() != 0 )
        {
            SCXCoreLib::SCXHandle<SCXSystemLib::CPUInstance> testinst = m_cpus->GetTotalInstance();

            if (testinst->GetProcName() == nameprop.GetStrValue())
            {
                return testinst;
            }
        }

        throw SCXCIMInstanceNotFound(keys.DumpString(), SCXSRCLOCATION);
    }
Ejemplo n.º 2
0
    /**
       Add a SCXInstance with the name property set frmo the CPUInstance to the collection

       \param[in]   cpuinst  CPU instance to get data from
       \param[out]  inst     Instance to add keys to

       \throws      SCXInvalidArgumentException - The instance can not be converted to a CPUInstance

       This method contains knowledge on which are the key fields for the class.
       The key properties are defined in the MOF file.

    */
    void CPUProvider::AddKeys(SCXCoreLib::SCXHandle<SCXSystemLib::CPUInstance> cpuinst, SCXInstance &inst) // private
    {
        SCX_LOGTRACE(m_log, L"CPUProvider AddKeys()");

        if (cpuinst == NULL)
        {
            throw SCXInvalidArgumentException(L"einst", L"Not a CPUInstance", SCXSRCLOCATION);
        }

        SCXProperty name_prop(L"Name", cpuinst->GetProcName());
        inst.AddKey(name_prop);
    }