/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
- using System;
- using System.Collections.Generic;
- using System.IO;
- using Common.Logging;
- using Commons.Utils;
- using Commons.UI.LayoutDataStore.Properties;
-
- namespace Commons.UI.LayoutDataStore
- {
- /// <summary>
- /// Allowed saved layout data for form stores
- /// <rus>
- /// ïîçâîëÿåò ñîõðàíèòü íàñòðîéêè ôîðìû ñ åå êîíòðîëàìè</rus>
- /// </summary>
- public class LayoutStoreWorker : ILayoutStoreWorker
- {
- #region logging
-
- protected static readonly ILog LOG =
- LogManager.GetLogger(typeof (LayoutStoreWorker));
-
- #endregion
-
- private const string ConfigFileExt = "xml";
- private const string DefaultPostfix = "def";
- protected INamableControl form;
- private string configFileName;
- private ILayoutDataStorePathFactory layoutDataStorePathFactory;
-
- protected internal IList<ILayoutDataStore> stores;
-
- public LayoutStoreWorker(ILayoutDataStorePathFactory layoutDataStorePathFactory)
- {
- this.layoutDataStorePathFactory = layoutDataStorePathFactory;
- }
-
- /// <summary>
- /// used to directly set file name for layout data file
- /// </summary>
- /// <param name="layoutDataStorePathFactory"></param>
- /// <param name="onlyFileName"></param>
- /// <param name="stores"></param>
- public LayoutStoreWorker(ILayoutDataStorePathFactory layoutDataStorePathFactory,
- string onlyFileName, IList<ILayoutDataStore> stores)
- : this(layoutDataStorePathFactory)
- {
- if (string.IsNullOrEmpty(onlyFileName))
- throw new ArgumentNullException("onlyFileName", Resource.FileNameCanNotBeEmpty);
- configFileName = layoutDataStorePathFactory.GetConfigFileName(onlyFileName, ConfigFileExt);
- this.stores = stores;
- }
-
- public LayoutStoreWorker(ILayoutDataStorePathFactory layoutDataStorePathFactory, string onlyFileName,
- params ILayoutDataStore[] stores)
- : this(layoutDataStorePathFactory, onlyFileName, stores as IList<ILayoutDataStore>)
- {
- }
-
-
-
- /// <summary>
- /// constructor
- /// <rus>
- /// êîíñòðóêòîð</rus>
- /// </summary>
- /// <param name="layoutDataStorePathFactory"></param>
- /// <param name="form"> winform on which needs to be store stores layout data
- /// <rus>ôîðìà, íà êîòîðîé íóæíî ñîõðàíèòü ðàñïîëîæåíèå êîíòðîëåê</rus>
- /// </param>
- /// <param name="stores"> control list for layout data store
- /// <rus>ñïèñîê êîíòðîëîâ ÷üå ðàñïîëîæåíèå íóæíî ñîõðàíèòü </rus>
- /// </param>
- public LayoutStoreWorker(ILayoutDataStorePathFactory layoutDataStorePathFactory,
- INamableControl form, IList<ILayoutDataStore> stores)
- : this(layoutDataStorePathFactory)
- {
- if ((form == null) || (string.IsNullOrEmpty(form.Name)))
- throw new ArgumentNullException("form", Resource.NameOfTheFormMustBeUnic);
- this.form = form;
- this.stores = stores;
- }
-
-
- public LayoutStoreWorker(ILayoutDataStorePathFactory layoutDataStorePathFactory, INamableControl form,
- params ILayoutDataStore[] stores)
- : this(layoutDataStorePathFactory, form, (IList<ILayoutDataStore>) stores)
- {
- }
-
- public ILayoutDataStorePathFactory LayoutDataStorePathFactory
- {
- get { return layoutDataStorePathFactory; }
- set { layoutDataStorePathFactory = value; }
- }
-
- #region ILayoutStoreWorker Members
-
- /// <summary>
- /// filename of Config-file
- /// <rus>
- /// èìÿ êîíôèãóðàöèîííîãî ôàéëà</rus>
- /// </summary>
- public string ConfigFileName
- {
- get
- {
- ///åñëè èìÿ íå ïóñòî, òî âûñòàâëÿåòñÿ âðó÷íóþ
- if (string.IsNullOrEmpty(configFileName))
- configFileName = LayoutDataStorePathFactory.GetConfigFileName(form.Name, ConfigFileExt);
- return configFileName;
- }
- set { configFileName = value; }
- }
-
- /// <summary>
- /// saved layout data for form stores
- /// <rus>
- /// Ñîõðàíèòü íàñòðîéêè ôîðìû è åå êîíòðîëîâ</rus>
- /// </summary>
- public void Save()
- {
- LayoutSettings.WriteXml(ConfigFileName, stores);
- }
-
- /// <summary>
- /// saved layout data for form stores
- /// <rus>
- /// Ñîõðàíèòü íàñòðîéêè ôîðìû è åå êîíòðîëîâ</rus>
- /// </summary>
- public void SaveDefault()
- {
- LayoutSettings.WriteXml(DefaultLayout, stores);
- }
-
- /// <summary>
- /// filename of Config-file with Default values
- /// <rus>
- /// èìÿ êîíôèãóðàöèîííîãî ôàéëà c íàñòðîéêàìè ïî óìîë÷àíèþ</rus>
- /// </summary>
- public string DefaultLayout
- {
- get
- {
- return string.Format("{0}{1}.{2}"
- , Path.ChangeExtension(ConfigFileName, "")
- , DefaultPostfix
- , ConfigFileExt);
- }
- }
-
-
- /// <summary>
- /// load layout data for form stores
- /// <rus>
- /// Çàãðóçèòü íàñòðîéêè ôîðìû è åå êîíòðîëîâ</rus>
- /// </summary>
- public void Load()
- {
- FileInfo fileInfo = new FileInfo(FileUtils.MakeValidFilePath(ConfigFileName));
- if (!fileInfo.Exists)
- {
- LoadDefault();
- return;
- }
- try
- {
- LayoutSettings.ReadXml(ConfigFileName, false, stores);
- }
- catch (Exception e)
- {
- LOG.Error(e);
- throw new ApplicationException(Resource.LoadingIsInterruptedWillBeLoadedByDefault,e);
- }
- }
-
- /// <summary>
- /// set user interface control allowing to load a state of Entity by default.
- /// <rus>
- /// óñòàíîâèòü êîíòðîëüêó, êîòîðàÿ äàñò ïîëüçîâàòåëþ âîçìîæíîñòü
- /// çàãðóçèòü ñîñòîÿíèå Entity, ïðèíÿòîå ïî óìîë÷àíèþ</rus>
- /// </summary>
- public void SetUI4LoadDefault()
- {
- if (stores != null)
- foreach (ILayoutDataStore store in stores)
- {
- store.SetUI4LoadDefault(this);
- }
- }
-
- /// <summary>
- /// load default layout data for form stores
- /// <rus>
- /// Çàãðóçèòü íàñòðîéêè ôîðìû è åå êîíòðîëîâ ïî óìîë÷àíèþ</rus>
- /// </summary>
- public void LoadDefault()
- {
- FileInfo fileInfo = new FileInfo(FileUtils.MakeValidFilePath(DefaultLayout));
- if (!fileInfo.Exists)
- return;
- LayoutSettings.ReadXml(DefaultLayout, true, stores);
- }
-
- /// <summary>
- /// load default layout data for control
- /// <rus>
- /// Çàãðóçèòü íàñòðîéêó ïî óìîë÷àíèþ äëÿ êîíêðåòíîãî êîíòðîëà</rus>
- /// </summary>
- public void LoadDefault(ILayoutDataStore control)
- {
- LoadStoreFromFile(DefaultLayout, control);
- }
-
- /// <summary>
- /// load layout data for control
- /// <rus>
- /// Çàãðóçèòü íàñòðîéêó äëÿ êîíêðåòíîãî êîíòðîëà</rus>
- /// </summary>
- public void Load(ILayoutDataStore control)
- {
- LoadStoreFromFile(ConfigFileName, control);
- }
-
- #endregion
-
- private static void LoadStoreFromFile(string fileName, ILayoutDataStore store)
- {
- FileInfo fileInfo = new FileInfo(FileUtils.MakeValidFilePath(fileName));
- if (!fileInfo.Exists)
- return;
- LayoutSettings.ReadXml(fileName, store, true);
- }
-
- public void Init()
- {
- SaveDefault();
- SetUI4LoadDefault();
- Load();
- }
- }
- }