Files
2025-02-03 11:02:48 +09:00

135 lines
4.1 KiB
C#

using JWH;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
namespace DDUtilityApp.SECS
{
public class RPT
{
public static RPT CreateRPT(XmlNode node)
{
RPT rpt = new RPT();
try
{
foreach (XmlAttribute attribute in node.Attributes)
{
if (string.Compare(attribute.Name, "ID", true) == 0) rpt.ID = attribute.Value;
if (string.Compare(attribute.Name, "Seq", true) == 0) { int nSeq; int.TryParse(attribute.Value, out nSeq); rpt.Seq = nSeq; };
if (string.Compare(attribute.Name, "Name", true) == 0) rpt.Name = attribute.Value;
if (string.Compare(attribute.Name, "Description", true) == 0) rpt.Description = attribute.Value;
}
if (string.IsNullOrEmpty(rpt.ID))
{
XLogger.Instance.Warn($"RPT.ID 값이 존재하지 않습니다.");
return null;
}
int seq = 1;
foreach (XmlNode child in node.ChildNodes)
{
VID vid = VID.CreateVID(child);
if (vid.Seq == -1) vid.Seq = seq++;
else seq = rpt.Seq + 1;
if (vid != null) rpt.VidDictionary.Add(vid.ID, vid);
}
return rpt;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return null;
}
}
#region [ Properties ] ------------------------------------------------
public string ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int Seq { get; set; } = -1;
public Dictionary<string, VID> VidDictionary { get; set; } = new Dictionary<string, VID>();
public IEnumerable<VID> VidCollection { get { return this.VidDictionary.Values; } }
#endregion
#region [ RPT ] -------------------------------------------------------
public RPT()
{
}
public RPT(string id, string name = "", string description = "")
{
this.ID = id;
this.Name = name;
this.Description = description;
}
#endregion
#region [ Method ] ----------------------------------------------------
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append($"ID={this.ID}");
sb.Append($", Name={this.Name}");
if (!string.IsNullOrEmpty(this.Description)) sb.Append($", Description={this.Description}");
StringBuilder sbVid = new StringBuilder();
sbVid.Append($"VID[{this.VidCollection.Count()}] {{ ");
foreach(VID vid in this.VidCollection)
sbVid.Append($"{vid.ID} ");
sbVid.Append($"}}");
return $"{sb.ToString()}, {sbVid.ToString()}";
}
public string ToXml(string indent = "", bool inSvid = true)
{
StringBuilder sb = new StringBuilder();
if (inSvid)
{
sb.Append($"{indent}<RPT ID='{this.ID}'");
if (!string.IsNullOrEmpty(this.Name)) sb.Append($" NAME='{this.Name}'");
if (!string.IsNullOrEmpty(this.Description)) sb.Append($" DESCRIPTION='{this.Description}'");
sb.AppendLine($">");
foreach (VID vid in this.VidCollection.OrderBy(x => x.Seq))
sb.AppendLine($"{indent}{vid.ToXml($" ", true)}");
sb.Append($"{indent}</RPT>");
}
else
{
sb.Append($"{indent}<RPT");
sb.Append($" SEQ ='{this.Seq}'");
sb.Append($" ID ='{this.ID}'");
if (!string.IsNullOrEmpty(this.Name)) sb.Append($" NAME='{this.Name}'");
sb.Append($" />");
}
return sb.ToString();
}
#endregion
}
}