Files
DDUtility/DDUtilityApp/GlobalVariable.cs

224 lines
7.5 KiB
C#

using JWH;
using System;
using System.ComponentModel;
using System.Configuration;
using System.Drawing;
using System.IO;
using System.Reflection;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace DDUtilityApp
{
public class GlobalVariable
{
[ReadOnly(true)]
public static GlobalVariable Instance { get; set; } = new GlobalVariable();
/// <summary>
/// 설정정보 파일 경로
/// </summary>
public string DefaultPath { get; set; }
/// <summary>
/// 로그파일 다운로드 경로
/// </summary>
public string DownloadPath { get; set; }
/// <summary>
/// 로그파일 다운로드 경로 jhlim 20250202
/// </summary>
public string MesDownloadPath { get; set; }
/// <summary>
/// Workflow 다운로드 경로
/// </summary>
public string WorkflowPath { get; set; }
/// <summary>
/// Workflow(Compress) 원본파일 경로 구분
/// </summary>
public string WorkflowLocation { get; set; } = "Remote";
/// <summary>
/// Workflow(Compress) 원본파일 경로
/// </summary>
public string WorkflowCompressPath { get; set; }
public FormStartPosition FormStartPosition { get; set; } = FormStartPosition.CenterScreen;
public FormWindowState FormWindowState { get; set; } = FormWindowState.Maximized;
public Point FormLocation { get; set; } = new Point(0, 0);
public Size FormSize { get; set; } = new Size(1300, 750);
#region [ LogParser ]
public string EisParser_GridHeader { get; set; } = string.Empty;
public string AgvParser_GridHeader { get; set; } = string.Empty;
#endregion
#region [ FrmEqSelector ]
/// <summary>
/// EquipmentSelector 설비명 표시 필드. DDUtilityName;Description;MesName;
/// </summary>
public string FrmEqSelector_NameOrder { get; set; } = "MesName;DDUtilityName;Description;";
public bool FrmEqSelector_AllEquipment { get; set; } = false;
public bool FrmEqSelector_UseMesDB { get; set; } = false;
public string FrmEqSelector_GridEquipmentHeader { get; set; } = string.Empty;
public bool FrmEqSelector_UseSMB { get; set; } = false;
#endregion
public GlobalVariable()
{
this.LodConfig();
this.LoadSetting();
if (string.IsNullOrEmpty(this.FrmEqSelector_GridEquipmentHeader))
{
StringBuilder sb = new StringBuilder();
sb.Append($"Facility;");
sb.Append($"Line;");
sb.Append($"EquipmentID;");
sb.Append($"DisplayName;");
//sb.Append($"ControlMode;");
//sb.Append($"State;");
sb.Append($"ModelID;");
sb.Append($"Version;");
sb.Append($"EquipmentIP;");
sb.Append($"Port;");
sb.Append($"ServerIP;");
sb.Append($"GemSettingID;");
sb.Append($"DriverFileName;");
this.FrmEqSelector_GridEquipmentHeader = sb.ToString();
}
}
/// <summary>
/// Loading AppSettings
/// </summary>
private void LodConfig()
{
// DefaultPath
string defaultPath = ConfigurationManager.AppSettings["DefaultPath"];
if (string.IsNullOrEmpty(defaultPath)) defaultPath = $@"%MyDocuments%\DDUtility\";
this.DefaultPath = defaultPath.Replace("%MyDocuments%", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
this.DownloadPath = Path.Combine(this.DefaultPath, "Download");
this.WorkflowPath = Path.Combine(this.DefaultPath, "Workflow");
this.MesDownloadPath = Path.Combine(this.DefaultPath, "DownloadMES");
}
/// <summary>
/// Loading Setting.xml
/// </summary>
public void LoadSetting()
{
this.LoadSetting($@"{this.DefaultPath}Setting.xml");
}
/// <summary>
/// Loading Setting File
/// </summary>
/// <param name="filename"></param>
private void LoadSetting(string filename)
{
try
{
Type type = this.GetType();
XmlDocument document = new XmlDocument();
document.Load(filename);
PropertyInfo property = null;
foreach (XmlNode node in document.GetNodesByName("Property"))
{
try
{
property = type.GetProperty(node.Attributes["NAME"].Value);
string strValue = node.Attributes["VALUE"].Value;
if (property == null) continue;
object value = null;
if (property.PropertyType == typeof(System.Type))
{
value = Type.GetType(strValue);
}
else if (property.PropertyType == typeof(Size))
{
string[] splitValues = strValue.Split(new string[] { "{", "}", "=", "," }, StringSplitOptions.RemoveEmptyEntries);
value = new Size(int.Parse(splitValues[1]), int.Parse(splitValues[3]));
}
else if (property.PropertyType == typeof(Point))
{
string[] splitValues = strValue.Split(new string[] { "{", "}", "=", "," }, StringSplitOptions.RemoveEmptyEntries);
value = new Point(int.Parse(splitValues[1]), int.Parse(splitValues[3]));
}
else
{
value = TypeDescriptor.GetConverter(property.PropertyType).ConvertFrom(strValue);
}
property.SetValue(this, value);
}
catch (Exception ex)
{
XLogger.Instance.Fatal($"{property.Name}", ex);
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
public void SaveSetting()
{
this.SaveSetting($@"{this.DefaultPath}Setting.xml");
}
private void SaveSetting(string filename)
{
try
{
Type type = this.GetType();
StringBuilder sb = new StringBuilder();
sb.AppendLine($"<DDUtility>");
sb.AppendLine($" <Properties>");
foreach (PropertyInfo property in type.GetProperties())
{
Attribute attribute = property.GetCustomAttribute(typeof(ReadOnlyAttribute));
if (attribute != null && ((ReadOnlyAttribute)attribute).IsReadOnly) continue;
object value = property.GetValue(this);
sb.AppendLine($" <Property NAME='{property.Name}' VALUE='{value}' />");
}
sb.AppendLine($" </Properties>");
sb.AppendLine($"</DDUtility>");
using (StreamWriter stream = File.CreateText(filename))
stream.Write(sb.ToString());
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
}
}