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_REQUESTHANDLERIFC_HPP_
00037 #define OW_REQUESTHANDLERIFC_HPP_
00038 #include "OW_config.h"
00039 #include "OW_Types.hpp"
00040 #include "OW_String.hpp"
00041 #include "OW_SharedLibraryReference.hpp"
00042 #include "OW_SortedVectorMap.hpp"
00043 #include "OW_IntrusiveReference.hpp"
00044 #include "OW_ServiceIFC.hpp"
00045 #include "OW_IfcsFwd.hpp"
00046 #include "OW_CommonFwd.hpp"
00047 
00048 #include <iosfwd>
00049 
00050 
00051 
00052 
00053 namespace OW_NAMESPACE
00054 {
00055 
00062 class OW_COMMON_API RequestHandlerIFC : public ServiceIFC
00063 {
00064 public:
00065    RequestHandlerIFC();
00066    virtual ~RequestHandlerIFC();
00076    void process(std::istream* istr, std::ostream* ostrEntity,
00077       std::ostream* ostrError, OperationContext& context);
00083    bool hasError(Int32& errCode, String& errDescr);
00084    bool hasError() { return m_hasError; }
00089    void options(CIMFeatures& cf, OperationContext& context)
00090       {  doOptions(cf, context); }
00091    virtual RequestHandlerIFC* clone() const = 0;
00092    ServiceEnvironmentIFCRef getEnvironment() const;
00093    virtual void setEnvironment(const ServiceEnvironmentIFCRef& env);
00094    virtual StringArray getSupportedContentTypes() const = 0;
00095    virtual String getContentType() const = 0;
00096    String getCIMError() const { return m_cimError; }
00097    void setError(Int32 errorCode, const String& errorDescription)
00098    {
00099       m_hasError = true;
00100       m_errorCode = errorCode;
00101       m_errorDescription = errorDescription;
00102    }
00103    void clearError()
00104    {
00105       m_hasError = false;
00106       m_errorCode = 0;
00107       m_errorDescription.erase();
00108    }
00109 protected:
00120    virtual void doProcess(std::istream* istr, std::ostream* ostrEntity,
00121       std::ostream* ostrError, OperationContext& context) = 0;
00127    virtual void doOptions(CIMFeatures& cf, OperationContext& context) = 0;
00128    String m_cimError;
00129    String getHost();
00130    String m_cachedHost;
00131 private:
00132    
00133    bool m_hasError;
00134    Int32 m_errorCode;
00135    String m_errorDescription;
00136 
00137 #ifdef OW_WIN32
00138 #pragma warning (push)
00139 #pragma warning (disable: 4251)
00140 #endif
00141 
00142    ServiceEnvironmentIFCRef m_env;
00143 
00144 #ifdef OW_WIN32
00145 #pragma warning (pop)
00146 #endif
00147 
00148 };
00149 
00150 } 
00151 
00152 
00153 #if !defined(OW_STATIC_SERVICES)
00154 #define OW_REQUEST_HANDLER_FACTORY(derived, handlerName) \
00155 extern "C" OW_EXPORT OW_NAMESPACE::RequestHandlerIFC* \
00156 createRequestHandler() \
00157 { \
00158    return new derived; \
00159 } \
00160 extern "C" OW_EXPORT const char* \
00161 getOWVersion() \
00162 { \
00163    return OW_VERSION; \
00164 }
00165 #else
00166 #define OW_REQUEST_HANDLER_FACTORY(derived, handlerName) \
00167 extern "C" OW_NAMESPACE::RequestHandlerIFC* \
00168 createRequestHandler_##handlerName() \
00169 { \
00170    return new derived; \
00171 }
00172 #endif 
00173 
00174 #endif