From c1bc36a049e45686248696d6543bf3d075933b3c Mon Sep 17 00:00:00 2001 From: "ns.potapov" Date: Mon, 26 Feb 2024 09:48:14 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=20DataFileS?= =?UTF-8?q?ingleton?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataFileSingleton.cs | 50 +++++++++++++++++++ .../Models/Secure.cs | 21 +++----- 2 files changed, 57 insertions(+), 14 deletions(-) create mode 100644 SecuritySystem/SecuritySystemFileImplement/DataFileSingleton.cs diff --git a/SecuritySystem/SecuritySystemFileImplement/DataFileSingleton.cs b/SecuritySystem/SecuritySystemFileImplement/DataFileSingleton.cs new file mode 100644 index 0000000..975a76f --- /dev/null +++ b/SecuritySystem/SecuritySystemFileImplement/DataFileSingleton.cs @@ -0,0 +1,50 @@ +using SecuritySystemFileImplement.Models; +using System.Xml.Linq; + +namespace SecuritySystemFileImplement +{ + internal class DataFileSingleton + { + private static DataFileSingleton? instance; + private readonly string ComponentFileName = "Component.xml"; + private readonly string OrderFileName = "Order.xml"; + private readonly string SecureFileName = "Secure.xml"; + public List Components { get; private set; } + public List Orders { get; private set; } + public List Secures { get; private set; } + public static DataFileSingleton GetInstance() + { + if (instance == null) + { + instance = new DataFileSingleton(); + } + return instance; + } + public void SaveComponents() => SaveData(Components, ComponentFileName, "Components", x => x.GetXElement); + public void SaveSecures() => SaveData(Secures, SecureFileName, "Secures", x => x.GetXElement); + public void SaveOrders() { } + private DataFileSingleton() + { + Components = LoadData(ComponentFileName, "Component", x => Component.Create(x)!)!; + Secures = LoadData(SecureFileName, "Secure", x => Secure.Create(x)!)!; + Orders = new List(); + } + private static List? LoadData(string filename, string xmlNodeName, + Func selectFunction) + { + if (File.Exists(filename)) + { + return XDocument.Load(filename)?.Root?.Elements(xmlNodeName)?.Select(selectFunction)?.ToList(); + } + return new List(); + } + private static void SaveData(List data, string filename, string xmlNodeName, Func selectFunction) + { + if (data != null) + { + new XDocument(new XElement(xmlNodeName, data.Select(selectFunction).ToArray())).Save(filename); + } + } + } + +} diff --git a/SecuritySystem/SecuritySystemFileImplement/Models/Secure.cs b/SecuritySystem/SecuritySystemFileImplement/Models/Secure.cs index f939568..1b281c5 100644 --- a/SecuritySystem/SecuritySystemFileImplement/Models/Secure.cs +++ b/SecuritySystem/SecuritySystemFileImplement/Models/Secure.cs @@ -1,4 +1,5 @@ using SecuritySystemContracts.BindingModels; +using SecuritySystemContracts.ViewModels; using SecuritySystemDataModels.Models; using System.Xml.Linq; @@ -10,8 +11,7 @@ namespace SecuritySystemFileImplement.Models public string SecureName { get; private set; } = string.Empty; public double Price { get; private set; } public Dictionary Components { get; private set; } = new(); - private Dictionary? _secureComponents = - null; + private Dictionary? _secureComponents = null; public Dictionary SecureComponents { get @@ -19,9 +19,8 @@ namespace SecuritySystemFileImplement.Models if (_secureComponents == null) { var source = DataFileSingleton.GetInstance(); - _secureComponents = Components.ToDictionary(x => x.Key, y => - ((source.Components.FirstOrDefault(z => z.Id == y.Key) as IComponentModel)!, - y.Value)); + _secureComponents = Components.ToDictionary(x => x.Key, + y => ((source.Components.FirstOrDefault(z => z.Id == y.Key) as IComponentModel)!, y.Value)); } return _secureComponents; } @@ -37,8 +36,7 @@ namespace SecuritySystemFileImplement.Models Id = model.Id, SecureName = model.SecureName, Price = model.Price, - Components = model.SecureComponents.ToDictionary(x => x.Key, x - => x.Value.Item2) + Components = model.SecureComponents.ToDictionary(x => x.Key, x => x.Value.Item2) }; } public static Secure? Create(XElement element) @@ -52,11 +50,7 @@ namespace SecuritySystemFileImplement.Models Id = Convert.ToInt32(element.Attribute("Id")!.Value), SecureName = element.Element("SecureName")!.Value, Price = Convert.ToDouble(element.Element("Price")!.Value), - Components = - element.Element("SecureComponents")!.Elements("SecureComponent") - .ToDictionary(x => - Convert.ToInt32(x.Element("Key")?.Value), x => - Convert.ToInt32(x.Element("Value")?.Value)) + Components = element.Element("SecureComponents")!.Elements("SecureComponent").ToDictionary(x => Convert.ToInt32(x.Element("Key")?.Value), x => Convert.ToInt32(x.Element("Value")?.Value)) }; } public void Update(SecureBindingModel model) @@ -67,8 +61,7 @@ namespace SecuritySystemFileImplement.Models } SecureName = model.SecureName; Price = model.Price; - Components = model.SecureComponents.ToDictionary(x => x.Key, x => - x.Value.Item2); + Components = model.SecureComponents.ToDictionary(x => x.Key, x => x.Value.Item2); _secureComponents = null; } public SecureViewModel GetViewModel => new()