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<ProductData> products;
|
|
public ObservableCollection<ProductData> Products
|
{
|
get { return products; }
|
set { Set(ref products, value); }
|
}
|
|
private ObservableCollection<ParameterData> parameters;
|
|
public ObservableCollection<ParameterData> 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 = "产品名称不能重复";
|
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 = "参数名称不能重复";
|
return false;
|
}
|
return true;
|
}
|
|
public void LoadProducts()
|
{
|
ObservableCollection<ProductData> products;
|
if (File.Exists(ProductSettingFile))
|
{
|
products = XmlHelper.DeserializeFromXml<ObservableCollection<ProductData>>(ProductSettingFile);
|
}
|
else
|
{
|
products = new ObservableCollection<ProductData>();
|
}
|
Products = products;
|
}
|
|
public void LoadParameters()
|
{
|
ObservableCollection<ParameterData> parameters = new ObservableCollection<ParameterData>();
|
if (SelectedProduct != null)
|
{
|
string fileName = $"Parameter_{SelectedProduct.Name}.setting";
|
string parameterSettingFile = Path.Combine(ParameterSettingFolder, fileName);
|
if (File.Exists(parameterSettingFile))
|
{
|
parameters = XmlHelper.DeserializeFromXml<ObservableCollection<ParameterData>>(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);
|
}
|
}
|
}
|