From 365fedce8942bcf838daf454543f734f20826ea2 Mon Sep 17 00:00:00 2001 From: "phares@iscn5cg20977xq" Date: Wed, 24 Sep 2025 16:13:21 -0700 Subject: [PATCH] Switched to wild --- .../CellInstanceConnectionName.cs | 19 +- .../FileHandlers/{R29 => R2}/FileRead.cs | 2 +- .../FileHandlers/{R30 => R3}/FileRead.cs | 2 +- .../FileHandlers/{R32 => R4}/FileRead.cs | 2 +- Adaptation/FileHandlers/R43/FileRead.cs | 238 ------------------ .../FileHandlers/{R36 => R5}/FileRead.cs | 2 +- Adaptation/FileHandlers/R55/FileRead.cs | 238 ------------------ Adaptation/FileHandlers/R56/FileRead.cs | 238 ------------------ Adaptation/FileHandlers/R57/FileRead.cs | 238 ------------------ Adaptation/FileHandlers/R6/FileRead.cs | 238 ++++++++++++++++++ Adaptation/FileHandlers/R61/FileRead.cs | 238 ------------------ Adaptation/FileHandlers/R62/FileRead.cs | 238 ------------------ Adaptation/FileHandlers/R65/FileRead.cs | 238 ------------------ Adaptation/FileHandlers/R7/FileRead.cs | 238 ++++++++++++++++++ Adaptation/FileHandlers/R75/FileRead.cs | 238 ------------------ Adaptation/FileHandlers/R77/FileRead.cs | 238 ------------------ DEP08CEPIEPSILON.csproj | 19 +- 17 files changed, 492 insertions(+), 2172 deletions(-) rename Adaptation/FileHandlers/{R29 => R2}/FileRead.cs (99%) rename Adaptation/FileHandlers/{R30 => R3}/FileRead.cs (99%) rename Adaptation/FileHandlers/{R32 => R4}/FileRead.cs (99%) delete mode 100644 Adaptation/FileHandlers/R43/FileRead.cs rename Adaptation/FileHandlers/{R36 => R5}/FileRead.cs (99%) delete mode 100644 Adaptation/FileHandlers/R55/FileRead.cs delete mode 100644 Adaptation/FileHandlers/R56/FileRead.cs delete mode 100644 Adaptation/FileHandlers/R57/FileRead.cs create mode 100644 Adaptation/FileHandlers/R6/FileRead.cs delete mode 100644 Adaptation/FileHandlers/R61/FileRead.cs delete mode 100644 Adaptation/FileHandlers/R62/FileRead.cs delete mode 100644 Adaptation/FileHandlers/R65/FileRead.cs create mode 100644 Adaptation/FileHandlers/R7/FileRead.cs delete mode 100644 Adaptation/FileHandlers/R75/FileRead.cs delete mode 100644 Adaptation/FileHandlers/R77/FileRead.cs diff --git a/Adaptation/FileHandlers/CellInstanceConnectionName.cs b/Adaptation/FileHandlers/CellInstanceConnectionName.cs index 561a69b..d353a08 100644 --- a/Adaptation/FileHandlers/CellInstanceConnectionName.cs +++ b/Adaptation/FileHandlers/CellInstanceConnectionName.cs @@ -17,19 +17,12 @@ public class CellInstanceConnectionName nameof(Dummy) => new Dummy.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(R29) => new R29.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), - nameof(R30) => new R30.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), - nameof(R32) => new R32.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), - nameof(R36) => new R36.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), - nameof(R43) => new R43.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), - nameof(R55) => new R55.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), - nameof(R56) => new R56.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), - nameof(R57) => new R57.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), - nameof(R61) => new R61.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), - nameof(R62) => new R62.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), - nameof(R65) => new R65.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), - nameof(R75) => new R75.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), - nameof(R77) => new R77.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), _ => throw new Exception($"\"{cellInstanceConnectionName}\" not mapped") }; return result; diff --git a/Adaptation/FileHandlers/R29/FileRead.cs b/Adaptation/FileHandlers/R2/FileRead.cs similarity index 99% rename from Adaptation/FileHandlers/R29/FileRead.cs rename to Adaptation/FileHandlers/R2/FileRead.cs index 138d374..575f49b 100644 --- a/Adaptation/FileHandlers/R29/FileRead.cs +++ b/Adaptation/FileHandlers/R2/FileRead.cs @@ -11,7 +11,7 @@ using System.IO; using System.Linq; using System.Text.Json; -namespace Adaptation.FileHandlers.R29; +namespace Adaptation.FileHandlers.R2; public class FileRead : Shared.FileRead, IFileRead { diff --git a/Adaptation/FileHandlers/R30/FileRead.cs b/Adaptation/FileHandlers/R3/FileRead.cs similarity index 99% rename from Adaptation/FileHandlers/R30/FileRead.cs rename to Adaptation/FileHandlers/R3/FileRead.cs index 9f6b191..44dbad4 100644 --- a/Adaptation/FileHandlers/R30/FileRead.cs +++ b/Adaptation/FileHandlers/R3/FileRead.cs @@ -11,7 +11,7 @@ using System.IO; using System.Linq; using System.Text.Json; -namespace Adaptation.FileHandlers.R30; +namespace Adaptation.FileHandlers.R3; public class FileRead : Shared.FileRead, IFileRead { diff --git a/Adaptation/FileHandlers/R32/FileRead.cs b/Adaptation/FileHandlers/R4/FileRead.cs similarity index 99% rename from Adaptation/FileHandlers/R32/FileRead.cs rename to Adaptation/FileHandlers/R4/FileRead.cs index f2dec4a..e5204f6 100644 --- a/Adaptation/FileHandlers/R32/FileRead.cs +++ b/Adaptation/FileHandlers/R4/FileRead.cs @@ -11,7 +11,7 @@ using System.IO; using System.Linq; using System.Text.Json; -namespace Adaptation.FileHandlers.R32; +namespace Adaptation.FileHandlers.R4; public class FileRead : Shared.FileRead, IFileRead { diff --git a/Adaptation/FileHandlers/R43/FileRead.cs b/Adaptation/FileHandlers/R43/FileRead.cs deleted file mode 100644 index b21cbbb..0000000 --- a/Adaptation/FileHandlers/R43/FileRead.cs +++ /dev/null @@ -1,238 +0,0 @@ -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.Collections.ObjectModel; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text.Json; - -namespace Adaptation.FileHandlers.R43; - -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) - { - _MinFileLength = 10; - _NullData = string.Empty; - _Logistics = new(this); - if (_FileParameter is null) - throw new Exception(cellInstanceConnectionName); - if (_ModelObjectParameterDefinitions is null) - 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) - { - 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 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; - ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); - _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(); - if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) - CopyFile(reportFullPath); - results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); - return results; - } - -} \ No newline at end of file diff --git a/Adaptation/FileHandlers/R36/FileRead.cs b/Adaptation/FileHandlers/R5/FileRead.cs similarity index 99% rename from Adaptation/FileHandlers/R36/FileRead.cs rename to Adaptation/FileHandlers/R5/FileRead.cs index 5439318..600c8f3 100644 --- a/Adaptation/FileHandlers/R36/FileRead.cs +++ b/Adaptation/FileHandlers/R5/FileRead.cs @@ -11,7 +11,7 @@ using System.IO; using System.Linq; using System.Text.Json; -namespace Adaptation.FileHandlers.R36; +namespace Adaptation.FileHandlers.R5; public class FileRead : Shared.FileRead, IFileRead { diff --git a/Adaptation/FileHandlers/R55/FileRead.cs b/Adaptation/FileHandlers/R55/FileRead.cs deleted file mode 100644 index 891da19..0000000 --- a/Adaptation/FileHandlers/R55/FileRead.cs +++ /dev/null @@ -1,238 +0,0 @@ -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.Collections.ObjectModel; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text.Json; - -namespace Adaptation.FileHandlers.R55; - -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) - { - _MinFileLength = 10; - _NullData = string.Empty; - _Logistics = new(this); - if (_FileParameter is null) - throw new Exception(cellInstanceConnectionName); - if (_ModelObjectParameterDefinitions is null) - 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) - { - 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 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; - ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); - _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(); - if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) - CopyFile(reportFullPath); - results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); - return results; - } - -} \ No newline at end of file diff --git a/Adaptation/FileHandlers/R56/FileRead.cs b/Adaptation/FileHandlers/R56/FileRead.cs deleted file mode 100644 index 61507e7..0000000 --- a/Adaptation/FileHandlers/R56/FileRead.cs +++ /dev/null @@ -1,238 +0,0 @@ -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.Collections.ObjectModel; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text.Json; - -namespace Adaptation.FileHandlers.R56; - -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) - { - _MinFileLength = 10; - _NullData = string.Empty; - _Logistics = new(this); - if (_FileParameter is null) - throw new Exception(cellInstanceConnectionName); - if (_ModelObjectParameterDefinitions is null) - 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) - { - 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 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; - ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); - _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(); - if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) - CopyFile(reportFullPath); - results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); - return results; - } - -} \ No newline at end of file diff --git a/Adaptation/FileHandlers/R57/FileRead.cs b/Adaptation/FileHandlers/R57/FileRead.cs deleted file mode 100644 index 9f45b70..0000000 --- a/Adaptation/FileHandlers/R57/FileRead.cs +++ /dev/null @@ -1,238 +0,0 @@ -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.Collections.ObjectModel; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text.Json; - -namespace Adaptation.FileHandlers.R57; - -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) - { - _MinFileLength = 10; - _NullData = string.Empty; - _Logistics = new(this); - if (_FileParameter is null) - throw new Exception(cellInstanceConnectionName); - if (_ModelObjectParameterDefinitions is null) - 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) - { - 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 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; - ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); - _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(); - if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) - CopyFile(reportFullPath); - results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); - return results; - } - -} \ No newline at end of file diff --git a/Adaptation/FileHandlers/R6/FileRead.cs b/Adaptation/FileHandlers/R6/FileRead.cs new file mode 100644 index 0000000..851690d --- /dev/null +++ b/Adaptation/FileHandlers/R6/FileRead.cs @@ -0,0 +1,238 @@ +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.Collections.ObjectModel; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text.Json; + +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) + { + _MinFileLength = 10; + _NullData = string.Empty; + _Logistics = new(this); + if (_FileParameter is null) + throw new Exception(cellInstanceConnectionName); + if (_ModelObjectParameterDefinitions is null) + 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) + { + 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 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; + ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); + _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(); + if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) + CopyFile(reportFullPath); + results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); + return results; + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/R61/FileRead.cs b/Adaptation/FileHandlers/R61/FileRead.cs deleted file mode 100644 index bec449a..0000000 --- a/Adaptation/FileHandlers/R61/FileRead.cs +++ /dev/null @@ -1,238 +0,0 @@ -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.Collections.ObjectModel; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text.Json; - -namespace Adaptation.FileHandlers.R61; - -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) - { - _MinFileLength = 10; - _NullData = string.Empty; - _Logistics = new(this); - if (_FileParameter is null) - throw new Exception(cellInstanceConnectionName); - if (_ModelObjectParameterDefinitions is null) - 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) - { - 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 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; - ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); - _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(); - if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) - CopyFile(reportFullPath); - results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); - return results; - } - -} \ No newline at end of file diff --git a/Adaptation/FileHandlers/R62/FileRead.cs b/Adaptation/FileHandlers/R62/FileRead.cs deleted file mode 100644 index fb1d420..0000000 --- a/Adaptation/FileHandlers/R62/FileRead.cs +++ /dev/null @@ -1,238 +0,0 @@ -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.Collections.ObjectModel; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text.Json; - -namespace Adaptation.FileHandlers.R62; - -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) - { - _MinFileLength = 10; - _NullData = string.Empty; - _Logistics = new(this); - if (_FileParameter is null) - throw new Exception(cellInstanceConnectionName); - if (_ModelObjectParameterDefinitions is null) - 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) - { - 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 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; - ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); - _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(); - if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) - CopyFile(reportFullPath); - results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); - return results; - } - -} \ No newline at end of file diff --git a/Adaptation/FileHandlers/R65/FileRead.cs b/Adaptation/FileHandlers/R65/FileRead.cs deleted file mode 100644 index 6506a12..0000000 --- a/Adaptation/FileHandlers/R65/FileRead.cs +++ /dev/null @@ -1,238 +0,0 @@ -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.Collections.ObjectModel; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text.Json; - -namespace Adaptation.FileHandlers.R65; - -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) - { - _MinFileLength = 10; - _NullData = string.Empty; - _Logistics = new(this); - if (_FileParameter is null) - throw new Exception(cellInstanceConnectionName); - if (_ModelObjectParameterDefinitions is null) - 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) - { - 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 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; - ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); - _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(); - if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) - CopyFile(reportFullPath); - results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); - return results; - } - -} \ No newline at end of file diff --git a/Adaptation/FileHandlers/R7/FileRead.cs b/Adaptation/FileHandlers/R7/FileRead.cs new file mode 100644 index 0000000..b747651 --- /dev/null +++ b/Adaptation/FileHandlers/R7/FileRead.cs @@ -0,0 +1,238 @@ +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.Collections.ObjectModel; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text.Json; + +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) + { + _MinFileLength = 10; + _NullData = string.Empty; + _Logistics = new(this); + if (_FileParameter is null) + throw new Exception(cellInstanceConnectionName); + if (_ModelObjectParameterDefinitions is null) + 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) + { + 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 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; + ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); + _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(); + if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) + CopyFile(reportFullPath); + results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); + return results; + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/R75/FileRead.cs b/Adaptation/FileHandlers/R75/FileRead.cs deleted file mode 100644 index a59354a..0000000 --- a/Adaptation/FileHandlers/R75/FileRead.cs +++ /dev/null @@ -1,238 +0,0 @@ -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.Collections.ObjectModel; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text.Json; - -namespace Adaptation.FileHandlers.R75; - -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) - { - _MinFileLength = 10; - _NullData = string.Empty; - _Logistics = new(this); - if (_FileParameter is null) - throw new Exception(cellInstanceConnectionName); - if (_ModelObjectParameterDefinitions is null) - 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) - { - 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 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; - ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); - _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(); - if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) - CopyFile(reportFullPath); - results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); - return results; - } - -} \ No newline at end of file diff --git a/Adaptation/FileHandlers/R77/FileRead.cs b/Adaptation/FileHandlers/R77/FileRead.cs deleted file mode 100644 index 8226efa..0000000 --- a/Adaptation/FileHandlers/R77/FileRead.cs +++ /dev/null @@ -1,238 +0,0 @@ -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.Collections.ObjectModel; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text.Json; - -namespace Adaptation.FileHandlers.R77; - -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) - { - _MinFileLength = 10; - _NullData = string.Empty; - _Logistics = new(this); - if (_FileParameter is null) - throw new Exception(cellInstanceConnectionName); - if (_ModelObjectParameterDefinitions is null) - 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) - { - 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 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; - ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); - _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(); - if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) - CopyFile(reportFullPath); - results = new Tuple>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List()); - return results; - } - -} \ No newline at end of file diff --git a/DEP08CEPIEPSILON.csproj b/DEP08CEPIEPSILON.csproj index 6e2187a..0c28282 100644 --- a/DEP08CEPIEPSILON.csproj +++ b/DEP08CEPIEPSILON.csproj @@ -109,19 +109,12 @@ - - - - - - - - - - - - - + + + + + +