Add Phoenix remote desktop, action connector, documentation engine, and gamification support. Refactor support-case processing and search/action UI, and update installer assets and dependencies.
106 lines
3.6 KiB
C#
106 lines
3.6 KiB
C#
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;
|
|
|
|
/// <summary>
|
|
/// Reference to the Quick Action to invoke, e.g. "Protocol case in JIRA".
|
|
/// </summary>
|
|
public string QuickActionRef { get; set; }
|
|
|
|
public IDictionary<string, string> Parameters { get; private set; } = new Dictionary<string, string>();
|
|
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
}
|