ToolPack1
Changes
Build/ConfigurationTool.dll 0(+0 -0)
Build/ConfigurationTool.pdb 0(+0 -0)
Build/RW_Tool.dll 0(+0 -0)
Build/RW_Tool.pdb 0(+0 -0)
ToolPack1/Console/Program.cs 1(+0 -1)
ToolPack1/RW_Tool/Interface/I_RWI.cs 13(+11 -2)
ToolPack1/RW_Tool/RW_Tool.csproj 10(+7 -3)
ToolPack1/RW_Tool/RWI.cs 55(+48 -7)
ToolPack1/RW_Tool/RWI_Custom.cs 81(+81 -0)
Details
Build/ConfigurationTool.dll 0(+0 -0)
diff --git a/Build/ConfigurationTool.dll b/Build/ConfigurationTool.dll
index 02dc7a5..188ce2b 100644
Binary files a/Build/ConfigurationTool.dll and b/Build/ConfigurationTool.dll differ
Build/ConfigurationTool.pdb 0(+0 -0)
diff --git a/Build/ConfigurationTool.pdb b/Build/ConfigurationTool.pdb
index 364588b..afeebeb 100644
Binary files a/Build/ConfigurationTool.pdb and b/Build/ConfigurationTool.pdb differ
Build/RW_Tool.dll 0(+0 -0)
diff --git a/Build/RW_Tool.dll b/Build/RW_Tool.dll
index dfcfb8a..2897e0c 100644
Binary files a/Build/RW_Tool.dll and b/Build/RW_Tool.dll differ
Build/RW_Tool.pdb 0(+0 -0)
diff --git a/Build/RW_Tool.pdb b/Build/RW_Tool.pdb
index fac0d9b..509478d 100644
Binary files a/Build/RW_Tool.pdb and b/Build/RW_Tool.pdb differ
diff --git a/ToolPack1/ConfigurationTool/Config/ConfigEntity.cs b/ToolPack1/ConfigurationTool/Config/ConfigEntity.cs
index fbb234d..17aa618 100644
--- a/ToolPack1/ConfigurationTool/Config/ConfigEntity.cs
+++ b/ToolPack1/ConfigurationTool/Config/ConfigEntity.cs
@@ -12,18 +12,20 @@ using RW_Tool.DataSource.FileOrStream;
using ConfigurationTool.Serializer;
using SingletonTool;
+using RW_Tool.Interface;
+
namespace ConfigurationTool.Config
{
//Singlethon сущность конфига
- public class ConfigEntity<T>
+ internal class ConfigEntity<T>
: ISignlethonWithParams<ConfigParams>
where T : class, new()
{
//Параметры конфига
- public ConfigParams Params { private set; get; }
+ internal ConfigParams Params { private set; get; }
//Объект сериализации
- private ISerializer<T> Serializer;
+ I_RWI<T, DS_FileOrStream> Serializer;
//Данные, хранимые в конфиге
public T Data { set; get; } = new T();
@@ -32,11 +34,8 @@ namespace ConfigurationTool.Config
{
Params = param;
- switch (param.Format)
- {
- case EnumFormat.XML: Serializer = new XMLSerializer<T>(Params.ConfigPath); break;
- case EnumFormat.Binary: Serializer = new BinarySerializer<T>(Params.ConfigPath); break;
- }
+ Serializer = new SerializerFactory()
+ .GetSerializer<T>(Params.ConfigPath, param.Format);
if (File.Exists(Params.ConfigPath))
Import();
@@ -54,4 +53,5 @@ namespace ConfigurationTool.Config
Serializer.Write(Data);
}
}
+
}
diff --git a/ToolPack1/ConfigurationTool/Config/ConfigParams.cs b/ToolPack1/ConfigurationTool/Config/ConfigParams.cs
index 8b462dc..3791b06 100644
--- a/ToolPack1/ConfigurationTool/Config/ConfigParams.cs
+++ b/ToolPack1/ConfigurationTool/Config/ConfigParams.cs
@@ -7,6 +7,8 @@ using System.Threading.Tasks;
using System.IO;
using System.Windows.Forms;
+using RW_Tool.Interface.Custom;
+
namespace ConfigurationTool.Config
{
//Базовые параметры конфига
@@ -28,5 +30,11 @@ namespace ConfigurationTool.Config
ConfigFile
);
+
+ public ConfigParams(string ConfigFile)
+ {
+ this.ConfigFile = ConfigFile;
+ }
}
+
}
diff --git a/ToolPack1/ConfigurationTool/Config/ConfigurationManager.cs b/ToolPack1/ConfigurationTool/Config/ConfigurationManager.cs
index 8e0ac98..466aff9 100644
--- a/ToolPack1/ConfigurationTool/Config/ConfigurationManager.cs
+++ b/ToolPack1/ConfigurationTool/Config/ConfigurationManager.cs
@@ -56,4 +56,5 @@ namespace ConfigurationTool.Config
File.Delete(Config.Params.ConfigPath);
}
}
+
}
diff --git a/ToolPack1/ConfigurationTool/Config/Custom/ConfigEntity.cs b/ToolPack1/ConfigurationTool/Config/Custom/ConfigEntity.cs
new file mode 100644
index 0000000..4ca4815
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/Config/Custom/ConfigEntity.cs
@@ -0,0 +1,65 @@
+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;
+
+using RW_Tool.Interface;
+
+using ConfigurationTool.Config;
+
+namespace ConfigurationTool.Config.Custom
+{
+
+ internal class ConfigEntity<T1, T2>
+ : ISignlethonWithParams<ConfigParams<T1, T2>>
+ where T1 : class, new()
+ where T2 : class, new()
+ {
+ //Параметры конфига
+ public ConfigParams<T1, T2> Params { private set; get; }
+
+ //Объект сериализации
+ I_RWI<T1, DS_FileOrStream> Serializer;
+
+
+ //Данные, хранимые в конфиге
+ public T1 Data { set; get; } = new T1();
+
+ public void SetParams(ConfigParams<T1, T2> param)
+ {
+ Params = param;
+
+ Serializer = new SerializerFactory()
+ .GetSerializer_Custon<T1, T2>(
+ param.ConfigPath,
+ param.Format,
+ param.Transformator
+ );
+
+ if (File.Exists(Params.ConfigPath))
+ Import();
+ Export();
+ }
+
+ //Прочитать файл
+ public void Import()
+ {
+ Data = Serializer.Read();
+ }
+ //Сохранить в файл
+ public void Export()
+ {
+ Serializer.Write(Data);
+ }
+ }
+
+}
diff --git a/ToolPack1/ConfigurationTool/Config/Custom/ConfigParams.cs b/ToolPack1/ConfigurationTool/Config/Custom/ConfigParams.cs
new file mode 100644
index 0000000..f79a5a9
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/Config/Custom/ConfigParams.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using System.IO;
+using System.Windows.Forms;
+
+using RW_Tool.Interface.Custom;
+
+namespace ConfigurationTool.Config.Custom
+{
+ public class ConfigParams<T1, T2>
+ {
+ //Имя или полный путь к файлу конфигурации
+ public string ConfigFile { set; get; }
+ //Флаг: испоьзовать ли в пути к файлу путь к .exe приложению
+ public bool UseApplicationPathPrefix { set; get; } = true;
+
+ //Формат в котором будет храниться конфиг
+ public EnumFormat Format { set; get; } = EnumFormat.XML;
+
+ //Трансформатор для преобразования формата из T1 в T2
+ public ITransformator<T1, T2> Transformator { set; get; }
+
+ //Путь по которому выполняются обращению к конфигу
+ public string ConfigPath => (UseApplicationPathPrefix
+ ?
+ Path.Combine(Application.StartupPath, ConfigFile)
+ :
+ ConfigFile
+ );
+
+
+ public ConfigParams(string ConfigFile, ITransformator<T1, T2> Transformator)
+ {
+ this.ConfigFile = ConfigFile;
+ this.Transformator = Transformator;
+ }
+ }
+}
diff --git a/ToolPack1/ConfigurationTool/Config/Custom/ConfigurationManager.cs b/ToolPack1/ConfigurationTool/Config/Custom/ConfigurationManager.cs
new file mode 100644
index 0000000..f642526
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/Config/Custom/ConfigurationManager.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using System.IO;
+
+using SingletonTool;
+
+namespace ConfigurationTool.Config.Custom
+{
+ //Обеспечивате доступ к конфигу
+ public sealed class ConfigurationManager<T1, T2>
+ where T1: class, new()
+ where T2 : class, new()
+ {
+ //Конфиг
+ private ConfigEntity<T1, T2> Config => SignlethonWithParams<ConfigEntity<T1, T2>, ConfigParams<T1, T2>>.Get();
+ //Данные конфига
+ public T1 Data
+ {
+ set => Config.Data = value;
+ get => Config.Data;
+ }
+
+ //При первом обращении необходимо использовать данный конструктор для иницилизации параметров конфига
+ public ConfigurationManager(ConfigParams<T1,T2> param)
+ {
+ if (!SignlethonWithParams<ConfigEntity<T1,T2>, ConfigParams<T1,T2>>.ExistInstance)
+ SignlethonWithParams<ConfigEntity<T1,T2>, ConfigParams<T1, T2>>.Create(param);
+ }
+
+ //Для повторных обращений к конфигу
+ public ConfigurationManager()
+ {
+ if (!SignlethonWithParams<ConfigEntity<T1>, ConfigParams>.ExistInstance)
+ throw new Exception("Use ConfigurationManager(ConfigParams param) first");
+ }
+
+
+ //Прочитать из файла
+ public void Import()
+ {
+ Config.Import();
+ }
+ //Сохранить в файл
+ public void Export()
+ {
+ Config.Export();
+ }
+
+ public bool Exist() => File.Exists(Config.Params.ConfigPath);
+ public void Delete()
+ {
+ if (Exist())
+ File.Delete(Config.Params.ConfigPath);
+ }
+ }
+}
diff --git a/ToolPack1/ConfigurationTool/ConfigMultiple/Custom/MConfigEntity.cs b/ToolPack1/ConfigurationTool/ConfigMultiple/Custom/MConfigEntity.cs
new file mode 100644
index 0000000..9d457dd
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/ConfigMultiple/Custom/MConfigEntity.cs
@@ -0,0 +1,105 @@
+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.Interface;
+using RW_Tool.DataSource.FileOrStream;
+
+using ConfigurationTool.Serializer;
+using SingletonTool;
+
+namespace ConfigurationTool.ConfigMultiple.Custom
+{
+ //Singlethon сущность конфига
+ public class MConfigEntity<T1, T2>
+ : ISignlethonWithParams<MConfigParams<T1,T2>>
+ where T1 : class, new()
+ where T2 : class, new()
+ {
+ //Параметры конфига
+ public MConfigParams<T1,T2> Params { private set; get; }
+
+ //Объект сериализации
+ I_RWI<T1, DS_FileOrStream> Serializer;
+
+ //Данные, хранимые в конфиге
+ public Dictionary<string, T1> Data { set; get; } = new Dictionary<string, T1>();
+
+
+ public void SetParams(MConfigParams<T1,T2> param)
+ {
+ Params = param;
+
+ Serializer = new SerializerFactory()
+ .GetSerializer_Custon<T1,T2>(
+ Params.ConfigDirectoryPath,
+ param.Format,
+ param.Transformator
+ );
+
+
+
+ if (Directory.Exists(Params.ConfigDirectoryPath))
+ ImportAll();
+ ExportAll();
+ }
+
+
+
+
+
+ public void Export(string key)
+ {
+ Serializer.Write(
+ Data[key],
+ new DS_File(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.Read(new DS_File(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/Custom/MConfigParams.cs b/ToolPack1/ConfigurationTool/ConfigMultiple/Custom/MConfigParams.cs
new file mode 100644
index 0000000..5b6bf52
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/ConfigMultiple/Custom/MConfigParams.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using System.IO;
+using System.Windows.Forms;
+
+using RW_Tool.Interface.Custom;
+
+namespace ConfigurationTool.ConfigMultiple.Custom
+{
+ //Базовые параметры конфига
+ public class MConfigParams<T1,T2>
+ {
+ //Папка, в которой будут храниться конфиги
+ public string ConfigDirectory { set; get; }
+ //Флаг: испоьзовать ли в пути к файлу путь к .exe приложению
+ public bool UseApplicationPathPrefix { set; get; } = true;
+
+ //Формат в котором будет храниться конфиг
+ public EnumFormat Format { set; get; } = EnumFormat.XML;
+
+ public ITransformator<T1, T2> Transformator { set; get; }
+
+ //Пересоздавать папку при общем сохранении
+ 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")
+ );
+
+
+ public MConfigParams(string ConfigDirectory, ITransformator<T1, T2> Transformator)
+ {
+ this.ConfigDirectory = ConfigDirectory;
+ this.Transformator = Transformator;
+ }
+ }
+}
diff --git a/ToolPack1/ConfigurationTool/ConfigMultiple/Custom/MConfigurationManager.cs b/ToolPack1/ConfigurationTool/ConfigMultiple/Custom/MConfigurationManager.cs
new file mode 100644
index 0000000..0b0e556
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/ConfigMultiple/Custom/MConfigurationManager.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using System.IO;
+
+using SingletonTool;
+
+namespace ConfigurationTool.ConfigMultiple.Custom
+{
+ //Обеспечивате доступ к конфигу
+ public sealed class MConfigurationManager<T1, T2>
+ where T1: class, new()
+ where T2 : class, new()
+ {
+ //Конфиг
+ private MConfigEntity<T1, T2> Config => SignlethonWithParams<MConfigEntity<T1, T2>, MConfigParams<T1, T2>>.Get();
+ //Данные конфига
+ public Dictionary<string, T1> Data
+ {
+ set => Config.Data = value;
+ get => Config.Data;
+ }
+
+ //При первом обращении необходимо использовать данный конструктор для иницилизации параметров конфига
+ public MConfigurationManager(MConfigParams<T1, T2> param)
+ {
+ if (!SignlethonWithParams<MConfigEntity<T1,T2>, MConfigParams<T1,T2>>.ExistInstance)
+ SignlethonWithParams<MConfigEntity<T1, T2>, MConfigParams<T1, T2>>.Create(param);
+ }
+
+ //Для повторных обращений к конфигу
+ public MConfigurationManager()
+ {
+ if (!SignlethonWithParams<MConfigEntity<T1, T2>, MConfigParams<T1, T2>>.ExistInstance)
+ throw new Exception("Use ConfigurationManager(ConfigParams param) first");
+ }
+
+
+ public void Add(string key, T1 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();
+ }
+
+ public void Delete()
+ {
+ var dir = Config.Params.ConfigDirectoryInfo;
+
+ if (dir.Exists)
+ dir.Delete(true);
+ }
+ }
+}
diff --git a/ToolPack1/ConfigurationTool/ConfigMultiple/MConfigEntity.cs b/ToolPack1/ConfigurationTool/ConfigMultiple/MConfigEntity.cs
index 5baf70b..380d839 100644
--- a/ToolPack1/ConfigurationTool/ConfigMultiple/MConfigEntity.cs
+++ b/ToolPack1/ConfigurationTool/ConfigMultiple/MConfigEntity.cs
@@ -6,7 +6,7 @@ using System.Threading.Tasks;
using System.IO;
-using RW_Tool;
+using RW_Tool.Interface;
using RW_Tool.DataSource.FileOrStream;
using ConfigurationTool.Serializer;
@@ -23,7 +23,7 @@ namespace ConfigurationTool.ConfigMultiple
public MConfigParams Params { private set; get; }
//Объект сериализации
- private ISerializer<T> Serializer;
+ I_RWI<T, DS_FileOrStream> Serializer;
//Данные, хранимые в конфиге
public Dictionary<string, T> Data { set; get; } = new Dictionary<string, T>();
@@ -33,11 +33,11 @@ namespace ConfigurationTool.ConfigMultiple
{
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;
- }
+ Serializer = new SerializerFactory()
+ .GetSerializer<T>(
+ param.ConfigDirectoryPath,
+ param.Format
+ );
if (Directory.Exists(Params.ConfigDirectoryPath))
ImportAll();
@@ -45,14 +45,11 @@ namespace ConfigurationTool.ConfigMultiple
}
-
-
-
public void Export(string key)
{
- Serializer.Writer.Write(
+ Serializer.Write(
Data[key],
- new DS_File() { FilePath = Params.GetPathForFile(key) }
+ new DS_File(Params.GetPathForFile(key))
);
}
public void ExportAll()
@@ -76,8 +73,8 @@ namespace ConfigurationTool.ConfigMultiple
{
Data.Add(
Path.GetFileNameWithoutExtension(Path.GetFileName(path)),
- Serializer.Reader.Read(new DS_File() { FilePath = path})
- );
+ Serializer.Read(new DS_File(path))
+ );
}
public void ImportAll()
{
diff --git a/ToolPack1/ConfigurationTool/ConfigurationTool.csproj b/ToolPack1/ConfigurationTool/ConfigurationTool.csproj
index 5e06b78..b913bf0 100644
--- a/ToolPack1/ConfigurationTool/ConfigurationTool.csproj
+++ b/ToolPack1/ConfigurationTool/ConfigurationTool.csproj
@@ -43,23 +43,25 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
+ <Compile Include="ConfigMultiple\MConfigParams.cs" />
+ <Compile Include="ConfigMultiple\Custom\MConfigParams.cs" />
+ <Compile Include="ConfigMultiple\Custom\MConfigEntity.cs" />
+ <Compile Include="ConfigMultiple\Custom\MConfigurationManager.cs" />
<Compile Include="ConfigMultiple\MConfigEntity.cs" />
- <Compile Include="ConfigMultiple\ConfigParams.cs" />
<Compile Include="ConfigMultiple\MConfigurationManager.cs" />
- <Compile Include="CustomSerializer\BaseCustomSerialazible.cs" />
<Compile Include="Config\ConfigEntity.cs" />
<Compile Include="Config\ConfigParams.cs" />
<Compile Include="Config\ConfigurationManager.cs" />
- <Compile Include="CustomSerializer\ICustomSerialazible.cs" />
+ <Compile Include="Config\Custom\ConfigEntity.cs" />
+ <Compile Include="Config\Custom\ConfigParams.cs" />
+ <Compile Include="Config\Custom\ConfigurationManager.cs" />
<Compile Include="EnumFormat.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="RW\Bin\Bin_Reader.cs" />
- <Compile Include="RW\Bin\Bin_Writer.cs" />
- <Compile Include="RW\XML\XML_Reader.cs" />
- <Compile Include="RW\XML\XML_Writer.cs" />
- <Compile Include="Serializer\BinarySerializer.cs" />
- <Compile Include="Serializer\ISerializer.cs" />
- <Compile Include="Serializer\XMLSerializer.cs" />
+ <Compile Include="Serializer\Bin\Bin_Reader.cs" />
+ <Compile Include="Serializer\Bin\Bin_Writer.cs" />
+ <Compile Include="Serializer\XML\XML_Reader.cs" />
+ <Compile Include="Serializer\XML\XML_Writer.cs" />
+ <Compile Include="Serializer\SerializerFactory.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\RW_Tool\RW_Tool.csproj">
diff --git a/ToolPack1/ConfigurationTool/ConfigurationTool.csproj.user b/ToolPack1/ConfigurationTool/ConfigurationTool.csproj.user
new file mode 100644
index 0000000..6cbe588
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/ConfigurationTool.csproj.user
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <ProjectView>ProjectFiles</ProjectView>
+ </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/ToolPack1/ConfigurationTool/Serializer/SerializerFactory.cs b/ToolPack1/ConfigurationTool/Serializer/SerializerFactory.cs
new file mode 100644
index 0000000..c104cb2
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/Serializer/SerializerFactory.cs
@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using RW_Tool;
+using RW_Tool.Interface;
+using RW_Tool.Interface.Custom;
+using RW_Tool.DataSource.FileOrStream;
+
+using ConfigurationTool.Serializer.XML;
+using ConfigurationTool.Serializer.Bin;
+
+namespace ConfigurationTool.Serializer
+{
+ internal class SerializerFactory
+ {
+ public I_RWI<T, DS_FileOrStream> GetSerializer<T>(string file, EnumFormat format)
+ where T : class, new()
+ {
+ switch (format)
+ {
+ case EnumFormat.XML:
+ return new RWI<T, DS_FileOrStream>(
+ new DS_File(file),
+ new XML_Reader<T>(),
+ new XML_Writer<T>()
+ );
+
+ case EnumFormat.Binary:
+ return new RWI<T, DS_FileOrStream>(
+ new DS_File(file),
+ new Bin_Reader<T>(),
+ new Bin_Writer<T>()
+ );
+ }
+
+ throw new Exception();
+ }
+ public I_RWI<T1, DS_FileOrStream> GetSerializer_Custon<T1,T3>(string file, EnumFormat format, ITransformator<T1,T3> transformator)
+ where T1: class, new()
+ where T3: class, new()
+ {
+ switch (format)
+ {
+ case EnumFormat.XML:
+ return new RWI_Custom<T1, DS_FileOrStream, T3>(
+ new DS_File(file),
+ transformator,
+ new XML_Reader<T3>(),
+ new XML_Writer<T3>()
+ );
+
+ case EnumFormat.Binary:
+ return new RWI_Custom<T1, DS_FileOrStream, T3>(
+ new DS_File(file),
+ transformator,
+ new Bin_Reader<T3>(),
+ new Bin_Writer<T3>()
+ );
+ }
+
+ throw new Exception();
+ }
+
+ }
+}
ToolPack1/Console/Program.cs 1(+0 -1)
diff --git a/ToolPack1/Console/Program.cs b/ToolPack1/Console/Program.cs
index 6bfec1a..0cb0e5c 100644
--- a/ToolPack1/Console/Program.cs
+++ b/ToolPack1/Console/Program.cs
@@ -7,7 +7,6 @@ using System.Threading.Tasks;
using ConfigurationTool;
using ConfigurationTool.Config;
using ConfigurationTool.ConfigMultiple;
-using ConfigurationTool.CustomSerializer;
namespace Console
{
diff --git a/ToolPack1/RW_Tool/DataSource/DS_Base.cs b/ToolPack1/RW_Tool/DataSource/DS_Base.cs
index 690012d..9f9a41d 100644
--- a/ToolPack1/RW_Tool/DataSource/DS_Base.cs
+++ b/ToolPack1/RW_Tool/DataSource/DS_Base.cs
@@ -5,6 +5,10 @@ using System.Text;
namespace RW_Tool.DataSource
{
+ /// <summary>
+ /// Базовый класс для типов хранилиз данных.
+ /// Описывает данные необходимые для работы с хранилищем
+ /// </summary>
public abstract class DS_Base
{
public abstract string Type {get;}
diff --git a/ToolPack1/RW_Tool/DataSource/FileOrStream/DS_File.cs b/ToolPack1/RW_Tool/DataSource/FileOrStream/DS_File.cs
new file mode 100644
index 0000000..ccd297b
--- /dev/null
+++ b/ToolPack1/RW_Tool/DataSource/FileOrStream/DS_File.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using System.IO;
+
+namespace RW_Tool.DataSource.FileOrStream
+{
+ public class DS_File : DS_FileOrStream
+ {
+ public override string Type => "File";
+
+ public string FilePath { set; get; }
+ public FileInfo FileInfo => new FileInfo(FilePath);
+
+
+ public DS_File() { }
+ public DS_File(string FilePath)
+ {
+ this.FilePath = FilePath;
+ }
+ }
+}
diff --git a/ToolPack1/RW_Tool/DataSource/FileOrStream/DS_Stream.cs b/ToolPack1/RW_Tool/DataSource/FileOrStream/DS_Stream.cs
new file mode 100644
index 0000000..7402784
--- /dev/null
+++ b/ToolPack1/RW_Tool/DataSource/FileOrStream/DS_Stream.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using System.IO;
+
+namespace RW_Tool.DataSource.FileOrStream
+{
+ public class DS_Stream : DS_FileOrStream
+ {
+ public override string Type => "Stream";
+
+ public Stream Stream { set; get; }
+
+ public DS_Stream() { }
+ public DS_Stream(Stream stream)
+ {
+ this.Stream = stream;
+ }
+ }
+}
diff --git a/ToolPack1/RW_Tool/DataSource/FileOrStream/FileOrStream.cs b/ToolPack1/RW_Tool/DataSource/FileOrStream/FileOrStream.cs
index 3845366..8771a23 100644
--- a/ToolPack1/RW_Tool/DataSource/FileOrStream/FileOrStream.cs
+++ b/ToolPack1/RW_Tool/DataSource/FileOrStream/FileOrStream.cs
@@ -3,12 +3,11 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
-using System.IO;
-
-using RW_Tool.DataSource;
-
namespace RW_Tool.DataSource.FileOrStream
{
+ /// <summary>
+ /// Используется для обозначения источника данных в виде файл(полный путь) или стрим
+ /// </summary>
public abstract class DS_FileOrStream : DS_Base
{
public DS_File AsFile => (DS_File)this;
@@ -16,19 +15,6 @@ namespace RW_Tool.DataSource.FileOrStream
public DS_Stream AsStream => (DS_Stream)this;
public bool IsStream => this is DS_Stream;
- }
-
- public class DS_File: DS_FileOrStream
- {
- public override string Type => "File";
-
- public string FilePath { set; get; }
- public FileInfo FileInfo => new FileInfo(FilePath);
- }
- public class DS_Stream: DS_FileOrStream
- {
- public override string Type => "Stream";
-
- public Stream Stream { set; get; }
- }
+ }
+
}
diff --git a/ToolPack1/RW_Tool/Interface/Custom/ITransformator.cs b/ToolPack1/RW_Tool/Interface/Custom/ITransformator.cs
new file mode 100644
index 0000000..9131d88
--- /dev/null
+++ b/ToolPack1/RW_Tool/Interface/Custom/ITransformator.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace RW_Tool.Interface.Custom
+{
+ /// <summary>
+ /// Интерфейс описывает класс, используемый для конвертации сущностей
+ /// </summary>
+ /// <typeparam name="T1">Тип 1 сущности</typeparam>
+ /// <typeparam name="T2">Тип 2 сущности</typeparam>
+ public interface ITransformator<T1, T2>
+ {
+ T1 ToEntityT1(T2 entity);
+ T2 ToEntityT2(T1 entity);
+ }
+}
ToolPack1/RW_Tool/RW_Tool.csproj 10(+7 -3)
diff --git a/ToolPack1/RW_Tool/RW_Tool.csproj b/ToolPack1/RW_Tool/RW_Tool.csproj
index f6b1d46..5ed718e 100644
--- a/ToolPack1/RW_Tool/RW_Tool.csproj
+++ b/ToolPack1/RW_Tool/RW_Tool.csproj
@@ -44,13 +44,17 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
+ <Compile Include="DataSource\FileOrStream\DS_File.cs" />
+ <Compile Include="DataSource\FileOrStream\DS_Stream.cs" />
+ <Compile Include="Interface\Custom\ITransformator.cs" />
+ <Compile Include="Interface\I_RWI.cs" />
<Compile Include="RWI.cs" />
<Compile Include="DataSource\DS_Base.cs" />
<Compile Include="DataSource\FileOrStream\FileOrStream.cs" />
- <Compile Include="Interface\IImporter.cs" />
- <Compile Include="Interface\IReader.cs" />
- <Compile Include="Interface\IWriter.cs" />
+ <Compile Include="Interface\Actions\IReader.cs" />
+ <Compile Include="Interface\Actions\IWriter.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="RWI_Custom.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
ToolPack1/RW_Tool/RWI.cs 55(+48 -7)
diff --git a/ToolPack1/RW_Tool/RWI.cs b/ToolPack1/RW_Tool/RWI.cs
index e1baef1..8f34914 100644
--- a/ToolPack1/RW_Tool/RWI.cs
+++ b/ToolPack1/RW_Tool/RWI.cs
@@ -4,26 +4,67 @@ using System.Linq;
using System.Text;
using RW_Tool.Interface;
+using RW_Tool.Interface.Actions;
namespace RW_Tool
{
- public class RWI<T1,T2>
+ /// <summary>
+ /// Обертка для чтения/записи какой либо сущности в какое либо хранилище
+ /// </summary>
+ /// <typeparam name="T1">Сущность</typeparam>
+ /// <typeparam name="T2">Набор параметров</typeparam>
+ public class RWI<T1,T2> :
+ I_RWI<T1, T2>
{
public T2 DataStorage { protected set; get; }
+ public bool HaveDataStorage => DataStorage != null;
- public IReader<T1, T2> Reader { protected set; get; }
+ public readonly IReader<T1, T2> Reader;
public bool HaveReader => Reader != null;
- public IWriter<T1, T2> Writer { protected set; get; }
+ public readonly IWriter<T1, T2> Writer;
public bool HaveWriter => Writer != null;
- public IImporter<T1, T2> Importer { protected set; get; }
- public bool HaveImporter => Importer != null;
-
- public RWI(T2 ds)
+ public RWI(
+ IReader<T1, T2> Reader,
+ IWriter<T1, T2> Writer
+ )
+ {
+ this.Reader = Reader;
+ this.Writer = Writer;
+ }
+ public RWI(
+ T2 ds,
+ IReader<T1, T2> Reader,
+ IWriter<T1, T2> Writer
+ )
{
this.DataStorage = ds;
+ this.Reader = Reader;
+ this.Writer = Writer;
+ }
+
+
+ public T1 Read(T2 param)
+ {
+ if (!HaveReader)
+ throw new Exception();
+
+ return Reader.Read(param);
}
+ public T1 Read() => Read(DataStorage);
+
+ public void Write(T1 entity, T2 param)
+ {
+ if (!HaveWriter)
+ throw new Exception();
+
+ Writer.Write(entity, param);
+ }
+ public void Write(T1 entity) => Write(entity, DataStorage);
+
}
+
+
}
ToolPack1/RW_Tool/RWI_Custom.cs 81(+81 -0)
diff --git a/ToolPack1/RW_Tool/RWI_Custom.cs b/ToolPack1/RW_Tool/RWI_Custom.cs
new file mode 100644
index 0000000..e79a64e
--- /dev/null
+++ b/ToolPack1/RW_Tool/RWI_Custom.cs
@@ -0,0 +1,81 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using RW_Tool.Interface;
+using RW_Tool.Interface.Actions;
+using RW_Tool.Interface.Custom;
+
+namespace RW_Tool
+{
+ /// <summary>
+ /// Обертка для чтения/записи какой либо сущности в какое либо хранилище
+ /// с использованием промежуточной сущности T3
+ /// </summary>
+ /// <typeparam name="T1">Тип сущности</typeparam>
+ /// <typeparam name="T2">Параметры</typeparam>
+ /// <typeparam name="T3">Тип сериализуемой сущности</typeparam>
+ public class RWI_Custom<T1,T2,T3>:
+ I_RWI<T1, T2>
+ where T3 : new()
+ {
+ public T2 DataStorage { protected set; get; }
+ public bool HaveDataStorage => DataStorage != null;
+
+ public ITransformator<T1, T3> Transformator { protected set; get; }
+
+
+ public readonly IReader<T3, T2> Reader;
+ public bool HaveReader => Reader != null;
+
+ public readonly IWriter<T3, T2> Writer;
+ public bool HaveWriter => Writer != null;
+
+
+
+ public RWI_Custom(
+ ITransformator<T1, T3> Transformator,
+ IReader<T3, T2> Reader,
+ IWriter<T3, T2> Writer
+ )
+ {
+ this.Transformator = Transformator;
+ this.Reader = Reader;
+ this.Writer = Writer;
+ }
+ public RWI_Custom(
+ T2 ds,
+ ITransformator<T1, T3> Transformator,
+ IReader<T3, T2> Reader,
+ IWriter<T3, T2> Writer
+ )
+ {
+ DataStorage = ds;
+ this.Transformator = Transformator;
+ this.Reader = Reader;
+ this.Writer = Writer;
+ }
+
+
+ public T1 Read(T2 param)
+ {
+ if (!HaveReader)
+ throw new Exception();
+
+ T3 serial_entity = Reader.Read(param);
+ return Transformator.ToEntityT1(serial_entity);
+ }
+ public T1 Read() => Read(DataStorage);
+
+ public void Write(T1 entity, T2 param)
+ {
+ if (!HaveWriter)
+ throw new Exception();
+
+ T3 serial_entity = Transformator.ToEntityT2(entity);
+ Writer.Write(serial_entity, param);
+ }
+ public void Write(T1 entity) => Write(entity, DataStorage);
+ }
+}
diff --git a/ToolPack1/Test_ConfigurationTool/ConfigurationTest.cs b/ToolPack1/Test_ConfigurationTool/ConfigurationTest.cs
index 80ec576..10685b9 100644
--- a/ToolPack1/Test_ConfigurationTool/ConfigurationTest.cs
+++ b/ToolPack1/Test_ConfigurationTool/ConfigurationTest.cs
@@ -3,6 +3,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting;
using ConfigurationTool;
using ConfigurationTool.Config;
+using ConfigurationTool.Config.Custom;
using ConfigurationTool.ConfigMultiple;
using Test_ConfigurationTool.Entities;
@@ -20,9 +21,8 @@ namespace Test_ConfigurationTool
{
string file = @"Config.xml";
- var conf = new ConfigurationManager<Config1>(new ConfigParams()
+ var conf = new ConfigurationManager<Config1>(new ConfigParams(file)
{
- ConfigFile = file,
Format = EnumFormat.XML,
UseApplicationPathPrefix = false
});
@@ -47,9 +47,9 @@ namespace Test_ConfigurationTool
{
string file = @"Config2.xml";
- var conf = new ConfigurationManager<Config2>(new ConfigParams()
+ var conf = new ConfigurationManager<Config2, Config2_Serial>(
+ new ConfigParams<Config2, Config2_Serial>(file, new Config2.Transformator())
{
- ConfigFile = file,
Format = EnumFormat.XML,
UseApplicationPathPrefix = false
});
@@ -74,9 +74,8 @@ namespace Test_ConfigurationTool
[TestMethod]
public void Test3()
{
- var conf = new MConfigurationManager<Config3>(new MConfigParams()
+ var conf = new MConfigurationManager<Config3>(new MConfigParams("Configs3")
{
- ConfigDirectory = "Configs3",
Format = EnumFormat.XML,
UseApplicationPathPrefix = false
});
diff --git a/ToolPack1/Test_ConfigurationTool/Entities/Config2.cs b/ToolPack1/Test_ConfigurationTool/Entities/Config2.cs
index 8f01b6b..852a526 100644
--- a/ToolPack1/Test_ConfigurationTool/Entities/Config2.cs
+++ b/ToolPack1/Test_ConfigurationTool/Entities/Config2.cs
@@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using ConfigurationTool.CustomSerializer;
+using RW_Tool.Interface.Custom;
namespace Test_ConfigurationTool.Entities
{
@@ -16,25 +16,33 @@ namespace Test_ConfigurationTool.Entities
}
- public class Config2 : BaseCustomSerialazible<Config2_Serial>
+ public class Config2
{
- public Dictionary<int, SubEntity> Dictionary { set; get; }
- = new Dictionary<int, SubEntity>();
-
- public override Config2_Serial Export()
- => new Config2_Serial()
+ public class Transformator : ITransformator<Config2, Config2_Serial>
+ {
+ public Config2 ToEntityT1(Config2_Serial entity)
+ {
+ return new Config2()
+ {
+ Dictionary = entity
+ .Dictionary
+ .ToDictionary(e => e.ID)
+ };
+ }
+
+ public Config2_Serial ToEntityT2(Config2 entity)
{
- Dictionary = Dictionary
+ return new Config2_Serial()
+ {
+ Dictionary = entity.Dictionary
.Values
.ToList()
- };
-
- public override void Import(Config2_Serial obj)
- {
- Dictionary = obj
- .Dictionary
- .ToDictionary(e => e.ID);
+ };
+ }
}
+
+ public Dictionary<int, SubEntity> Dictionary { set; get; }
+ = new Dictionary<int, SubEntity>();
}
public class Config2_Serial
diff --git a/ToolPack1/Test_ConfigurationTool/Test_ConfigurationTool.csproj b/ToolPack1/Test_ConfigurationTool/Test_ConfigurationTool.csproj
index 5cae744..c3860eb 100644
--- a/ToolPack1/Test_ConfigurationTool/Test_ConfigurationTool.csproj
+++ b/ToolPack1/Test_ConfigurationTool/Test_ConfigurationTool.csproj
@@ -63,6 +63,10 @@
<Project>{e8a983a0-ff7d-4e9a-9234-3f19ccb93700}</Project>
<Name>ConfigurationTool</Name>
</ProjectReference>
+ <ProjectReference Include="..\RW_Tool\RW_Tool.csproj">
+ <Project>{78207c90-5cfa-4ded-a047-cf711cba3f86}</Project>
+ <Name>RW_Tool</Name>
+ </ProjectReference>
</ItemGroup>
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />