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

201 lines
4.2 KiB
C++

//
// Schema.h
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
#pragma once
#include "stdafx.h"
#include "XMLElement.h"
#include "XSDElement.h"
#include "ComplexType.h"
#include "SimpleType.h"
#include "Element.h"
//#include "UnsupportedElement.h"
#include "Emit.h"
#include "resource.h"
class CSchema : public CXSDElement
{
private:
typedef CAtlPtrMap<CStringW, CComplexType *, CStringRefElementTraits<CStringW> > COMPLEXTYPEMAP;
typedef CAtlPtrMap<CStringW, CSimpleType *, CStringRefElementTraits<CStringW> > SIMPLETYPEMAP;
typedef CAtlPtrMap<CStringW, CElement *, CStringRefElementTraits<CStringW> > ELEMENTMAP;
// typedef CAtlPtrMap<CStringW, CUnsupportedElement *, CStringRefElementTraits<CStringW> > UNSUPPORTEDMAP;
COMPLEXTYPEMAP m_complexTypes;
SIMPLETYPEMAP m_simpleTypes;
ELEMENTMAP m_elements;
// UNSUPPORTEDMAP m_unsupportedTypes;
CStringW m_strTargetNamespace;
CStringW m_strName;
CStringW m_strID;
public:
CComplexType * AddComplexType(CComplexType * p);
CSimpleType * AddSimpleType(CSimpleType * p);
CElement * AddElement(CElement * p);
CXSDElement * GetNamedItemFromParent(const CStringW& strUri, const CStringW& strName);
inline CXSDElement * GetNamedItem(const CStringW& strUri, const CStringW& strName)
{
CXSDElement *pRet = NULL;
if (strUri.GetLength() == 0 || strUri == GetTargetNamespace())
{
CStringW str;
pRet = GetComplexType(str, strName);
if (pRet == NULL)
{
pRet = GetSimpleType(str, strName);
if (pRet == NULL)
{
pRet = GetElement(str, strName);
// if (pRet == NULL)
// {
// pRet = GetUnsupportedElement(str, strName);
// }
}
}
}
else
{
pRet = GetNamedItemFromParent(strUri, strName);
}
return pRet;
}
inline CComplexType * GetComplexType(const CStringW& strUri, const CStringW& strName)
{
if (strUri.GetLength() == 0 || strUri == GetTargetNamespace())
{
const COMPLEXTYPEMAP::CPair *p = m_complexTypes.Lookup(strName);
if (p != NULL)
{
return p->m_value;
}
}
return NULL;
}
inline CSimpleType * GetSimpleType(const CStringW& strUri, const CStringW& strName)
{
if (strUri.GetLength() == 0 || strUri == GetTargetNamespace())
{
const SIMPLETYPEMAP::CPair *p = m_simpleTypes.Lookup(strName);
if (p != NULL)
{
return p->m_value;
}
}
return NULL;
}
inline CElement * GetElement(const CStringW& strUri, const CStringW& strName)
{
if (strUri.GetLength() == 0 || strUri == GetTargetNamespace())
{
const ELEMENTMAP::CPair *p = m_elements.Lookup(strName);
if (p != NULL)
{
return p->m_value;
}
}
return NULL;
}
// inline CUnsupportedElement * GetUnsupportedElement(const CStringW& strUri, const CStringW& strName)
// {
// if (strUri.GetLength() == 0 || strUri == GetTargetNamespace())
// {
// const UNSUPPORTEDMAP::CPair *p = m_unsupportedTypes.Lookup(strName);
// if (p != NULL)
// {
// return p->m_value;
// }
// }
//
// return NULL;
// }
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 SetTargetNamespace(const wchar_t *wszTargetNamespace, int cchTargetNamespace)
{
if (!wszTargetNamespace)
{
return E_FAIL;
}
m_strTargetNamespace.SetString(wszTargetNamespace, cchTargetNamespace);
return S_OK;
}
inline HRESULT SetTargetNamespace(const CStringW& strTargetNamespace)
{
m_strTargetNamespace = strTargetNamespace;
return S_OK;
}
inline const CStringW& GetTargetNamespace()
{
return m_strTargetNamespace;
}
inline HRESULT SetID(const wchar_t *wszID, int cchID)
{
if (!wszID)
{
return E_FAIL;
}
m_strID.SetString(wszID, cchID);
return S_OK;
}
inline HRESULT SetID(const CStringW& strID)
{
m_strID = strID;
return S_OK;
}
inline const CStringW& GetID()
{
return m_strID;
}
};