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 
00035 #include "OW_config.h"
00036 #include "OW_CppInstanceProviderIFC.hpp"
00037 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00038 #include "OW_CppAssociatorProviderIFC.hpp"
00039 #endif
00040 #include "OW_CIMClass.hpp"
00041 #include "OW_CIMInstance.hpp"
00042 #include "OW_CIMException.hpp"
00043 #include "OW_CIMValue.hpp"
00044 #include "OW_CIMProperty.hpp"
00045 #include "OW_CIMObjectPath.hpp"
00046 #include "OW_CIMObjectPathEnumeration.hpp"
00047 #include "OW_Assertion.hpp"
00048 #include "OW_ResultHandlerIFC.hpp"
00049 #include "OW_Logger.hpp"
00050 #include "OW_CIMOMHandleIFC.hpp"
00051 
00052 namespace OW_NAMESPACE
00053 {
00054 
00055 namespace
00056 {
00057    const String COMPONENT_NAME("ow.provider.CIM_NamespaceInManager");
00058 }
00059 
00060 using namespace WBEMFlags;
00061 
00062 class CIM_NamespaceInManagerInstProv :
00063 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00064 public CppAssociatorProviderIFC
00065 #else
00066 public CppInstanceProviderIFC
00067 #endif
00068 {
00069 public:
00071    virtual ~CIM_NamespaceInManagerInstProv()
00072    {
00073    }
00075    virtual void getInstanceProviderInfo(InstanceProviderInfo& info)
00076    {
00077       info.addInstrumentedClass("CIM_NamespaceInManager");
00078    }
00080    virtual void enumInstanceNames(
00081       const ProviderEnvironmentIFCRef& env,
00082       const String& ns,
00083       const String& className,
00084       CIMObjectPathResultHandlerIFC& result,
00085       const CIMClass& cimClass )
00086    {
00087       OW_LOG_DEBUG(env->getLogger(COMPONENT_NAME), "In CIM_NamespaceInManagerInstProv::enumInstanceNames");
00088       CIMObjectPath newCop(className, ns);
00089       CIMOMHandleIFCRef hdl = env->getCIMOMHandle();
00090       CIMObjectPathEnumeration objectManagers = hdl->enumInstanceNamesE(ns, "CIM_ObjectManager");
00091       CIMObjectPathEnumeration namespaces = hdl->enumInstanceNamesE(ns, "CIM_Namespace");
00092       if (!objectManagers.hasMoreElements())
00093       {
00094          return;
00095       }
00096       
00097       
00098       CIMObjectPath omPath = objectManagers.nextElement();
00099       while (namespaces.hasMoreElements())
00100       {
00101          CIMObjectPath nsPath = namespaces.nextElement();
00102          newCop.setKeyValue("Antecedent", CIMValue(omPath));
00103          newCop.setKeyValue("Dependent", CIMValue(nsPath));
00104          result.handle(newCop);
00105       }
00106    }
00108    virtual void enumInstances(
00109       const ProviderEnvironmentIFCRef& env,
00110       const String& ns,
00111       const String& className,
00112       CIMInstanceResultHandlerIFC& result,
00113       ELocalOnlyFlag localOnly,
00114       EDeepFlag deep,
00115       EIncludeQualifiersFlag includeQualifiers,
00116       EIncludeClassOriginFlag includeClassOrigin,
00117       const StringArray* propertyList,
00118       const CIMClass& requestedClass,
00119       const CIMClass& cimClass )
00120    {
00121       OW_LOG_DEBUG(env->getLogger(COMPONENT_NAME), "In CIM_NamespaceInManagerInstProv::enumInstances");
00122       CIMOMHandleIFCRef hdl = env->getCIMOMHandle();
00123       CIMObjectPathEnumeration objectManagers = hdl->enumInstanceNamesE(ns, "CIM_ObjectManager");
00124       CIMObjectPathEnumeration namespaces = hdl->enumInstanceNamesE(ns, "CIM_Namespace");
00125       if (!objectManagers.hasMoreElements())
00126       {
00127          return;
00128       }
00129       
00130       
00131       CIMObjectPath omPath = objectManagers.nextElement();
00132       while (namespaces.hasMoreElements())
00133       {
00134          CIMObjectPath nsPath = namespaces.nextElement();
00135          CIMInstance newInst = cimClass.newInstance();
00136          newInst.setProperty("Antecedent", CIMValue(omPath));
00137          newInst.setProperty("Dependent", CIMValue(nsPath));
00138          result.handle(newInst.clone(localOnly,deep,includeQualifiers,
00139             includeClassOrigin,propertyList,requestedClass,cimClass));
00140       }
00141    }
00143    virtual CIMInstance getInstance(
00144       const ProviderEnvironmentIFCRef& env,
00145       const String& ns,
00146       const CIMObjectPath& instanceName,
00147       ELocalOnlyFlag localOnly,
00148       EIncludeQualifiersFlag includeQualifiers,
00149       EIncludeClassOriginFlag includeClassOrigin,
00150       const StringArray* propertyList,
00151       const CIMClass& cimClass )
00152    {
00153       OW_LOG_DEBUG(env->getLogger(COMPONENT_NAME), "In CIM_NamespaceInManagerInstProv::getInstance");
00154       CIMInstance inst = cimClass.newInstance();
00155       try
00156       {
00157          
00158          CIMObjectPath objectManagerPath(instanceName.getKeyT("Antecedent").getValueT().toCIMObjectPath());
00159          String omNs = objectManagerPath.getNameSpace();
00160          if (omNs.empty())
00161          {
00162             omNs = ns;
00163          }
00164    
00165          
00166          env->getCIMOMHandle()->getInstance(omNs, objectManagerPath);
00167    
00168          CIMObjectPath nsPath(instanceName.getKeyT("Dependent").getValueT().toCIMObjectPath());
00169          String nsNs = nsPath.getNameSpace();
00170          if (nsNs.empty())
00171          {
00172             nsNs = ns;
00173          }
00174    
00175          
00176          env->getCIMOMHandle()->getInstance(nsNs, nsPath);
00177    
00178    
00179          inst = cimClass.newInstance();
00180          inst.setProperty("Antecedent", CIMValue(objectManagerPath));
00181          inst.setProperty("Dependent", CIMValue(nsPath));
00182    
00183       }
00184       catch (const CIMException& e)
00185       {
00186          throw;
00187       }
00188       catch (const Exception& e)
00189       {
00190          OW_THROWCIM_SUBEX(CIMException::NOT_FOUND, e);
00191       }
00192       return inst.clone(localOnly,includeQualifiers,includeClassOrigin,propertyList);
00193    }
00194 #ifndef OW_DISABLE_INSTANCE_MANIPULATION
00195 
00196    virtual CIMObjectPath createInstance(
00197       const ProviderEnvironmentIFCRef& env,
00198       const String& ns,
00199       const CIMInstance& cimInstance )
00200    {
00201       
00202       return CIMObjectPath(ns, cimInstance);
00203    }
00205    virtual void modifyInstance(
00206       const ProviderEnvironmentIFCRef& env,
00207       const String& ns,
00208       const CIMInstance& modifiedInstance,
00209       const CIMInstance& previousInstance,
00210       EIncludeQualifiersFlag includeQualifiers,
00211       const StringArray* propertyList,
00212       const CIMClass& theClass)
00213    {
00214       
00215    }
00217    virtual void deleteInstance(
00218       const ProviderEnvironmentIFCRef& env,
00219       const String& ns,
00220       const CIMObjectPath& cop)
00221    {
00222       
00223    }
00224 #endif // #ifndef OW_DISABLE_INSTANCE_MANIPULATION
00225 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00226    
00227    virtual void getAssociatorProviderInfo(AssociatorProviderInfo &info)
00228    {
00229       info.addInstrumentedClass("CIM_NamespaceInManager");
00230    }
00231    class InstanceToObjectPathHandler : public CIMInstanceResultHandlerIFC
00232    {
00233    public:
00234       InstanceToObjectPathHandler(CIMObjectPathResultHandlerIFC& result_, const String& ns_)
00235       : result(result_)
00236       , ns(ns_)
00237       {}
00238       void doHandle(const CIMInstance& inst)
00239       {
00240          result.handle(CIMObjectPath(ns, inst));
00241       }
00242    private:
00243       CIMObjectPathResultHandlerIFC& result;
00244       String ns;
00245    };
00246    virtual void associatorNames(
00247       const ProviderEnvironmentIFCRef &env,
00248       CIMObjectPathResultHandlerIFC &result,
00249       const String &ns,
00250       const CIMObjectPath &objectName,
00251       const String &assocClass,
00252       const String &resultClass,
00253       const String &role,
00254       const String &resultRole)
00255    {
00256       OW_LOG_DEBUG(env->getLogger(COMPONENT_NAME), "In CIM_NamespaceInManagerInstProv::associatorNames");
00257       
00258       
00259       OW_ASSERT(assocClass.equalsIgnoreCase("CIM_NamespaceInManager"));
00260       InstanceToObjectPathHandler handler(result, ns);
00261       associators(env, handler, ns, objectName, assocClass, resultClass, role, resultRole, E_EXCLUDE_QUALIFIERS, E_EXCLUDE_CLASS_ORIGIN, 0);
00262    }
00263    virtual void referenceNames(
00264       const ProviderEnvironmentIFCRef &env,
00265       CIMObjectPathResultHandlerIFC &result,
00266       const String &ns,
00267       const CIMObjectPath &objectName,
00268       const String &resultClass,
00269       const String &role)
00270    {
00271       OW_LOG_DEBUG(env->getLogger(COMPONENT_NAME), "In CIM_NamespaceInManagerInstProv::referenceNames");
00272       
00273       
00274       
00275       OW_ASSERT(resultClass.equalsIgnoreCase("CIM_NamespaceInManager"));
00276       InstanceToObjectPathHandler handler(result, ns);
00277       references(env, handler, ns, objectName, resultClass, role, E_EXCLUDE_QUALIFIERS, E_EXCLUDE_CLASS_ORIGIN, 0);
00278    }
00279    class AssociatorFilter : public CIMInstanceResultHandlerIFC
00280    {
00281    public:
00282       AssociatorFilter(const CIMObjectPath& objectName_, CIMInstanceResultHandlerIFC& result_,     
00283          CIMOMHandleIFCRef hdl_,
00284          const String& ns_,
00285          EIncludeQualifiersFlag includeQualifiers_,
00286          EIncludeClassOriginFlag includeClassOrigin_,
00287          const StringArray* propertyList_)
00288       : objectName(objectName_)
00289       , result(result_)
00290       , hdl(hdl_)
00291       , ns(ns_)
00292       , includeQualifiers(includeQualifiers_)
00293       , includeClassOrigin(includeClassOrigin_)
00294       , propertyList(propertyList_)
00295       {}
00296       void doHandle(const CIMInstance& i)
00297       {
00298          CIMObjectPath op = i.getPropertyT("Antecedent").getValueT().toCIMObjectPath();
00299          if (op == objectName)
00300          {
00301             CIMObjectPath toGet = i.getPropertyT("Dependent").getValueT().toCIMObjectPath();
00302             CIMInstance assocInst = hdl->getInstance(ns, toGet, E_NOT_LOCAL_ONLY, E_INCLUDE_QUALIFIERS, E_INCLUDE_CLASS_ORIGIN, 0);
00303             assocInst.clone(E_NOT_LOCAL_ONLY, includeQualifiers, includeClassOrigin, propertyList);
00304             
00305             
00306             result.handle(assocInst);
00307             return;
00308          }
00309          op = i.getPropertyT("Dependent").getValueT().toCIMObjectPath();
00310          if (op == objectName)
00311          {
00312             CIMObjectPath toGet = i.getPropertyT("Antecedent").getValueT().toCIMObjectPath();
00313             CIMInstance assocInst = hdl->getInstance(ns, toGet, E_NOT_LOCAL_ONLY, E_INCLUDE_QUALIFIERS, E_INCLUDE_CLASS_ORIGIN, 0);
00314             assocInst.clone(E_NOT_LOCAL_ONLY, includeQualifiers, includeClassOrigin, propertyList);
00315             
00316             
00317             result.handle(assocInst);
00318          }
00319       }
00320    private:
00321       const CIMObjectPath& objectName;
00322       CIMInstanceResultHandlerIFC& result;
00323       CIMOMHandleIFCRef hdl;
00324       String ns;
00325       EIncludeQualifiersFlag includeQualifiers;
00326       EIncludeClassOriginFlag includeClassOrigin;
00327       const StringArray* propertyList;
00328    };
00329    virtual void associators(
00330       const ProviderEnvironmentIFCRef &env,
00331       CIMInstanceResultHandlerIFC &result,
00332       const String &ns,
00333       const CIMObjectPath &objectName,
00334       const String &assocClass,
00335       const String &resultClass,
00336       const String &role,
00337       const String &resultRole,
00338       EIncludeQualifiersFlag includeQualifiers,
00339       EIncludeClassOriginFlag includeClassOrigin,
00340       const StringArray *propertyList)
00341    {
00342       OW_LOG_DEBUG(env->getLogger(COMPONENT_NAME), "In CIM_NamespaceInManagerInstProv::associators");
00343       
00344       
00345       OW_ASSERT(assocClass.equalsIgnoreCase("CIM_NamespaceInManager"));
00346       if (objectName.getClassName().equalsIgnoreCase("OpenWBEM_ObjectManager")
00347          || objectName.getClassName().equalsIgnoreCase("CIM_ObjectManager"))
00348       {
00349          if (!role.empty() && !role.equalsIgnoreCase("Antecedent"))
00350          {
00351             return;
00352          }
00353          if (!resultRole.empty() && !resultRole.equalsIgnoreCase("Dependent"))
00354          {
00355             return;
00356          }
00357       }
00358       else if (objectName.getClassName().equalsIgnoreCase("CIM_Namespace"))
00359       {
00360          if (!role.empty() && !role.equalsIgnoreCase("Dependent"))
00361          {
00362             return;
00363          }
00364          if (!resultRole.empty() && !resultRole.equalsIgnoreCase("Antecedent"))
00365          {
00366             return;
00367          }
00368       }
00369       CIMClass theClass = env->getCIMOMHandle()->getClass(ns, "CIM_NamespaceInManager");
00370       AssociatorFilter handler(objectName, result, env->getCIMOMHandle(), ns, includeQualifiers, includeClassOrigin, propertyList);
00371       enumInstances(env, ns, "CIM_NamespaceInManager", handler, E_NOT_LOCAL_ONLY, E_DEEP, E_INCLUDE_QUALIFIERS, E_INCLUDE_CLASS_ORIGIN, 0, theClass, theClass);
00372    }
00373    class ReferencesFilter : public CIMInstanceResultHandlerIFC
00374    {
00375    public:
00376       ReferencesFilter(const CIMObjectPath& objectName_, CIMInstanceResultHandlerIFC& result_)
00377       : objectName(objectName_)
00378       , result(result_)
00379       {}
00380       void doHandle(const CIMInstance& i)
00381       {
00382          CIMObjectPath op = i.getPropertyT("Antecedent").getValueT().toCIMObjectPath();
00383          if (op == objectName)
00384          {
00385             result.handle(i);
00386             return;
00387          }
00388          op = i.getPropertyT("Dependent").getValueT().toCIMObjectPath();
00389          if (op == objectName)
00390          {
00391             result.handle(i);
00392          }
00393       }
00394    private:
00395       const CIMObjectPath& objectName;
00396       CIMInstanceResultHandlerIFC& result;
00397    };
00398    virtual void references(
00399       const ProviderEnvironmentIFCRef &env,
00400       CIMInstanceResultHandlerIFC &result,
00401       const String &ns,
00402       const CIMObjectPath &objectName,
00403       const String &resultClass,
00404       const String &role,
00405       EIncludeQualifiersFlag includeQualifiers,
00406       EIncludeClassOriginFlag includeClassOrigin,
00407       const StringArray *propertyList)
00408    {
00409       OW_LOG_DEBUG(env->getLogger(COMPONENT_NAME), "In CIM_NamespaceInManagerInstProv::references");
00410       
00411       
00412       OW_ASSERT(resultClass.equalsIgnoreCase("CIM_NamespaceInManager"));
00413       if (objectName.getClassName().equalsIgnoreCase("OpenWBEM_ObjectManager")
00414          || objectName.getClassName().equalsIgnoreCase("CIM_ObjectManager"))
00415       {
00416          if (!role.empty() && !role.equalsIgnoreCase("Antecedent"))
00417          {
00418             return;
00419          }
00420       }
00421       else if (objectName.getClassName().equalsIgnoreCase("CIM_Namespace"))
00422       {
00423          if (!role.empty() && !role.equalsIgnoreCase("Dependent"))
00424          {
00425             return;
00426          }
00427       }
00428       CIMClass theClass = env->getCIMOMHandle()->getClass(ns, "CIM_NamespaceInManager");
00429       ReferencesFilter handler(objectName, result);
00430       enumInstances(env, ns, "CIM_NamespaceInManager", handler, E_NOT_LOCAL_ONLY, E_DEEP, includeQualifiers, includeClassOrigin, propertyList, theClass, theClass);
00431    }
00432 #endif // #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00433 };
00434 } 
00435 
00436 OW_PROVIDERFACTORY(OpenWBEM::CIM_NamespaceInManagerInstProv, owprovinstCIM_NamespaceInManager)
00437