feat: expand cockpit integrations and support workflows
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.
This commit is contained in:
105
F4SD-ActionConnector/Models/QuickActionDefinition.cs
Normal file
105
F4SD-ActionConnector/Models/QuickActionDefinition.cs
Normal file
@@ -0,0 +1,105 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user