ToolPack1

В ConfigurationTool добавлен инструмент для создания конфига,

10/12/2019 11:17:57 PM

Details

diff --git a/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigEntity.cs b/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigEntity.cs
new file mode 100644
index 0000000..e2fb4b3
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigEntity.cs
@@ -0,0 +1,100 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using System.IO;
+
+using RW_Tool;
+using RW_Tool.DataSource.FileOrStream;
+
+using ConfigurationTool.Serializer;
+using SingletonTool;
+
+namespace ConfigurationTool.ConfigMultiple
+{
+    //Singlethon сущность конфига 
+    public class ConfigEntity<T>
+        : ISignlethonWithParams<ConfigParams>
+        where T : class, new()
+    {
+        //Параметры конфига
+        public ConfigParams Params { private set; get; }
+
+        //Объект сериализации
+        private ISerializer<T> Serializer;
+
+        //Данные, хранимые в конфиге
+        public Dictionary<string, T> Data { set; get; } = new Dictionary<string, T>();
+
+
+        public void SetParams(ConfigParams param)
+        {
+            Params = param;
+
+            switch (param.Format)
+            {
+                case EnumFormat.XML: Serializer = new XMLSerializer<T>(Params.ConfigDirectoryPath); break;
+                case EnumFormat.Binary: Serializer = new BinarySerializer<T>(Params.ConfigDirectoryPath); break;
+            }
+
+            if (Directory.Exists(Params.ConfigDirectoryPath))
+                ImportAll();
+            ExportAll();
+        }
+
+
+
+
+
+        public void Export(string key)
+        {
+            Serializer.Writer.Write(
+                Data[key], 
+                new DS_File() { FilePath = Params.GetPathForFile(key) }
+            );
+        }
+        public void ExportAll()
+        {
+            DirectoryInfo dir = Params.ConfigDirectoryInfo;
+
+            if (Params.RecreateDirectory)
+            {
+                if (dir.Exists)
+                    dir.Delete(true);
+            }
+            dir.Refresh();
+            if (!dir.Exists)
+                dir.Create();
+
+            foreach (var elem in Data)
+                Export(elem.Key);
+        }
+
+        public void Import(string path)
+        {
+            Data.Add(
+                Path.GetFileNameWithoutExtension(Path.GetFileName(path)),
+                Serializer.Reader.Read(new DS_File() { FilePath = path})
+                );
+        }
+        public void ImportAll()
+        {
+            DirectoryInfo dir = Params.ConfigDirectoryInfo;
+
+            if (!dir.Exists)
+            {
+                dir.Create();
+                return;
+            }
+
+            var data = dir.GetFiles();
+
+            foreach (var elem in data)
+            {
+                Import(elem.FullName);
+            }
+        }
+    }
+}
diff --git a/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigParams.cs b/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigParams.cs
new file mode 100644
index 0000000..cc73071
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigParams.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using System.IO;
+using System.Windows.Forms;
+
+namespace ConfigurationTool.ConfigMultiple
+{
+    public enum EnumFormat
+    {
+        XML,
+        Binary
+    }
+
+    //Базовые параметры конфига
+    public class ConfigParams
+    {
+        //Папка, в которой будут храниться конфиги
+        public string ConfigDirectory { set; get; }
+        //Флаг: испоьзовать ли в пути к файлу путь к .exe приложению
+        public bool UseApplicationPathPrefix { set; get; } = true;
+
+        //Формат в котором будет храниться конфиг
+        public EnumFormat Format { set; get; } = EnumFormat.XML;
+
+        //Пересоздавать папку при общем сохранении
+        public bool RecreateDirectory { set; get; } = true;
+
+        //Полный путь к конфигу
+        public string ConfigDirectoryPath => (UseApplicationPathPrefix
+            ?
+             Path.Combine(Application.StartupPath, ConfigDirectory)
+            :
+             ConfigDirectory
+            );
+        public DirectoryInfo ConfigDirectoryInfo => new DirectoryInfo(ConfigDirectoryPath);
+
+
+        public string GetPathForFile(string key) =>        
+             Path.Combine(ConfigDirectoryPath, key + 
+                (Format == EnumFormat.XML ? ".xml" : ".bin")
+                );        
+    }
+}
diff --git a/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigurationManager.cs b/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigurationManager.cs
new file mode 100644
index 0000000..a27271d
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigurationManager.cs
@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using System.IO;
+
+using SingletonTool;
+
+namespace ConfigurationTool.ConfigMultiple
+{      
+    //Обеспечивате доступ к конфигу
+    public sealed class ConfigurationManager<T>
+        where T: class, new()
+    {
+        //Конфиг
+        private ConfigEntity<T> Config => SignlethonWithParams<ConfigEntity<T>, ConfigParams>.Get();
+        //Данные конфига
+        public Dictionary<string,T> Data => Config.Data;
+
+        //При первом обращении необходимо использовать данный конструктор для иницилизации параметров конфига
+        public ConfigurationManager(ConfigParams param)
+        {
+            if (!SignlethonWithParams<ConfigEntity<T>, ConfigParams>.ExistInstance)
+                SignlethonWithParams<ConfigEntity<T>, ConfigParams>.Create(param);
+        }
+
+        //Для повторных обращений к конфигу
+        public ConfigurationManager()
+        {
+            if (!SignlethonWithParams<ConfigEntity<T>, ConfigParams>.ExistInstance)
+                throw new Exception("Use ConfigurationManager(ConfigParams param) first");
+        }
+
+
+        public void Add(string key, T value)
+        {
+            Data.Add(key, value);
+            Config.Export(key);
+        }
+        public void Remove(string key)
+        {
+            Data.Remove(key);
+            var path = Config.Params.GetPathForFile(key);
+            if (File.Exists(path))
+                File.Delete(path);
+        }
+
+        //Прочитать из файла
+        public void Import()
+        {
+            Config.ImportAll();
+        }
+        //Сохранить в файл
+        public void Export()
+        {
+            Config.ExportAll();
+        }
+
+    }
+}
diff --git a/ToolPack1/ConfigurationTool/ConfigurationTool.csproj b/ToolPack1/ConfigurationTool/ConfigurationTool.csproj
index 27ab877..3e54a23 100644
--- a/ToolPack1/ConfigurationTool/ConfigurationTool.csproj
+++ b/ToolPack1/ConfigurationTool/ConfigurationTool.csproj
@@ -43,10 +43,13 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="ConfigMultiple\ConfigEntity.cs" />
+    <Compile Include="ConfigMultiple\ConfigParams.cs" />
+    <Compile Include="ConfigMultiple\ConfigurationManager.cs" />
     <Compile Include="CustomSerializer\BaseCustomSerialazible.cs" />
