--- source_files: - Common/DTS.Common.Import/ImportError.cs - Common/DTS.Common.Import/ParseProcessor.cs - Common/DTS.Common.Import/TsetSetupImportSensorInfo.cs - Common/DTS.Common.Import/CsvUtil.cs - Common/DTS.Common.Import/ImportNotification.cs - Common/DTS.Common.Import/XMLParseProcessor.cs - Common/DTS.Common.Import/CalibrationImport.cs - Common/DTS.Common.Import/GroupHelper.cs - Common/DTS.Common.Import/ImportObject.cs generated_at: "2026-04-17T15:32:34.821158+00:00" model: "zai-org/GLM-5-FP8" schema_version: 1 sha256: "148f67b9afc6f9fe" --- # DTS.Common.Import Module Documentation ## 1. Purpose This module provides the core infrastructure for importing test configuration data into the DTS system. It handles parsing of CSV and XML files containing sensor definitions, calibrations, test setups, groups, hardware configurations, and related metadata. The module centralizes all imported data through the `ImportObject` container, provides progress notification via `IImportNotification`, and includes utilities for calibration processing and group management. --- ## 2. Public Interface ### ImportError.cs **Enum: `ImportSeverityError`** ```csharp public enum ImportSeverityError { Critical, Error, Warning, Info } ``` **Class: `ImportError`** ```csharp public string Message { get; set; } public ImportSeverityError Severity { get; set; } public bool ContinueImportOnError { get; set; } = true; // defaults to true ``` --- ### ParseProcessor.cs **Class: `ParseProcessor`** Constructor: ```csharp public ParseProcessor(ImportObject importObject, IEnumerable fileNames, IEnumerable parseVariants) ``` Methods: ```csharp public ImportObject Process() ``` Iterates through all file names and parse variants, invoking `variant.Parse(ref _importObject)` for each combination. Returns the modified `ImportObject`. --- ### TsetSetupImportSensorInfo.cs **Class: `TsetSetupImportSensorInfo`** (sealed) Constructors: ```csharp public TsetSetupImportSensorInfo(string serialNumber, string isoCode, string isoChannelName, string userCode, string userChannelName, string dasSerialNumber, int dasChannelIdx) public TsetSetupImportSensorInfo(string serialNumber, string isoCode) ``` Properties (all read-only except `GroupType`): ```csharp public string IsoCode { get; } public string IsoChannelName { get; } public string UserCode { get; } public string UserChannelName { get; } public string SerialNumber { get; } public string GroupType { get; set; } // read-write public string DASSerialNumber { get; } public int DASChannelIndex { get; } ``` --- ### CsvUtil.cs **Static Class: `CsvUtil`** ```csharp public static CsvReader CreateCsvReader(string filename) ``` Creates a `CsvReader` using `CultureInfo.InvariantCulture` with a `StreamReader` for the given filename. ```csharp public static List ReadFields(CsvReader csvReader, bool readNextLine = true) ``` Reads fields from the CSV reader. If `readNextLine` is true, calls `csvReader.Read()` first. Returns a list of trimmed field values from all columns (index 0 to `ColumnCount - 1`). --- ### ImportNotification.cs **Class: `ImportStatus`** ```csharp public string Status { get; set; } public PossibleStatus PossibleStatus { get; set; } public ImportExtraStatus ExtraStatus { get; set; } ``` **Interface: `IImportNotification`** ```csharp Action ImportDone { get; } Action> ReportErrors { get; } Action SetProgress { get; } Action SetStatus { get; } ``` **Class: `ImportNotification`** (implements `IImportNotification`) Constructors: ```csharp public ImportNotification(Action> reportErrors, Action setStatus, Action setProgress, Action importDone) public ImportNotification() // creates no-op handlers for all actions ``` Properties: ```csharp public Action> ReportErrors { get; private set; } public Action SetStatus { get; private set; } public Action SetProgress { get; private set; } public Action ImportDone { get; private set; } ``` --- ### XMLParseProcessor.cs **Class: `XMLParseProcessor`** Constructor: ```csharp public XMLParseProcessor(ImportObject importObject, IImportNotification importNotification, IEnumerable fileNames, Func isCancelled, bool skipNormalizing) ``` Properties: ```csharp public List UIItems { get; set; } ``` Methods: ```csharp public ImportObject Process() ``` Processes XML files using parsers created by `XmlParserFactory`. Sets status to `ImportExtraStatus.ReadingXML`, calculates progress based on items completed vs. total items to complete. --- ### CalibrationImport.cs **Class: `CalibrationImport`** (implements `ICalibrationImport`) ```csharp public SensorCalibration CheckForExcitationCalibration(SensorCalibration sc, double sensitivity, ExcitationVoltageOptions.ExcitationVoltageOption excitation, string EU) ``` Checks if the first calibration record has the specified excitation; if not, adds a new `CalibrationRecord` with the given parameters. ```csharp public SensorCalibration AddLinearCalRecordIfNeeded(SensorCalibration sc, bool savedIsProportional, bool savedRemoveOffset) ``` If `sc.Records.Records` has exactly one entry, adds a second linear calibration record and restores `IsProportional` and `RemoveOffset` flags. ```csharp public SensorCalibration AddLinearZeroMethodIfNeeded(SensorCalibration sc, ZeroMethodType zeroMethodType, double zeroMethodStart, double zeroMethodEnd) ``` If `sc.ZeroMethods.Methods` has exactly one entry, adds a second `ZeroMethod` with the specified parameters. --- ### GroupHelper.cs **Static Class: `GroupHelper`** ```csharp public static IGroup CreateEmptyGroup() ``` Returns a new `GroupList.Model.Group(true)`. ```csharp public static void GetTestSensorParameters(out string isoCode, out string isoChannelName, out string userCode, out string userChannelName, ParseParameters pp, SensorData sd, out string dasSerialNumber, out int dasChannelIdx) ``` Extracts sensor parameters, preferring values from `ParseParameters` dictionaries when available. ```csharp public static IReadOnlyDictionary GetDAS( Dictionary> groupSensorLookupgroupSensorLookup, DASHardware[] allDAS) ``` Builds a lookup dictionary mapping DAS serial numbers to DAS IDs. ```csharp public static int? GetGroupId(TestTestObject testObject, Dictionary groupIdMapping, List groupList) ``` Finds the group ID for a test object by traversing group relationships. ```csharp public static List ReverseChannelOrder(TestTemplate testTemplate, Dictionary sensorGroupNameLookup, List sensors) ``` Returns a reversed list of channel order strings in format `{testTemplate.Name}_{groupName}_{comment}`. ```csharp public static List CleanUneededSensorDataPlaceHolder( Dictionary> calibrationLookup, List sensorList) ``` Removes sensor data entries that are ISO-channel-only placeholders or have invalid default calibrations. ```csharp public static List NormalizeSensorIds(List sensorList) ``` Normalizes sensor database IDs: existing sensors get their real IDs; new sensors get negative IDs (-2, -3, etc.). --- ### ImportObject.cs **Class: `ImportObject`** This is the central data container for imports. Key properties and methods: **Properties:** ```csharp public ImportFormats SourceFormat { get; set; } = ImportFormats.NOT_SPECIFIED; public ImportFileFormat TestSetupImportFileFormat { get; set; } = ImportFileFormat.NoTestSetup; ``` **Format Detection:** ```csharp public ImportFileFormat GetImportFileFormat() public static ImportFileFormat GetImportFileFormat(int testSetupCount) ``` Returns `SingleTestSetup`, `MultipleTestSetup`, or `NoTestSetup` based on test setup count. **Error Management:** ```csharp public void ClearErrors() public void AddErrors(IEnumerable d) public void AddError(ImportError d) public IEnumerable Errors() ``` **Data Collections (Add/Get methods for each):** - `Calibrations()` / `AddCalibration(SensorCalibration)` / `AddCalibrations(IEnumerable)` - `TestSetups()` / `AddTestSetup(TestTemplate)` / `AddTestSetups(IEnumerable)` / `ClearTestSetups()` - `Sensors()` / `AddSensor(SensorData)` / `AddSensors(IEnumerable)` / `ClearSensors()` - `Groups()` / `AddGroup(TestObject)` / `AddGroups(IEnumerable)` - `GroupTemplates()` / `AddGroupTemplate(TestObjectTemplate)` / `AddGroupTemplates(IEnumerable)` - `Hardware()` / `AddHardware(DASHardware)` / `AddHardwareList(IEnumerable)` - `CustomChannels()` / `AddCustomChannel(MMEPossibleChannels)` / `AddCustomChannels(IEnumerable)` - `Users()` / `AddUser(User)` / `AddUsers(IEnumerable)` - `CustomerDetails()` / `LabDetails()` / `TestEngineerDetails()` - `StaticGroups()` / `AddStaticGroup(IGroup)` / `AddStaticGroups(IEnumerable)` - `SensorModels()` / `AddSensorModel(SensorModel)` / `AddSensorModels(IEnumerable)` - Various MME-related collections: `PhysicalDimensions()`, `CustomPositions()`, `CustomFilterClasses()`, `CustomFineLoc1s()`, `CustomFineLoc2s()`, `CustomFineLoc3s()`, `Directions()`, `CustomMainLocations()`, `TestObjects()` **Lookup Dictionaries:** ```csharp public void AssignSensorLookup(Dictionary sensorLookup) public void AddSensorLookup(string serial, SensorData sensorData) public Sensor