/commons/Commons.UI.LayoutDataStore/LayoutStoreWorker.cs

https://github.com/vansickle/dbexplorer · C# · 241 lines · 143 code · 28 blank · 70 comment · 10 complexity · 22e69497d8f20ce6f061b3f2014aafb1 MD5 · raw file

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using Common.Logging;
  5. using Commons.Utils;
  6. using Commons.UI.LayoutDataStore.Properties;
  7. namespace Commons.UI.LayoutDataStore
  8. {
  9. /// <summary>
  10. /// Allowed saved layout data for form stores
  11. /// <rus>
  12. /// ïîçâîëÿåò ñîõðàíèòü íàñòðîéêè ôîðìû ñ åå êîíòðîëàìè</rus>
  13. /// </summary>
  14. public class LayoutStoreWorker : ILayoutStoreWorker
  15. {
  16. #region logging
  17. protected static readonly ILog LOG =
  18. LogManager.GetLogger(typeof (LayoutStoreWorker));
  19. #endregion
  20. private const string ConfigFileExt = "xml";
  21. private const string DefaultPostfix = "def";
  22. protected INamableControl form;
  23. private string configFileName;
  24. private ILayoutDataStorePathFactory layoutDataStorePathFactory;
  25. protected internal IList<ILayoutDataStore> stores;
  26. public LayoutStoreWorker(ILayoutDataStorePathFactory layoutDataStorePathFactory)
  27. {
  28. this.layoutDataStorePathFactory = layoutDataStorePathFactory;
  29. }
  30. /// <summary>
  31. /// used to directly set file name for layout data file
  32. /// </summary>
  33. /// <param name="layoutDataStorePathFactory"></param>
  34. /// <param name="onlyFileName"></param>
  35. /// <param name="stores"></param>
  36. public LayoutStoreWorker(ILayoutDataStorePathFactory layoutDataStorePathFactory,
  37. string onlyFileName, IList<ILayoutDataStore> stores)
  38. : this(layoutDataStorePathFactory)
  39. {
  40. if (string.IsNullOrEmpty(onlyFileName))
  41. throw new ArgumentNullException("onlyFileName", Resource.FileNameCanNotBeEmpty);
  42. configFileName = layoutDataStorePathFactory.GetConfigFileName(onlyFileName, ConfigFileExt);
  43. this.stores = stores;
  44. }
  45. public LayoutStoreWorker(ILayoutDataStorePathFactory layoutDataStorePathFactory, string onlyFileName,
  46. params ILayoutDataStore[] stores)
  47. : this(layoutDataStorePathFactory, onlyFileName, stores as IList<ILayoutDataStore>)
  48. {
  49. }
  50. /// <summary>
  51. /// constructor
  52. /// <rus>
  53. /// êîíñòðóêòîð</rus>
  54. /// </summary>
  55. /// <param name="layoutDataStorePathFactory"></param>
  56. /// <param name="form"> winform on which needs to be store stores layout data
  57. /// <rus>ôîðìà, íà êîòîðîé íóæíî ñîõðàíèòü ðàñïîëîæåíèå êîíòðîëåê</rus>
  58. /// </param>
  59. /// <param name="stores"> control list for layout data store
  60. /// <rus>ñïèñîê êîíòðîëîâ ÷üå ðàñïîëîæåíèå íóæíî ñîõðàíèòü </rus>
  61. /// </param>
  62. public LayoutStoreWorker(ILayoutDataStorePathFactory layoutDataStorePathFactory,
  63. INamableControl form, IList<ILayoutDataStore> stores)
  64. : this(layoutDataStorePathFactory)
  65. {
  66. if ((form == null) || (string.IsNullOrEmpty(form.Name)))
  67. throw new ArgumentNullException("form", Resource.NameOfTheFormMustBeUnic);
  68. this.form = form;
  69. this.stores = stores;
  70. }
  71. public LayoutStoreWorker(ILayoutDataStorePathFactory layoutDataStorePathFactory, INamableControl form,
  72. params ILayoutDataStore[] stores)
  73. : this(layoutDataStorePathFactory, form, (IList<ILayoutDataStore>) stores)
  74. {
  75. }
  76. public ILayoutDataStorePathFactory LayoutDataStorePathFactory
  77. {
  78. get { return layoutDataStorePathFactory; }
  79. set { layoutDataStorePathFactory = value; }
  80. }
  81. #region ILayoutStoreWorker Members
  82. /// <summary>
  83. /// filename of Config-file
  84. /// <rus>
  85. /// èìÿ êîíôèãóðàöèîííîãî ôàéëà</rus>
  86. /// </summary>
  87. public string ConfigFileName
  88. {
  89. get
  90. {
  91. ///åñëè èìÿ íå ïóñòî, òî âûñòàâëÿåòñÿ âðó÷íóþ
  92. if (string.IsNullOrEmpty(configFileName))
  93. configFileName = LayoutDataStorePathFactory.GetConfigFileName(form.Name, ConfigFileExt);
  94. return configFileName;
  95. }
  96. set { configFileName = value; }
  97. }
  98. /// <summary>
  99. /// saved layout data for form stores
  100. /// <rus>
  101. /// Ñîõðàíèòü íàñòðîéêè ôîðìû è åå êîíòðîëîâ</rus>
  102. /// </summary>
  103. public void Save()
  104. {
  105. LayoutSettings.WriteXml(ConfigFileName, stores);
  106. }
  107. /// <summary>
  108. /// saved layout data for form stores
  109. /// <rus>
  110. /// Ñîõðàíèòü íàñòðîéêè ôîðìû è åå êîíòðîëîâ</rus>
  111. /// </summary>
  112. public void SaveDefault()
  113. {
  114. LayoutSettings.WriteXml(DefaultLayout, stores);
  115. }
  116. /// <summary>
  117. /// filename of Config-file with Default values
  118. /// <rus>
  119. /// èìÿ êîíôèãóðàöèîííîãî ôàéëà c íàñòðîéêàìè ïî óìîë÷àíèþ</rus>
  120. /// </summary>
  121. public string DefaultLayout
  122. {
  123. get
  124. {
  125. return string.Format("{0}{1}.{2}"
  126. , Path.ChangeExtension(ConfigFileName, "")
  127. , DefaultPostfix
  128. , ConfigFileExt);
  129. }
  130. }
  131. /// <summary>
  132. /// load layout data for form stores
  133. /// <rus>
  134. /// Çàãðóçèòü íàñòðîéêè ôîðìû è åå êîíòðîëîâ</rus>
  135. /// </summary>
  136. public void Load()
  137. {
  138. FileInfo fileInfo = new FileInfo(FileUtils.MakeValidFilePath(ConfigFileName));
  139. if (!fileInfo.Exists)
  140. {
  141. LoadDefault();
  142. return;
  143. }
  144. try
  145. {
  146. LayoutSettings.ReadXml(ConfigFileName, false, stores);
  147. }
  148. catch (Exception e)
  149. {
  150. LOG.Error(e);
  151. throw new ApplicationException(Resource.LoadingIsInterruptedWillBeLoadedByDefault,e);
  152. }
  153. }
  154. /// <summary>
  155. /// set user interface control allowing to load a state of Entity by default.
  156. /// <rus>
  157. /// óñòàíîâèòü êîíòðîëüêó, êîòîðàÿ äàñò ïîëüçîâàòåëþ âîçìîæíîñòü
  158. /// çàãðóçèòü ñîñòîÿíèå Entity, ïðèíÿòîå ïî óìîë÷àíèþ</rus>
  159. /// </summary>
  160. public void SetUI4LoadDefault()
  161. {
  162. if (stores != null)
  163. foreach (ILayoutDataStore store in stores)
  164. {
  165. store.SetUI4LoadDefault(this);
  166. }
  167. }
  168. /// <summary>
  169. /// load default layout data for form stores
  170. /// <rus>
  171. /// Çàãðóçèòü íàñòðîéêè ôîðìû è åå êîíòðîëîâ ïî óìîë÷àíèþ</rus>
  172. /// </summary>
  173. public void LoadDefault()
  174. {
  175. FileInfo fileInfo = new FileInfo(FileUtils.MakeValidFilePath(DefaultLayout));
  176. if (!fileInfo.Exists)
  177. return;
  178. LayoutSettings.ReadXml(DefaultLayout, true, stores);
  179. }
  180. /// <summary>
  181. /// load default layout data for control
  182. /// <rus>
  183. /// Çàãðóçèòü íàñòðîéêó ïî óìîë÷àíèþ äëÿ êîíêðåòíîãî êîíòðîëà</rus>
  184. /// </summary>
  185. public void LoadDefault(ILayoutDataStore control)
  186. {
  187. LoadStoreFromFile(DefaultLayout, control);
  188. }
  189. /// <summary>
  190. /// load layout data for control
  191. /// <rus>
  192. /// Çàãðóçèòü íàñòðîéêó äëÿ êîíêðåòíîãî êîíòðîëà</rus>
  193. /// </summary>
  194. public void Load(ILayoutDataStore control)
  195. {
  196. LoadStoreFromFile(ConfigFileName, control);
  197. }
  198. #endregion
  199. private static void LoadStoreFromFile(string fileName, ILayoutDataStore store)
  200. {
  201. FileInfo fileInfo = new FileInfo(FileUtils.MakeValidFilePath(fileName));
  202. if (!fileInfo.Exists)
  203. return;
  204. LayoutSettings.ReadXml(fileName, store, true);
  205. }
  206. public void Init()
  207. {
  208. SaveDefault();
  209. SetUI4LoadDefault();
  210. Load();
  211. }
  212. }
  213. }