using System.Collections.Generic; using IwbZero.IwbBase; using IwbZero.ToolCommon.StringModel; namespace WeEngine.ComponentInfo { public class EngineComponent:IIwbId { public EngineComponent() { Data=new List(); } /// /// 编号 /// public string Id { get; set; } /// /// 编号 /// public string No { get => Id; set => Id = value; } /// /// 名称 /// public string Name { get; set; } /// /// 参数映射 /// public string Parameters { get; set; } /// /// 事务描述 /// public string Description { get; set; } /// /// 事务类型 /// public string ComponentType { get; set; } /// /// 事务逻辑 /// public string ComponentScript { get { string str = ""; foreach (var componentScript in Data) { str += componentScript.ToXmlString()+"\r\n"; } if (str.IsNotEmpty()) { str = $"{str}"; } return str; } } /// /// 类全名 /// public string ComponentClass { get; set; } /// /// 程序集 /// public string ComponentLib { get; set; } /// /// 注册Key(IOC注入) /// public string RegisterKey { get; set; } public List Data { get; set; } public EngineComponent ModelFrom(IwbXmlNode xmlNode) { if (xmlNode == null) { return null; } Data = new List(); Id = xmlNode.GetChildValue("Id"); No = xmlNode.GetChildValue("No"); Name = xmlNode.GetChildValue("Name"); Parameters = xmlNode.GetChildValue("Parameters"); Description = xmlNode.GetChildValue("Description"); RegisterKey = xmlNode.GetChildValue("RegisterKey"); ComponentClass = xmlNode.GetChildValue("ComponentClass"); ComponentLib = xmlNode.GetChildValue("ComponentLib"); ComponentType = xmlNode.GetChildValue("ComponentType"); var scriptStr = xmlNode.GetChildValue("ComponentScript")?.DecodeBase64(); Data = new ComponentScript().ModelFrom(scriptStr); return this; } public string ConvertComponents2Xml(List engineComponents) { string str = ""; foreach (var component in engineComponents) { str += component.ToXmlString() + "\r\n"; } if (str.IsNotEmpty()) { str = $"{str}"; } return str; } public string ToXmlString() { string str = ""; str += $"\r\n"; str += $"{Id}\r\n"; str += $"{Name}\r\n"; str += $"{Parameters}\r\n"; str += $"{Description}\r\n"; str += $"{RegisterKey}\r\n"; str += $"{ComponentScript.EncodeBase64()}\r\n"; str += $"{ComponentClass}\r\n"; str += $"{ComponentLib}\r\n"; str += $"{ComponentType}\r\n"; str += ""; return str; } public List BuildByXml(string xml) { var node = IwbXmlNode.ParseGenericXml(xml); return BuildByXml(node); } public List BuildByXml(IwbXmlNode xmlNode) { var models = new List(); var nodes = xmlNode?.Nodes; if (nodes?.Count > 0) { foreach (IwbXmlNode node in nodes) { var model = new EngineComponent().ModelFrom(node); if (model != null) models.Add(model); } } return models; } } public class ComponentScript { public string Id { get; set; } public string No { get; set; } public string Name { get; set; } public string Path { get; set; } public string ParentPath { get; set; } public string CompType { get; set; } public ComponentVariable Variable { get; set; } public string Condition { get; set; } public List Yes { get; set; } public List Not { get; set; } public string WaitNodes { get; set; } public string Message { get; set; } public string ToXmlString() { string str = "", str1 = ""; str += $"<{CompType} id=\"{Id}\">"; if (Variable != null) { str1 += Variable.ToXmlString(); str += str1.IsEmpty() ? "" : $"{str1}\r\n"; } str += CompType.IsEmpty() ? "" : $"{CompType}\r\n"; str += Name.IsEmpty() ? "" : $"{Name}\r\n"; str += Path.IsEmpty() ? "" : $"{Path}\r\n"; str += ParentPath.IsEmpty() ? "" : $"{ParentPath}\r\n"; str += Condition.IsEmpty() ? "" : $"{Condition.FormatCode2Xml()}\r\n"; str += WaitNodes.IsEmpty() ? "" : $"{WaitNodes}\r\n"; str += Message.IsEmpty() ? "" : $"{Message}\r\n"; str1 = ""; if (Yes != null) { foreach (var cd in Yes) { str1 += cd.ToXmlString(); } } str += str1.IsEmpty() ? "" : $"{str1}\r\n"; str1 = ""; if (Not != null) { foreach (var cd in Not) { str1 += cd.ToXmlString(); } } str += str1.IsEmpty() ? "" : $"{str1}\r\n"; str += $""; return str; } public List ModelFrom(string str) { var scripts= new List(); if (str.IsEmpty()) { return scripts; } var xmlStr = str.StartsWith("") ? str : $"{str}"; var xmlNode = IwbXmlNode.ParseGenericXml(xmlStr); var scriptNodes = xmlNode.Nodes; if (scriptNodes?.Count > 0) { foreach (IwbXmlNode scriptNode in scriptNodes) { var data = new ComponentScript().ModelFrom(scriptNode); scripts.Add(data); } } return scripts; } public ComponentScript ModelFrom(IwbXmlNode xmlNode) { if (xmlNode == null) return null; Id = xmlNode.GetChildValue("Id"); No = xmlNode.GetChildValue("No"); Name = xmlNode.GetChildValue("Name"); CompType = xmlNode.GetChildValue("CompType"); Path = xmlNode.GetChildValue("Path"); ParentPath = xmlNode.GetChildValue("ParentPath"); Condition = xmlNode.GetChildValue("Condition"); WaitNodes = xmlNode.GetChildValue("WaitNodes"); Message = xmlNode.GetChildValue("Message"); var variableNode = xmlNode.GetChildNode("Variable"); Variable = new ComponentVariable().ModelFrom(variableNode); Yes = new List(); Not = new List(); var yesNodes = xmlNode.GetChildNode("Yes")?.Nodes; if (yesNodes?.Count > 0) { foreach (IwbXmlNode y in yesNodes) { var yes = new ComponentScript().ModelFrom(y); if (yes != null) Yes.Add(yes); } } var noNodes = xmlNode.GetChildNode("Not")?.Nodes; if (noNodes?.Count > 0) { foreach (IwbXmlNode n in noNodes) { var not = new ComponentScript().ModelFrom(n); if (not != null) Not.Add(not); } } return this; } } public class ComponentVariable { public ComponentVariable(string str) { var arr = str.StrToArray(":"); Name = ""; Type = "STRING"; Value = ""; if (arr.Length > 0) { Name = arr[0].Substring(2); } if (arr.Length > 1) { TargetPath = arr[1]; } if (arr.Length > 2) { Value = arr[2]; } } public ComponentVariable() { } public string Name { get; set; } public string Type { get; set; } public string Value { get; set; } public string TargetPath { get; set; } public string TargetName { get; set; } public string ToXmlString() { string str = ""; str += Name.IsEmpty() ? "" : $"{Name}\r\n"; str += Type.IsEmpty() ? "" : $"{Type}\r\n"; str += Value.IsEmpty() ? "" : $"{Value}\r\n"; str += TargetPath.IsEmpty() ? "" : $"{TargetPath}\r\n"; str += TargetName.IsEmpty() ? "" : $"{TargetName}\r\n"; return str; } public ComponentVariable ModelFrom(IwbXmlNode xmlNode) { if (xmlNode == null) { return null; } Name = xmlNode.GetChildValue("Name"); Type = xmlNode.GetChildValue("Type"); Value = xmlNode.GetChildValue("Value"); TargetPath = xmlNode.GetChildValue("TargetPath"); TargetName = xmlNode.GetChildValue("TargetName"); return this; } } }