This commit is contained in:
2026-04-17 14:55:32 -04:00
commit bc3ac1d4c9
18017 changed files with 4371742 additions and 0 deletions

View File

@@ -0,0 +1,166 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using DataPROWin7.DataModel;
using DTS.Common.Import.ImportOptions;
using DTS.Common.Import.Parsers;
using DTS.Common.Interface.Groups.GroupList;
using DTS.Common.SharedResource.Strings;
using DTS.Common.Utilities.Logging;
using DTS.Common.Utils;
using DTS.SensorDB;
namespace DTS.Common.Import
{
public class EQXTestSetupParser : ParseVariantBase
{
private readonly IImportNotification _importNotification;
private readonly EqxImportOptions _eqxImportOptions;
private readonly IGroupImport _groupImport;
private readonly EquipmentExchange.EQXSensorDatabase _eqxSensorDatabase;
private readonly bool _createDynamicGroups;
public EQXTestSetupParser(IImportNotification importNotification, EqxImportOptions eqxImportOptions,
IGroupImport groupImport, EquipmentExchange.EQXSensorDatabase eqxSensorDatabase, bool createDynamicGroups)
{
_eqxImportOptions = eqxImportOptions;
_importNotification = importNotification;
_groupImport = groupImport;
_eqxSensorDatabase = eqxSensorDatabase;
_createDynamicGroups = createDynamicGroups;
}
private void FixCalibrations(ImportObject importObject)
{
try
{
var sensors = importObject.Sensors().ToArray();
foreach (var sensor in sensors)
{
if (null == sensor) { continue; }
var cals = importObject.CalibrationLookup(sensor.SerialNumber);
if (null != cals && cals.Count > 0)
{
cals.Sort();
sensor.Calibration = cals[0];
}
}
}
catch (Exception ex)
{
APILogger.Log("EQXTestSetupParser.FixCalibrations failed to fix calibrations", ex);
}
}
public override void Parse(ref ImportObject importObject)
{
if (string.IsNullOrEmpty(FileName))
{
return;
}
if (importObject == null)
{
throw new ArgumentNullException("importObject", "importObject can't be null or empty");
}
var sensorImportData = _eqxSensorDatabase.GetImportData();
//FB 40750 if there is not Group name test then the eqx file does not have any test setup
if (sensorImportData.GroupNameTestObjectLookup == null || !sensorImportData.GroupNameTestObjectLookup.Any())
{
//abort the import process
importObject.AddError(new ImportError { ContinueImportOnError = false, Message = StringResources.Import_EQXFileNotForTestSetup, Severity = ImportSeverityError.Critical });
return;
}
importObject.AssignGroupNameTestObjectLookup(sensorImportData.GroupNameTestObjectLookup);
importObject.AssignGroupNameSensorsLookup(sensorImportData.GroupNameSensorListLookup);
var testTemplate = new TestTemplate();
var setupName = ParseSetupName(FileName);
testTemplate.Name = setupName == string.Empty ? Path.GetFileNameWithoutExtension(FileName) : setupName;
if (importObject.TestSetups().Any(p => p.Name == testTemplate.Name))
{
return;
}
FixCalibrations(importObject);
var res = AssignGroupsToTestSetup(testTemplate, importObject, sensorImportData.GroupNameSensorListLookup,
_groupImport, _importNotification);
var sensors = res.Item3;
var testSetup = res.Item1;
var staticGroups = res.Item2;
if (staticGroups != null)
{
importObject.AddStaticGroups(staticGroups);
}
var cleanedSensors = GroupHelper.CleanUneededSensorDataPlaceHolder(importObject.CalibrationsLookup(), sensors);
importObject.ClearSensors();
importObject.AddSensors(cleanedSensors);
importObject.AddTestSetup(testSetup);
//FB 38039,40758 Identify single test setup in import file
importObject.TestSetupImportFileFormat = importObject.GetImportFileFormat();
}
//FB 36879 Single repsposibility principle , moved the method to this class
private Tuple<TestTemplate, List<IGroup>, List<SensorData>> AssignGroupsToTestSetup(TestTemplate testTemplate, ImportObject importObject, Dictionary<string, List<string>> groupNameSensorListLookup,
IGroupImport groupImport, IImportNotification importNotification)
{
var sensorGroupNameLookup = importObject.SensorGroupNamesLookup();
var existingStaticGroups = importObject.StaticGroups().ToList();
var sensors = importObject.Sensors().ToList();
try
{
_ = GroupHelper.ReverseChannelOrder(testTemplate, sensorGroupNameLookup, sensors);
var groupSensorLookup = groupImport.GetGroupSensorLookup(sensors, sensorGroupNameLookup, groupNameSensorListLookup);
sensors = GroupHelper.NormalizeSensorIds(sensors);
//http://manuscript.dts.local/f/cases/44105/EQX-Import-does-not-overwrite-zero-method-consistently-in-the-parameters-of-test-setup-but-consistently-for-sensor-database
//normalizesensorids above can reset the calibrations for sensors - revert back to the calibration in the import ...
FixCalibrations(importObject);
//FB 36905
var testAndGroups = groupImport.CreateGroups(sensors, groupSensorLookup, testTemplate, _createDynamicGroups, existingStaticGroups, importNotification.SetProgress);
if (testAndGroups == null)
{
TestTemplate noTestSetup = null;
List<IGroup> noGroup = null;
return Tuple.Create(noTestSetup, noGroup, sensors);
}
return Tuple.Create(testAndGroups.Item1, testAndGroups.Item2, sensors);
}
catch (Exception ex)
{
importNotification.ReportErrors(new List<string> { ex.Message });
return null;
}
}
//FB 39054 parse setup name from eqx
private string ParseSetupName(string filename)
{
XDocument xDoc = null;
try
{
xDoc = XDocument.Load(filename);
var fields = xDoc.Elements("Sensors").Select(x => x.Elements("Fields")).FirstOrDefault();
if (fields.Any())
{
var setupName = fields.Select(x => x.Element("SetupName").Value).FirstOrDefault();
return setupName;
}
}
catch
{
return string.Empty;
}
return string.Empty;
}
}
}