OW_CIMServer.hpp

Go to the documentation of this file.
00001 /*******************************************************************************
00002 * Copyright (C) 2001-2004 Vintela, Inc. All rights reserved.
00003 *
00004 * Redistribution and use in source and binary forms, with or without
00005 * modification, are permitted provided that the following conditions are met:
00006 *
00007 *  - Redistributions of source code must retain the above copyright notice,
00008 *    this list of conditions and the following disclaimer.
00009 *
00010 *  - Redistributions in binary form must reproduce the above copyright notice,
00011 *    this list of conditions and the following disclaimer in the documentation
00012 *    and/or other materials provided with the distribution.
00013 *
00014 *  - Neither the name of Vintela, Inc. nor the names of its
00015 *    contributors may be used to endorse or promote products derived from this
00016 *    software without specific prior written permission.
00017 *
00018 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
00019 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00020 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00021 * ARE DISCLAIMED. IN NO EVENT SHALL Vintela, Inc. OR THE CONTRIBUTORS
00022 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00023 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00024 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00025 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00026 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00027 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00028 * POSSIBILITY OF SUCH DAMAGE.
00029 *******************************************************************************/
00030 
00036 #ifndef OW_CIMSERVER_HPP_INCLUDE_GUARD_
00037 #define OW_CIMSERVER_HPP_INCLUDE_GUARD_
00038 #include "OW_config.h"
00039 #include "OW_RepositoryIFC.hpp"
00040 #include "OW_CIMClass.hpp"
00041 #include "OW_Authorizer2IFC.hpp"
00042 #include "OW_CimomCommonFwd.hpp"
00043 #include "OW_ProviderFwd.hpp"
00044 #include "OW_CommonFwd.hpp"
00045 #include "OW_CIMFwd.hpp"
00046 #include "OW_Mutex.hpp"
00047 
00048 namespace OW_NAMESPACE
00049 {
00050 
00051 class CIMRepository;
00052 
00053 // This class is responsible for:
00054 // 1. calling either providers/or the CIM Repository
00055 class OW_CIMOMCOMMON_API CIMServer : public RepositoryIFC
00056 {
00057 public:
00058    static const char* const INST_REPOS_NAME;
00059    static const char* const META_REPOS_NAME;
00060    static const char* const NS_REPOS_NAME;
00061 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00062    static const char* const CLASS_ASSOC_REPOS_NAME;
00063    static const char* const INST_ASSOC_REPOS_NAME;
00064 #endif
00065 
00068    CIMServer(const ServiceEnvironmentIFCRef& env,
00069       const ProviderManagerRef& providerManager,
00070       const RepositoryIFCRef& repository,
00071       const AuthorizerManagerRef& authorizerMgr);
00075    virtual ~CIMServer();
00080    virtual void open(const String& path);
00081    virtual String getName() const;
00082    virtual StringArray getDependencies() const;
00083 
00087    void init(const ServiceEnvironmentIFCRef& env);
00091    virtual void close();
00095    virtual void shutdown();
00096 #if !defined(OW_DISABLE_INSTANCE_MANIPULATION) && !defined(OW_DISABLE_NAMESPACE_MANIPULATION)
00097 
00103    virtual void createNameSpace(const String& ns, OperationContext& context);
00110    virtual void deleteNameSpace(const String& ns, OperationContext& context);
00111 #endif // #ifndef OW_DISABLE_INSTANCE_MANIPULATION
00112 
00119    virtual void enumNameSpace(StringResultHandlerIFC& result,
00120       OperationContext& context);
00130    virtual CIMQualifierType getQualifierType(const String& ns,
00131       const String& qualifierName,
00132       OperationContext& context);
00133 #ifndef OW_DISABLE_QUALIFIER_DECLARATION
00134 
00141    virtual void enumQualifierTypes(
00142       const String& ns,
00143       CIMQualifierTypeResultHandlerIFC& result,
00144       OperationContext& context);
00151    virtual void deleteQualifierType(const String& ns, const String& qualName,
00152       OperationContext& context);
00162    virtual void setQualifierType(const String& ns,
00163       const CIMQualifierType& qt, OperationContext& context);
00164 #endif // #ifndef OW_DISABLE_QUALIFIER_DECLARATION
00165 
00189    virtual CIMClass getClass(
00190       const String& ns,
00191       const String& className,
00192       WBEMFlags::ELocalOnlyFlag localOnly, WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00193       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, const StringArray* propertyList,
00194       OperationContext& context);
00195 #ifndef OW_DISABLE_SCHEMA_MANIPULATION
00196 
00213    virtual CIMClass deleteClass(const String& ns, const String& className,
00214       OperationContext& context);
00230    virtual void createClass(const String& ns, const CIMClass& cimClass,
00231       OperationContext& context);
00252    virtual CIMClass modifyClass(
00253       const String& ns,
00254       const CIMClass& cc,
00255       OperationContext& context);
00256 #endif // #ifndef OW_DISABLE_SCHEMA_MANIPULATION
00257 
00279    virtual void enumClasses(const String& ns,
00280       const String& className,
00281       CIMClassResultHandlerIFC& result,
00282       WBEMFlags::EDeepFlag deep, WBEMFlags::ELocalOnlyFlag localOnly, WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00283       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, OperationContext& context);
00303    virtual void enumClassNames(const String& ns,
00304       const String& className,
00305       StringResultHandlerIFC& result,
00306       WBEMFlags::EDeepFlag deep, OperationContext& context);
00333    virtual void enumInstances(
00334       const String& ns,
00335       const String& className,
00336       CIMInstanceResultHandlerIFC& result,
00337       WBEMFlags::EDeepFlag deep,
00338       WBEMFlags::ELocalOnlyFlag localOnly,
00339       WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00340       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin,
00341       const StringArray* propertyList,
00342       WBEMFlags::EEnumSubclassesFlag enumSubclasses,
00343       OperationContext& context);
00364    virtual void enumInstanceNames(
00365       const String& ns,
00366       const String& className,
00367       CIMObjectPathResultHandlerIFC& result,
00368       WBEMFlags::EDeepFlag deep, OperationContext& context);
00392    virtual CIMInstance getInstance(
00393       const String& ns,
00394       const CIMObjectPath& instanceName,
00395       WBEMFlags::ELocalOnlyFlag localOnly, WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00396       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, const StringArray* propertyList,
00397       OperationContext& context);
00398    virtual CIMInstance getInstance(
00399       const String& ns,
00400       const CIMObjectPath& instanceName,
00401       WBEMFlags::ELocalOnlyFlag localOnly, WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00402       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, const StringArray* propertyList,
00403       CIMClass* pOutClass, OperationContext& context);
00404 #ifndef OW_DISABLE_INSTANCE_MANIPULATION
00405 
00419    virtual CIMInstance deleteInstance(const String& ns, const CIMObjectPath& cop,
00420       OperationContext& context);
00436    virtual CIMObjectPath createInstance(const String& ns,
00437       const CIMInstance& ci,
00438       OperationContext& context);
00457    virtual CIMInstance modifyInstance(
00458       const String& ns,
00459       const CIMInstance& modifiedInstance,
00460       WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00461       const StringArray* propertyList,
00462       OperationContext& context);
00463 #if !defined(OW_DISABLE_PROPERTY_OPERATIONS)
00464 
00472    virtual void setProperty(
00473       const String& ns,
00474       const CIMObjectPath& name, const String& propertyName,
00475       const CIMValue& cv, OperationContext& context);
00476 #endif // #if !defined(OW_DISABLE_PROPERTY_OPERATIONS)
00477 
00478 #endif // #ifndef OW_DISABLE_INSTANCE_MANIPULATION
00479    
00480 #if !defined(OW_DISABLE_PROPERTY_OPERATIONS)
00481 
00490    virtual CIMValue getProperty(
00491       const String& ns,
00492       const CIMObjectPath& name,
00493       const String& propertyName, OperationContext& context);
00494 #endif // #if !defined(OW_DISABLE_PROPERTY_OPERATIONS)
00495 
00508    virtual CIMValue invokeMethod(
00509       const String& ns,
00510       const CIMObjectPath& path,
00511       const String& methodName, const CIMParamValueArray& inParams,
00512       CIMParamValueArray& outParams, OperationContext& context);
00513 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00514    virtual void associatorNames(
00515       const String& ns,
00516       const CIMObjectPath& path,
00517       CIMObjectPathResultHandlerIFC& result,
00518       const String& assocClass,
00519       const String& resultClass, const String& role,
00520       const String& resultRole, OperationContext& context);
00521    virtual void associators(
00522       const String& ns,
00523       const CIMObjectPath& path,
00524       CIMInstanceResultHandlerIFC& result,
00525       const String& assocClass,
00526       const String& resultClass, const String& role,
00527       const String& resultRole,  WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00528       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, const StringArray* propertyList,
00529       OperationContext& context);
00530    virtual void associatorsClasses(
00531       const String& ns,
00532       const CIMObjectPath& path,
00533       CIMClassResultHandlerIFC& result,
00534       const String& assocClass,
00535       const String& resultClass, const String& role,
00536       const String& resultRole,  WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00537       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, const StringArray* propertyList,
00538       OperationContext& context);
00539    virtual void referenceNames(
00540       const String& ns,
00541       const CIMObjectPath& path,
00542       CIMObjectPathResultHandlerIFC& result,
00543       const String& resultClass,
00544       const String& role, OperationContext& context);
00545    virtual void references(
00546       const String& ns,
00547       const CIMObjectPath& path,
00548       CIMInstanceResultHandlerIFC& result,
00549       const String& resultClass,
00550       const String& role, WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00551       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, const StringArray* propertyList,
00552       OperationContext& context);
00553    
00554    virtual void referencesClasses(
00555       const String& ns,
00556       const CIMObjectPath& path,
00557       CIMClassResultHandlerIFC& result,
00558       const String& resultClass,
00559       const String& role, WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00560       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, const StringArray* propertyList,
00561       OperationContext& context);
00562 #endif // #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00563    
00576    virtual void execQuery(
00577       const String& ns,
00578       CIMInstanceResultHandlerIFC& result,
00579       const String &query, const String& queryLanguage,
00580       OperationContext& context);
00581 
00582    ServiceEnvironmentIFCRef getEnvironment() const;
00583 public:
00584    void _getCIMInstanceNames(const String& ns, const CIMName& className,
00585       const CIMClass& theClass, CIMObjectPathResultHandlerIFC& result,
00586       OperationContext& context);
00587    void _getCIMInstances(
00588       const String& ns,
00589       const CIMName& className,
00590       const CIMClass& theTopClass,
00591       const CIMClass& theClass, CIMInstanceResultHandlerIFC& result,
00592       WBEMFlags::ELocalOnlyFlag localOnly, WBEMFlags::EDeepFlag deep, WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00593       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin, const StringArray* propertyList,
00594       OperationContext& context);
00595 private:
00604    bool _instanceExists(const String& ns, const CIMObjectPath& cop,
00605       OperationContext& context);
00606 public:
00607 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00608    bool _isDynamicAssoc(const String& ns, const CIMClass& cc, OperationContext& context);
00609 #endif
00610 private:
00611 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00612    void _commonAssociators(
00613       const String& ns,
00614       const CIMObjectPath& path,
00615       const CIMName& assocClassName, const CIMName& resultClass,
00616       const CIMName& role, const CIMName& resultRole,
00617       WBEMFlags::EIncludeQualifiersFlag includeQualifiers, WBEMFlags::EIncludeClassOriginFlag includeClassOrigin,
00618       const StringArray* propertyList, CIMInstanceResultHandlerIFC* piresult,
00619       CIMObjectPathResultHandlerIFC* popresult,
00620       CIMClassResultHandlerIFC* pcresult,
00621       OperationContext& context);
00622    void _dynamicAssociators(const CIMObjectPath& path,
00623       const CIMClassArray& assocClasses, const CIMName& resultClass,
00624       const CIMName& role, const CIMName& resultRole,
00625       WBEMFlags::EIncludeQualifiersFlag includeQualifiers, WBEMFlags::EIncludeClassOriginFlag includeClassOrigin,
00626       const StringArray* propertyList, CIMInstanceResultHandlerIFC* piresult,
00627       CIMObjectPathResultHandlerIFC* popresult, OperationContext& context);
00628    void _commonReferences(
00629       const String& ns,
00630       const CIMObjectPath& path,
00631       const CIMName& resultClass, const CIMName& role,
00632       WBEMFlags::EIncludeQualifiersFlag includeQualifiers, WBEMFlags::EIncludeClassOriginFlag includeClassOrigin,
00633       const StringArray* propertyList, CIMInstanceResultHandlerIFC* piresult,
00634       CIMObjectPathResultHandlerIFC* popresult,
00635       CIMClassResultHandlerIFC* pcresult,
00636       OperationContext& context);
00637    void _dynamicReferences(const CIMObjectPath& path,
00638       const CIMClassArray& dynamicAssocs, const CIMName& role,
00639       WBEMFlags::EIncludeQualifiersFlag includeQualifiers, WBEMFlags::EIncludeClassOriginFlag includeClassOrigin,
00640       const StringArray* propertyList, CIMInstanceResultHandlerIFC* piresult,
00641       CIMObjectPathResultHandlerIFC* popresult, OperationContext& context);
00642    void _getAssociationClasses(const String& ns,
00643       const CIMName& assocClassName, const CIMName& className,
00644       CIMClassResultHandlerIFC& result, const CIMName& role, OperationContext& context);
00645 #endif
00646 
00652    CIMClass _getNameSpaceClass(const CIMName& className);
00653    InstanceProviderIFCRef _getInstanceProvider(const String& ns,
00654       const CIMClass& cls, OperationContext& context);
00655    SecondaryInstanceProviderIFCRefArray _getSecondaryInstanceProviders(const String& ns, const CIMName& className, OperationContext& context);
00656 
00657 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00658    AssociatorProviderIFCRef _getAssociatorProvider(const String& ns, const CIMClass& cls, OperationContext& context);
00659 #endif
00660 private:
00661    CIMClass _instGetClass(const String& ns, const CIMName& className,
00662       WBEMFlags::ELocalOnlyFlag localOnly,
00663       WBEMFlags::EIncludeQualifiersFlag includeQualifiers, WBEMFlags::EIncludeClassOriginFlag includeClassOrigin,
00664       const StringArray* propertyList, OperationContext& context);
00665 
00666    void _checkNameSpaceAccess(OperationContext& context,
00667       const String& ns, Authorizer2IFC::EAccessType acType);
00668 
00669    ProviderManagerRef m_provManager;
00670 
00671    virtual void beginOperation(WBEMFlags::EOperationFlag op, OperationContext& context);
00672    virtual void endOperation(WBEMFlags::EOperationFlag op, OperationContext& context, WBEMFlags::EOperationResultFlag result);
00673 
00674    Mutex m_guard;
00675    CIMClass m_nsClass_Namespace;
00676    ServiceEnvironmentIFCRef m_env;
00677    RepositoryIFCRef m_cimRepository;
00678    IntrusiveReference<CIMRepository> m_realRepository;
00679    AuthorizerManagerRef m_authorizerMgr;
00680    LoggerRef m_logger;
00681 };
00682 
00683 } // end namespace OW_NAMESPACE
00684 
00685 #endif

Generated on Thu Feb 9 08:47:55 2006 for openwbem by  doxygen 1.4.6