using C4IT.XML; using F4SD.ActionConnector.Enumerations; using System; using System.Collections.Generic; using System.Xml; using static C4IT.Logging.cLogManager; namespace F4SD.ActionConnector.Models { public sealed class QuickActionDefinition : ActionDefinitionBase { private const string ParametersNodeName = "Parameters"; private const string ParameterNodeName = "Parameter"; public override ActionType Type => ActionType.QuickAction; /// /// Reference to the Quick Action to invoke, e.g. "Protocol case in JIRA". /// public string QuickActionRef { get; set; } public IDictionary Parameters { get; private set; } = new Dictionary(); internal QuickActionDefinition(XmlElement xNode, cXmlParser parser) : base(xNode, parser) { try { if (!IsValid) return; else IsValid = false; XmlNode quickActionRefNode = xNode.SelectSingleNode("QuickActionRef"); if (quickActionRefNode is null) return; QuickActionRef = cXmlParser.GetInnerTextFromXmlElement(quickActionRefNode); if (QuickActionRef is null) return; XmlNode parametersNode = xNode.SelectSingleNode(ParametersNodeName); if (parametersNode != null && parametersNode is XmlElement paramtersNodeElement) ParseParametersElement(paramtersNodeElement, parser); IsValid = true; } catch (Exception ex) { LogException(ex); } } private void ParseParametersElement(XmlElement parametersNodeElement, cXmlParser parser) { try { parser.EnterElement(ParametersNodeName); XmlNodeList parameterNodes = parametersNodeElement.SelectNodes(ParameterNodeName); if (parameterNodes?.Count > 0) parser.EnterElement(ParameterNodeName); foreach (XmlElement parameterNode in parameterNodes) { ParseParameterElement(parameterNode, parser); } if (parameterNodes?.Count > 0) parser.LeaveElement(ParameterNodeName); } catch (Exception ex) { LogException(ex); } finally { parser.LeaveElement(ParametersNodeName); } } private void ParseParameterElement(XmlElement parameterNode, cXmlParser parser) { try { string parameterName = cXmlParser.GetStringFromXmlAttribute(parameterNode, "name"); string parameterVariable = cXmlParser.GetInnerTextFromXmlElement(parameterNode); if (string.IsNullOrEmpty(parameterName) || string.IsNullOrEmpty(parameterVariable)) return; if (Parameters.ContainsKey(parameterName)) LogEntry($"A paramter with name '{parameterName}' does allready exist.", C4IT.Logging.LogLevels.Warning); else Parameters.Add(parameterName, parameterVariable); } catch (Exception ex) { LogException(ex); } finally { parser.SelectElementNext(); } } } }