FormXml.cs
上传用户:husern
上传日期:2022-03-24
资源大小:534k
文件大小:5k
源码类别:

编辑器/阅读器

开发平台:

C#

  1. // -- FILE ------------------------------------------------------------------
  2. // name       : FormXml.cs
  3. // project    : Itenso Web User Forms
  4. // created    : Jani Giannoudis - 2008.10.30
  5. // language   : c#
  6. // environment: .NET 2.0
  7. // copyright  : (c) 2008 by Itenso GmbH, Switzerland
  8. // --------------------------------------------------------------------------
  9. using System.Xml;
  10. namespace Itenso.WebUserForms.Data.Form
  11. {
  12. // ------------------------------------------------------------------------
  13. public sealed class FormXml :  XmlBase<IForm,Form>
  14. {
  15. // ----------------------------------------------------------------------
  16. private FormXml()
  17. : base( docTag, FormXmlSchema.XmlReadSettings )
  18. {
  19. } // FormXml
  20. // ----------------------------------------------------------------------
  21. public static FormXml Instance
  22. {
  23. get
  24. {
  25. if ( instance == null )
  26. {
  27. lock ( mutex )
  28. {
  29. if ( instance == null )
  30. {
  31. instance = new FormXml();
  32. }
  33. }
  34. }
  35. return instance;
  36. }
  37. } // Instance
  38. // ----------------------------------------------------------------------
  39. protected sealed override void DoLoad( IForm form, XmlElement formElement )
  40. {
  41. form.FormType = GetAttribute( formElement, typeAttr );
  42. form.FormId = GetAttribute( formElement, idAttr );
  43. form.SetCreated( GetDateTimeAttribute( formElement, createdAttr ).Value,
  44. GetAttribute( formElement, createdByAttr ) );
  45. if ( formElement.HasAttribute( updatedAttr ) )
  46. {
  47. form.MarkUpdated( GetDateTimeAttribute( formElement, updatedAttr ).Value,
  48. formElement.HasAttribute( updatedByAttr ) ?
  49. GetAttribute( formElement, updatedByAttr ) : form.CreatedByUser );
  50. }
  51. form.IsLocked = "true".Equals( GetAttribute( formElement, lockedAttr ) );
  52. LoadFormGroup( form, formElement );
  53. } // DoLoad
  54. // ----------------------------------------------------------------------
  55. private void LoadFormGroup( IFormGroup formGroup, XmlElement formGroupElement )
  56. {
  57. formGroup.Name = GetAttribute( formGroupElement, nameAttr );
  58. formGroup.Entities.Clear();
  59. XmlElement formEntityElement = GetFirstChildElement( formGroupElement );
  60. while ( formEntityElement != null )
  61. {
  62. switch ( formEntityElement.LocalName )
  63. {
  64. case fieldTag:
  65. FormField formField = new FormField();
  66. formField.Name = GetAttribute( formEntityElement, nameAttr );
  67. formField.Content = formEntityElement.InnerText;
  68. formGroup.Entities.Add( formField );
  69. break;
  70. case formTag:
  71. FormGroup subFormGroup = new FormGroup();
  72. LoadFormGroup( subFormGroup, formEntityElement );
  73. formGroup.Entities.Add( subFormGroup );
  74. break;
  75. }
  76. formEntityElement = GetNextSiblingElement( formEntityElement );
  77. }
  78. } // LoadFormGroup
  79. // ----------------------------------------------------------------------
  80. protected sealed override void DoSave( IForm form, XmlElement formElement )
  81. {
  82. SetAttribute( formElement, typeAttr, form.FormType );
  83. SetAttribute( formElement, idAttr, form.FormId );
  84. SetDateTimeAttribute( formElement, createdAttr, form.Created );
  85. SetAttribute( formElement, createdByAttr, form.CreatedByUser );
  86. SetDateTimeAttribute( formElement, updatedAttr, form.LastUpdated );
  87. SetAttribute( formElement, updatedByAttr, form.LastUpdatedByUser );
  88. SetAttribute( formElement, lockedAttr, form.IsLocked ? "true" : "false" );
  89. SaveFormGroup( form, formElement );
  90. } // DoSave
  91. // ----------------------------------------------------------------------
  92. private void SaveFormGroup( IFormGroup formGroup, XmlElement formGroupElement )
  93. {
  94. SetAttribute( formGroupElement, nameAttr, formGroup.Name );
  95. foreach ( IFormEntity formEntity in formGroup.Entities )
  96. {
  97. switch ( formEntity.Kind )
  98. {
  99. case FormEntityType.Field:
  100. XmlElement formFieldElement = AppendTag( formGroupElement, fieldTag );
  101. IFormField formField = formEntity as IFormField;
  102. SetAttribute( formFieldElement, nameAttr, formField.Name );
  103. formFieldElement.InnerText = formField.Content;
  104. break;
  105. case FormEntityType.Form:
  106. XmlElement formSubGroupElement = AppendTag( formGroupElement, formTag );
  107. IFormGroup formSubGroup = formEntity as IFormGroup;
  108. SaveFormGroup( formSubGroup, formSubGroupElement );
  109. break;
  110. }
  111. }
  112. } // SaveFormGroup
  113. // ----------------------------------------------------------------------
  114. // members
  115. private static readonly object mutex = new object();
  116. private static FormXml instance;
  117. private const string docTag = "form";
  118. private const string formTag = "form";
  119. private const string fieldTag = "field";
  120. private const string nameAttr = "name";
  121. private const string typeAttr = "type";
  122. private const string idAttr = "id";
  123. private const string createdAttr = "created";
  124. private const string createdByAttr = "created-by";
  125. private const string updatedAttr = "updated";
  126. private const string updatedByAttr = "updated-by";
  127. private const string lockedAttr = "locked";
  128. } // class FormXml
  129. } // namespace Itenso.WebUserForms.Data.Form
  130. // -- EOF -------------------------------------------------------------------