/BlogEngine/DotNetSlave.BusinessLogic/DataStore/XMLDocumentBehavior.cs

# · C# · 144 lines · 79 code · 21 blank · 44 comment · 8 complexity · 963d0421c27c0a87b926c4679f19f8f3 MD5 · raw file

  1. namespace BlogEngine.Core.DataStore
  2. {
  3. using System;
  4. using System.Configuration;
  5. using System.IO;
  6. using System.Xml;
  7. using System.Xml.Serialization;
  8. using BlogEngine.Core.Providers;
  9. /// <summary>
  10. /// Class to encapsulate saving and retreaving
  11. /// XML documents to and from data storage
  12. /// </summary>
  13. public class XmlDocumentBehavior : ISettingsBehavior
  14. {
  15. #region Constants and Fields
  16. /// <summary>
  17. /// The _section.
  18. /// </summary>
  19. private static readonly BlogProviderSection Section =
  20. (BlogProviderSection)ConfigurationManager.GetSection("BlogEngine/blogProvider");
  21. #endregion
  22. #region Implemented Interfaces
  23. #region ISettingsBehavior
  24. /// <summary>
  25. /// Gets settings from data store
  26. /// </summary>
  27. /// <param name="extensionType">
  28. /// Extension Type
  29. /// </param>
  30. /// <param name="extensionId">
  31. /// Extension ID
  32. /// </param>
  33. /// <returns>
  34. /// Settings as Stream
  35. /// </returns>
  36. public object GetSettings(ExtensionType extensionType, string extensionId)
  37. {
  38. WidgetData widgetData;
  39. var xml = new XmlDocument();
  40. if (Section.DefaultProvider == "XmlBlogProvider")
  41. {
  42. var stm = (Stream)BlogService.LoadFromDataStore(extensionType, extensionId);
  43. if (stm != null)
  44. {
  45. var x = new XmlSerializer(typeof(XmlDocument));
  46. xml = (XmlDocument)x.Deserialize(stm);
  47. stm.Close();
  48. }
  49. }
  50. else
  51. {
  52. var o = BlogService.LoadFromDataStore(extensionType, extensionId);
  53. if (!string.IsNullOrEmpty((string)o))
  54. {
  55. var serializer = new XmlSerializer(typeof(WidgetData));
  56. using (var reader = new StringReader((string)o))
  57. {
  58. widgetData = (WidgetData)serializer.Deserialize(reader);
  59. }
  60. if (widgetData.Settings.Length > 0)
  61. {
  62. xml.InnerXml = widgetData.Settings;
  63. }
  64. }
  65. }
  66. return xml;
  67. }
  68. /// <summary>
  69. /// Saves XML document to data storage
  70. /// </summary>
  71. /// <param name="extensionType">
  72. /// Extension Type
  73. /// </param>
  74. /// <param name="extensionId">
  75. /// Extension ID
  76. /// </param>
  77. /// <param name="settings">
  78. /// Settings as XML document
  79. /// </param>
  80. /// <returns>
  81. /// True if saved
  82. /// </returns>
  83. public bool SaveSettings(ExtensionType extensionType, string extensionId, object settings)
  84. {
  85. var xml = (XmlDocument)settings;
  86. if (Section.DefaultProvider == "XmlBlogProvider")
  87. {
  88. BlogService.SaveToDataStore(extensionType, extensionId, xml);
  89. }
  90. else
  91. {
  92. var wd = new WidgetData { Settings = xml.InnerXml };
  93. BlogService.SaveToDataStore(extensionType, extensionId, wd);
  94. }
  95. return true;
  96. }
  97. #endregion
  98. #endregion
  99. }
  100. /// <summary>
  101. /// Wrap around xml document
  102. /// </summary>
  103. [Serializable]
  104. public class WidgetData
  105. {
  106. #region Constructors and Destructors
  107. /// <summary>
  108. /// Initializes a new instance of the <see cref = "WidgetData" /> class.
  109. /// </summary>
  110. public WidgetData()
  111. {
  112. this.Settings = string.Empty;
  113. }
  114. #endregion
  115. #region Properties
  116. /// <summary>
  117. /// Gets or sets the settings.
  118. /// </summary>
  119. /// <value>The settings.</value>
  120. public string Settings { get; set; }
  121. #endregion
  122. }
  123. }