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 
00036 #ifndef OW_CIM_REPOSITORY_HPP_INCLUDE_GUARD_
00037 #define OW_CIM_REPOSITORY_HPP_INCLUDE_GUARD_
00038 #include "OW_config.h"
00039 #include "OW_RepositoryIFC.hpp"
00040 #include "OW_ServiceEnvironmentIFC.hpp"
00041 #include "OW_MetaRepository.hpp"
00042 #include "OW_InstanceRepository.hpp"
00043 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00044 #include "OW_AssocDb.hpp"
00045 #endif
00046 #include "OW_RWLocker.hpp"
00047 
00048 namespace OW_NAMESPACE
00049 {
00050 
00051 namespace CIMRepositoryImpl
00052 {
00053    class instEnumerator;
00054 }
00055 
00056 
00057 class OW_HDB_API CIMRepository : public RepositoryIFC
00058 {
00059 public:
00060    static const char* const INST_REPOS_NAME;
00061    static const char* const META_REPOS_NAME;
00062    static const char* const NS_REPOS_NAME;
00063 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00064    static const char* const CLASS_ASSOC_REPOS_NAME;
00065    static const char* const INST_ASSOC_REPOS_NAME;
00066 #endif
00067 
00070    CIMRepository();
00074    virtual ~CIMRepository();
00079    virtual void open(const String& path);
00080    virtual void close();
00081 
00082    virtual String getName() const;
00083    virtual void init(const ServiceEnvironmentIFCRef& env);
00084    virtual void shutdown();
00085 #if !defined(OW_DISABLE_INSTANCE_MANIPULATION) && !defined(OW_DISABLE_NAMESPACE_MANIPULATION)
00086 
00092    virtual void createNameSpace(const String& ns, OperationContext& context);
00099    virtual void deleteNameSpace(const String& ns, OperationContext& context);
00100 #endif // #ifndef OW_DISABLE_INSTANCE_MANIPULATION
00101 
00108    virtual void enumNameSpace(StringResultHandlerIFC& result,
00109       OperationContext& context);
00119    virtual CIMQualifierType getQualifierType(const String& ns,
00120       const String& qualifierName,
00121       OperationContext& context);
00122 #ifndef OW_DISABLE_QUALIFIER_DECLARATION
00123 
00130    virtual void enumQualifierTypes(
00131       const String& ns,
00132       CIMQualifierTypeResultHandlerIFC& result,
00133       OperationContext& context);
00141    virtual void deleteQualifierType(const String& ns, const String& qualName,
00142       OperationContext& context);
00152    virtual void setQualifierType(const String& ns,
00153       const CIMQualifierType& qt, OperationContext& context);
00154 #endif // #ifndef OW_DISABLE_QUALIFIER_DECLARATION
00155 
00173    virtual CIMClass getClass(
00174       const String& ns,
00175       const String& className,
00176       WBEMFlags::ELocalOnlyFlag localOnly, WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00177       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, const StringArray* propertyList,
00178       OperationContext& context);
00179 #ifndef OW_DISABLE_SCHEMA_MANIPULATION
00180 
00197    virtual CIMClass deleteClass(const String& ns, const String& className,
00198       OperationContext& context);
00214    virtual void createClass(const String& ns, const CIMClass& cimClass,
00215       OperationContext& context);
00236    virtual CIMClass modifyClass(
00237       const String& ns,
00238       const CIMClass& cc,
00239       OperationContext& context);
00240 #endif // #ifndef OW_DISABLE_SCHEMA_MANIPULATION
00241 
00263    virtual void enumClasses(const String& ns,
00264       const String& className,
00265       CIMClassResultHandlerIFC& result,
00266       WBEMFlags::EDeepFlag deep, WBEMFlags::ELocalOnlyFlag localOnly, WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00267       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, OperationContext& context);
00287    virtual void enumClassNames(const String& ns,
00288       const String& className,
00289       StringResultHandlerIFC& result,
00290       WBEMFlags::EDeepFlag deep, OperationContext& context);
00317    virtual void enumInstances(
00318       const String& ns,
00319       const String& className,
00320       CIMInstanceResultHandlerIFC& result,
00321       WBEMFlags::EDeepFlag deep, WBEMFlags::ELocalOnlyFlag localOnly,
00322       WBEMFlags::EIncludeQualifiersFlag includeQualifiers, WBEMFlags::EIncludeClassOriginFlag includeClassOrigin,
00323       const StringArray* propertyList,
00324       WBEMFlags::EEnumSubclassesFlag enumSubclasses,
00325       OperationContext& context);
00346    virtual void enumInstanceNames(
00347       const String& ns,
00348       const String& className,
00349       CIMObjectPathResultHandlerIFC& result,
00350       WBEMFlags::EDeepFlag deep, OperationContext& context);
00374    virtual CIMInstance getInstance(
00375       const String& ns,
00376       const CIMObjectPath& instanceName,
00377       WBEMFlags::ELocalOnlyFlag localOnly, WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00378       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, const StringArray* propertyList,
00379       OperationContext& context);
00380    virtual CIMInstance getInstance(
00381       const String& ns,
00382       const CIMObjectPath& instanceName,
00383       WBEMFlags::ELocalOnlyFlag localOnly, WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00384       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, const StringArray* propertyList,
00385       CIMClass* pOutClass, OperationContext& context);
00386 #ifndef OW_DISABLE_INSTANCE_MANIPULATION
00387 
00401    virtual CIMInstance deleteInstance(const String& ns, const CIMObjectPath& cop,
00402       OperationContext& context);
00418    virtual CIMObjectPath createInstance(const String& ns,
00419       const CIMInstance& ci,
00420       OperationContext& context);
00439    virtual CIMInstance modifyInstance(
00440       const String& ns,
00441       const CIMInstance& modifiedInstance,
00442       WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00443       const StringArray* propertyList,
00444       OperationContext& context);
00445 #if !defined(OW_DISABLE_PROPERTY_OPERATIONS)
00446 
00454    virtual void setProperty(
00455       const String& ns,
00456       const CIMObjectPath& name, const String& propertyName,
00457       const CIMValue& cv, OperationContext& context);
00458 #endif // #if !defined(OW_DISABLE_PROPERTY_OPERATIONS)
00459 #endif // #ifndef OW_DISABLE_INSTANCE_MANIPULATION
00460    
00461 #if !defined(OW_DISABLE_PROPERTY_OPERATIONS)
00462 
00471    virtual CIMValue getProperty(
00472       const String& ns,
00473       const CIMObjectPath& name,
00474       const String& propertyName, OperationContext& context);
00475 #endif // #if !defined(OW_DISABLE_PROPERTY_OPERATIONS)
00476 
00489    virtual CIMValue invokeMethod(
00490       const String& ns,
00491       const CIMObjectPath& path,
00492       const String& methodName, const CIMParamValueArray& inParams,
00493       CIMParamValueArray& outParams, OperationContext& context);
00494 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00495    virtual void associatorNames(
00496       const String& ns,
00497       const CIMObjectPath& path,
00498       CIMObjectPathResultHandlerIFC& result,
00499       const String& assocClass,
00500       const String& resultClass, const String& role,
00501       const String& resultRole, OperationContext& context);
00502    virtual void associators(
00503       const String& ns,
00504       const CIMObjectPath& path,
00505       CIMInstanceResultHandlerIFC& result,
00506       const String& assocClass,
00507       const String& resultClass, const String& role,
00508       const String& resultRole,  WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00509       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, const StringArray* propertyList,
00510       OperationContext& context);
00511    virtual void associatorsClasses(
00512       const String& ns,
00513       const CIMObjectPath& path,
00514       CIMClassResultHandlerIFC& result,
00515       const String& assocClass,
00516       const String& resultClass, const String& role,
00517       const String& resultRole,  WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00518       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, const StringArray* propertyList,
00519       OperationContext& context);
00520    virtual void referenceNames(
00521       const String& ns,
00522       const CIMObjectPath& path,
00523       CIMObjectPathResultHandlerIFC& result,
00524       const String& resultClass,
00525       const String& role, OperationContext& context);
00526    virtual void references(
00527       const String& ns,
00528       const CIMObjectPath& path,
00529       CIMInstanceResultHandlerIFC& result,
00530       const String& resultClass,
00531       const String& role, WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00532       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, const StringArray* propertyList,
00533       OperationContext& context);
00534    
00535    virtual void referencesClasses(
00536       const String& ns,
00537       const CIMObjectPath& path,
00538       CIMClassResultHandlerIFC& result,
00539       const String& resultClass,
00540       const String& role, WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00541       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, const StringArray* propertyList,
00542       OperationContext& context);
00543 #endif // #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00544 
00556    virtual void execQuery(
00557       const String& ns,
00558       CIMInstanceResultHandlerIFC& result,
00559       const String &query, const String& queryLanguage,
00560       OperationContext& context);
00561    
00562    virtual void beginOperation(WBEMFlags::EOperationFlag op, OperationContext& context);
00563    virtual void endOperation(WBEMFlags::EOperationFlag op, OperationContext& context, WBEMFlags::EOperationResultFlag result);
00564 
00565    ServiceEnvironmentIFCRef getEnvironment() const { return m_env; }
00566 
00567 private:
00568    CIMClass _getClass(const String& ns, const CIMName& className);
00569    CIMClass _instGetClass(const String& ns, const CIMName& className);
00570    void checkGetClassRvalAndThrow(CIMException::ErrNoType rval,
00571       const String& ns, const CIMName& className);
00572    void checkGetClassRvalAndThrowInst(CIMException::ErrNoType rval,
00573       const String& ns, const CIMName& className);
00574 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00575    void _commonAssociators(
00576       const String& ns,
00577       const CIMObjectPath& path_,
00578       const CIMName& assocClassName, const CIMName& resultClass,
00579       const CIMName& role, const CIMName& resultRole,
00580       WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00581       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin,
00582       const StringArray* propertyList,
00583       CIMInstanceResultHandlerIFC* piresult,
00584       CIMObjectPathResultHandlerIFC* popresult,
00585       CIMClassResultHandlerIFC* pcresult,
00586       OperationContext& context);
00587    void _commonReferences(
00588       const String& ns,
00589       const CIMObjectPath& path_,
00590       const CIMName& resultClass, const CIMName& role,
00591       WBEMFlags::EIncludeQualifiersFlag includeQualifiers, WBEMFlags::EIncludeClassOriginFlag includeClassOrigin,
00592       const StringArray* propertyList, CIMInstanceResultHandlerIFC* piresult,
00593       CIMObjectPathResultHandlerIFC* popresult,
00594       CIMClassResultHandlerIFC* pcresult, OperationContext& context);
00595    
00596    void _getAssociationClasses(const String& ns,
00597       const CIMName& assocClassName, const CIMName& className,
00598       CIMClassResultHandlerIFC& result, const CIMName& role,
00599       OperationContext& context);
00600    void _staticReferences(const CIMObjectPath& path,
00601       const SortedVectorSet<CIMName>* refClasses, const CIMName& role,
00602       WBEMFlags::EIncludeQualifiersFlag includeQualifiers, WBEMFlags::EIncludeClassOriginFlag includeClassOrigin,
00603       const StringArray* propertyList, CIMInstanceResultHandlerIFC& result,
00604       OperationContext& context);
00605    
00606    void _staticReferenceNames(const CIMObjectPath& path,
00607       const SortedVectorSet<CIMName>* refClasses, const CIMName& role,
00608       CIMObjectPathResultHandlerIFC& result);
00609    void _staticReferencesClass(const CIMObjectPath& path,
00610       const SortedVectorSet<CIMName>* resultClasses,
00611       const CIMName& role,
00612       WBEMFlags::EIncludeQualifiersFlag includeQualifiers, WBEMFlags::EIncludeClassOriginFlag includeClassOrigin,
00613       const StringArray* propertyList,
00614       CIMObjectPathResultHandlerIFC* popresult,
00615       CIMClassResultHandlerIFC* pcresult,
00616       OperationContext& context);
00617    void _staticAssociators(const CIMObjectPath& path,
00618       const SortedVectorSet<CIMName>* passocClasses,
00619       const SortedVectorSet<CIMName>* presultClasses,
00620       const CIMName& role, const CIMName& resultRole,
00621       WBEMFlags::EIncludeQualifiersFlag includeQualifiers, WBEMFlags::EIncludeClassOriginFlag includeClassOrigin,
00622       const StringArray* propertyList, CIMInstanceResultHandlerIFC& result,
00623       OperationContext& context);
00624    void _staticAssociatorNames(const CIMObjectPath& path,
00625       const SortedVectorSet<CIMName>* passocClasses,
00626       const SortedVectorSet<CIMName>* presultClasses,
00627       const CIMName& role, const CIMName& resultRole,
00628       CIMObjectPathResultHandlerIFC& result);
00629    void _staticAssociatorsClass(
00630       const CIMObjectPath& path,
00631       const SortedVectorSet<CIMName>* assocClassNames,
00632       const SortedVectorSet<CIMName>* resultClasses,
00633       const CIMName& role, const CIMName& resultRole,
00634       WBEMFlags::EIncludeQualifiersFlag includeQualifiers, WBEMFlags::EIncludeClassOriginFlag includeClassOrigin,
00635       const StringArray* propertyList, CIMObjectPathResultHandlerIFC* popresult,
00636       CIMClassResultHandlerIFC* pcresult,
00637       OperationContext& context);
00638 #endif // #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00639    void _validatePropagatedKeys(OperationContext& context, const String& ns,
00640       const CIMInstance& ci, const CIMClass& theClass);
00641 
00642 private:
00643    GenericHDBRepository m_nStore;
00644    InstanceRepository m_iStore;
00645    MetaRepository m_mStore;
00646 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00647    AssocDb m_classAssocDb;
00648    AssocDb m_instAssocDb;
00649 #endif
00650 
00651 #ifdef OW_WIN32
00652 #pragma warning (push)
00653 #pragma warning (disable: 4251)
00654 #endif
00655 
00656    ServiceEnvironmentIFCRef m_env;
00657    LoggerRef m_logger;
00658    bool m_checkReferentialIntegrity;
00659    RWLocker m_schemaLock;
00660    RWLocker m_instanceLock;
00661 
00662 #ifdef OW_WIN32
00663 #pragma warning (pop)
00664 #endif
00665 
00666    friend class CIMServer;
00667    friend class CIMRepositoryImpl::instEnumerator;
00668 };
00669 
00670 } 
00671 
00672 #endif