using DTS.Common.Enums.DBExport; using DTS.Common.Import.Interfaces; using DTS.Common.Import.XML; using DTS.Common.Utils; using DTS.Slice.Users; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace DTS.Common.Import { public static class XmlParserFactory { public static List UIItems { get; set; } private static Func _isCancelled; public static IImportNotification ImportNotification { get; set; } private static List LessThan20XMLVersion(XmlElement node, double importVersion) { List parseVariants = new List(); //FB 36879 prevent exception if there is no node to process if (node == null || node.ChildNodes == null) { return parseVariants; } foreach (var childNode in node.ChildNodes) { if (childNode is XmlElement) { var root = childNode as XmlElement; var name = root.Name; if (Enum.TryParse(name, out TopLevelFields field)) { switch (field) { case TopLevelFields.CustomChannels: var xmlCustomChannels = new XMLParseMMECustomChannels(root, importVersion, _isCancelled); parseVariants.Add(xmlCustomChannels); break; case TopLevelFields.CustomMainLocs: var xmlCustomMainLocs = new XMLParseMMECustomMainLocations(root, importVersion, _isCancelled); parseVariants.Add(xmlCustomMainLocs); break; case TopLevelFields.DASList: var xmlParseDasList = new XMLParseDASList(root, importVersion, _isCancelled); parseVariants.Add(new XMLPre20ParseDASList(root, importVersion, xmlParseDasList, _isCancelled)); break; case TopLevelFields.Sensors: var xmlParseSensors = new XMLParseSensors(root, importVersion, _isCancelled); xmlParseSensors.ImportNotification = ImportNotification; parseVariants.Add(new XMLPre20ParseSensors(root, importVersion, xmlParseSensors, _isCancelled)); break; case TopLevelFields.Calibrations: var xmlParseCalibrations = new XMLParseCalibrations(root, importVersion, _isCancelled); xmlParseCalibrations.ImportNotification = ImportNotification; parseVariants.Add(new XMLPre20ParseCalibrations(root, importVersion, xmlParseCalibrations, _isCancelled)); break; case TopLevelFields.GroupTemplates: var xmlParseGroupTemplates = new XMLParseGroupTemplates(root, importVersion, null, _isCancelled); parseVariants.Add(new XMLPre20ParseGroupTemplates(root, importVersion, xmlParseGroupTemplates, _isCancelled)); break; case TopLevelFields.Groups: var xmlParseGroups = new XMLParseGroups(root, importVersion); xmlParseGroups.ImportNotification = ImportNotification; parseVariants.Add(new XMLPre20ParseGroups(root, importVersion, null, xmlParseGroups, _isCancelled)); break; case TopLevelFields.TestSetups: var xmlParseTestSetups = new XMLParseTestSetups(root, importVersion, _isCancelled); xmlParseTestSetups.ImportNotification = ImportNotification; parseVariants.Add(new XMLPre20ParseTestSetups(root, importVersion, DTS.Common.Enums.IsoViewMode.ISOOnly, xmlParseTestSetups, _isCancelled)); break; } } } } return parseVariants; } private static List GreaterOrEqual20XMLVersion(XmlElement node, double importVersion) { List parseVariants = new List(); foreach (var childNode in node.ChildNodes) { if (childNode is XmlElement) { var root = childNode as XmlElement; var name = root.Name; if (Enum.TryParse(name, out TopLevelFields field)) { switch (field) { case TopLevelFields.LabDetails: var xmlParseLab = new XMLParseLabDetails(root, importVersion, _isCancelled); xmlParseLab.ImportNotification = ImportNotification; parseVariants.Add(xmlParseLab); break; case TopLevelFields.CustomerDetails: var xmlParseCustomer = new XMLParseCustomerDetails(root, importVersion, _isCancelled); xmlParseCustomer.ImportNotification = ImportNotification; parseVariants.Add(xmlParseCustomer); break; case TopLevelFields.TestEngineerDetails: var xmlParseTestEngineer = new XMLParseTestEngineerDetails(root, importVersion, _isCancelled); xmlParseTestEngineer.ImportNotification = ImportNotification; parseVariants.Add(xmlParseTestEngineer); break; case TopLevelFields.DASList: var xmlParseDasList = new XMLParseDASList(root, importVersion, _isCancelled); xmlParseDasList.ImportNotification = ImportNotification; parseVariants.Add(xmlParseDasList); break; case TopLevelFields.Sensors: var xmlParseSensors = new XMLParseSensors(root, importVersion, _isCancelled); xmlParseSensors.ImportNotification = ImportNotification; parseVariants.Add(xmlParseSensors); break; case TopLevelFields.Calibrations: var xmlParseCalibrations = new XMLParseCalibrations(root, importVersion, _isCancelled); xmlParseCalibrations.ImportNotification = ImportNotification; parseVariants.Add(xmlParseCalibrations); break; case TopLevelFields.GroupTemplates: var xmlParseGroupTemplates = new XMLParseGroupTemplates(root, importVersion, null, _isCancelled); parseVariants.Add(xmlParseGroupTemplates); break; case TopLevelFields.Groups: var xmlParseGroups = new XMLParseGroups(root, importVersion, _isCancelled); xmlParseGroups.ImportNotification = ImportNotification; parseVariants.Add(xmlParseGroups); break; case TopLevelFields.TestSetups: var xmlParseTestSetups = new XMLParseTestSetups(root, importVersion, _isCancelled); xmlParseTestSetups.ImportNotification = ImportNotification; parseVariants.Add(xmlParseTestSetups); break; case TopLevelFields.Users: var xmlParseUsers = new XMLParseUsers(root, importVersion, UIItems, _isCancelled); parseVariants.Add(xmlParseUsers); break; } } } } return parseVariants; } public static IEnumerable CreateXMLParsers(string fileName, IImportNotification importNotification, Func isCanceled) { double importVersion = -1; _isCancelled = isCanceled; ImportNotification = importNotification; var node = FileUtils.GetImportXmlNode(fileName, null, out importVersion); if (importVersion < FileUtils.DataPRO20XmlVersion) { return LessThan20XMLVersion(node, importVersion); } else { return GreaterOrEqual20XMLVersion(node, importVersion); } } } }