PageRenderTime 38ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/BlogEngine/DotNetSlave.BusinessLogic/Providers/XmlProvider/DataStore.cs

#
C# | 141 lines | 68 code | 15 blank | 58 comment | 4 complexity | b74b529bb97e9a93af38f3ed038faf89 MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0, BSD-3-Clause
  1. // --------------------------------------------------------------------------------------------------------------------
  2. // <summary>
  3. // A storage provider for BlogEngine that uses XML files.
  4. // <remarks>
  5. // To build another provider, you can just copy and modify
  6. // this one. Then add it to the web.config's BlogEngine section.
  7. // </remarks>
  8. // </summary>
  9. // --------------------------------------------------------------------------------------------------------------------
  10. using System.Linq;
  11. namespace BlogEngine.Core.Providers
  12. {
  13. using System.IO;
  14. using System.Web.Hosting;
  15. using System.Xml.Serialization;
  16. using BlogEngine.Core.DataStore;
  17. /// <summary>
  18. /// A storage provider for BlogEngine that uses XML files.
  19. /// <remarks>
  20. /// To build another provider, you can just copy and modify
  21. /// this one. Then add it to the web.config's BlogEngine section.
  22. /// </remarks>
  23. /// </summary>
  24. public partial class XmlBlogProvider : BlogProvider
  25. {
  26. #region Public Methods
  27. /// <summary>
  28. /// Loads settings from generic data store
  29. /// </summary>
  30. /// <param name="extensionType">
  31. /// Extension Type
  32. /// </param>
  33. /// <param name="extensionId">
  34. /// Extension ID
  35. /// </param>
  36. /// <returns>
  37. /// Stream Settings
  38. /// </returns>
  39. public override object LoadFromDataStore(ExtensionType extensionType, string extensionId)
  40. {
  41. var fileName = string.Format("{0}{1}.xml", StorageLocation(extensionType), extensionId);
  42. Stream str = null;
  43. if (!Directory.Exists(StorageLocation(extensionType)))
  44. {
  45. Directory.CreateDirectory(StorageLocation(extensionType));
  46. }
  47. if (File.Exists(fileName))
  48. {
  49. var reader = new StreamReader(fileName);
  50. str = reader.BaseStream;
  51. }
  52. return str;
  53. }
  54. /// <summary>
  55. /// Removes settings from data store
  56. /// </summary>
  57. /// <param name="extensionType">
  58. /// Extension Type
  59. /// </param>
  60. /// <param name="extensionId">
  61. /// Extension Id
  62. /// </param>
  63. public override void RemoveFromDataStore(ExtensionType extensionType, string extensionId)
  64. {
  65. var fileName = string.Format("{0}{1}.xml", StorageLocation(extensionType), extensionId);
  66. File.Delete(fileName);
  67. }
  68. /// <summary>
  69. /// Save settings to generic data store
  70. /// </summary>
  71. /// <param name="extensionType">
  72. /// Type of extension
  73. /// </param>
  74. /// <param name="extensionId">
  75. /// Extension ID
  76. /// </param>
  77. /// <param name="settings">
  78. /// Stream Settings
  79. /// </param>
  80. public override void SaveToDataStore(ExtensionType extensionType, string extensionId, object settings)
  81. {
  82. var fileName = string.Format("{0}{1}.xml", StorageLocation(extensionType), extensionId);
  83. if (!Directory.Exists(StorageLocation(extensionType)))
  84. {
  85. Directory.CreateDirectory(StorageLocation(extensionType));
  86. }
  87. using (TextWriter writer = new StreamWriter(fileName))
  88. {
  89. var x = new XmlSerializer(settings.GetType());
  90. x.Serialize(writer, settings);
  91. }
  92. }
  93. #endregion
  94. #region Methods
  95. /// <summary>
  96. /// Data Store Location
  97. /// </summary>
  98. /// <param name="extensionType">
  99. /// Type of extension
  100. /// </param>
  101. /// <returns>
  102. /// Path to storage directory
  103. /// </returns>
  104. private static string StorageLocation(ExtensionType extensionType)
  105. {
  106. switch (extensionType)
  107. {
  108. case ExtensionType.Extension:
  109. Blog blog = Blog.Blogs.FirstOrDefault(b => b.IsPrimary);
  110. return
  111. HostingEnvironment.MapPath(
  112. Path.Combine(blog.StorageLocation, @"datastore\extensions\"));
  113. case ExtensionType.Widget:
  114. return
  115. HostingEnvironment.MapPath(
  116. Path.Combine(Blog.CurrentInstance.StorageLocation, @"datastore\widgets\"));
  117. case ExtensionType.Theme:
  118. return
  119. HostingEnvironment.MapPath(
  120. Path.Combine(Blog.CurrentInstance.StorageLocation, @"datastore\themes\"));
  121. }
  122. return string.Empty;
  123. }
  124. #endregion
  125. }
  126. }