1
0

templateParser.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #include "./templateParser.h"
  2. #include "./loginTemplate.h"
  3. #include "./templateCredentials.h"
  4. #include "./templateInfo.h"
  5. #include "./templateAddress.h"
  6. #include "./common.h"
  7. #include "../../xml/obj_xml.h"
  8. LoginTemplateParser::LoginTemplateParser()
  9. : object(NULL)
  10. {
  11. }
  12. LoginTemplateParser::~LoginTemplateParser()
  13. {
  14. if (NULL != object)
  15. object->Release();
  16. }
  17. HRESULT LoginTemplateParser::Begin(obj_xml *reader, ifc_xmlreaderparams *params)
  18. {
  19. if (NULL != object)
  20. return E_PENDING;
  21. if (NULL == reader || NULL == params)
  22. return E_INVALIDARG;
  23. GUID templateId;
  24. LPCWSTR pszId = params->getItemValue(L"id");
  25. if (NULL == pszId || RPC_S_OK != UuidFromString((RPC_WSTR)pszId, &templateId))
  26. return E_INVALIDARG;
  27. HRESULT hr;
  28. if (IsEqualGUID(LTUID_CREDENTIALS, templateId))
  29. hr = LoginTemplateCredentials::CreateInstance((LoginTemplateCredentials**)&object);
  30. else if (IsEqualGUID(LTUID_INFO, templateId))
  31. hr = LoginTemplateInfo::CreateInstance((LoginTemplateInfo**)&object);
  32. else if (IsEqualGUID(LTUID_ADDRESS, templateId))
  33. hr = LoginTemplateAddress::CreateInstance((LoginTemplateAddress**)&object);
  34. else
  35. hr = E_INVALIDARG;
  36. if (SUCCEEDED(hr))
  37. reader->xmlreader_registerCallback(L"loginProviders\fprovider\ftemplate\f*", this);
  38. return hr;
  39. }
  40. HRESULT LoginTemplateParser::End(obj_xml *reader, LoginTemplate **instance)
  41. {
  42. if (NULL == object)
  43. return E_UNEXPECTED;
  44. HRESULT hr;
  45. if (SUCCEEDED(object->IsValid()))
  46. {
  47. if (NULL != instance)
  48. {
  49. *instance = object;
  50. object->AddRef();
  51. }
  52. hr = S_OK;
  53. }
  54. else
  55. hr = E_FAIL;
  56. object->Release();
  57. object = NULL;
  58. if (NULL != reader)
  59. reader->xmlreader_unregisterCallback(this);
  60. return hr;
  61. }
  62. void LoginTemplateParser::Event_XmlStartElement(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params)
  63. {
  64. elementString.Clear();
  65. }
  66. void LoginTemplateParser::Event_XmlEndElement(const wchar_t *xmlpath, const wchar_t *xmltag)
  67. {
  68. if (NULL != object)
  69. object->SetParameter(xmltag, elementString.Get());
  70. }
  71. void LoginTemplateParser::Event_XmlCharData(const wchar_t *xmlpath, const wchar_t *xmltag, const wchar_t *value)
  72. {
  73. elementString.Append(value);
  74. }
  75. void LoginTemplateParser::Event_XmlError(int linenum, int errcode, const wchar_t *errstr)
  76. {
  77. elementString.Clear();
  78. }
  79. #define CBCLASS LoginTemplateParser
  80. START_DISPATCH;
  81. VCB(ONSTARTELEMENT, Event_XmlStartElement)
  82. VCB(ONENDELEMENT, Event_XmlEndElement)
  83. VCB(ONCHARDATA, Event_XmlCharData)
  84. VCB(ONERROR, Event_XmlError)
  85. END_DISPATCH;
  86. #undef CBCLASS