using CsvHelper; using DTS.Common.Classes; using DTS.Common.Enums.Sensors; using DTS.Common.Import.Interfaces; using System; using System.Collections.Generic; namespace DTS.Common.Import.Parsers.CSV { public class Version5CSVTestParser : IParseCSVTest { private InputClockSource ParseInputClockSource(string val) { return Enum.TryParse(val, out InputClockSource source) ? source : default; } private OutputClockSource ParseOutputClockSource(string val) { return Enum.TryParse(val, out OutputClockSource source) ? source : default; } private static bool ParseBoolValue(string val) { return bool.TryParse(val, out var bTemp) ? bTemp : default; } public int Version => 5; public void ParseVersion(CsvReader csvReader, TestSetupImportData tsid) { var foundHeader = false; List tokens = new List(); while (!foundHeader && csvReader.Read()) { tokens = CsvUtil.ReadFields(csvReader, false); if (null == tokens) { return; } if (0 == tokens.Count || string.IsNullOrEmpty(tokens[0])) { continue; } var field = CSVImportTags.GetTagForString(tokens[0]); var version = CSVImportTags.GetVersionForTag(field); if (version != 5) { return; } //no version 5 tokens in here ... foundHeader = true; } var tokens2 = CsvUtil.ReadFields(csvReader); if (null == tokens2) { return; } for (var i = 0; i < tokens.Count && i < tokens2.Count; i++) { GetValueForField(tsid, tokens, tokens2, i); } } private void GetValueForField(TestSetupImportData tsid, List tokens, List tokens2, int index) { var field = CSVImportTags.GetTagForString(tokens[index]); var val = tokens2[index]; switch (field) { case CSVImportTags.Tags.ClockMasterInputType: { tsid.ClockMasterInput = ParseInputClockSource(val); } break; case CSVImportTags.Tags.ClockMasterOutputType: { tsid.ClockMasterOutput = ParseOutputClockSource(val); } break; case CSVImportTags.Tags.ManageClocksOutsideDPMaster: { tsid.ManageClocksOutsideOfDataPROMaster = ParseBoolValue(val); } break; case CSVImportTags.Tags.ManageClocksOutsideDPSlave: { tsid.ManageClocksOutsideOfDataPROSlave = ParseBoolValue(val); } break; case CSVImportTags.Tags.ClockSlaveInputType: { tsid.ClockSlaveInput = ParseOutputClockSource(val); } break; case CSVImportTags.Tags.ClockSlaveOutputType: { tsid.ClockSlaveOutput = ParseOutputClockSource(val); } break; } } } }