using HMI.Core.Entity; using HMI.Core.Util; using HMI.ParameterManage.Entity; using System.Collections.ObjectModel; using System.IO; using System.Linq; namespace HMI.ParameterManage.Model { public class XmlModel : NotifyBase { private string ProductSettingFile; private string ParameterSettingFolder; public XmlModel(string baseFolder) { ProductSettingFile = Path.Combine(baseFolder, "Product.setting"); ParameterSettingFolder = Path.Combine(baseFolder, "Parameter"); if (!Directory.Exists(ParameterSettingFolder)) { Directory.CreateDirectory(ParameterSettingFolder); } } private ObservableCollection products; public ObservableCollection Products { get { return products; } set { Set(ref products, value); } } private ObservableCollection parameters; public ObservableCollection Parameters { get { return parameters; } set { Set(ref parameters, value); } } private ProductData selectedProduct; public ProductData SelectedProduct { get { return selectedProduct; } set { Set(ref selectedProduct, value); LoadParameters(); } } private ParameterData selectedParameter; public ParameterData SelectedParameter { get { return selectedParameter; } set { Set(ref selectedParameter, value); } } public bool ValidateProductName(object value, out string msg) { msg = null; string name = value.ToString(); if (Products == null) return true; var temp = Products.FirstOrDefault(p => p.Name == name); if (temp != null && temp != SelectedProduct) { msg = this.lang("App.MustBeUnique", this.lang("Pm.Product.Name")); return false; } return true; } public bool ValidateParameterName(object value, out string msg) { msg = null; string name = value.ToString(); if (Products == null) return true; var temp = Parameters.FirstOrDefault(p => p.Name == name); if (temp != null && temp != SelectedParameter) { msg = this.lang("App.MustBeUnique", this.lang("Pm.Product.Name")); return false; } return true; } public void LoadProducts() { ObservableCollection products; if (File.Exists(ProductSettingFile)) { products = XmlHelper.DeserializeFromXml>(ProductSettingFile); } else { products = new ObservableCollection(); } Products = products; } public void LoadParameters() { ObservableCollection parameters = new ObservableCollection(); if (SelectedProduct != null) { string fileName = $"Parameter_{SelectedProduct.Name}.setting"; string parameterSettingFile = Path.Combine(ParameterSettingFolder, fileName); if (File.Exists(parameterSettingFile)) { parameters = XmlHelper.DeserializeFromXml>(parameterSettingFile); } } Parameters = parameters; } public void SaveOrUpdateData(ProductData data) { int index = Products.IndexOf(data); if (index > -1) { UpdateData(index, data); } else { InsertData(data); } } public void SaveOrUpdateParameter(ParameterData data) { int index = Parameters.IndexOf(data); if (index > -1) { UpdateParameter(index, data); } else { InsertParameter(data); } } public void InsertData(ProductData data) { var temp = XmlHelper.DeepClone(Products); temp.Add(data); XmlHelper.SerializeToXml(ProductSettingFile, temp); } public void UpdateData(int index, ProductData data) { var temp = XmlHelper.DeepClone(Products); temp[index] = data; XmlHelper.SerializeToXml(ProductSettingFile, temp); } public void InsertParameter(ParameterData data) { var temp = XmlHelper.DeepClone(Parameters); temp.Add(data); string fileName = Path.Combine(ParameterSettingFolder, $"Parameter_{SelectedProduct.Name}.setting"); XmlHelper.SerializeToXml(fileName, temp); } public void UpdateParameter(int index, ParameterData data) { var temp = XmlHelper.DeepClone(Parameters); temp[index] = data; string fileName = Path.Combine(ParameterSettingFolder, $"Parameter_{SelectedProduct.Name}.setting"); XmlHelper.SerializeToXml(fileName, temp); } public void DeleteProduct(ProductData data) { int index = Products.IndexOf(data); if (index > -1) { var temp = Products.Where(p => p != data).ToList(); XmlHelper.SerializeToXml(ProductSettingFile, temp); } } public void DeleteProducts() { var temp = Products.Where(p => !p.IsSelected).ToList(); XmlHelper.SerializeToXml(ProductSettingFile, temp); } public void DeleteParameter(ParameterData data) { int index = Parameters.IndexOf(data); if (index > -1) { var temp = Parameters.Where(p => p != data).ToList(); string fileName = Path.Combine(ParameterSettingFolder, $"Parameter_{SelectedProduct.Name}.setting"); XmlHelper.SerializeToXml(fileName, temp); } } public void DeleteParameters() { var temp = Parameters.Where(p => !p.IsSelected).ToList(); string fileName = Path.Combine(ParameterSettingFolder, $"Parameter_{SelectedProduct.Name}.setting"); XmlHelper.SerializeToXml(fileName, temp); } } }