-    <Compile Include="ConfigEntity.cs" />
-    <Compile Include="ConfigParams.cs" />
-    <Compile Include="ConfigurationManager.cs" />
+    <Compile Include="Config\ConfigEntity.cs" />
+    <Compile Include="Config\ConfigParams.cs" />
+    <Compile Include="Config\ConfigurationManager.cs" />
     <Compile Include="CustomSerializer\ICustomSerialazible.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="RW\Bin\Bin_Reader.cs" />
diff --git a/ToolPack1/ConfigurationTool/Serializer/ISerializer.cs b/ToolPack1/ConfigurationTool/Serializer/ISerializer.cs
index b483a4b..0e98bff 100644
--- a/ToolPack1/ConfigurationTool/Serializer/ISerializer.cs
+++ b/ToolPack1/ConfigurationTool/Serializer/ISerializer.cs
@@ -3,10 +3,16 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 
+using RW_Tool.Interface;
+using RW_Tool.DataSource.FileOrStream;
+
 namespace ConfigurationTool.Serializer
 {
     public interface ISerializer<T>
     {
+        IReader<T, DS_FileOrStream> Reader { get; }
+        IWriter<T, DS_FileOrStream> Writer { get; }
+
         T Read();
         void Write(T entity);
     }
diff --git a/ToolPack1/Console/Program.cs b/ToolPack1/Console/Program.cs
index 20fa769..a088854 100644
--- a/ToolPack1/Console/Program.cs
+++ b/ToolPack1/Console/Program.cs
@@ -4,75 +4,99 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 
-using ConfigurationTool;
+//using ConfigurationTool.Config;
+using ConfigurationTool.ConfigMultiple;
 using ConfigurationTool.CustomSerializer;
 
 namespace Console
-{  
-    public class ConfigData : BaseCustomSerialazible<ConfigData.ConfigData_Serial>
-    {
-        public class ConfigData_Serial
-        {
-            public class Item
-            {
-                public int Key { set; get; }
-                public string Value { set; get; }
-            }
+{
+    //public class ConfigData : BaseCustomSerialazible<ConfigData.ConfigData_Serial>
+    //{
+    //    public class ConfigData_Serial
+    //    {
+    //        public class Item
+    //        {
+    //            public int Key { set; get; }
+    //            public string Value { set; get; }
+    //        }
 
-            public string Name { set; get; }
-            public int ID { set; get; }
+    //        public string Name { set; get; }
+    //        public int ID { set; get; }
 
 
-            public List<Item> dictionary { set; get; }
-        }
+    //        public List<Item> dictionary { set; get; }
+    //    }
 
-        public string Name { set; get; } = "n";
-        public int ID { set; get; } = 23;
+    //    public string Name { set; get; } = "n";
+    //    public int ID { set; get; } = 23;
 
-        public Dictionary<int, string> dictionary { set; get; } = new Dictionary<int, string>
-        {
-            [1]="1",
-            [2]="2"
-        };
+    //    public Dictionary<int, string> dictionary { set; get; } = new Dictionary<int, string>
+    //    {
+    //        [1]="1",
+    //        [2]="2"
+    //    };
 
-        public override ConfigData_Serial Export()
-        => new ConfigData_Serial()
-            {
-                ID = ID,
-                Name = Name,
-                dictionary = dictionary
-                    .Select(e => 
-                        new ConfigData_Serial.Item()
-                        {
-                            Key = e.Key,
-                            Value = e.Value
-                        }
-                    )
-                .ToList()
-            };
-        public override void Import(ConfigData_Serial obj)
-        {
-            ConfigData_Serial data = (ConfigData_Serial)obj;
+    //    public override ConfigData_Serial Export()
+    //    => new ConfigData_Serial()
+    //        {
+    //            ID = ID,
+    //            Name = Name,
+    //            dictionary = dictionary
+    //                .Select(e => 
+    //                    new ConfigData_Serial.Item()
+    //                    {
+    //                        Key = e.Key,
+    //                        Value = e.Value
+    //                    }
+    //                )
+    //            .ToList()
+    //        };
+    //    public override void Import(ConfigData_Serial obj)
+    //    {
+    //        ConfigData_Serial data = (ConfigData_Serial)obj;
 
-            ID = data.ID;
-            Name = data.Name;
+    //        ID = data.ID;
+    //        Name = data.Name;
 
-            dictionary = data.dictionary
-                .ToDictionary(e => e.Key, e2 => e2.Value);
-        }
+    //        dictionary = data.dictionary
+    //            .ToDictionary(e => e.Key, e2 => e2.Value);
+    //    }
+    //}
+
+    public class ConfigItem
+    {
+        public int ID { set; get; }
+        public string Name { set; get; }
+        public DateTime Date { set; get; }
     }
 
     class Program
     {
         static void Main(string[] args)
         {
-            var conf = new ConfigurationManager<ConfigData>(new ConfigParams()
+            //var conf = new ConfigurationManager<ConfigData>(new ConfigParams()
+            //{
+            //    ConfigFile = "Config.xml",
+            //    Format = EnumFormat.XML,
+            //    UseApplicationPathPrefix = true
+            //});
+
+            var conf = new ConfigurationManager<ConfigItem>(new ConfigParams()
             {
-                ConfigFile = "Config.xml",
+                ConfigDirectory = "ConfigsItems",
                 Format = EnumFormat.XML,
-                UseApplicationPathPrefix = true
+                UseApplicationPathPrefix= true
             });
 
+            for (int i = 0; i < 2; i++)
+            {
+                conf.Add(i.ToString(), new ConfigItem()
+                {
+                    ID = i,
+                    Name = "name" + i,
+                    Date = DateTime.Now
+                });
+            }
         }
     }
 }