Files
DP44/Common/DTS.Common.Import/Factories/XmlParserFactory.cs
2026-04-17 14:55:32 -04:00

167 lines
9.4 KiB
C#

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.Xml;
namespace DTS.Common.Import
{
public static class XmlParserFactory
{
public static List<IUIItems> UIItems { get; set; }
private static Func<bool> _isCancelled;
public static IImportNotification ImportNotification { get; set; }
private static List<IParseVariant> LessThan20XMLVersion(XmlElement node, double importVersion)
{
List<IParseVariant> parseVariants = new List<IParseVariant>();
//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<IParseVariant> GreaterOrEqual20XMLVersion(XmlElement node, double importVersion, bool skipNormalizing)
{
List<IParseVariant> parseVariants = new List<IParseVariant>();
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, skipNormalizing);
xmlParseDasList.ImportNotification = ImportNotification;
parseVariants.Add(xmlParseDasList);
break;
case TopLevelFields.Sensors:
var xmlParseSensors = new XMLParseSensors(root, importVersion, _isCancelled, skipNormalizing);
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, skipNormalizing);
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<IParseVariant> CreateXMLParsers(string fileName, IImportNotification importNotification, Func<bool> isCanceled, bool skipNormalizing)
{
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, skipNormalizing);
}
}
}
}