From c9f8b83881ac59921d3300aee5e4d10680cc9734 Mon Sep 17 00:00:00 2001 From: "phares@iscn5cg20977xq" Date: Mon, 10 Nov 2025 17:43:10 -0700 Subject: [PATCH] Refactor FileRead classes across multiple versions to remove redundant code and improve maintainability - Removed unused fields and methods in FileRead classes for R5, R6, R7 to streamline functionality. - Consolidated logic for handling system states and key columns, enhancing clarity and reducing complexity. - Introduced new FileRead implementations for EAFLog and LogFile, maintaining consistent structure and functionality. - Updated the AdaptationTesting class to ensure directory creation logic excludes paths containing "10.". - Adjusted ProcessDataStandardFormat to handle edge cases in line processing and JSON element extraction. - Added new file handlers for Source, ensuring compatibility with existing infrastructure. --- .../CellInstanceConnectionName.cs | 4 + Adaptation/FileHandlers/EAFLog/FileRead.cs | 114 +++++++++++++++++ Adaptation/FileHandlers/EAFLog20/FileRead.cs | 114 +++++++++++++++++ Adaptation/FileHandlers/Log/FileRead.cs | 11 +- Adaptation/FileHandlers/LogFile/FileRead.cs | 114 +++++++++++++++++ Adaptation/FileHandlers/R2/FileRead.cs | 119 ------------------ Adaptation/FileHandlers/R3/FileRead.cs | 119 ------------------ Adaptation/FileHandlers/R4/FileRead.cs | 119 ------------------ Adaptation/FileHandlers/R5/FileRead.cs | 119 ------------------ Adaptation/FileHandlers/R6/FileRead.cs | 119 ------------------ Adaptation/FileHandlers/R7/FileRead.cs | 119 ------------------ Adaptation/FileHandlers/Source/FileRead.cs | 114 +++++++++++++++++ Adaptation/Infineon/Monitoring/MonA/MonIn.cs | 12 +- .../Shared/ProcessDataStandardFormat.cs | 4 +- Adaptation/_Tests/Shared/AdaptationTesting.cs | 8 +- DEP08CEPIEPSILON.csproj | 4 + 16 files changed, 480 insertions(+), 733 deletions(-) create mode 100644 Adaptation/FileHandlers/EAFLog/FileRead.cs create mode 100644 Adaptation/FileHandlers/EAFLog20/FileRead.cs create mode 100644 Adaptation/FileHandlers/LogFile/FileRead.cs create mode 100644 Adaptation/FileHandlers/Source/FileRead.cs diff --git a/Adaptation/FileHandlers/CellInstanceConnectionName.cs b/Adaptation/FileHandlers/CellInstanceConnectionName.cs index d353a08..5c17383 100644 --- a/Adaptation/FileHandlers/CellInstanceConnectionName.cs +++ b/Adaptation/FileHandlers/CellInstanceConnectionName.cs @@ -15,14 +15,18 @@ public class CellInstanceConnectionName { nameof(Aggregation) => new Aggregation.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(Dummy) => new Dummy.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), + nameof(EAFLog) => new EAFLog.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), + nameof(EAFLog20) => new EAFLog20.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(InfinityQS) => new InfinityQS.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(Log) => new Log.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), + nameof(LogFile) => new LogFile.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(R2) => new R2.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(R3) => new R3.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(R4) => new R4.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(R5) => new R5.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(R6) => new R6.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(R7) => new R7.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), + nameof(Source) => new Source.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), _ => throw new Exception($"\"{cellInstanceConnectionName}\" not mapped") }; return result; diff --git a/Adaptation/FileHandlers/EAFLog/FileRead.cs b/Adaptation/FileHandlers/EAFLog/FileRead.cs new file mode 100644 index 0000000..355dc84 --- /dev/null +++ b/Adaptation/FileHandlers/EAFLog/FileRead.cs @@ -0,0 +1,114 @@ +using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared; +using Adaptation.Shared.Duplicator; +using Adaptation.Shared.Methods; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.Json; + +namespace Adaptation.FileHandlers.EAFLog; + +public class FileRead : Shared.FileRead, IFileRead +{ + + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, Dictionary> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) : + base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null) + { + _MinFileLength = 10; + _NullData = string.Empty; + _Logistics = new(this); + if (_FileParameter is null) + throw new Exception(cellInstanceConnectionName); + if (_ModelObjectParameterDefinitions is null) + throw new Exception(cellInstanceConnectionName); + } + + void IFileRead.Move(Tuple> extractResults, Exception exception) + { + bool isErrorFile = exception is not null; + if (!isErrorFile && !string.IsNullOrEmpty(_Logistics.ReportFullPath)) + { + FileInfo fileInfo = new(_Logistics.ReportFullPath); + if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) + File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime); + } + Move(extractResults); + } + + void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); + + string IFileRead.GetEventDescription() + { + string result = _Description.GetEventDescription(); + return result; + } + + List IFileRead.GetHeaderNames() + { + List results = _Description.GetHeaderNames(); + return results; + } + + string[] IFileRead.Move(Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception) + { + string[] results = Move(extractResults, to, from, resolvedFileLocation, exception); + return results; + } + + JsonProperty[] IFileRead.GetDefault() + { + JsonProperty[] results = _Description.GetDefault(this, _Logistics); + return results; + } + + Dictionary IFileRead.GetDisplayNamesJsonElement() + { + Dictionary results = _Description.GetDisplayNamesJsonElement(this); + return results; + } + + List IFileRead.GetDescriptions(IFileRead fileRead, List tests, IProcessData processData) + { + List results = _Description.GetDescriptions(fileRead, _Logistics, tests, processData); + return results; + } + + Tuple> IFileRead.GetExtractResult(string reportFullPath, string eventName) + { + Tuple> results; + if (string.IsNullOrEmpty(eventName)) + throw new Exception(); + _ReportFullPath = reportFullPath; + DateTime dateTime = DateTime.Now; + results = GetExtractResult(reportFullPath, dateTime); + if (results.Item3 is null) + results = new Tuple>(results.Item1, Array.Empty(), JsonSerializer.Deserialize("[]"), results.Item4); + if (results.Item3.Length > 0 && _IsEAFHosted) + WritePDSF(this, results.Item3); + UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks); + return results; + } + + Tuple> IFileRead.ReExtract() + { + Tuple> results; + List headerNames = _Description.GetHeaderNames(); + Dictionary keyValuePairs = _Description.GetDisplayNamesJsonElement(this); + results = ReExtract(this, headerNames, keyValuePairs); + return results; + } + + private Tuple> GetExtractResult(string reportFullPath, DateTime _) + { + Tuple> results = new(string.Empty, null, null, new List()); + string[] lines = new string[] { string.Empty, "NUM_DATA_ROWS", $"LOGISTICS_1{'\t'}A_JOBID={"BACKLOG"};A_MES_ENTITY={"BACKLOG"};" }; + ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines); + _Logistics = new Logistics(reportFullPath, processDataStandardFormat); + SetFileParameterLotIDToLogisticsMID(); + results.Item4.Add(_Logistics.FileInfo); + return results; + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/EAFLog20/FileRead.cs b/Adaptation/FileHandlers/EAFLog20/FileRead.cs new file mode 100644 index 0000000..904294b --- /dev/null +++ b/Adaptation/FileHandlers/EAFLog20/FileRead.cs @@ -0,0 +1,114 @@ +using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared; +using Adaptation.Shared.Duplicator; +using Adaptation.Shared.Methods; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.Json; + +namespace Adaptation.FileHandlers.EAFLog20; + +public class FileRead : Shared.FileRead, IFileRead +{ + + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, Dictionary> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) : + base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null) + { + _MinFileLength = 10; + _NullData = string.Empty; + _Logistics = new(this); + if (_FileParameter is null) + throw new Exception(cellInstanceConnectionName); + if (_ModelObjectParameterDefinitions is null) + throw new Exception(cellInstanceConnectionName); + } + + void IFileRead.Move(Tuple> extractResults, Exception exception) + { + bool isErrorFile = exception is not null; + if (!isErrorFile && !string.IsNullOrEmpty(_Logistics.ReportFullPath)) + { + FileInfo fileInfo = new(_Logistics.ReportFullPath); + if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) + File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime); + } + Move(extractResults); + } + + void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); + + string IFileRead.GetEventDescription() + { + string result = _Description.GetEventDescription(); + return result; + } + + List IFileRead.GetHeaderNames() + { + List results = _Description.GetHeaderNames(); + return results; + } + + string[] IFileRead.Move(Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception) + { + string[] results = Move(extractResults, to, from, resolvedFileLocation, exception); + return results; + } + + JsonProperty[] IFileRead.GetDefault() + { + JsonProperty[] results = _Description.GetDefault(this, _Logistics); + return results; + } + + Dictionary IFileRead.GetDisplayNamesJsonElement() + { + Dictionary results = _Description.GetDisplayNamesJsonElement(this); + return results; + } + + List IFileRead.GetDescriptions(IFileRead fileRead, List tests, IProcessData processData) + { + List results = _Description.GetDescriptions(fileRead, _Logistics, tests, processData); + return results; + } + + Tuple> IFileRead.GetExtractResult(string reportFullPath, string eventName) + { + Tuple> results; + if (string.IsNullOrEmpty(eventName)) + throw new Exception(); + _ReportFullPath = reportFullPath; + DateTime dateTime = DateTime.Now; + results = GetExtractResult(reportFullPath, dateTime); + if (results.Item3 is null) + results = new Tuple>(results.Item1, Array.Empty(), JsonSerializer.Deserialize("[]"), results.Item4); + if (results.Item3.Length > 0 && _IsEAFHosted) + WritePDSF(this, results.Item3); + UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks); + return results; + } + + Tuple> IFileRead.ReExtract() + { + Tuple> results; + List headerNames = _Description.GetHeaderNames(); + Dictionary keyValuePairs = _Description.GetDisplayNamesJsonElement(this); + results = ReExtract(this, headerNames, keyValuePairs); + return results; + } + + private Tuple> GetExtractResult(string reportFullPath, DateTime _) + { + Tuple> results = new(string.Empty, null, null, new List()); + string[] lines = new string[] { string.Empty, "NUM_DATA_ROWS", $"LOGISTICS_1{'\t'}A_JOBID={"BACKLOG"};A_MES_ENTITY={"BACKLOG"};" }; + ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines); + _Logistics = new Logistics(reportFullPath, processDataStandardFormat); + SetFileParameterLotIDToLogisticsMID(); + results.Item4.Add(_Logistics.FileInfo); + return results; + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/Log/FileRead.cs b/Adaptation/FileHandlers/Log/FileRead.cs index b168424..bde06a8 100644 --- a/Adaptation/FileHandlers/Log/FileRead.cs +++ b/Adaptation/FileHandlers/Log/FileRead.cs @@ -7,7 +7,6 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; -using System.Linq; using System.Text.Json; namespace Adaptation.FileHandlers.Log; @@ -119,14 +118,12 @@ public class FileRead : Shared.FileRead, IFileRead private Tuple> GetExtractResult(string reportFullPath, DateTime _) { - Tuple> results; - ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); + Tuple> results = new(string.Empty, null, null, new List()); + string[] lines = new string[] { string.Empty, "NUM_DATA_ROWS", $"LOGISTICS_1{'\t'}A_JOBID={"BACKLOG"};A_MES_ENTITY={"BACKLOG"};" }; + ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines); _Logistics = new Logistics(reportFullPath, processDataStandardFormat); SetFileParameterLotIDToLogisticsMID(); - JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); - List descriptions = GetDuplicatorDescriptions(jsonElements); - Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); - results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); + results.Item4.Add(_Logistics.FileInfo); return results; } diff --git a/Adaptation/FileHandlers/LogFile/FileRead.cs b/Adaptation/FileHandlers/LogFile/FileRead.cs new file mode 100644 index 0000000..cc31c04 --- /dev/null +++ b/Adaptation/FileHandlers/LogFile/FileRead.cs @@ -0,0 +1,114 @@ +using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared; +using Adaptation.Shared.Duplicator; +using Adaptation.Shared.Methods; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.Json; + +namespace Adaptation.FileHandlers.LogFile; + +public class FileRead : Shared.FileRead, IFileRead +{ + + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, Dictionary> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) : + base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null) + { + _MinFileLength = 10; + _NullData = string.Empty; + _Logistics = new(this); + if (_FileParameter is null) + throw new Exception(cellInstanceConnectionName); + if (_ModelObjectParameterDefinitions is null) + throw new Exception(cellInstanceConnectionName); + } + + void IFileRead.Move(Tuple> extractResults, Exception exception) + { + bool isErrorFile = exception is not null; + if (!isErrorFile && !string.IsNullOrEmpty(_Logistics.ReportFullPath)) + { + FileInfo fileInfo = new(_Logistics.ReportFullPath); + if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) + File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime); + } + Move(extractResults); + } + + void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); + + string IFileRead.GetEventDescription() + { + string result = _Description.GetEventDescription(); + return result; + } + + List IFileRead.GetHeaderNames() + { + List results = _Description.GetHeaderNames(); + return results; + } + + string[] IFileRead.Move(Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception) + { + string[] results = Move(extractResults, to, from, resolvedFileLocation, exception); + return results; + } + + JsonProperty[] IFileRead.GetDefault() + { + JsonProperty[] results = _Description.GetDefault(this, _Logistics); + return results; + } + + Dictionary IFileRead.GetDisplayNamesJsonElement() + { + Dictionary results = _Description.GetDisplayNamesJsonElement(this); + return results; + } + + List IFileRead.GetDescriptions(IFileRead fileRead, List tests, IProcessData processData) + { + List results = _Description.GetDescriptions(fileRead, _Logistics, tests, processData); + return results; + } + + Tuple> IFileRead.GetExtractResult(string reportFullPath, string eventName) + { + Tuple> results; + if (string.IsNullOrEmpty(eventName)) + throw new Exception(); + _ReportFullPath = reportFullPath; + DateTime dateTime = DateTime.Now; + results = GetExtractResult(reportFullPath, dateTime); + if (results.Item3 is null) + results = new Tuple>(results.Item1, Array.Empty(), JsonSerializer.Deserialize("[]"), results.Item4); + if (results.Item3.Length > 0 && _IsEAFHosted) + WritePDSF(this, results.Item3); + UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks); + return results; + } + + Tuple> IFileRead.ReExtract() + { + Tuple> results; + List headerNames = _Description.GetHeaderNames(); + Dictionary keyValuePairs = _Description.GetDisplayNamesJsonElement(this); + results = ReExtract(this, headerNames, keyValuePairs); + return results; + } + + private Tuple> GetExtractResult(string reportFullPath, DateTime _) + { + Tuple> results = new(string.Empty, null, null, new List()); + string[] lines = new string[] { string.Empty, "NUM_DATA_ROWS", $"LOGISTICS_1{'\t'}A_JOBID={"BACKLOG"};A_MES_ENTITY={"BACKLOG"};" }; + ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines); + _Logistics = new Logistics(reportFullPath, processDataStandardFormat); + SetFileParameterLotIDToLogisticsMID(); + results.Item4.Add(_Logistics.FileInfo); + return results; + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/R2/FileRead.cs b/Adaptation/FileHandlers/R2/FileRead.cs index 575f49b..2c8a4b8 100644 --- a/Adaptation/FileHandlers/R2/FileRead.cs +++ b/Adaptation/FileHandlers/R2/FileRead.cs @@ -5,8 +5,6 @@ using Adaptation.Shared.Duplicator; using Adaptation.Shared.Methods; using System; using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Globalization; using System.IO; using System.Linq; using System.Text.Json; @@ -16,10 +14,6 @@ namespace Adaptation.FileHandlers.R2; public class FileRead : Shared.FileRead, IFileRead { - private readonly string _KeyColumn; - private readonly string _TimestampFormat; - private readonly ReadOnlyDictionary _SystemStateToNames; - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, Dictionary> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) : base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null) { @@ -32,19 +26,6 @@ public class FileRead : Shared.FileRead, IFileRead throw new Exception(cellInstanceConnectionName); if (!_IsDuplicator) throw new Exception(cellInstanceConnectionName); - string[] segments; - Dictionary systemStateToNames = new(); - _KeyColumn = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.KeyColumn"); - _TimestampFormat = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.TimestampFormat"); - ModelObjectParameterDefinition[] systemStates = GetProperties(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.SystemState"); - foreach (ModelObjectParameterDefinition modelObjectParameterDefinition in systemStates) - { - segments = modelObjectParameterDefinition.Value.Split('|'); - if (segments.Length != 2) - continue; - systemStateToNames.Add(segments[0], segments[1]); - } - _SystemStateToNames = new(systemStateToNames); } void IFileRead.Move(Tuple> extractResults, Exception exception) @@ -122,104 +103,6 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - private static int? GetKeyColumnIndex(string[] columns, string keyColumn) - { -#nullable enable - int? result = null; - for (int i = 0; i < columns.Length; i++) - { - if (columns[i] != keyColumn) - continue; - result = i; - break; - } - return result; - } - - private ReadOnlyCollection GetSystemStateValues(List lines, string[] columns, int keyColumnIndex) - { - List results = new(); - string[] values; - string? systemState; - string keyColumnValue; - for (int i = 7; i < lines.Count; i++) - { - values = lines[i].Split('\t'); - if (values.Length != columns.Length) - continue; - keyColumnValue = values[keyColumnIndex]; - if (string.IsNullOrEmpty(keyColumnValue)) - continue; - if (!_SystemStateToNames.TryGetValue(keyColumnValue, out systemState)) - continue; - if (results.Contains(systemState)) - continue; - results.Add(systemState); - } - return new(results); - } - - private void CopyFile(string reportFullPath) - { - string equipment; - string timestamp; - string[] columns; - DateTime dateTime; - List lines; - string systemState; - int? keyColumnIndex; - string checkFileName; - List headerLines = new(); - ReadOnlyCollection systemStateValues; - string missingKeyDirectory = Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, "Missing-Key"); - if (!Directory.Exists(missingKeyDirectory)) - _ = Directory.CreateDirectory(missingKeyDirectory); - string fileName = Path.GetFileName(reportFullPath); - string[] segments = fileName.Split('_'); - for (int z = 0; z < 1; z++) - { - if (segments.Length != 2) - continue; - equipment = segments[0]; - timestamp = segments[1].Split('.')[0]; - if (timestamp.Length != _TimestampFormat.Length) - continue; - headerLines.Clear(); - lines = File.ReadAllLines(reportFullPath).ToList(); - if (lines.Count < 8) - continue; - for (int i = 0; i < 6; i++) - { - headerLines.Add(lines[0]); - lines.RemoveAt(0); - } - if (lines[0].Length < 1 || lines[0][0] != '"' || !lines[0].StartsWith("\"Time\"")) - continue; - columns = lines[0].Split('\t'); - if (columns.Length < 3) - continue; - keyColumnIndex = GetKeyColumnIndex(columns, _KeyColumn); - if (keyColumnIndex is null) - { - File.Copy(reportFullPath, Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, missingKeyDirectory, fileName)); - continue; - } - systemStateValues = GetSystemStateValues(lines, columns, keyColumnIndex.Value); - if (systemStateValues.Count == 0) - { - File.Copy(reportFullPath, Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, missingKeyDirectory, fileName)); - continue; - } - lines.AddRange(headerLines); - systemState = string.Join("-", systemStateValues); - checkFileName = Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, $"{equipment}-{timestamp}-{systemState}.pdsf"); - File.WriteAllLines(checkFileName, lines); - // File.Delete(reportFullPath); - if (DateTime.TryParseExact(timestamp, _TimestampFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime)) - File.SetLastWriteTime(checkFileName, dateTime); - } - } - private Tuple> GetExtractResult(string reportFullPath, DateTime _) { Tuple> results; @@ -229,8 +112,6 @@ public class FileRead : Shared.FileRead, IFileRead JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); List descriptions = GetDuplicatorDescriptions(jsonElements); Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); - if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) - CopyFile(reportFullPath); results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); return results; } diff --git a/Adaptation/FileHandlers/R3/FileRead.cs b/Adaptation/FileHandlers/R3/FileRead.cs index 44dbad4..4383fe2 100644 --- a/Adaptation/FileHandlers/R3/FileRead.cs +++ b/Adaptation/FileHandlers/R3/FileRead.cs @@ -5,8 +5,6 @@ using Adaptation.Shared.Duplicator; using Adaptation.Shared.Methods; using System; using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Globalization; using System.IO; using System.Linq; using System.Text.Json; @@ -16,10 +14,6 @@ namespace Adaptation.FileHandlers.R3; public class FileRead : Shared.FileRead, IFileRead { - private readonly string _KeyColumn; - private readonly string _TimestampFormat; - private readonly ReadOnlyDictionary _SystemStateToNames; - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, Dictionary> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) : base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null) { @@ -32,19 +26,6 @@ public class FileRead : Shared.FileRead, IFileRead throw new Exception(cellInstanceConnectionName); if (!_IsDuplicator) throw new Exception(cellInstanceConnectionName); - string[] segments; - Dictionary systemStateToNames = new(); - _KeyColumn = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.KeyColumn"); - _TimestampFormat = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.TimestampFormat"); - ModelObjectParameterDefinition[] systemStates = GetProperties(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.SystemState"); - foreach (ModelObjectParameterDefinition modelObjectParameterDefinition in systemStates) - { - segments = modelObjectParameterDefinition.Value.Split('|'); - if (segments.Length != 2) - continue; - systemStateToNames.Add(segments[0], segments[1]); - } - _SystemStateToNames = new(systemStateToNames); } void IFileRead.Move(Tuple> extractResults, Exception exception) @@ -122,104 +103,6 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - private static int? GetKeyColumnIndex(string[] columns, string keyColumn) - { -#nullable enable - int? result = null; - for (int i = 0; i < columns.Length; i++) - { - if (columns[i] != keyColumn) - continue; - result = i; - break; - } - return result; - } - - private ReadOnlyCollection GetSystemStateValues(List lines, string[] columns, int keyColumnIndex) - { - List results = new(); - string[] values; - string? systemState; - string keyColumnValue; - for (int i = 7; i < lines.Count; i++) - { - values = lines[i].Split('\t'); - if (values.Length != columns.Length) - continue; - keyColumnValue = values[keyColumnIndex]; - if (string.IsNullOrEmpty(keyColumnValue)) - continue; - if (!_SystemStateToNames.TryGetValue(keyColumnValue, out systemState)) - continue; - if (results.Contains(systemState)) - continue; - results.Add(systemState); - } - return new(results); - } - - private void CopyFile(string reportFullPath) - { - string equipment; - string timestamp; - string[] columns; - DateTime dateTime; - List lines; - string systemState; - int? keyColumnIndex; - string checkFileName; - List headerLines = new(); - ReadOnlyCollection systemStateValues; - string missingKeyDirectory = Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, "Missing-Key"); - if (!Directory.Exists(missingKeyDirectory)) - _ = Directory.CreateDirectory(missingKeyDirectory); - string fileName = Path.GetFileName(reportFullPath); - string[] segments = fileName.Split('_'); - for (int z = 0; z < 1; z++) - { - if (segments.Length != 2) - continue; - equipment = segments[0]; - timestamp = segments[1].Split('.')[0]; - if (timestamp.Length != _TimestampFormat.Length) - continue; - headerLines.Clear(); - lines = File.ReadAllLines(reportFullPath).ToList(); - if (lines.Count < 8) - continue; - for (int i = 0; i < 6; i++) - { - headerLines.Add(lines[0]); - lines.RemoveAt(0); - } - if (lines[0].Length < 1 || lines[0][0] != '"' || !lines[0].StartsWith("\"Time\"")) - continue; - columns = lines[0].Split('\t'); - if (columns.Length < 3) - continue; - keyColumnIndex = GetKeyColumnIndex(columns, _KeyColumn); - if (keyColumnIndex is null) - { - File.Copy(reportFullPath, Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, missingKeyDirectory, fileName)); - continue; - } - systemStateValues = GetSystemStateValues(lines, columns, keyColumnIndex.Value); - if (systemStateValues.Count == 0) - { - File.Copy(reportFullPath, Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, missingKeyDirectory, fileName)); - continue; - } - lines.AddRange(headerLines); - systemState = string.Join("-", systemStateValues); - checkFileName = Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, $"{equipment}-{timestamp}-{systemState}.pdsf"); - File.WriteAllLines(checkFileName, lines); - // File.Delete(reportFullPath); - if (DateTime.TryParseExact(timestamp, _TimestampFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime)) - File.SetLastWriteTime(checkFileName, dateTime); - } - } - private Tuple> GetExtractResult(string reportFullPath, DateTime _) { Tuple> results; @@ -229,8 +112,6 @@ public class FileRead : Shared.FileRead, IFileRead JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); List descriptions = GetDuplicatorDescriptions(jsonElements); Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); - if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) - CopyFile(reportFullPath); results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); return results; } diff --git a/Adaptation/FileHandlers/R4/FileRead.cs b/Adaptation/FileHandlers/R4/FileRead.cs index e5204f6..e4c4c8c 100644 --- a/Adaptation/FileHandlers/R4/FileRead.cs +++ b/Adaptation/FileHandlers/R4/FileRead.cs @@ -5,8 +5,6 @@ using Adaptation.Shared.Duplicator; using Adaptation.Shared.Methods; using System; using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Globalization; using System.IO; using System.Linq; using System.Text.Json; @@ -16,10 +14,6 @@ namespace Adaptation.FileHandlers.R4; public class FileRead : Shared.FileRead, IFileRead { - private readonly string _KeyColumn; - private readonly string _TimestampFormat; - private readonly ReadOnlyDictionary _SystemStateToNames; - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, Dictionary> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) : base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null) { @@ -32,19 +26,6 @@ public class FileRead : Shared.FileRead, IFileRead throw new Exception(cellInstanceConnectionName); if (!_IsDuplicator) throw new Exception(cellInstanceConnectionName); - string[] segments; - Dictionary systemStateToNames = new(); - _KeyColumn = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.KeyColumn"); - _TimestampFormat = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.TimestampFormat"); - ModelObjectParameterDefinition[] systemStates = GetProperties(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.SystemState"); - foreach (ModelObjectParameterDefinition modelObjectParameterDefinition in systemStates) - { - segments = modelObjectParameterDefinition.Value.Split('|'); - if (segments.Length != 2) - continue; - systemStateToNames.Add(segments[0], segments[1]); - } - _SystemStateToNames = new(systemStateToNames); } void IFileRead.Move(Tuple> extractResults, Exception exception) @@ -122,104 +103,6 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - private static int? GetKeyColumnIndex(string[] columns, string keyColumn) - { -#nullable enable - int? result = null; - for (int i = 0; i < columns.Length; i++) - { - if (columns[i] != keyColumn) - continue; - result = i; - break; - } - return result; - } - - private ReadOnlyCollection GetSystemStateValues(List lines, string[] columns, int keyColumnIndex) - { - List results = new(); - string[] values; - string? systemState; - string keyColumnValue; - for (int i = 7; i < lines.Count; i++) - { - values = lines[i].Split('\t'); - if (values.Length != columns.Length) - continue; - keyColumnValue = values[keyColumnIndex]; - if (string.IsNullOrEmpty(keyColumnValue)) - continue; - if (!_SystemStateToNames.TryGetValue(keyColumnValue, out systemState)) - continue; - if (results.Contains(systemState)) - continue; - results.Add(systemState); - } - return new(results); - } - - private void CopyFile(string reportFullPath) - { - string equipment; - string timestamp; - string[] columns; - DateTime dateTime; - List lines; - string systemState; - int? keyColumnIndex; - string checkFileName; - List headerLines = new(); - ReadOnlyCollection systemStateValues; - string missingKeyDirectory = Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, "Missing-Key"); - if (!Directory.Exists(missingKeyDirectory)) - _ = Directory.CreateDirectory(missingKeyDirectory); - string fileName = Path.GetFileName(reportFullPath); - string[] segments = fileName.Split('_'); - for (int z = 0; z < 1; z++) - { - if (segments.Length != 2) - continue; - equipment = segments[0]; - timestamp = segments[1].Split('.')[0]; - if (timestamp.Length != _TimestampFormat.Length) - continue; - headerLines.Clear(); - lines = File.ReadAllLines(reportFullPath).ToList(); - if (lines.Count < 8) - continue; - for (int i = 0; i < 6; i++) - { - headerLines.Add(lines[0]); - lines.RemoveAt(0); - } - if (lines[0].Length < 1 || lines[0][0] != '"' || !lines[0].StartsWith("\"Time\"")) - continue; - columns = lines[0].Split('\t'); - if (columns.Length < 3) - continue; - keyColumnIndex = GetKeyColumnIndex(columns, _KeyColumn); - if (keyColumnIndex is null) - { - File.Copy(reportFullPath, Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, missingKeyDirectory, fileName)); - continue; - } - systemStateValues = GetSystemStateValues(lines, columns, keyColumnIndex.Value); - if (systemStateValues.Count == 0) - { - File.Copy(reportFullPath, Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, missingKeyDirectory, fileName)); - continue; - } - lines.AddRange(headerLines); - systemState = string.Join("-", systemStateValues); - checkFileName = Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, $"{equipment}-{timestamp}-{systemState}.pdsf"); - File.WriteAllLines(checkFileName, lines); - // File.Delete(reportFullPath); - if (DateTime.TryParseExact(timestamp, _TimestampFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime)) - File.SetLastWriteTime(checkFileName, dateTime); - } - } - private Tuple> GetExtractResult(string reportFullPath, DateTime _) { Tuple> results; @@ -229,8 +112,6 @@ public class FileRead : Shared.FileRead, IFileRead JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); List descriptions = GetDuplicatorDescriptions(jsonElements); Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); - if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) - CopyFile(reportFullPath); results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); return results; } diff --git a/Adaptation/FileHandlers/R5/FileRead.cs b/Adaptation/FileHandlers/R5/FileRead.cs index 600c8f3..e31c124 100644 --- a/Adaptation/FileHandlers/R5/FileRead.cs +++ b/Adaptation/FileHandlers/R5/FileRead.cs @@ -5,8 +5,6 @@ using Adaptation.Shared.Duplicator; using Adaptation.Shared.Methods; using System; using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Globalization; using System.IO; using System.Linq; using System.Text.Json; @@ -16,10 +14,6 @@ namespace Adaptation.FileHandlers.R5; public class FileRead : Shared.FileRead, IFileRead { - private readonly string _KeyColumn; - private readonly string _TimestampFormat; - private readonly ReadOnlyDictionary _SystemStateToNames; - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, Dictionary> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) : base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null) { @@ -32,19 +26,6 @@ public class FileRead : Shared.FileRead, IFileRead throw new Exception(cellInstanceConnectionName); if (!_IsDuplicator) throw new Exception(cellInstanceConnectionName); - string[] segments; - Dictionary systemStateToNames = new(); - _KeyColumn = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.KeyColumn"); - _TimestampFormat = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.TimestampFormat"); - ModelObjectParameterDefinition[] systemStates = GetProperties(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.SystemState"); - foreach (ModelObjectParameterDefinition modelObjectParameterDefinition in systemStates) - { - segments = modelObjectParameterDefinition.Value.Split('|'); - if (segments.Length != 2) - continue; - systemStateToNames.Add(segments[0], segments[1]); - } - _SystemStateToNames = new(systemStateToNames); } void IFileRead.Move(Tuple> extractResults, Exception exception) @@ -122,104 +103,6 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - private static int? GetKeyColumnIndex(string[] columns, string keyColumn) - { -#nullable enable - int? result = null; - for (int i = 0; i < columns.Length; i++) - { - if (columns[i] != keyColumn) - continue; - result = i; - break; - } - return result; - } - - private ReadOnlyCollection GetSystemStateValues(List lines, string[] columns, int keyColumnIndex) - { - List results = new(); - string[] values; - string? systemState; - string keyColumnValue; - for (int i = 7; i < lines.Count; i++) - { - values = lines[i].Split('\t'); - if (values.Length != columns.Length) - continue; - keyColumnValue = values[keyColumnIndex]; - if (string.IsNullOrEmpty(keyColumnValue)) - continue; - if (!_SystemStateToNames.TryGetValue(keyColumnValue, out systemState)) - continue; - if (results.Contains(systemState)) - continue; - results.Add(systemState); - } - return new(results); - } - - private void CopyFile(string reportFullPath) - { - string equipment; - string timestamp; - string[] columns; - DateTime dateTime; - List lines; - string systemState; - int? keyColumnIndex; - string checkFileName; - List headerLines = new(); - ReadOnlyCollection systemStateValues; - string missingKeyDirectory = Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, "Missing-Key"); - if (!Directory.Exists(missingKeyDirectory)) - _ = Directory.CreateDirectory(missingKeyDirectory); - string fileName = Path.GetFileName(reportFullPath); - string[] segments = fileName.Split('_'); - for (int z = 0; z < 1; z++) - { - if (segments.Length != 2) - continue; - equipment = segments[0]; - timestamp = segments[1].Split('.')[0]; - if (timestamp.Length != _TimestampFormat.Length) - continue; - headerLines.Clear(); - lines = File.ReadAllLines(reportFullPath).ToList(); - if (lines.Count < 8) - continue; - for (int i = 0; i < 6; i++) - { - headerLines.Add(lines[0]); - lines.RemoveAt(0); - } - if (lines[0].Length < 1 || lines[0][0] != '"' || !lines[0].StartsWith("\"Time\"")) - continue; - columns = lines[0].Split('\t'); - if (columns.Length < 3) - continue; - keyColumnIndex = GetKeyColumnIndex(columns, _KeyColumn); - if (keyColumnIndex is null) - { - File.Copy(reportFullPath, Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, missingKeyDirectory, fileName)); - continue; - } - systemStateValues = GetSystemStateValues(lines, columns, keyColumnIndex.Value); - if (systemStateValues.Count == 0) - { - File.Copy(reportFullPath, Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, missingKeyDirectory, fileName)); - continue; - } - lines.AddRange(headerLines); - systemState = string.Join("-", systemStateValues); - checkFileName = Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, $"{equipment}-{timestamp}-{systemState}.pdsf"); - File.WriteAllLines(checkFileName, lines); - // File.Delete(reportFullPath); - if (DateTime.TryParseExact(timestamp, _TimestampFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime)) - File.SetLastWriteTime(checkFileName, dateTime); - } - } - private Tuple> GetExtractResult(string reportFullPath, DateTime _) { Tuple> results; @@ -229,8 +112,6 @@ public class FileRead : Shared.FileRead, IFileRead JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); List descriptions = GetDuplicatorDescriptions(jsonElements); Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); - if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) - CopyFile(reportFullPath); results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); return results; } diff --git a/Adaptation/FileHandlers/R6/FileRead.cs b/Adaptation/FileHandlers/R6/FileRead.cs index 851690d..515269b 100644 --- a/Adaptation/FileHandlers/R6/FileRead.cs +++ b/Adaptation/FileHandlers/R6/FileRead.cs @@ -5,8 +5,6 @@ using Adaptation.Shared.Duplicator; using Adaptation.Shared.Methods; using System; using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Globalization; using System.IO; using System.Linq; using System.Text.Json; @@ -16,10 +14,6 @@ namespace Adaptation.FileHandlers.R6; public class FileRead : Shared.FileRead, IFileRead { - private readonly string _KeyColumn; - private readonly string _TimestampFormat; - private readonly ReadOnlyDictionary _SystemStateToNames; - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, Dictionary> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) : base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null) { @@ -32,19 +26,6 @@ public class FileRead : Shared.FileRead, IFileRead throw new Exception(cellInstanceConnectionName); if (!_IsDuplicator) throw new Exception(cellInstanceConnectionName); - string[] segments; - Dictionary systemStateToNames = new(); - _KeyColumn = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.KeyColumn"); - _TimestampFormat = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.TimestampFormat"); - ModelObjectParameterDefinition[] systemStates = GetProperties(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.SystemState"); - foreach (ModelObjectParameterDefinition modelObjectParameterDefinition in systemStates) - { - segments = modelObjectParameterDefinition.Value.Split('|'); - if (segments.Length != 2) - continue; - systemStateToNames.Add(segments[0], segments[1]); - } - _SystemStateToNames = new(systemStateToNames); } void IFileRead.Move(Tuple> extractResults, Exception exception) @@ -122,104 +103,6 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - private static int? GetKeyColumnIndex(string[] columns, string keyColumn) - { -#nullable enable - int? result = null; - for (int i = 0; i < columns.Length; i++) - { - if (columns[i] != keyColumn) - continue; - result = i; - break; - } - return result; - } - - private ReadOnlyCollection GetSystemStateValues(List lines, string[] columns, int keyColumnIndex) - { - List results = new(); - string[] values; - string? systemState; - string keyColumnValue; - for (int i = 7; i < lines.Count; i++) - { - values = lines[i].Split('\t'); - if (values.Length != columns.Length) - continue; - keyColumnValue = values[keyColumnIndex]; - if (string.IsNullOrEmpty(keyColumnValue)) - continue; - if (!_SystemStateToNames.TryGetValue(keyColumnValue, out systemState)) - continue; - if (results.Contains(systemState)) - continue; - results.Add(systemState); - } - return new(results); - } - - private void CopyFile(string reportFullPath) - { - string equipment; - string timestamp; - string[] columns; - DateTime dateTime; - List lines; - string systemState; - int? keyColumnIndex; - string checkFileName; - List headerLines = new(); - ReadOnlyCollection systemStateValues; - string missingKeyDirectory = Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, "Missing-Key"); - if (!Directory.Exists(missingKeyDirectory)) - _ = Directory.CreateDirectory(missingKeyDirectory); - string fileName = Path.GetFileName(reportFullPath); - string[] segments = fileName.Split('_'); - for (int z = 0; z < 1; z++) - { - if (segments.Length != 2) - continue; - equipment = segments[0]; - timestamp = segments[1].Split('.')[0]; - if (timestamp.Length != _TimestampFormat.Length) - continue; - headerLines.Clear(); - lines = File.ReadAllLines(reportFullPath).ToList(); - if (lines.Count < 8) - continue; - for (int i = 0; i < 6; i++) - { - headerLines.Add(lines[0]); - lines.RemoveAt(0); - } - if (lines[0].Length < 1 || lines[0][0] != '"' || !lines[0].StartsWith("\"Time\"")) - continue; - columns = lines[0].Split('\t'); - if (columns.Length < 3) - continue; - keyColumnIndex = GetKeyColumnIndex(columns, _KeyColumn); - if (keyColumnIndex is null) - { - File.Copy(reportFullPath, Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, missingKeyDirectory, fileName)); - continue; - } - systemStateValues = GetSystemStateValues(lines, columns, keyColumnIndex.Value); - if (systemStateValues.Count == 0) - { - File.Copy(reportFullPath, Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, missingKeyDirectory, fileName)); - continue; - } - lines.AddRange(headerLines); - systemState = string.Join("-", systemStateValues); - checkFileName = Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, $"{equipment}-{timestamp}-{systemState}.pdsf"); - File.WriteAllLines(checkFileName, lines); - // File.Delete(reportFullPath); - if (DateTime.TryParseExact(timestamp, _TimestampFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime)) - File.SetLastWriteTime(checkFileName, dateTime); - } - } - private Tuple> GetExtractResult(string reportFullPath, DateTime _) { Tuple> results; @@ -229,8 +112,6 @@ public class FileRead : Shared.FileRead, IFileRead JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); List descriptions = GetDuplicatorDescriptions(jsonElements); Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); - if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) - CopyFile(reportFullPath); results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); return results; } diff --git a/Adaptation/FileHandlers/R7/FileRead.cs b/Adaptation/FileHandlers/R7/FileRead.cs index b747651..f7a7bb1 100644 --- a/Adaptation/FileHandlers/R7/FileRead.cs +++ b/Adaptation/FileHandlers/R7/FileRead.cs @@ -5,8 +5,6 @@ using Adaptation.Shared.Duplicator; using Adaptation.Shared.Methods; using System; using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Globalization; using System.IO; using System.Linq; using System.Text.Json; @@ -16,10 +14,6 @@ namespace Adaptation.FileHandlers.R7; public class FileRead : Shared.FileRead, IFileRead { - private readonly string _KeyColumn; - private readonly string _TimestampFormat; - private readonly ReadOnlyDictionary _SystemStateToNames; - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, Dictionary> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) : base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null) { @@ -32,19 +26,6 @@ public class FileRead : Shared.FileRead, IFileRead throw new Exception(cellInstanceConnectionName); if (!_IsDuplicator) throw new Exception(cellInstanceConnectionName); - string[] segments; - Dictionary systemStateToNames = new(); - _KeyColumn = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.KeyColumn"); - _TimestampFormat = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.TimestampFormat"); - ModelObjectParameterDefinition[] systemStates = GetProperties(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.SystemState"); - foreach (ModelObjectParameterDefinition modelObjectParameterDefinition in systemStates) - { - segments = modelObjectParameterDefinition.Value.Split('|'); - if (segments.Length != 2) - continue; - systemStateToNames.Add(segments[0], segments[1]); - } - _SystemStateToNames = new(systemStateToNames); } void IFileRead.Move(Tuple> extractResults, Exception exception) @@ -122,104 +103,6 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - private static int? GetKeyColumnIndex(string[] columns, string keyColumn) - { -#nullable enable - int? result = null; - for (int i = 0; i < columns.Length; i++) - { - if (columns[i] != keyColumn) - continue; - result = i; - break; - } - return result; - } - - private ReadOnlyCollection GetSystemStateValues(List lines, string[] columns, int keyColumnIndex) - { - List results = new(); - string[] values; - string? systemState; - string keyColumnValue; - for (int i = 7; i < lines.Count; i++) - { - values = lines[i].Split('\t'); - if (values.Length != columns.Length) - continue; - keyColumnValue = values[keyColumnIndex]; - if (string.IsNullOrEmpty(keyColumnValue)) - continue; - if (!_SystemStateToNames.TryGetValue(keyColumnValue, out systemState)) - continue; - if (results.Contains(systemState)) - continue; - results.Add(systemState); - } - return new(results); - } - - private void CopyFile(string reportFullPath) - { - string equipment; - string timestamp; - string[] columns; - DateTime dateTime; - List lines; - string systemState; - int? keyColumnIndex; - string checkFileName; - List headerLines = new(); - ReadOnlyCollection systemStateValues; - string missingKeyDirectory = Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, "Missing-Key"); - if (!Directory.Exists(missingKeyDirectory)) - _ = Directory.CreateDirectory(missingKeyDirectory); - string fileName = Path.GetFileName(reportFullPath); - string[] segments = fileName.Split('_'); - for (int z = 0; z < 1; z++) - { - if (segments.Length != 2) - continue; - equipment = segments[0]; - timestamp = segments[1].Split('.')[0]; - if (timestamp.Length != _TimestampFormat.Length) - continue; - headerLines.Clear(); - lines = File.ReadAllLines(reportFullPath).ToList(); - if (lines.Count < 8) - continue; - for (int i = 0; i < 6; i++) - { - headerLines.Add(lines[0]); - lines.RemoveAt(0); - } - if (lines[0].Length < 1 || lines[0][0] != '"' || !lines[0].StartsWith("\"Time\"")) - continue; - columns = lines[0].Split('\t'); - if (columns.Length < 3) - continue; - keyColumnIndex = GetKeyColumnIndex(columns, _KeyColumn); - if (keyColumnIndex is null) - { - File.Copy(reportFullPath, Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, missingKeyDirectory, fileName)); - continue; - } - systemStateValues = GetSystemStateValues(lines, columns, keyColumnIndex.Value); - if (systemStateValues.Count == 0) - { - File.Copy(reportFullPath, Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, missingKeyDirectory, fileName)); - continue; - } - lines.AddRange(headerLines); - systemState = string.Join("-", systemStateValues); - checkFileName = Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, $"{equipment}-{timestamp}-{systemState}.pdsf"); - File.WriteAllLines(checkFileName, lines); - // File.Delete(reportFullPath); - if (DateTime.TryParseExact(timestamp, _TimestampFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime)) - File.SetLastWriteTime(checkFileName, dateTime); - } - } - private Tuple> GetExtractResult(string reportFullPath, DateTime _) { Tuple> results; @@ -229,8 +112,6 @@ public class FileRead : Shared.FileRead, IFileRead JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); List descriptions = GetDuplicatorDescriptions(jsonElements); Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); - if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) - CopyFile(reportFullPath); results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); return results; } diff --git a/Adaptation/FileHandlers/Source/FileRead.cs b/Adaptation/FileHandlers/Source/FileRead.cs new file mode 100644 index 0000000..69e1d8b --- /dev/null +++ b/Adaptation/FileHandlers/Source/FileRead.cs @@ -0,0 +1,114 @@ +using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared; +using Adaptation.Shared.Duplicator; +using Adaptation.Shared.Methods; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.Json; + +namespace Adaptation.FileHandlers.Source; + +public class FileRead : Shared.FileRead, IFileRead +{ + + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, Dictionary> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) : + base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null) + { + _MinFileLength = 10; + _NullData = string.Empty; + _Logistics = new(this); + if (_FileParameter is null) + throw new Exception(cellInstanceConnectionName); + if (_ModelObjectParameterDefinitions is null) + throw new Exception(cellInstanceConnectionName); + } + + void IFileRead.Move(Tuple> extractResults, Exception exception) + { + bool isErrorFile = exception is not null; + if (!isErrorFile && !string.IsNullOrEmpty(_Logistics.ReportFullPath)) + { + FileInfo fileInfo = new(_Logistics.ReportFullPath); + if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) + File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime); + } + Move(extractResults); + } + + void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); + + string IFileRead.GetEventDescription() + { + string result = _Description.GetEventDescription(); + return result; + } + + List IFileRead.GetHeaderNames() + { + List results = _Description.GetHeaderNames(); + return results; + } + + string[] IFileRead.Move(Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception) + { + string[] results = Move(extractResults, to, from, resolvedFileLocation, exception); + return results; + } + + JsonProperty[] IFileRead.GetDefault() + { + JsonProperty[] results = _Description.GetDefault(this, _Logistics); + return results; + } + + Dictionary IFileRead.GetDisplayNamesJsonElement() + { + Dictionary results = _Description.GetDisplayNamesJsonElement(this); + return results; + } + + List IFileRead.GetDescriptions(IFileRead fileRead, List tests, IProcessData processData) + { + List results = _Description.GetDescriptions(fileRead, _Logistics, tests, processData); + return results; + } + + Tuple> IFileRead.GetExtractResult(string reportFullPath, string eventName) + { + Tuple> results; + if (string.IsNullOrEmpty(eventName)) + throw new Exception(); + _ReportFullPath = reportFullPath; + DateTime dateTime = DateTime.Now; + results = GetExtractResult(reportFullPath, dateTime); + if (results.Item3 is null) + results = new Tuple>(results.Item1, Array.Empty(), JsonSerializer.Deserialize("[]"), results.Item4); + if (results.Item3.Length > 0 && _IsEAFHosted) + WritePDSF(this, results.Item3); + UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks); + return results; + } + + Tuple> IFileRead.ReExtract() + { + Tuple> results; + List headerNames = _Description.GetHeaderNames(); + Dictionary keyValuePairs = _Description.GetDisplayNamesJsonElement(this); + results = ReExtract(this, headerNames, keyValuePairs); + return results; + } + + private Tuple> GetExtractResult(string reportFullPath, DateTime _) + { + Tuple> results = new(string.Empty, null, null, new List()); + string[] lines = new string[] { string.Empty, "NUM_DATA_ROWS", $"LOGISTICS_1{'\t'}A_JOBID={"BACKLOG"};A_MES_ENTITY={"BACKLOG"};" }; + ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines); + _Logistics = new Logistics(reportFullPath, processDataStandardFormat); + SetFileParameterLotIDToLogisticsMID(); + results.Item4.Add(_Logistics.FileInfo); + return results; + } + +} \ No newline at end of file diff --git a/Adaptation/Infineon/Monitoring/MonA/MonIn.cs b/Adaptation/Infineon/Monitoring/MonA/MonIn.cs index 7a8a711..fcd16ca 100644 --- a/Adaptation/Infineon/Monitoring/MonA/MonIn.cs +++ b/Adaptation/Infineon/Monitoring/MonA/MonIn.cs @@ -226,9 +226,9 @@ public class MonIn : IMonIn, IDisposable { StringBuilder stringBuilder = new(); if (string.IsNullOrEmpty(subresource)) - _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), stateName.Trim(), state.Trim(), description.Trim()); + _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), stateName.Trim(), state.Trim(), description.Trim()); else - _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), subresource.Trim(), stateName.Trim(), state.Trim(), description.Trim()); + _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), subresource.Trim(), stateName.Trim(), state.Trim(), description.Trim()); return stringBuilder.ToString(); } @@ -247,14 +247,14 @@ public class MonIn : IMonIn, IDisposable if (string.IsNullOrEmpty(subresource)) { if (unit.Equals(string.Empty) && !interval.HasValue) - _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), performanceName.Trim(), value, description.Trim()); + _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), performanceName.Trim(), value, description.Trim()); else - _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} {5} {{interval={6}, unit={7}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : (object)string.Empty, unit.Trim()); + _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} {5} {{interval={6}, unit={7}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : string.Empty, unit.Trim()); } else if (unit.Equals(string.Empty) && !interval.HasValue) - _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim()); + _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim()); else - _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} {6} {{interval={7}, unit={8}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : (object)string.Empty, unit.Trim()); + _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} {6} {{interval={7}, unit={8}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : string.Empty, unit.Trim()); return stringBuilder.ToString(); } diff --git a/Adaptation/Shared/ProcessDataStandardFormat.cs b/Adaptation/Shared/ProcessDataStandardFormat.cs index 9d48a31..bc3c424 100644 --- a/Adaptation/Shared/ProcessDataStandardFormat.cs +++ b/Adaptation/Shared/ProcessDataStandardFormat.cs @@ -187,7 +187,7 @@ internal class ProcessDataStandardFormat break; } } - string? linesOne = lines.Length > 0 && body.Count == 0 && columns.Count == 0 ? lines[1] : null; + string? linesOne = lines.Length > 1 && body.Count == 0 && columns.Count == 0 ? lines[1] : null; logistics = GetLogistics(footer, linesOne: linesOne); if (logistics.Count == 0) sequence = null; @@ -235,7 +235,7 @@ internal class ProcessDataStandardFormat const int columnsLine = 6; FileInfo fileInfo = new(reportFullPath); ProcessDataStandardFormat processDataStandardFormat = GetProcessDataStandardFormat(fileInfo.LastWriteTime, columnsLine, fileInfo.FullName, lines: null); - JsonElement[]? jsonElements = processDataStandardFormatMapping.OldColumnNames.Count != processDataStandardFormatMapping.ColumnIndices.Count ? null : GetFullArray(processDataStandardFormat); + JsonElement[]? jsonElements = processDataStandardFormatMapping.OldColumnNames.Count == 0 ? null : GetFullArray(processDataStandardFormat); JsonProperty[]? jsonProperties = jsonElements is null || jsonElements.Length == 0 ? null : jsonElements[0].EnumerateObject().ToArray(); if (jsonElements is null || jsonProperties is null || jsonProperties.Length != processDataStandardFormatMapping.NewColumnNames.Count) result = processDataStandardFormat; diff --git a/Adaptation/_Tests/Shared/AdaptationTesting.cs b/Adaptation/_Tests/Shared/AdaptationTesting.cs index e49ae57..78b2dfe 100644 --- a/Adaptation/_Tests/Shared/AdaptationTesting.cs +++ b/Adaptation/_Tests/Shared/AdaptationTesting.cs @@ -1001,22 +1001,22 @@ public class AdaptationTesting : ISMTP { try { - if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.ErrorTargetFileLocation)) + if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.ErrorTargetFileLocation) && !fileConnectorConfigurationTuple.Item2.ErrorTargetFileLocation.Contains("10.")) { if (!Directory.Exists(fileConnectorConfigurationTuple.Item2.ErrorTargetFileLocation)) _ = Directory.CreateDirectory(fileConnectorConfigurationTuple.Item2.ErrorTargetFileLocation); } - if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.SourceFileLocation)) + if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.SourceFileLocation) && !fileConnectorConfigurationTuple.Item2.SourceFileLocation.Contains("10.")) { if (!Directory.Exists(fileConnectorConfigurationTuple.Item2.SourceFileLocation)) _ = Directory.CreateDirectory(fileConnectorConfigurationTuple.Item2.SourceFileLocation); } - if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.TargetFileLocation)) + if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.TargetFileLocation) && !fileConnectorConfigurationTuple.Item2.TargetFileLocation.Contains("10.")) { if (!Directory.Exists(fileConnectorConfigurationTuple.Item2.TargetFileLocation)) _ = Directory.CreateDirectory(fileConnectorConfigurationTuple.Item2.TargetFileLocation); } - if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder)) + if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder) && !fileConnectorConfigurationTuple.Item2.AlternateTargetFolder.Contains("10.")) { if (!Directory.Exists(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder.Split('|')[0])) _ = Directory.CreateDirectory(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder.Split('|')[0]); diff --git a/DEP08CEPIEPSILON.csproj b/DEP08CEPIEPSILON.csproj index 1340e92..2b10472 100644 --- a/DEP08CEPIEPSILON.csproj +++ b/DEP08CEPIEPSILON.csproj @@ -106,15 +106,19 @@ + + + +