Files
Slnkdwf/ATL90/source/SProxy/WSDLBinding.h
Jos Groot Lipman 0e37d774d2 Merge SLNKDWF64 branch
svn path=/Slnkdwf/trunk/; revision=23911
2015-01-21 12:09:31 +00:00

260 lines
4.2 KiB
C++

//
// WSDLBinding.h
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
#pragma once
#include "stdafx.h"
#include "XMLElement.h"
#include "QName.h"
#include "Emit.h"
#include "WSDLPortTypeOperation.h"
class CWSDLPortType;
class CSoapBinding : public CXMLElement
{
private:
CStringW m_strTransport;
SOAPSTYLE m_style;
inline HRESULT ValidateStyle(const wchar_t *wsz, int cch)
{
m_style = ::GetStyle(wsz, cch);
if (m_style != SOAPSTYLE_UNK)
{
return S_OK;
}
return E_FAIL;
}
public:
CSoapBinding()
:m_style(SOAPSTYLE_UNK)
{
}
inline HRESULT SetTransport(const wchar_t *wszName, int cchName)
{
if (!wszName)
{
return E_FAIL;
}
m_strTransport.SetString(wszName, cchName);
return S_OK;
}
inline void SetTransport(const CStringW& strName)
{
m_strTransport = strName;
}
inline const CStringW& GetTransport()
{
return m_strTransport;
}
inline HRESULT SetStyle(const wchar_t *wszName, int cchName)
{
if (!wszName)
{
return E_FAIL;
}
return ValidateStyle(wszName, cchName);
}
inline HRESULT SetStyle(const CStringW& strName)
{
return ValidateStyle(strName, strName.GetLength());
}
inline const SOAPSTYLE GetStyle()
{
return m_style;
}
};
class CHttpBinding : public CXMLElement
{
private:
CStringW m_strVerb;
public:
inline HRESULT SetVerb(const wchar_t *wszName, int cchName)
{
if (!wszName)
{
return E_FAIL;
}
m_strVerb.SetString(wszName, cchName);
return S_OK;
}
inline HRESULT SetVerb(const CStringW& strName)
{
m_strVerb = strName;
return S_OK;
}
inline const CStringW& GetVerb()
{
return m_strVerb;
}
};
class CWSDLBinding : public CXMLElement
{
private:
CStringW m_strName;
CQName m_type;
CWSDLPortType * m_pPortType;
CAutoPtr<CSoapBinding> m_pSoapBinding;
CAutoPtr<CHttpBinding> m_pHttpBinding;
typedef CAtlPtrMap<CStringW, CWSDLPortTypeOperation *, CStringRefElementTraits<CStringW> > PORTYPEOPERATIONMAP;
PORTYPEOPERATIONMAP m_operations;
public:
inline CWSDLBinding()
:m_pPortType(NULL)
{
}
CWSDLPortType * GetPortType();
inline CWSDLPortTypeOperation * AddOperation(CWSDLPortTypeOperation *p)
{
if (p != NULL)
{
if (p->GetName().GetLength() != 0)
{
if (m_operations.SetAt(p->GetName(), p) != NULL)
{
return p;
}
}
}
EmitErrorHr(E_OUTOFMEMORY);
return NULL;
}
inline CSoapBinding * AddSoapBinding(CSoapBinding *pBinding = NULL)
{
if (pBinding == NULL)
{
pBinding = new CSoapBinding;
}
m_pSoapBinding.Attach( pBinding );
return m_pSoapBinding;
}
inline CSoapBinding * GetSoapBinding()
{
return m_pSoapBinding;
}
inline CHttpBinding * AddHttpBinding(CHttpBinding *pBinding = NULL)
{
if (pBinding == NULL)
{
pBinding = new CHttpBinding;
}
m_pHttpBinding.Attach( pBinding );
return m_pHttpBinding;
}
inline CHttpBinding * GetHttpBinding()
{
return m_pHttpBinding;
}
inline CWSDLPortTypeOperation * GetOperation(const CStringW& strName)
{
const PORTYPEOPERATIONMAP::CPair *p = m_operations.Lookup(strName);
if (p != NULL)
{
return p->m_value;
}
return NULL;
}
inline POSITION GetFirstOperation()
{
return m_operations.GetStartPosition();
}
inline CWSDLPortTypeOperation * GetNextOperation(POSITION &pos)
{
return m_operations.GetNextValue(pos);
}
inline HRESULT SetName(const wchar_t *wszName, int cchName)
{
if (!wszName)
{
return E_FAIL;
}
m_strName.SetString(wszName, cchName);
return S_OK;
}
inline HRESULT SetName(const CStringW& strName)
{
m_strName = strName;
return S_OK;
}
inline const CStringW& GetName()
{
return m_strName;
}
inline HRESULT SetType(const CStringW& strQName)
{
m_type.SetQName(strQName);
return S_OK;
}
inline HRESULT SetType(const CStringW& strPrefix, const CStringW& strName)
{
m_type.SetQName(strPrefix, strName);
return S_OK;
}
inline HRESULT SetType(const wchar_t *wszQName, int cchQName)
{
m_type.SetQName(wszQName, cchQName);
return S_OK;
}
inline const CQName& GetType()
{
return m_type;
}
};