| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #include "./templateParser.h"
- #include "./loginTemplate.h"
- #include "./templateCredentials.h"
- #include "./templateInfo.h"
- #include "./templateAddress.h"
- #include "./common.h"
- #include "../../xml/obj_xml.h"
- LoginTemplateParser::LoginTemplateParser()
- : object(NULL)
- {
- }
- LoginTemplateParser::~LoginTemplateParser()
- {
- if (NULL != object)
- object->Release();
-
- }
- HRESULT LoginTemplateParser::Begin(obj_xml *reader, ifc_xmlreaderparams *params)
- {
- if (NULL != object)
- return E_PENDING;
- if (NULL == reader || NULL == params)
- return E_INVALIDARG;
-
- GUID templateId;
- LPCWSTR pszId = params->getItemValue(L"id");
- if (NULL == pszId || RPC_S_OK != UuidFromString((RPC_WSTR)pszId, &templateId))
- return E_INVALIDARG;
- HRESULT hr;
- if (IsEqualGUID(LTUID_CREDENTIALS, templateId))
- hr = LoginTemplateCredentials::CreateInstance((LoginTemplateCredentials**)&object);
- else if (IsEqualGUID(LTUID_INFO, templateId))
- hr = LoginTemplateInfo::CreateInstance((LoginTemplateInfo**)&object);
- else if (IsEqualGUID(LTUID_ADDRESS, templateId))
- hr = LoginTemplateAddress::CreateInstance((LoginTemplateAddress**)&object);
- else
- hr = E_INVALIDARG;
-
- if (SUCCEEDED(hr))
- reader->xmlreader_registerCallback(L"loginProviders\fprovider\ftemplate\f*", this);
-
- return hr;
- }
- HRESULT LoginTemplateParser::End(obj_xml *reader, LoginTemplate **instance)
- {
- if (NULL == object)
- return E_UNEXPECTED;
- HRESULT hr;
-
- if (SUCCEEDED(object->IsValid()))
- {
- if (NULL != instance)
- {
- *instance = object;
- object->AddRef();
- }
- hr = S_OK;
- }
- else
- hr = E_FAIL;
- object->Release();
- object = NULL;
- if (NULL != reader)
- reader->xmlreader_unregisterCallback(this);
- return hr;
- }
- void LoginTemplateParser::Event_XmlStartElement(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params)
- {
- elementString.Clear();
- }
- void LoginTemplateParser::Event_XmlEndElement(const wchar_t *xmlpath, const wchar_t *xmltag)
- {
- if (NULL != object)
- object->SetParameter(xmltag, elementString.Get());
- }
- void LoginTemplateParser::Event_XmlCharData(const wchar_t *xmlpath, const wchar_t *xmltag, const wchar_t *value)
- {
- elementString.Append(value);
- }
- void LoginTemplateParser::Event_XmlError(int linenum, int errcode, const wchar_t *errstr)
- {
- elementString.Clear();
- }
- #define CBCLASS LoginTemplateParser
- START_DISPATCH;
- VCB(ONSTARTELEMENT, Event_XmlStartElement)
- VCB(ONENDELEMENT, Event_XmlEndElement)
- VCB(ONCHARDATA, Event_XmlCharData)
- VCB(ONERROR, Event_XmlError)
- END_DISPATCH;
- #undef CBCLASS
|