From a60b8e7edc03a77c4b64286ae6ed07f423acbf84 Mon Sep 17 00:00:00 2001 From: Programmist73 Date: Tue, 14 Feb 2023 00:22:30 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20DataFile=20=D0=B4=D0=BB=D1=8F=20FileImplement.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataFileSingleton.cs | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 BlacksmithWorkshop/BlacksmithWorkshopFileImplement/DataFileSingleton.cs diff --git a/BlacksmithWorkshop/BlacksmithWorkshopFileImplement/DataFileSingleton.cs b/BlacksmithWorkshop/BlacksmithWorkshopFileImplement/DataFileSingleton.cs new file mode 100644 index 0000000..b6628a3 --- /dev/null +++ b/BlacksmithWorkshop/BlacksmithWorkshopFileImplement/DataFileSingleton.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; +using BlacksmithWorkshopFileImplement.Models; + +namespace BlacksmithWorkshopFileImplement +{ + public class DataFileSingleton + { + private static DataFileSingleton? instance; + + private readonly string WorkPieceFileName = "WorkPiece.xml"; + + private readonly string OrderFileName = "Order.xml"; + + private readonly string ManufactureFileName = "Manufacture.xml"; + + public List WorkPieces { get; private set; } + + public List Orders { get; private set; } + + public List Manufactures { get; private set; } + + public static DataFileSingleton GetInstance() + { + if (instance == null) + { + instance = new DataFileSingleton(); + } + + return instance; + } + + public void SaveWorkPieces() => SaveData(WorkPieces, WorkPieceFileName, "WorkPieces", x => x.GetXElement); + + public void SaveManufactures() => SaveData(Manufactures, ManufactureFileName, "Manufactures", x => x.GetXElement); + + public void SaveOrders() => SaveData(Orders, OrderFileName, "Orders", x => x.GetXElement); + + private DataFileSingleton() + { + WorkPieces = LoadData(WorkPieceFileName, "WorkPiece", x => WorkPiece.Create(x)!)!; + Manufactures = LoadData(ManufactureFileName, "Manufacture", x => Manufacture.Create(x)!)!; + Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!; + } + + 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); + } + } + } +}