using System.Xml.Linq; using Serilog; using CRIF.ACTion.Common; using CRIF.ACTion.Common.Parsers; namespace CRIF.ACTion.Configuration { public class ConfigurationRequestResponseParser : IResponseParser> { private const string _channelsPath = "/actionAPI/getChannels/msg:maintExportResponse/msg:maintenanceEntities/maint:parties/common:channel/common:channelClassifications/common:channelClassification/common:channelClassificationItem"; public ConfigurationRequestResponseParser() { } public SortedList Parse(XElement xElement) { SortedList mappingList = []; try { var namespaceManager = CrifNamespaces.GetNamespaceManager(xElement); IEnumerable channelNodeList = xElement.XElementXPathSelectElements(_channelsPath, namespaceManager); foreach (XElement channelNode in channelNodeList) { try { string nodeAttributeValue = StandardizedStringValue(channelNode.Attribute(CrifNamespaces.Common + "name").Value); if (ChannelIsActive(nodeAttributeValue)) { string partyIdString = channelNode.Parent.Parent.Parent.Attribute(CrifNamespaces.Common + "partyID").Value; string name = channelNode.Parent.Parent.Parent.Attribute(CrifNamespaces.Common + "name").Value; _ = int.TryParse(partyIdString, out int partyId); mappingList.Add(partyId, name); } } catch (Exception ex) { Log.Error("Error trying to parse CRIF BranchName Configuration Response", ex.Message, ex.StackTrace); } } } catch (Exception ex) { Log.Error("Error trying to parse CRIF BranchName Configuration Response", ex.Message, ex.StackTrace); } return mappingList; } private static bool ChannelIsActive(string nodeAttributeValue) { bool channelIsActive = false; if (!string.IsNullOrWhiteSpace(nodeAttributeValue)) { channelIsActive = ( nodeAttributeValue.Equals("BRANCH") || nodeAttributeValue.Equals("INTERNET") || nodeAttributeValue.Equals("ON-LINE") ); } return channelIsActive; } private static string StandardizedStringValue(string InputString) { string standardizedString = ""; if (!string.IsNullOrWhiteSpace(InputString)) { standardizedString = InputString.Trim().ToUpper(); } return standardizedString; } } }