00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 #include "OW_config.h"
00031 #include "OW_FTABLERef.hpp"
00032 #include "OW_NPIInstanceProviderProxy.hpp"
00033 #include "NPIExternal.hpp"
00034 #include "OW_CIMClass.hpp"
00035 #include "OW_CIMException.hpp"
00036 #include "OW_Format.hpp"
00037 #include "OW_NPIProviderIFCUtils.hpp"
00038 #include "OW_Logger.hpp"
00039 #include "OW_ResultHandlerIFC.hpp"
00040 
00041 namespace OW_NAMESPACE
00042 {
00043 
00044 
00045 #define DDD(X) // X
00046 using namespace WBEMFlags;
00047 namespace
00048 {
00049    const String COMPONENT_NAME("ow.provider.npi.ifc");
00050 }
00051 
00053 NPIInstanceProviderProxy::~NPIInstanceProviderProxy()
00054 {
00055 }
00057 void
00058 NPIInstanceProviderProxy::enumInstanceNames(
00059       const ProviderEnvironmentIFCRef& env,
00060       const String& ns,
00061       const String& className,
00062       CIMObjectPathResultHandlerIFC& result,
00063       const CIMClass& cimClass )
00064 {
00065       OW_LOG_DEBUG(env->getLogger(COMPONENT_NAME), "NPIInstanceProviderProxy::enumInstanceNames()");
00066       if (m_ftable->fp_enumInstanceNames!= NULL)
00067       {
00068       ::NPIHandle _npiHandle = { 0, 0, 0, 0, m_ftable->npicontext};
00069          NPIHandleFreer nhf(_npiHandle);
00070          ProviderEnvironmentIFCRef env2(env);
00071          _npiHandle.thisObject = static_cast<void *>(&env2);
00072          
00073          
00074          CIMClass cimClass2(cimClass);
00075          ::CIMClass _cc = { static_cast<void *> (&cimClass2)};
00076          CIMObjectPath cop(className, ns);
00077          ::CIMObjectPath _cop = { static_cast<void *> (&cop)};
00078          ::Vector v =
00079             m_ftable->fp_enumInstanceNames(&_npiHandle,_cop,true,_cc);
00080          if (_npiHandle.errorOccurred)
00081          {
00082             OW_THROWCIMMSG(CIMException::FAILED,
00083                _npiHandle.providerError);
00084          }
00085          ::CIMObjectPath my_cop;
00086          for (int i=0,n=VectorSize(&_npiHandle,v); i < n; i++)
00087          {
00088             my_cop.ptr = _VectorGet(&_npiHandle,v,i);
00089             CIMObjectPath ow_cop(*
00090                static_cast<CIMObjectPath *>(my_cop.ptr) );
00091             ow_cop.setClassName(cimClass.getName());
00092       result.handle(ow_cop);
00093          }
00094       }
00095       else
00096       {
00097          OW_THROWCIMMSG(CIMException::FAILED, "Provider does not support enumInstanceNames");
00098       }
00099 }
00101 void
00102 NPIInstanceProviderProxy::enumInstances(
00103    const ProviderEnvironmentIFCRef& env,
00104    const String& ns,
00105    const String& className,
00106    CIMInstanceResultHandlerIFC& result,
00107    ELocalOnlyFlag localOnly,
00108    EDeepFlag deep,
00109    EIncludeQualifiersFlag includeQualifiers,
00110    EIncludeClassOriginFlag includeClassOrigin,
00111    const StringArray* propertyList,
00112    const CIMClass& requestedClass,
00113    const CIMClass& cimClass )
00114 {
00115    OW_LOG_DEBUG(env->getLogger(COMPONENT_NAME), "NPIInstanceProviderProxy::enumInstances()");
00116    if (m_ftable->fp_enumInstances == NULL)
00117    {
00118       OW_THROWCIMMSG(CIMException::FAILED, "Provider does not support enumInstances");
00119    }
00120    ::NPIHandle _npiHandle = { 0, 0, 0, 0, m_ftable->npicontext};
00121    NPIHandleFreer nhf(_npiHandle);
00122    ProviderEnvironmentIFCRef env2(env);
00123    _npiHandle.thisObject = static_cast<void *>(&env2);
00124    
00125    
00126    CIMClass cimClass2(cimClass);
00127    ::CIMClass _cc = { static_cast<void *> (&cimClass2)};
00128    CIMObjectPath cop(className, ns);
00129    ::CIMObjectPath _cop = { static_cast<void *> (&cop)};
00130    int de = deep;
00131    int lo = localOnly;
00132    ::Vector v =
00133    m_ftable->fp_enumInstances(&_npiHandle, _cop, de, _cc, lo);
00134    if (_npiHandle.errorOccurred)
00135    {
00136       OW_THROWCIMMSG(CIMException::FAILED,
00137       _npiHandle.providerError);
00138    }
00139    ::CIMInstance my_inst;
00140    for (int i=0,n=VectorSize(&_npiHandle,v); i < n; i++)
00141    {
00142       my_inst.ptr = _VectorGet(&_npiHandle,v,i);
00143       CIMInstance ow_inst(*
00144       static_cast<CIMInstance *>(my_inst.ptr) );
00145       ow_inst.setClassName(cimClass.getName());
00146       result.handle(ow_inst.clone(localOnly,deep,includeQualifiers,
00147          includeClassOrigin,propertyList,requestedClass,cimClass));
00148    }
00149 }
00150    
00152 CIMInstance
00153 NPIInstanceProviderProxy::getInstance(
00154    const ProviderEnvironmentIFCRef &env,
00155    const String& ns,
00156    const CIMObjectPath& instanceName,
00157    ELocalOnlyFlag localOnly,
00158    EIncludeQualifiersFlag includeQualifiers,
00159    EIncludeClassOriginFlag includeClassOrigin,
00160    const StringArray* propertyList,
00161    const CIMClass& cimClass)
00162 {
00163    CIMInstance rval(CIMNULL);
00164    OW_LOG_DEBUG(env->getLogger(COMPONENT_NAME), "NPIInstanceProviderProxy::getInstance()");
00165    if (m_ftable->fp_getInstance != NULL)
00166    {
00167       ::NPIHandle _npiHandle = { 0, 0, 0, 0, m_ftable->npicontext};
00168       NPIHandleFreer nhf(_npiHandle);
00169       ProviderEnvironmentIFCRef env2(env);
00170       _npiHandle.thisObject = static_cast<void *>(&env2);
00171       
00172       
00173       CIMClass cimClass2(cimClass);
00174       ::CIMClass _cc = { static_cast<void *> (&cimClass2)};
00175       CIMObjectPath cop(instanceName);
00176       cop.setNameSpace(ns);
00177       ::CIMObjectPath _cop = { static_cast<void *> (&cop)};
00178       int lo = localOnly;
00179       ::CIMInstance my_inst =
00180          m_ftable->fp_getInstance(&_npiHandle, _cop, _cc, lo);
00181       if (_npiHandle.errorOccurred)
00182       {
00183          OW_THROWCIMMSG(CIMException::FAILED,
00184             _npiHandle.providerError);
00185       }
00186       CIMInstance ow_inst(*
00187          static_cast<CIMInstance *>(my_inst.ptr));
00188       ow_inst.setClassName(cimClass.getName());
00189       rval = ow_inst;
00190       rval = rval.clone(localOnly,includeQualifiers,includeClassOrigin,propertyList);
00191    }
00192    else
00193    {
00194       OW_THROWCIMMSG(CIMException::FAILED, "Provider does not support getInstance");
00195    }
00196    return rval;
00197 }
00198 #ifndef OW_DISABLE_INSTANCE_MANIPULATION
00199 
00200 CIMObjectPath
00201 NPIInstanceProviderProxy::createInstance(
00202    const ProviderEnvironmentIFCRef &env,
00203    const String& ns,
00204    const CIMInstance& cimInstance)
00205 {
00206       CIMObjectPath rval(CIMNULL);
00207       OW_LOG_DEBUG(env->getLogger(COMPONENT_NAME), "NPIInstanceProviderProxy::createInstance()");
00208       if (m_ftable->fp_createInstance != NULL)
00209       {
00210       ::NPIHandle _npiHandle = { 0, 0, 0, 0, m_ftable->npicontext};
00211          NPIHandleFreer nhf(_npiHandle);
00212          ProviderEnvironmentIFCRef env2(env);
00213          _npiHandle.thisObject = static_cast<void *>(&env2);
00214          
00215          
00216          CIMInstance cimInstance2(cimInstance);
00217          ::CIMInstance _ci = { static_cast<void *> (&cimInstance2)};
00218          CIMObjectPath cop(ns, cimInstance);
00219          ::CIMObjectPath _cop = { static_cast<void *> (const_cast<CIMObjectPath*>(&cop))};
00220          ::CIMObjectPath _rcop =
00221             m_ftable->fp_createInstance(&_npiHandle, _cop, _ci);
00222          if (_npiHandle.errorOccurred)
00223          {
00224             OW_THROWCIMMSG(CIMException::FAILED,
00225                _npiHandle.providerError);
00226          }
00227          rval = *(static_cast<CIMObjectPath *>(_rcop.ptr) );
00228       }
00229       else
00230       {
00231          OW_THROWCIMMSG(CIMException::FAILED, "Provider does not support createInstance");
00232       }
00233       return rval;
00234 }
00236 void
00237 NPIInstanceProviderProxy::modifyInstance(
00238    const ProviderEnvironmentIFCRef &env,
00239    const String& ns,
00240    const CIMInstance& modifiedInstance,
00241    const CIMInstance& previousInstance,
00242    EIncludeQualifiersFlag includeQualifiers,
00243    const StringArray* propertyList,
00244    const CIMClass& theClass)
00245 {
00246    OW_LOG_DEBUG(env->getLogger(COMPONENT_NAME), "NPIInstanceProviderProxy::modifyInstance()");
00247    if (m_ftable->fp_setInstance != NULL)
00248    {
00249       ::NPIHandle _npiHandle = { 0, 0, 0, 0, m_ftable->npicontext};
00250       NPIHandleFreer nhf(_npiHandle);
00251       ProviderEnvironmentIFCRef env2(env);
00252       _npiHandle.thisObject = static_cast<void *>(&env2);
00253       
00254       
00255       CIMInstance newInst(modifiedInstance.createModifiedInstance(
00256          previousInstance, includeQualifiers, propertyList, theClass));
00257       ::CIMInstance _ci = { static_cast<void *> (&newInst)};
00258       CIMObjectPath cop(ns, modifiedInstance);
00259       ::CIMObjectPath _cop = { static_cast<void *> (&cop)};
00260       m_ftable->fp_setInstance(&_npiHandle, _cop, _ci);
00261       if (_npiHandle.errorOccurred)
00262       {
00263          OW_THROWCIMMSG(CIMException::FAILED,
00264             _npiHandle.providerError);
00265       }
00266    }
00267    else
00268    {
00269       OW_THROWCIMMSG(CIMException::FAILED, "Provider does not support modifyInstance");
00270    }
00271 }
00273 void
00274 NPIInstanceProviderProxy::deleteInstance(
00275    const ProviderEnvironmentIFCRef &env,
00276    const String& ns, const CIMObjectPath& cop)
00277 {
00278    OW_LOG_DEBUG(env->getLogger(COMPONENT_NAME), "NPIInstanceProviderProxy::deleteInstance()");
00279    if (m_ftable->fp_deleteInstance!= NULL)
00280    {
00281       ::NPIHandle _npiHandle = { 0, 0, 0, 0, m_ftable->npicontext};
00282       NPIHandleFreer nhf(_npiHandle);
00283       ProviderEnvironmentIFCRef env2(env);
00284       _npiHandle.thisObject = static_cast<void *>(&env2);
00285       
00286       
00287       CIMObjectPath copWithNS(cop);
00288       copWithNS.setNameSpace(ns);
00289       ::CIMObjectPath _cop = { static_cast<void *> (&copWithNS)};
00290       m_ftable->fp_deleteInstance(&_npiHandle, _cop);
00291       if (_npiHandle.errorOccurred)
00292       {
00293          OW_THROWCIMMSG(CIMException::FAILED,
00294             _npiHandle.providerError);
00295       }
00296    }
00297    else
00298    {
00299       OW_THROWCIMMSG(CIMException::FAILED, "Provider does not support deleteInstance");
00300    }
00301 }
00302 #endif // #ifndef OW_DISABLE_INSTANCE_MANIPULATION
00303 
00304 } 
00305