using System; using System.Collections.Generic; using System.Xml; using Config.Entities; using log4net; namespace TBF.Rig.Output.Printers.GroupPrinting.Single { public class PrinterDef { static readonly ILog log = LogManager.GetLogger(typeof(PrinterCfgCtrl)); public String Name { get; set; } public String ObjName { get; set; } public override bool Equals(object obj) { if (obj == null || !(obj is PrinterDef)) { return false; } return Name.Equals(((PrinterDef)obj).Name) && ObjName.Equals(((PrinterDef)obj).ObjName); } public override string ToString() { return $"{Name}:{ObjName}"; } public Component toComponent(IList components) { foreach (Component component in components) { if (component.Name.Equals(Name) && component.ClassName.Equals(ObjName)) { return component; } } return null; } public static PrinterDef fromString(string formated) { try { PrinterDef printerDef = new PrinterDef(); string[] spliteStrings = formated.Split(':'); printerDef.Name = spliteStrings[0]; printerDef.ObjName = spliteStrings[1]; return printerDef; } catch (Exception e) { log.Error(e.StackTrace); } return null; } public static List fromParametersString(string parameters) { List printerDefs = new List(); // we have group printer XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(parameters); XmlNodeList printerCfg = xmlDocument.GetElementsByTagName("ItemsToPrint"); // Extract the text content of each element within ItemsToPrint List itemsToPrint = new List(); foreach (XmlNode itemNode in printerCfg) { // Process each "ItemsToPrint" element here foreach (XmlNode itemToPrint in itemNode.ChildNodes) { if (itemToPrint.NodeType == XmlNodeType.Element && itemToPrint.Name == "string") { printerDefs.Add(PrinterDef.fromString(itemToPrint.InnerText)); } } } return printerDefs; } public static PrinterDef fromComponent(Component component) { PrinterDef printerDef = new PrinterDef(); printerDef.Name = component.Name; printerDef.ObjName = component.ClassName; return printerDef; } } }