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_XMLEXECUTE_HPP_INCLUDE_GUARD_
00037 #define OW_XMLEXECUTE_HPP_INCLUDE_GUARD_
00038 #include "OW_config.h"
00039 #include "OW_CIMOMHandleIFC.hpp"
00040 #include "OW_String.hpp"
00041 #include "OW_Map.hpp"
00042 #include "OW_XMLQualifier.hpp"
00043 #include "OW_RequestHandlerIFCXML.hpp"
00044 #include "OW_ServiceEnvironmentIFC.hpp"
00045 #include "OW_IfcsFwd.hpp"
00046 #include "OW_CIMObjectPath.hpp"
00047 
00048 #include <iosfwd>
00049 
00050 namespace OW_NAMESPACE
00051 {
00052 
00053 class XMLExecute : public RequestHandlerIFCXML
00054 {
00055 public:
00056    XMLExecute();
00057    virtual ~XMLExecute();
00058    int executeXML(CIMXMLParser& parser, std::ostream* ostrEntity,
00059       std::ostream* ostrError, OperationContext& userName);
00060    virtual RequestHandlerIFC* clone() const;
00061 protected:
00062    virtual void doOptions(CIMFeatures& cf, OperationContext& context);
00063    virtual void outputError(CIMException::ErrNoType errorCode,
00064       const String& msg, std::ostream& ostr);
00065    
00066    virtual String getName() const;
00067    virtual StringArray getDependencies() const;
00068    virtual void init(const ServiceEnvironmentIFCRef& env);
00069    virtual void shutdown();
00070 private:
00071    
00072    
00073    std::ostream* m_ostrEntity;
00074    std::ostream* m_ostrError;
00075    bool m_isIntrinsic;
00076    String m_functionName;
00080    void executeIntrinsic(std::ostream& osrt, CIMXMLParser& parser, CIMOMHandleIFC& hdl,
00081          const String& ns);
00082    void executeExtrinsic(std::ostream& ostr, CIMXMLParser& parser,
00083       CIMOMHandleIFC& lch);
00084    void doInvokeMethod(std::ostream& ostr, CIMXMLParser& parser,
00085       const String& methodName, CIMOMHandleIFC& lch);
00086    void processSimpleReq(CIMXMLParser& parser, std::ostream& ostrEntity,
00087       std::ostream& ostrError, OperationContext& context);
00088    static void getParameters(CIMXMLParser& parser,
00089       CIMParamValueArray& params);
00090 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00091    void associatorNames(std::ostream& ostr, CIMXMLParser& parser,
00092       const String& ns, CIMOMHandleIFC& hdl);
00093    void associators(std::ostream& ostr, CIMXMLParser& parser,
00094       const String& ns, CIMOMHandleIFC& hdl);
00095 #endif
00096 #ifndef OW_DISABLE_SCHEMA_MANIPULATION
00097    void createClass(std::ostream& ostr, CIMXMLParser& parser,
00098       const String& ns, CIMOMHandleIFC& hdl);
00099    void modifyClass(std::ostream& ostr, CIMXMLParser& parser,
00100       const String& ns, CIMOMHandleIFC& hdl);
00101    void deleteClass(std::ostream& ostr, CIMXMLParser& parser,
00102       const String& ns, CIMOMHandleIFC& hdl);
00103 #endif
00104 #ifndef OW_DISABLE_INSTANCE_MANIPULATION
00105    void createInstance(std::ostream& ostr, CIMXMLParser& parser,
00106       const String& ns, CIMOMHandleIFC& hdl);
00107    void deleteInstance(std::ostream& ostr, CIMXMLParser& parser,
00108       const String& ns, CIMOMHandleIFC& hdl);
00109    void modifyInstance(std::ostream& ostr, CIMXMLParser& parser,
00110       const String& ns, CIMOMHandleIFC& hdl);
00111 #if !defined(OW_DISABLE_PROPERTY_OPERATIONS)
00112    void setProperty(std::ostream& ostr, CIMXMLParser& parser,
00113       const String& ns, CIMOMHandleIFC& hdl);
00114 #endif // #if !defined(OW_DISABLE_PROPERTY_OPERATIONS)
00115 #endif
00116    void enumerateClassNames(std::ostream& ostr, CIMXMLParser& parser,
00117       const String& ns, CIMOMHandleIFC& hdl);
00118    void enumerateClasses( std::ostream& ostr, CIMXMLParser& parser,
00119       const String& ns, CIMOMHandleIFC& hdl) ;
00120    void enumerateInstanceNames(std::ostream& ostr, CIMXMLParser& parser,
00121       const String& ns, CIMOMHandleIFC& hdl);
00122    void enumerateInstances(std::ostream& ostr, CIMXMLParser& parser,
00123       const String& ns, CIMOMHandleIFC& hdl) ;
00124    void getClass(std::ostream& ostr, CIMXMLParser& parser,
00125       const String& ns, CIMOMHandleIFC& hdl) ;
00126    void getInstance(std::ostream& ostr, CIMXMLParser& parser,
00127       const String& ns, CIMOMHandleIFC& hdl);
00128 #if !defined(OW_DISABLE_PROPERTY_OPERATIONS)
00129    void getProperty(std::ostream& ostr, CIMXMLParser& parser,
00130       const String& ns, CIMOMHandleIFC& hdl);
00131 #endif // #if !defined(OW_DISABLE_PROPERTY_OPERATIONS)
00132    void getQualifier(std::ostream& ostr, CIMXMLParser& parser,
00133       const String& ns, CIMOMHandleIFC& hdl);
00134 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00135    void referenceNames(std::ostream& ostr, CIMXMLParser& parser,
00136       const String& ns, CIMOMHandleIFC& hdl) ;
00137    void references(std::ostream& ostr, CIMXMLParser& parser,
00138       const String& ns, CIMOMHandleIFC& hdl) ;
00139 #endif
00140 #ifndef OW_DISABLE_QUALIFIER_DECLARATION
00141    void setQualifier(std::ostream& ostr, CIMXMLParser& parser,
00142       const String& ns, CIMOMHandleIFC& hdl);
00143    void deleteQualifier(std::ostream& ostr, CIMXMLParser& parser,
00144       const String& ns, CIMOMHandleIFC& hdl);
00145    void enumerateQualifiers(std::ostream& ostr, CIMXMLParser& parser,
00146       const String& ns, CIMOMHandleIFC& hdl);
00147 #endif
00148    void execQuery(std::ostream& ostr, CIMXMLParser& parser,
00149       const String& ns, CIMOMHandleIFC& hdl);
00150    typedef void (XMLExecute::*execFuncPtr_t)(std::ostream& ostr,
00151       CIMXMLParser& qualNode, const String& ns, CIMOMHandleIFC& hdl);
00152    struct FuncEntry
00153    {
00154       const char* name;
00155       execFuncPtr_t func;
00156    };
00157    
00158    static FuncEntry g_funcs[];
00159    static bool funcEntryCompare(const FuncEntry& f1, const FuncEntry& f2);
00160    static FuncEntry* g_funcsEnd;
00161 
00162    
00163    CIMObjectPath m_commMechPath;
00164    
00165    CIMObjectPath m_hostedAccessPointPath;
00166    
00167    CIMObjectPath m_commMechForManager;
00168 };
00169 
00170 } 
00171 
00172 #endif