diff --git a/Adaptation/.editorconfig b/Adaptation/.editorconfig index ace6d65..2220133 100644 --- a/Adaptation/.editorconfig +++ b/Adaptation/.editorconfig @@ -80,8 +80,8 @@ dotnet_diagnostic.CA1825.severity = warning # CA1823: Avoid zero-length array al dotnet_diagnostic.CA1829.severity = warning # CA1829: Use Length/Count property instead of Count() when available dotnet_diagnostic.CA1834.severity = warning # CA1834: Consider using 'StringBuilder.Append(char)' when applicable dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name -dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) System.Version.Equals("1", "2"); Version.Equals("1", "2"); -dotnet_diagnostic.IDE0005.severity = suggestion # Using directive is unnecessary using System.Text; +dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2"); +dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed dotnet_diagnostic.IDE0060.severity = warning # IDE0060: Remove unused parameter dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning diff --git a/Adaptation/.vscode/launch.json b/Adaptation/.vscode/launch.json index 2927e60..77578c9 100644 --- a/Adaptation/.vscode/launch.json +++ b/Adaptation/.vscode/launch.json @@ -4,7 +4,7 @@ "name": ".NET Core Attach", "type": "coreclr", "request": "attach", - "processId": 14072 + "processId": 20196 } ] } diff --git a/Adaptation/FileHandlers/APC/FileRead.cs b/Adaptation/FileHandlers/APC/FileRead.cs index d2fe9ca..9bff0b2 100644 --- a/Adaptation/FileHandlers/APC/FileRead.cs +++ b/Adaptation/FileHandlers/APC/FileRead.cs @@ -14,12 +14,12 @@ namespace Adaptation.FileHandlers.APC; public class FileRead : Shared.FileRead, IFileRead { - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : - base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, 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, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted) { _MinFileLength = 10; _NullData = string.Empty; - _Logistics = new Logistics(this); + _Logistics = new(this); if (_FileParameter is null) throw new Exception(cellInstanceConnectionName); if (_ModelObjectParameterDefinitions is null) @@ -37,7 +37,7 @@ public class FileRead : Shared.FileRead, IFileRead if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime); } - Move(extractResults, exception); + Move(extractResults); } void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); @@ -103,20 +103,32 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - void IFileRead.CheckTests(Test[] tests, bool extra) + private void FileCopy(string reportFullPath, DateTime dateTime) { - if (_Description is not Description) - throw new Exception(); + bool isDummyRun = false; + List<(Shared.Properties.IScopeInfo, string)> tuples = new(); + string successDirectory = _FileConnectorConfiguration.AlternateTargetFolder; + string fileNameAfterUnderscoreSplit = GetFileNameAfterUnderscoreSplit(reportFullPath); + string duplicateDirectory = Path.Combine(_FileConnectorConfiguration.TargetFileLocation, fileNameAfterUnderscoreSplit); + if (!Directory.Exists(duplicateDirectory)) + _ = Directory.CreateDirectory(duplicateDirectory); + string duplicateFile = Path.Combine(duplicateDirectory, Path.GetFileName(reportFullPath)); + File.Copy(reportFullPath, duplicateFile, overwrite: true); + WaitForFileConsumption(dateTime, isDummyRun, successDirectory, duplicateDirectory, tuples, duplicateFile); } private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) { - if (dateTime == DateTime.MinValue) - { } - Tuple> results = new(string.Empty, null, null, new List()); + Tuple> results; Tuple pdsf = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(reportFullPath); _Logistics = new Logistics(reportFullPath, pdsf.Item1); SetFileParameterLotIDToLogisticsMID(); + JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(pdsf); + List descriptions = GetDuplicatorDescriptions(jsonElements); + Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); + if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) + FileCopy(reportFullPath, dateTime); + results = new Tuple>(pdsf.Item1, tests, jsonElements, new List()); return results; } diff --git a/Adaptation/FileHandlers/Archive/FileRead.cs b/Adaptation/FileHandlers/Archive/FileRead.cs index a502d10..6584c7f 100644 --- a/Adaptation/FileHandlers/Archive/FileRead.cs +++ b/Adaptation/FileHandlers/Archive/FileRead.cs @@ -15,21 +15,26 @@ namespace Adaptation.FileHandlers.Archive; public class FileRead : Shared.FileRead, IFileRead { - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : - base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + private readonly string _JobIdParentDirectory; + private readonly string _JobIdArchiveParentDirectory; + + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, 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, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted) { _MinFileLength = 10; _NullData = string.Empty; - _Logistics = new Logistics(this); + _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); + _JobIdParentDirectory = GetJobIdParentDirectory(_FileConnectorConfiguration.SourceFileLocation); + _JobIdArchiveParentDirectory = GetJobIdParentDirectory(_FileConnectorConfiguration.TargetFileLocation); } - void IFileRead.Move(Tuple> extractResults, Exception exception) => Move(extractResults, exception); + void IFileRead.Move(Tuple> extractResults, Exception exception) => Move(extractResults); void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); @@ -94,10 +99,20 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - void IFileRead.CheckTests(Test[] tests, bool extra) + private static IEnumerable GetDirectoriesRecursively(string path, string directoryNameSegment = null) { - if (_Description is not Description) - throw new Exception(); + Queue queue = new(); + queue.Enqueue(path); + while (queue.Count > 0) + { + path = queue.Dequeue(); + foreach (string subDirectory in Directory.GetDirectories(path)) + { + queue.Enqueue(subDirectory); + if (string.IsNullOrEmpty(directoryNameSegment) || Path.GetFileName(subDirectory).Contains(directoryNameSegment)) + yield return subDirectory; + } + } } private void MoveArchive(DateTime dateTime) @@ -106,19 +121,18 @@ public class FileRead : Shared.FileRead, IFileRead { } string logisticsSequence = _Logistics.Sequence.ToString(); string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); - string weekDirectory = string.Concat(_Logistics.DateTimeFromSequence.ToString("yyyy"), "_Week_", weekOfYear, @"\", _Logistics.DateTimeFromSequence.ToString("yyyy-MM-dd")); - string jobIdDirectory = string.Concat(_FileConnectorConfiguration.TargetFileLocation, @"\", _Logistics.JobID); - if (!Directory.Exists(jobIdDirectory)) - _ = Directory.CreateDirectory(jobIdDirectory); - //string destinationArchiveDirectory = string.Concat(jobIdDirectory, @"\!Archive\", weekDirectory); - string destinationArchiveDirectory = string.Concat(Path.GetDirectoryName(_FileConnectorConfiguration.TargetFileLocation), @"\Archive\", _Logistics.JobID, @"\", weekDirectory); + string weekDirectory = $"{_Logistics.DateTimeFromSequence:yyyy}_Week_{weekOfYear}{@"\"}{_Logistics.DateTimeFromSequence:yyyy-MM-dd}"; + string destinationArchiveDirectory = Path.Combine(_JobIdArchiveParentDirectory, _Logistics.JobID, weekDirectory); if (!Directory.Exists(destinationArchiveDirectory)) _ = Directory.CreateDirectory(destinationArchiveDirectory); + string jobIdDirectory = Path.Combine(_JobIdParentDirectory, _Logistics.JobID); + if (!Directory.Exists(jobIdDirectory)) + _ = Directory.CreateDirectory(jobIdDirectory); string[] matchDirectories = new string[] { GetDirectoriesRecursively(jobIdDirectory, logisticsSequence).FirstOrDefault() }; if ((matchDirectories is null) || matchDirectories.Length != 1) throw new Exception("Didn't find directory by logistics sequence"); string sourceDirectory = Path.GetDirectoryName(matchDirectories[0]); - destinationArchiveDirectory = string.Concat(destinationArchiveDirectory, @"\", Path.GetFileName(sourceDirectory)); + destinationArchiveDirectory = Path.Combine(destinationArchiveDirectory, Path.GetFileName(sourceDirectory)); Directory.Move(sourceDirectory, destinationArchiveDirectory); } @@ -130,9 +144,10 @@ public class FileRead : Shared.FileRead, IFileRead SetFileParameterLotIDToLogisticsMID(); JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(pdsf); List descriptions = GetDuplicatorDescriptions(jsonElements); - Tuple>> tuple = GetTuple(this, descriptions, extra: false); - MoveArchive(dateTime); - results = new Tuple>(pdsf.Item1, tuple.Item1, jsonElements, new List()); + Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); + if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) + MoveArchive(dateTime); + results = new Tuple>(pdsf.Item1, tests, jsonElements, new List()); return results; } diff --git a/Adaptation/FileHandlers/CellInstanceConnectionName.cs b/Adaptation/FileHandlers/CellInstanceConnectionName.cs index 2f4234a..c44f11a 100644 --- a/Adaptation/FileHandlers/CellInstanceConnectionName.cs +++ b/Adaptation/FileHandlers/CellInstanceConnectionName.cs @@ -9,20 +9,20 @@ namespace Adaptation.FileHandlers; public class CellInstanceConnectionName { - internal static IFileRead Get(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) + internal static IFileRead Get(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, Dictionary> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) { IFileRead result = cellInstanceConnectionName switch { - nameof(Archive) => new Archive.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted), - nameof(Dummy) => new Dummy.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted), - nameof(IQSSi) => new IQSSi.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted), - nameof(MoveMatchingFiles) => new MoveMatchingFiles.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted), - nameof(OpenInsight) => new OpenInsight.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted), - nameof(OpenInsightMetrologyViewer) => new OpenInsightMetrologyViewer.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted), - nameof(OpenInsightMetrologyViewerAttachments) => new OpenInsightMetrologyViewerAttachments.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted), - nameof(Processed) => new Processed.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted), - nameof(APC) => new APC.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted), - nameof(SPaCe) => new SPaCe.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted), + nameof(Archive) => new Archive.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted), + nameof(Dummy) => new Dummy.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted), + nameof(IQSSi) => new IQSSi.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted), + nameof(MoveMatchingFiles) => new MoveMatchingFiles.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted), + nameof(OpenInsight) => new OpenInsight.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted), + nameof(OpenInsightMetrologyViewer) => new OpenInsightMetrologyViewer.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted), + nameof(OpenInsightMetrologyViewerAttachments) => new OpenInsightMetrologyViewerAttachments.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted), + nameof(Processed) => new Processed.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted), + nameof(APC) => new APC.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted), + nameof(SPaCe) => new SPaCe.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted), _ => throw new Exception($"\"{cellInstanceConnectionName}\" not mapped") }; return result; diff --git a/Adaptation/FileHandlers/Dummy/FileRead.cs b/Adaptation/FileHandlers/Dummy/FileRead.cs index 6ef5f81..7692d3d 100644 --- a/Adaptation/FileHandlers/Dummy/FileRead.cs +++ b/Adaptation/FileHandlers/Dummy/FileRead.cs @@ -23,12 +23,12 @@ public class FileRead : Shared.FileRead, IFileRead private int _LastDummyRunIndex; private readonly string[] _CellNames; - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : - base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, 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, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted) { _MinFileLength = 10; _NullData = string.Empty; - _Logistics = new Logistics(this); + _Logistics = new(this); if (_FileParameter is null) throw new Exception(cellInstanceConnectionName); if (_ModelObjectParameterDefinitions is null) @@ -51,7 +51,7 @@ public class FileRead : Shared.FileRead, IFileRead } } - void IFileRead.Move(Tuple> extractResults, Exception exception) => Move(extractResults, exception); + void IFileRead.Move(Tuple> extractResults, Exception exception) => Move(extractResults); void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); @@ -95,12 +95,6 @@ public class FileRead : Shared.FileRead, IFileRead Tuple> IFileRead.ReExtract() => throw new Exception(string.Concat("See ", nameof(CallbackFileExists))); - void IFileRead.CheckTests(Test[] tests, bool extra) - { - if (_Description is not Description) - throw new Exception(); - } - private void CallbackInProcessCleared(string sourceArchiveFile, string traceDummyFile, string targetFileLocation, string monARessource, string inProcessDirectory, long sequence, bool warning) { const string site = "sjc"; @@ -159,7 +153,7 @@ public class FileRead : Shared.FileRead, IFileRead if (!_DummyRuns[monARessource].Contains(sequence)) _DummyRuns[monARessource].Add(sequence); File.AppendAllLines(traceDummyFile, new string[] { sourceArchiveFile }); - string inProcessDirectory = Path.Combine(_ProgressPath, "Dummy In-Process", sequence.ToString()); + string inProcessDirectory = Path.Combine("_ProgressPath", "Dummy In-Process", sequence.ToString()); if (!Directory.Exists(inProcessDirectory)) _ = Directory.CreateDirectory(inProcessDirectory); files = Directory.GetFiles(inProcessDirectory, "*", SearchOption.AllDirectories); @@ -226,11 +220,11 @@ public class FileRead : Shared.FileRead, IFileRead if (!string.IsNullOrEmpty(Path.GetFileName(_FileConnectorConfiguration.SourceFileLocation))) sourceParentDirectory = Path.GetDirectoryName(_FileConnectorConfiguration.SourceFileLocation); else - sourceParentDirectory = Path.GetDirectoryName(Path.GetDirectoryName(_FileConnectorConfiguration.SourceFileLocation)); + sourceParentDirectory = GetParentParent(_FileConnectorConfiguration.SourceFileLocation); if (!string.IsNullOrEmpty(Path.GetFileName(_FileConnectorConfiguration.TargetFileLocation))) targetParentDirectory = Path.GetDirectoryName(_FileConnectorConfiguration.TargetFileLocation); else - targetParentDirectory = Path.GetDirectoryName(Path.GetDirectoryName(_FileConnectorConfiguration.TargetFileLocation)); + targetParentDirectory = GetParentParent(_FileConnectorConfiguration.TargetFileLocation); if (sourceParentDirectory != targetParentDirectory) throw new Exception("Target and source must have the same parent for Si Dummy FileConnectorConfiguration!"); bool check = dateTime.Hour > 7 && dateTime.Hour < 18 && dateTime.DayOfWeek != DayOfWeek.Sunday && dateTime.DayOfWeek != DayOfWeek.Saturday; diff --git a/Adaptation/FileHandlers/IQSSi/FileRead.cs b/Adaptation/FileHandlers/IQSSi/FileRead.cs index 3bc5239..6bbe58e 100644 --- a/Adaptation/FileHandlers/IQSSi/FileRead.cs +++ b/Adaptation/FileHandlers/IQSSi/FileRead.cs @@ -14,12 +14,12 @@ namespace Adaptation.FileHandlers.IQSSi; public class FileRead : Shared.FileRead, IFileRead { - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : - base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, 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, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted) { _MinFileLength = 10; _NullData = string.Empty; - _Logistics = new Logistics(this); + _Logistics = new(this); if (_FileParameter is null) throw new Exception(cellInstanceConnectionName); if (_ModelObjectParameterDefinitions is null) @@ -37,7 +37,7 @@ public class FileRead : Shared.FileRead, IFileRead if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime); } - Move(extractResults, exception); + Move(extractResults); } void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); @@ -103,42 +103,33 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - void IFileRead.CheckTests(Test[] tests, bool extra) + private void FileCopy(string reportFullPath, DateTime dateTime) { - if (_Description is not Description) - throw new Exception(); - } - - private void CopyFileAndWait(string reportFullPath) - { - long ticks = DateTime.Now.Ticks; - string parentDirectory = Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(reportFullPath))); - string jobIdDirectory = Path.Combine(parentDirectory, _Logistics.JobID); - string jobIdDirectoryFile = Path.Combine(jobIdDirectory, Path.GetFileName(reportFullPath)); - string errFile = string.Concat(jobIdDirectoryFile, ".err"); - if (!Directory.Exists(jobIdDirectory)) - _ = Directory.CreateDirectory(jobIdDirectory); - File.Copy(reportFullPath, jobIdDirectoryFile); - for (int i = 0; i < int.MaxValue; i++) - { - if (File.Exists(errFile)) - throw new Exception(File.ReadAllText(errFile)); - if (!File.Exists(jobIdDirectoryFile)) - break; - if (new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds > _BreakAfterSeconds) - throw new Exception($"Not all files were consumned after {_BreakAfterSeconds} second(s)!"); - } + bool isDummyRun = false; + string successDirectory = string.Empty; + List<(Shared.Properties.IScopeInfo, string)> tuples = new(); + string duplicateDirectory = Path.Combine(_FileConnectorConfiguration.SourceFileLocation, _CellInstanceName); + if (!Directory.Exists(duplicateDirectory)) + _ = Directory.CreateDirectory(duplicateDirectory); + string duplicateFile = Path.Combine(duplicateDirectory, Path.GetFileName(reportFullPath)); + File.Copy(reportFullPath, duplicateFile, overwrite: true); + WaitForFileConsumption(dateTime, isDummyRun, successDirectory, duplicateDirectory, tuples, duplicateFile); } private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) { if (dateTime == DateTime.MinValue) { } - Tuple> results = new(string.Empty, null, null, new List()); + Tuple> results; Tuple pdsf = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(reportFullPath); _Logistics = new Logistics(reportFullPath, pdsf.Item1); SetFileParameterLotIDToLogisticsMID(); - CopyFileAndWait(reportFullPath); + JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(pdsf); + List descriptions = GetDuplicatorDescriptions(jsonElements); + Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); + if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) + FileCopy(reportFullPath, dateTime); + results = new Tuple>(pdsf.Item1, tests, jsonElements, new List()); return results; } diff --git a/Adaptation/FileHandlers/EDA/FileRead.cs b/Adaptation/FileHandlers/MoveMatchingFiles/FileRead.cs similarity index 86% rename from Adaptation/FileHandlers/EDA/FileRead.cs rename to Adaptation/FileHandlers/MoveMatchingFiles/FileRead.cs index 8524337..ad68b87 100644 --- a/Adaptation/FileHandlers/EDA/FileRead.cs +++ b/Adaptation/FileHandlers/MoveMatchingFiles/FileRead.cs @@ -8,18 +8,19 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text.Json; +using System.Threading; namespace Adaptation.FileHandlers.MoveMatchingFiles; public class FileRead : Shared.FileRead, IFileRead { - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : - base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, 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, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted) { _MinFileLength = 10; _NullData = string.Empty; - _Logistics = new Logistics(this); + _Logistics = new(this); if (_FileParameter is null) throw new Exception(cellInstanceConnectionName); if (_ModelObjectParameterDefinitions is null) @@ -37,7 +38,7 @@ public class FileRead : Shared.FileRead, IFileRead if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime); } - Move(extractResults, exception); + Move(extractResults); } void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); @@ -103,12 +104,6 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - void IFileRead.CheckTests(Test[] tests, bool extra) - { - if (_Description is not Description) - throw new Exception(); - } - private static List GetSearchDirectories(int numberLength, string parentDirectory) { List results = new(); @@ -158,8 +153,9 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - private void MoveCollection(long ticks, List<(string matchingFile, string checkFile)> collection) + private void MoveCollection(DateTime dateTime, List<(string matchingFile, string checkFile)> collection) { + long preWait; string errFile; string checkDirectory; foreach ((string matchingFile, string checkFile) in collection) @@ -169,35 +165,44 @@ public class FileRead : Shared.FileRead, IFileRead if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); File.Move(matchingFile, checkFile); + if (_FileConnectorConfiguration?.FileHandleWaitTime is null) + preWait = DateTime.Now.AddMilliseconds(1234).Ticks; + else + preWait = DateTime.Now.AddMilliseconds(_FileConnectorConfiguration.FileHandleWaitTime.Value).Ticks; + for (short i = 0; i < short.MaxValue; i++) + { + if (DateTime.Now.Ticks > preWait) + break; + Thread.Sleep(500); + } for (int i = 0; i < int.MaxValue; i++) { if (File.Exists(errFile)) throw new Exception(File.ReadAllText(errFile)); if (!File.Exists(checkFile)) break; - if (new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds > _BreakAfterSeconds) + if (new TimeSpan(DateTime.Now.Ticks - dateTime.Ticks).TotalSeconds > _BreakAfterSeconds) throw new Exception($"Not all files were consumned after {_BreakAfterSeconds} second(s)!"); + Thread.Sleep(500); } } } private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) { - if (dateTime == DateTime.MinValue) - { } Tuple> results = new(string.Empty, null, null, new List()); Tuple pdsf = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(reportFullPath); _Logistics = new Logistics(reportFullPath, pdsf.Item1); SetFileParameterLotIDToLogisticsMID(); int numberLength = 2; - long ticks = DateTime.Now.Ticks; - string parentDirectory = Path.GetDirectoryName(Path.GetDirectoryName(reportFullPath)); - List searchDirectories = GetSearchDirectories(numberLength, parentDirectory); + long ticks = dateTime.Ticks; + string parentParentDirectory = GetParentParent(reportFullPath); + List searchDirectories = GetSearchDirectories(numberLength, parentParentDirectory); List matchingFiles = GetMatchingFiles(ticks, reportFullPath, searchDirectories); if (matchingFiles.Count != searchDirectories.Count) throw new Exception($"Didn't find all files after {_BreakAfterSeconds} second(s)!"); - List<(string matchingFile, string checkFile)> collection = GetCollection(numberLength, parentDirectory, matchingFiles); - MoveCollection(ticks, collection); + List<(string matchingFile, string checkFile)> collection = GetCollection(numberLength, parentParentDirectory, matchingFiles); + MoveCollection(dateTime, collection); return results; } diff --git a/Adaptation/FileHandlers/OpenInsight/FileRead.cs b/Adaptation/FileHandlers/OpenInsight/FileRead.cs index c8c97d9..16b9fa6 100644 --- a/Adaptation/FileHandlers/OpenInsight/FileRead.cs +++ b/Adaptation/FileHandlers/OpenInsight/FileRead.cs @@ -14,12 +14,12 @@ namespace Adaptation.FileHandlers.OpenInsight; public class FileRead : Shared.FileRead, IFileRead { - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : - base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, 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, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted) { _MinFileLength = 10; _NullData = string.Empty; - _Logistics = new Logistics(this); + _Logistics = new(this); if (_FileParameter is null) throw new Exception(cellInstanceConnectionName); if (_ModelObjectParameterDefinitions is null) @@ -37,7 +37,7 @@ public class FileRead : Shared.FileRead, IFileRead if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime); } - Move(extractResults, exception); + Move(extractResults); } void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); @@ -103,20 +103,30 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - void IFileRead.CheckTests(Test[] tests, bool extra) + private static void SaveOpenInsightFile(string reportFullPath, DateTime dateTime, List descriptions, Test[] tests) { - if (_Description is not Description) - throw new Exception(); + if (reportFullPath is null) + { } + if (dateTime == DateTime.MinValue) + { } + if (descriptions is null) + { } + if (tests is null) + { } } private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) { - if (dateTime == DateTime.MinValue) - { } - Tuple> results = new(string.Empty, null, null, new List()); + Tuple> results; Tuple pdsf = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(reportFullPath); _Logistics = new Logistics(reportFullPath, pdsf.Item1); SetFileParameterLotIDToLogisticsMID(); + JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(pdsf); + List descriptions = GetDuplicatorDescriptions(jsonElements); + Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); + if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) + SaveOpenInsightFile(reportFullPath, dateTime, descriptions, tests); + results = new Tuple>(pdsf.Item1, tests, jsonElements, new List()); return results; } diff --git a/Adaptation/FileHandlers/OpenInsightMetrologyViewer/FileRead.cs b/Adaptation/FileHandlers/OpenInsightMetrologyViewer/FileRead.cs index 663e8ba..f1021d7 100644 --- a/Adaptation/FileHandlers/OpenInsightMetrologyViewer/FileRead.cs +++ b/Adaptation/FileHandlers/OpenInsightMetrologyViewer/FileRead.cs @@ -14,12 +14,12 @@ namespace Adaptation.FileHandlers.OpenInsightMetrologyViewer; public class FileRead : Shared.FileRead, IFileRead { - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : - base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, 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, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted) { _MinFileLength = 10; _NullData = string.Empty; - _Logistics = new Logistics(this); + _Logistics = new(this); if (_FileParameter is null) throw new Exception(cellInstanceConnectionName); if (_ModelObjectParameterDefinitions is null) @@ -37,7 +37,7 @@ public class FileRead : Shared.FileRead, IFileRead if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime); } - Move(extractResults, exception); + Move(extractResults); } void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); @@ -103,20 +103,26 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - void IFileRead.CheckTests(Test[] tests, bool extra) + private static void SendData(DateTime dateTime, List descriptions) { - if (_Description is not Description) - throw new Exception(); + if (dateTime == DateTime.MinValue) + { } + if (descriptions is null) + { } } private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) { - if (dateTime == DateTime.MinValue) - { } - Tuple> results = new(string.Empty, null, null, new List()); + Tuple> results; Tuple pdsf = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(reportFullPath); _Logistics = new Logistics(reportFullPath, pdsf.Item1); SetFileParameterLotIDToLogisticsMID(); + JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(pdsf); + List descriptions = GetDuplicatorDescriptions(jsonElements); + Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); + if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) + SendData(dateTime, descriptions); + results = new Tuple>(pdsf.Item1, tests, jsonElements, new List()); return results; } diff --git a/Adaptation/FileHandlers/OpenInsightMetrologyViewerAttachments/FileRead.cs b/Adaptation/FileHandlers/OpenInsightMetrologyViewerAttachments/FileRead.cs index 642d441..fdd81e3 100644 --- a/Adaptation/FileHandlers/OpenInsightMetrologyViewerAttachments/FileRead.cs +++ b/Adaptation/FileHandlers/OpenInsightMetrologyViewerAttachments/FileRead.cs @@ -14,12 +14,12 @@ namespace Adaptation.FileHandlers.OpenInsightMetrologyViewerAttachments; public class FileRead : Shared.FileRead, IFileRead { - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : - base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, 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, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted) { _MinFileLength = 10; _NullData = string.Empty; - _Logistics = new Logistics(this); + _Logistics = new(this); if (_FileParameter is null) throw new Exception(cellInstanceConnectionName); if (_ModelObjectParameterDefinitions is null) @@ -37,7 +37,7 @@ public class FileRead : Shared.FileRead, IFileRead if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime); } - Move(extractResults, exception); + Move(extractResults); } void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); @@ -103,20 +103,28 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - void IFileRead.CheckTests(Test[] tests, bool extra) + private static void PostOpenInsightMetrologyViewerAttachments(string reportFullPath, DateTime dateTime, List descriptions) { - if (_Description is not Description) - throw new Exception(); + if (reportFullPath is null) + { } + if (dateTime == DateTime.MinValue) + { } + if (descriptions is null) + { } } private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) { - if (dateTime == DateTime.MinValue) - { } - Tuple> results = new(string.Empty, null, null, new List()); + Tuple> results; Tuple pdsf = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(reportFullPath); _Logistics = new Logistics(reportFullPath, pdsf.Item1); SetFileParameterLotIDToLogisticsMID(); + JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(pdsf); + List descriptions = GetDuplicatorDescriptions(jsonElements); + Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); + if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) + PostOpenInsightMetrologyViewerAttachments(reportFullPath, dateTime, descriptions); + results = new Tuple>(pdsf.Item1, tests, jsonElements, new List()); return results; } diff --git a/Adaptation/FileHandlers/Processed/FileRead.cs b/Adaptation/FileHandlers/Processed/FileRead.cs index 5bb60ca..511481a 100644 --- a/Adaptation/FileHandlers/Processed/FileRead.cs +++ b/Adaptation/FileHandlers/Processed/FileRead.cs @@ -14,12 +14,12 @@ namespace Adaptation.FileHandlers.Processed; public class FileRead : Shared.FileRead, IFileRead { - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : - base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, 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, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted) { _MinFileLength = 10; _NullData = string.Empty; - _Logistics = new Logistics(this); + _Logistics = new(this); if (_FileParameter is null) throw new Exception(cellInstanceConnectionName); if (_ModelObjectParameterDefinitions is null) @@ -37,7 +37,7 @@ public class FileRead : Shared.FileRead, IFileRead if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime); } - Move(extractResults, exception); + Move(extractResults); } void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); @@ -103,20 +103,28 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - void IFileRead.CheckTests(Test[] tests, bool extra) + private static void DirectoryMove(string reportFullPath, DateTime dateTime, List descriptions) { - if (_Description is not Description) - throw new Exception(); + if (reportFullPath is null) + { } + if (dateTime == DateTime.MinValue) + { } + if (descriptions is null) + { } } private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) { - if (dateTime == DateTime.MinValue) - { } - Tuple> results = new(string.Empty, null, null, new List()); + Tuple> results; Tuple pdsf = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(reportFullPath); _Logistics = new Logistics(reportFullPath, pdsf.Item1); SetFileParameterLotIDToLogisticsMID(); + JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(pdsf); + List descriptions = GetDuplicatorDescriptions(jsonElements); + Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); + results = new Tuple>(pdsf.Item1, tests, jsonElements, new List()); + if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) + DirectoryMove(reportFullPath, dateTime, descriptions); return results; } diff --git a/Adaptation/FileHandlers/SPaCe/FileRead.cs b/Adaptation/FileHandlers/SPaCe/FileRead.cs index 017d2c6..15a6c20 100644 --- a/Adaptation/FileHandlers/SPaCe/FileRead.cs +++ b/Adaptation/FileHandlers/SPaCe/FileRead.cs @@ -14,12 +14,12 @@ namespace Adaptation.FileHandlers.SPaCe; public class FileRead : Shared.FileRead, IFileRead { - public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : - base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, 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, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted) { _MinFileLength = 10; _NullData = string.Empty; - _Logistics = new Logistics(this); + _Logistics = new(this); if (_FileParameter is null) throw new Exception(cellInstanceConnectionName); if (_ModelObjectParameterDefinitions is null) @@ -37,7 +37,7 @@ public class FileRead : Shared.FileRead, IFileRead if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime); } - Move(extractResults, exception); + Move(extractResults); } void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); @@ -103,20 +103,31 @@ public class FileRead : Shared.FileRead, IFileRead return results; } - void IFileRead.CheckTests(Test[] tests, bool extra) + private void FileCopy(string reportFullPath, DateTime dateTime) { - if (_Description is not Description) - throw new Exception(); + bool isDummyRun = false; + string successDirectory = string.Empty; + List<(Shared.Properties.IScopeInfo, string)> tuples = new(); + string duplicateDirectory = _FileConnectorConfiguration.TargetFileLocation; + string duplicateFile = Path.Combine(duplicateDirectory, Path.GetFileName(reportFullPath)); + File.Copy(reportFullPath, duplicateFile, overwrite: true); + WaitForFileConsumption(dateTime, isDummyRun, successDirectory, duplicateDirectory, tuples, duplicateFile); } private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) { if (dateTime == DateTime.MinValue) { } - Tuple> results = new(string.Empty, null, null, new List()); + Tuple> results; Tuple pdsf = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(reportFullPath); _Logistics = new Logistics(reportFullPath, pdsf.Item1); SetFileParameterLotIDToLogisticsMID(); + JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(pdsf); + List descriptions = GetDuplicatorDescriptions(jsonElements); + Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); + if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) + FileCopy(reportFullPath, dateTime); + results = new Tuple>(pdsf.Item1, tests, jsonElements, new List()); return results; } diff --git a/Adaptation/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs b/Adaptation/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs index 9d9aa53..57475d5 100644 --- a/Adaptation/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs +++ b/Adaptation/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs @@ -1,5 +1,4 @@ using Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes; -using System; using System.Collections.Generic; namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.SelfDescription; diff --git a/Adaptation/MET08ANLYSDIFAAST230.Tests.csproj b/Adaptation/MET08ANLYSDIFAAST230.Tests.csproj index 93e2826..1ac6e3f 100644 --- a/Adaptation/MET08ANLYSDIFAAST230.Tests.csproj +++ b/Adaptation/MET08ANLYSDIFAAST230.Tests.csproj @@ -6,12 +6,12 @@ SAK - enable + disable + false 10.0 disable win-x64 net6.0 - false trx @@ -34,20 +34,20 @@ - + - + - - + + - - + + @@ -57,12 +57,15 @@ - - - + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + - - + + diff --git a/Adaptation/Shared/FileRead.cs b/Adaptation/Shared/FileRead.cs index 6127ed5..d91b636 100644 --- a/Adaptation/Shared/FileRead.cs +++ b/Adaptation/Shared/FileRead.cs @@ -33,8 +33,6 @@ public class FileRead : Properties.IFileRead protected readonly bool _IsDuplicator; protected readonly Calendar _Calendar; protected readonly bool _IsSourceTimer; - protected readonly string _VillachPath; - protected readonly string _ProgressPath; protected readonly string _EquipmentType; protected readonly long _BreakAfterSeconds; protected readonly string _ExceptionSubject; @@ -46,6 +44,7 @@ public class FileRead : Properties.IFileRead protected readonly string _CellInstanceConnectionNameBase; protected readonly Dictionary> _DummyRuns; protected readonly Dictionary _FileParameter; + protected readonly Dictionary> _StaticRuns; protected readonly string _ParameterizedModelObjectDefinitionType; protected readonly FileConnectorConfiguration _FileConnectorConfiguration; protected readonly IList _ModelObjectParameterDefinitions; @@ -63,12 +62,13 @@ public class FileRead : Properties.IFileRead string Properties.IFileRead.CellInstanceConnectionName => _CellInstanceConnectionName; string Properties.IFileRead.ParameterizedModelObjectDefinitionType => _ParameterizedModelObjectDefinitionType; - public FileRead(IDescription description, bool isEvent, ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) + public FileRead(IDescription description, bool isEvent, ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, Dictionary> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) { _SMTP = smtp; _IsEvent = isEvent; _DummyRuns = dummyRuns; _LastTicksDuration = 0; + _StaticRuns = staticRuns; _IsEAFHosted = isEAFHosted; _Description = description; _FileParameter = fileParameter; @@ -84,6 +84,7 @@ public class FileRead : Properties.IFileRead _IsSourceTimer = fileConnectorConfiguration.SourceFileFilter.StartsWith("*Timer.txt"); string cellInstanceConnectionNameBase = cellInstanceConnectionName.Replace("-", string.Empty); _Hyphens = cellInstanceConnectionName.Length - cellInstanceConnectionNameBase.Length; + _TracePath = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Path.Trace"); _ExceptionSubject = string.Concat("Exception:", _CellInstanceConnectionName, _FileConnectorConfiguration?.SourceDirectoryCloaking); string suffix; string[] segments = _ParameterizedModelObjectDefinitionType.Split('.'); @@ -100,27 +101,21 @@ public class FileRead : Properties.IFileRead string parameterizedModelObjectDefinitionTypeAppended = string.Concat(@namespace, suffix); if (!isEAFHosted) { - // if (string.IsNullOrEmpty(equipmentTypeName) || equipmentTypeName != parameterizedModelObjectDefinitionTypeAppended) - // throw new Exception(cellInstanceConnectionName); - // if (string.IsNullOrEmpty(equipmentDictionaryName) && isEvent) - // throw new Exception(cellInstanceConnectionName); - // if (!string.IsNullOrEmpty(equipmentDictionaryName) && !isEvent) - // throw new Exception(cellInstanceConnectionName); + if (string.IsNullOrEmpty(equipmentTypeName) || equipmentTypeName != parameterizedModelObjectDefinitionTypeAppended) + throw new Exception(cellInstanceConnectionName); + if (string.IsNullOrEmpty(equipmentDictionaryName) && isEvent) + throw new Exception(cellInstanceConnectionName); + if (!string.IsNullOrEmpty(equipmentDictionaryName) && !isEvent) + throw new Exception(cellInstanceConnectionName); // if (string.IsNullOrEmpty(equipmentDictionaryName) && !isEvent) // throw new Exception(cellInstanceConnectionName); // if (!string.IsNullOrEmpty(equipmentDictionaryName) && isEvent) // throw new Exception(cellInstanceConnectionName); } - ModelObjectParameterDefinition[] paths = GetProperties(cellInstanceConnectionName, modelObjectParameters, "Path."); - if (paths.Length < 4) - throw new Exception(cellInstanceConnectionName); if (isDuplicator) _MesEntity = string.Empty; else _MesEntity = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, string.Concat("CellInstance.", cellInstanceName, ".Alias")); - _TracePath = (from l in paths where l.Name.EndsWith("Trace") select l.Value).FirstOrDefault(); - _VillachPath = (from l in paths where l.Name.EndsWith("Villach") select l.Value).FirstOrDefault(); - _ProgressPath = (from l in paths where l.Name.EndsWith("Progress") select l.Value).FirstOrDefault(); _EventName = eventName; _EventNameFileRead = eventNameFileRead; _EquipmentType = parameterizedModelObjectDefinitionTypeAppended; @@ -185,6 +180,7 @@ public class FileRead : Properties.IFileRead if (ticksDuration < 50000000) ticksDuration = 50000000; _LastTicksDuration = (long)Math.Ceiling(ticksDuration * .667); + _Log.Info($"{new TimeSpan(ticksDuration).TotalMilliseconds} TotalMillisecond(s) to process{Environment.NewLine}{_CellInstanceConnectionName}{Environment.NewLine}<{_ReportFullPath}>"); } protected void WaitForThread(Thread thread, List threadExceptions) @@ -218,35 +214,16 @@ public class FileRead : Properties.IFileRead } } - protected void CreateProgressDirectory(string[] exceptionLines) + private void WriteAllLines(string to, string[] exceptionLines) { - string progressDirectory; - StringBuilder stringBuilder = new(); - if (_Hyphens == 0) - progressDirectory = Path.Combine(_ProgressPath, _CellInstanceConnectionName); - else + string fileName = string.Concat(to, @"\readme.txt"); + try { - _ = stringBuilder.Clear(); - for (int i = 0; i < _Hyphens; i++) - { - if (i > 0 && (i % 2) == 0) - _ = stringBuilder.Append(' '); - _ = stringBuilder.Append('-'); - } - progressDirectory = string.Concat(_ProgressPath, @"\", (_Hyphens + 1).ToString().PadLeft(2, '0'), " ", stringBuilder).Trim(); - } - DateTime dateTime = DateTime.Now; - string weekOfYear = _Calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); - progressDirectory = string.Concat(progressDirectory, @"\", dateTime.ToString("yyyy"), "_Week_", weekOfYear, @"\", _Logistics.MID, "_", _Logistics.Sequence, "_", DateTime.Now.Ticks - _Logistics.Sequence); - if (!Directory.Exists(progressDirectory)) - _ = Directory.CreateDirectory(progressDirectory); - if (exceptionLines is not null) - { - string fileName = string.Concat(progressDirectory, @"\readme.txt"); - try - { File.WriteAllLines(fileName, exceptionLines); } - catch (Exception) { } + if (!Directory.Exists(to)) + _ = Directory.CreateDirectory(to); + File.WriteAllLines(fileName, exceptionLines); } + catch (Exception ex) { _Log.Error(ex.Message); } } protected string[] Move(Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception) @@ -260,7 +237,8 @@ public class FileRead : Properties.IFileRead else { results = new string[] { _Logistics.Sequence.ToString(), _Logistics.ReportFullPath, from, resolvedFileLocation, to, string.Empty, string.Empty, exception.Message, string.Empty, string.Empty, exception.StackTrace }; - Shared0449(to, results); + if (!_IsDuplicator) + WriteAllLines(to, results); } if (extractResults is not null && extractResults.Item4 is not null && extractResults.Item4.Any()) { @@ -281,64 +259,6 @@ public class FileRead : Properties.IFileRead return results; } - protected static IEnumerable GetDirectoriesRecursively(string path, string directoryNameSegment = null) - { - Queue queue = new(); - queue.Enqueue(path); - while (queue.Count > 0) - { - path = queue.Dequeue(); - foreach (string subDirectory in Directory.GetDirectories(path)) - { - queue.Enqueue(subDirectory); - if (string.IsNullOrEmpty(directoryNameSegment) || Path.GetFileName(subDirectory).Contains(directoryNameSegment)) - yield return subDirectory; - } - } - } - - protected string GetProcessedDirectory(string progressPath, Logistics logistics, DateTime dateTime, string duplicateDirectory) - { - string result = duplicateDirectory; - string logisticsSequence = logistics.Sequence.ToString(); - string[] matchDirectories; - if (!_IsEAFHosted) - matchDirectories = new string[] { Path.GetDirectoryName(Path.GetDirectoryName(logistics.ReportFullPath)) }; - else - matchDirectories = new string[] { GetDirectoriesRecursively(Path.GetDirectoryName(progressPath), logisticsSequence).FirstOrDefault() }; - if (matchDirectories.Length == 0 || string.IsNullOrEmpty(matchDirectories[0])) - matchDirectories = Directory.GetDirectories(duplicateDirectory, string.Concat('*', logisticsSequence, '*'), SearchOption.AllDirectories); - if ((matchDirectories is null) || matchDirectories.Length != 1) - throw new Exception("Didn't find directory by logistics sequence"); - if (!matchDirectories[0].Contains("_processed")) - { - result = string.Concat(matchDirectories[0].Split(new string[] { logisticsSequence }, StringSplitOptions.None)[0], logistics.DateTimeFromSequence.ToString("yyyy-MM-dd_hh;mm_tt_"), dateTime.Ticks - logistics.Sequence, "_processed"); - Directory.Move(matchDirectories[0], result); - result = string.Concat(result, @"\", logistics.Sequence); - if (!Directory.Exists(result)) - _ = Directory.CreateDirectory(result); - } - return result; - } - - protected string WriteScopeInfo(string progressPath, Logistics logistics, DateTime dateTime, string duplicateDirectory, List> tuples) - { - string result = GetProcessedDirectory(progressPath, logistics, dateTime, duplicateDirectory); - string tupleFile; - string fileName = Path.GetFileNameWithoutExtension(logistics.ReportFullPath); - string duplicateFile = string.Concat(result, @"\", fileName, ".pdsf"); - foreach (Tuple tuple in tuples) - { - if (tuple.Item1.FileName.StartsWith(@"\")) - tupleFile = tuple.Item1.FileName; - else - tupleFile = string.Concat(result, @"\", fileName, "_", tuple.Item1.FileNameWithoutExtension, ".pdsfc"); - File.WriteAllText(tupleFile, tuple.Item2); - } - File.Copy(logistics.ReportFullPath, duplicateFile, overwrite: true); - return result; - } - protected static string GetTupleFile(Logistics logistics, Properties.IScopeInfo scopeInfo, string duplicateDirectory) { string result; @@ -371,7 +291,7 @@ public class FileRead : Properties.IFileRead return result; } - protected void WaitForFileConsumption(string sourceDirectoryCloaking, Logistics logistics, DateTime dateTime, string successDirectory, string duplicateDirectory, string duplicateFile, List> tuples) + protected void WaitForFileConsumption(string sourceDirectoryCloaking, Logistics logistics, DateTime dateTime, string successDirectory, string duplicateDirectory, string duplicateFile, List<(Properties.IScopeInfo, string)> tuples) { bool check; long preWait; @@ -381,24 +301,24 @@ public class FileRead : Properties.IFileRead List consumedFileIndices = new(); bool moreThanAnHour = _BreakAfterSeconds > 3600; long breakAfter = dateTime.AddSeconds(_BreakAfterSeconds).Ticks; - if (moreThanAnHour) - preWait = dateTime.AddSeconds(30).Ticks; + if (_FileConnectorConfiguration?.FileHandleWaitTime is null) + preWait = dateTime.AddMilliseconds(1234).Ticks; else - preWait = dateTime.AddTicks(_LastTicksDuration).Ticks; + preWait = dateTime.AddMilliseconds(_FileConnectorConfiguration.FileHandleWaitTime.Value).Ticks; if (!tuples.Any()) duplicateFiles.Add(duplicateFile); string fileName = Path.GetFileNameWithoutExtension(logistics.ReportFullPath); string successFile = string.Concat(successDirectory, @"\", Path.GetFileName(logistics.ReportFullPath)); - foreach (Tuple tuple in tuples) + foreach ((Properties.IScopeInfo scopeInfo, string text) in tuples) { - if (tuple.Item1.FileName.StartsWith(@"\")) - tupleFile = tuple.Item1.FileName; - else if (!tuple.Item1.FileName.Contains('%')) - tupleFile = string.Concat(duplicateDirectory, @"\", fileName, "_", tuple.Item1.FileNameWithoutExtension, ".pdsfc"); + if (scopeInfo.FileName.StartsWith(@"\")) + tupleFile = scopeInfo.FileName; + else if (!scopeInfo.FileName.Contains('%')) + tupleFile = string.Concat(duplicateDirectory, @"\", fileName, "_", scopeInfo.FileNameWithoutExtension, ".pdsfc"); else - tupleFile = GetTupleFile(logistics, tuple.Item1, duplicateDirectory); + tupleFile = GetTupleFile(logistics, scopeInfo, duplicateDirectory); duplicateFiles.Add(tupleFile); - File.WriteAllText(tupleFile, tuple.Item2); + File.WriteAllText(tupleFile, text); } for (short i = 0; i < short.MaxValue; i++) { @@ -484,7 +404,7 @@ public class FileRead : Properties.IFileRead { string directory; if (!_CellInstanceConnectionName.StartsWith(_CellInstanceName) && _CellInstanceConnectionNameBase == _EquipmentType) - directory = Path.Combine(_VillachPath, _EquipmentType, "Target"); + directory = Path.Combine(_TracePath, _EquipmentType, "Target", _CellInstanceName, _CellInstanceConnectionName); else directory = Path.Combine(_TracePath, _EquipmentType, "Source", _CellInstanceName, _CellInstanceConnectionName); if (!Directory.Exists(directory)) @@ -500,14 +420,8 @@ public class FileRead : Properties.IFileRead } } - protected void Move(Tuple> extractResults, Exception exception) + protected void Move(Tuple> extractResults) { - bool isErrorFile = exception is not null; - if (!isErrorFile && _IsDuplicator) - { - if (_IsEAFHosted && !string.IsNullOrEmpty(_ProgressPath)) - CreateProgressDirectory(exceptionLines: null); - } if (!_IsEAFHosted) { string to; @@ -585,20 +499,6 @@ public class FileRead : Properties.IFileRead return results; } - protected static Dictionary> GetKeyValuePairs(List descriptions) - { - Dictionary> results = new(); - Test testKey; - for (int i = 0; i < descriptions.Count; i++) - { - testKey = (Test)descriptions[i].Test; - if (!results.ContainsKey(testKey)) - results.Add(testKey, new List()); - results[testKey].Add(descriptions[i]); - } - return results; - } - protected static List GetDuplicatorDescriptions(JsonElement[] jsonElements) { List results = new(); @@ -614,34 +514,7 @@ public class FileRead : Properties.IFileRead return results; } - protected static Tuple>> GetTuple(IFileRead fileRead, IEnumerable descriptions, bool extra = false) - { - Tuple>> result; - Dictionary> keyValuePairs = GetKeyValuePairs(descriptions.ToList()); - Test[] tests = (from l in keyValuePairs select l.Key).ToArray(); - fileRead.CheckTests(tests, extra); - result = new Tuple>>(tests, keyValuePairs); - return result; - } - - protected void Shared0449(string to, string[] exceptionLines) - { - if (_IsDuplicator) - CreateProgressDirectory(exceptionLines: null); - else - { - string fileName = string.Concat(to, @"\readme.txt"); - try - { - if (!Directory.Exists(to)) - _ = Directory.CreateDirectory(to); - File.WriteAllLines(fileName, exceptionLines); - } - catch (Exception ex) { _Log.Error(ex.Message); } - } - } - - protected void Shared1880(string itemFile, List directories, FileInfo sourceFile, bool isErrorFile) + private void Shared1880(string itemFile, List directories, FileInfo sourceFile, bool isErrorFile) { string itemDirectory; directories.Add(Path.GetDirectoryName(sourceFile.FullName)); @@ -676,7 +549,7 @@ public class FileRead : Properties.IFileRead } } - protected void Shared1811(string to, FileInfo sourceFile) + private void Shared1811(string to, FileInfo sourceFile) { if (!_IsDuplicator && _FileConnectorConfiguration.SourceFileFilter != "*" && sourceFile.Exists && sourceFile.Length < _MinFileLength) { @@ -684,7 +557,7 @@ public class FileRead : Properties.IFileRead string jobIdDirectory = Path.GetDirectoryName(to); DateTime dateTime = DateTime.Now.AddMinutes(-15); string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); - string weekDirectory = string.Concat(_Logistics.DateTimeFromSequence.ToString("yyyy"), "_Week_", weekOfYear, @"\", _Logistics.DateTimeFromSequence.ToString("yyyy-MM-dd")); + string weekDirectory = $"{_Logistics.DateTimeFromSequence:yyyy}_Week_{weekOfYear}{@"\"}{_Logistics.DateTimeFromSequence:yyyy-MM-dd}"; string destinationDirectory = string.Concat(jobIdDirectory, @"\_ Ignore 100 bytes\", weekDirectory, @"\", directoryName); if (!Directory.Exists(destinationDirectory)) _ = Directory.CreateDirectory(destinationDirectory); @@ -713,7 +586,7 @@ public class FileRead : Properties.IFileRead } } - protected void Shared0231(List directories) + private void Shared0231(List directories) { if (_FileConnectorConfiguration.PostProcessingMode != FileConnectorConfiguration.PostProcessingModeEnum.Copy) { @@ -725,13 +598,13 @@ public class FileRead : Properties.IFileRead } } - protected void Shared0413(DateTime dateTime, bool isDummyRun, string successDirectory, string duplicateDirectory, List> tuples, string duplicateFile) + protected void WaitForFileConsumption(DateTime dateTime, bool isDummyRun, string successDirectory, string duplicateDirectory, List<(Properties.IScopeInfo, string)> tuples, string duplicateFile) { if (!isDummyRun && _IsEAFHosted) WaitForFileConsumption(_FileConnectorConfiguration.SourceDirectoryCloaking, _Logistics, dateTime, successDirectory, duplicateDirectory, duplicateFile, tuples); else { - long breakAfter = DateTime.Now.AddSeconds(_FileConnectorConfiguration.ConnectionRetryInterval.Value).Ticks; + long breakAfter = DateTime.Now.AddSeconds(_FileConnectorConfiguration.FileHandleWaitTime.Value).Ticks; for (short i = 0; i < short.MaxValue; i++) { if (!_IsEAFHosted || DateTime.Now.Ticks > breakAfter) @@ -741,75 +614,50 @@ public class FileRead : Properties.IFileRead } } - protected static void Shared0607(string reportFullPath, string duplicateDirectory, string logisticsSequence, string destinationDirectory) + internal static string GetJobIdParentDirectory(string directory) { - if (destinationDirectory == duplicateDirectory) - throw new Exception("Check Target File Folder for %LotIDWithLogisticsSequence%_in process on CI (not Duplicator)"); - if (destinationDirectory.EndsWith(logisticsSequence)) - destinationDirectory = Path.GetDirectoryName(destinationDirectory); - string[] deleteFiles = Directory.GetFiles(destinationDirectory, "*", SearchOption.AllDirectories); - if (deleteFiles.Length > 250) - throw new Exception("Safety net!"); - foreach (string file in deleteFiles) - File.Delete(file); - Directory.Delete(destinationDirectory, recursive: true); - File.Delete(reportFullPath); + string result; + if (!string.IsNullOrEmpty(Path.GetFileName(directory))) + result = Path.GetFullPath(GetParentParent(directory)); + else + result = Path.GetFullPath(GetParentParent(Path.GetDirectoryName(directory))); + if (!Directory.Exists(result)) + _ = Directory.CreateDirectory(result); + return result; } - protected string[] Shared1567(string reportFullPath, List> tuples) + internal string[] GetInProcessDirectory(string jobIdDirectory) { string[] results; - string historicalText; - string logisticsSequence = _Logistics.Sequence.ToString(); - string jobIdDirectory = string.Concat(Path.GetDirectoryName(Path.GetDirectoryName(_FileConnectorConfiguration.TargetFileLocation)), @"\", _Logistics.JobID); - if (!Directory.Exists(jobIdDirectory)) - _ = Directory.CreateDirectory(jobIdDirectory); - string[] matchDirectories; if (!_IsEAFHosted) - matchDirectories = new string[] { Path.GetDirectoryName(Path.GetDirectoryName(reportFullPath)) }; + results = new string[] { jobIdDirectory }; else - matchDirectories = Directory.GetDirectories(jobIdDirectory, string.Concat(_Logistics.MID, '*', logisticsSequence, '*'), SearchOption.TopDirectoryOnly); - if ((matchDirectories is null) || matchDirectories.Length != 1) - throw new Exception("Didn't find directory by logistics sequence"); - string fileName = Path.GetFileNameWithoutExtension(reportFullPath); - string sequenceDirectory = string.Concat(matchDirectories[0], @"\", logisticsSequence); - if (!Directory.Exists(sequenceDirectory)) - _ = Directory.CreateDirectory(sequenceDirectory); - foreach (Tuple tuple in tuples) { - fileName = string.Concat(sequenceDirectory, @"\", fileName, "_", tuple.Item1.FileNameWithoutExtension, ".pdsfc"); - if (_IsEAFHosted) - File.WriteAllText(fileName, tuple.Item2); - else - { - if (File.Exists(fileName)) - { - historicalText = File.ReadAllText(fileName); - if (tuple.Item2 != historicalText) - throw new Exception("File doesn't match historical!"); - } - } + string logisticsSequence = _Logistics.Sequence.ToString(); + results = Directory.GetDirectories(jobIdDirectory, string.Concat(_Logistics.MID, '*', logisticsSequence, '*'), SearchOption.TopDirectoryOnly); } - results = matchDirectories; + if ((results is null) || results.Length != 1) + throw new Exception("Didn't find directory by logistics sequence"); return results; } - protected void Shared1277(string reportFullPath, string destinationDirectory, string logisticsSequence, string jobIdDirectory, string json) + internal static string GetFileNameAfterUnderscoreSplit(string reportFullPath) { - string ecCharacterizationSi = Path.GetDirectoryName(Path.GetDirectoryName(jobIdDirectory)); - string destinationJobIdDirectory = string.Concat(ecCharacterizationSi, @"\Processed\", _Logistics.JobID); - if (!Directory.Exists(destinationJobIdDirectory)) - _ = Directory.CreateDirectory(destinationJobIdDirectory); - destinationJobIdDirectory = string.Concat(destinationJobIdDirectory, @"\", Path.GetFileName(destinationDirectory).Split(new string[] { logisticsSequence }, StringSplitOptions.None)[0], _Logistics.DateTimeFromSequence.ToString("yyyy-MM-dd_hh;mm_tt_"), DateTime.Now.Ticks - _Logistics.Sequence); - string sequenceDirectory = string.Concat(destinationJobIdDirectory, @"\", logisticsSequence); - string jsonFileName = string.Concat(sequenceDirectory, @"\", Path.GetFileNameWithoutExtension(reportFullPath), ".json"); - Directory.Move(destinationDirectory, destinationJobIdDirectory); - if (!Directory.Exists(sequenceDirectory)) - _ = Directory.CreateDirectory(sequenceDirectory); - File.Copy(reportFullPath, string.Concat(sequenceDirectory, @"\", Path.GetFileName(reportFullPath)), overwrite: true); - File.WriteAllText(jsonFileName, json); + string result; + string[] segments = Path.GetFileNameWithoutExtension(reportFullPath).Split('_'); + if (segments.Length <= 2) + result = segments[0]; + else + result = string.Concat(segments[0], segments[2]); + return result; + } + + internal static string GetParentParent(string value) + { + string result = Path.GetDirectoryName(Path.GetDirectoryName(value)); + return result; } } -// 2022-05-13 -> Shared - FileRead \ No newline at end of file +// 2022-06-08 -> Shared - FileRead \ No newline at end of file diff --git a/Adaptation/Shared/Methods/IFileRead.cs b/Adaptation/Shared/Methods/IFileRead.cs index 4d383c3..3d690c1 100644 --- a/Adaptation/Shared/Methods/IFileRead.cs +++ b/Adaptation/Shared/Methods/IFileRead.cs @@ -12,7 +12,6 @@ public interface IFileRead : Properties.IFileRead JsonProperty[] GetDefault(); string GetEventDescription(); List GetHeaderNames(); - void CheckTests(Test[] tests, bool extra); Dictionary GetDisplayNamesJsonElement(); Tuple> ReExtract(); List GetDescriptions(IFileRead fileRead, List tests, IProcessData processData); diff --git a/Adaptation/Shared/Metrology/WS.cs b/Adaptation/Shared/Metrology/WS.cs index ae43eb9..b892219 100644 --- a/Adaptation/Shared/Metrology/WS.cs +++ b/Adaptation/Shared/Metrology/WS.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; using System.Net.Http; using System.Text; using System.Text.Json; @@ -11,14 +10,14 @@ namespace Adaptation.Shared.Metrology; public partial class WS { - public static Tuple SendData(string url, object payload, int timeoutSeconds = 120) + public static (string, Results) SendData(string url, object payload, int timeoutSeconds = 120) { Results results = new(); string resultsJson = string.Empty; try { string json = JsonSerializer.Serialize(payload, payload.GetType()); - if (string.IsNullOrEmpty(url) || !url.Contains(':') || !url.Contains('.')) + if (string.IsNullOrEmpty(url) || !url.Contains(":") || !url.Contains(".")) throw new Exception("Invalid URL"); using (HttpClient httpClient = new()) { @@ -49,7 +48,7 @@ public partial class WS results.Errors = new List(); results.Errors.Add(stringBuilder.ToString()); } - return new Tuple(resultsJson, results); + return new(resultsJson, results); } // this method is a wrapper for attaching a file to either a header or data record diff --git a/Adaptation/Shared/ProcessDataStandardFormat.cs b/Adaptation/Shared/ProcessDataStandardFormat.cs index 251d1b4..9dcdb0a 100644 --- a/Adaptation/Shared/ProcessDataStandardFormat.cs +++ b/Adaptation/Shared/ProcessDataStandardFormat.cs @@ -12,8 +12,6 @@ namespace Adaptation.Shared; public class ProcessDataStandardFormat { - public const string RecordStart = "RECORD_START"; - public enum SearchFor { EquipmentIntegration = 1, @@ -348,8 +346,8 @@ public class ProcessDataStandardFormat int startsAt = 0; string[] segments; int? currentGroup = null; - char inputSeperator = '\t'; - char outputSeperator = '\t'; + char inputSeparator = '\t'; + char outputSeparator = '\t'; List vs = new(); List groups = new(); string[] lines = File.ReadAllLines(reportFullPath); @@ -358,7 +356,7 @@ public class ProcessDataStandardFormat { if (string.IsNullOrEmpty(lines[i])) continue; - segments = lines[i].Split(inputSeperator); + segments = lines[i].Split(inputSeparator); if (currentGroup is null) currentGroup = segments.Length; if (segments.Length != currentGroup) @@ -368,20 +366,20 @@ public class ProcessDataStandardFormat startsAt = i; } } - if (startsAt == lines.Length - 1 && lines[0].Split(inputSeperator).Length != currentGroup) + if (startsAt == lines.Length - 1 && lines[0].Split(inputSeparator).Length != currentGroup) groups.Add(new int[] { lines.Length - 1, lines.Length - 1 }); for (int g = 0; g < groups.Count; g++) { vs.Clear(); group = groups[g]; line = lines[group[0]]; - segments = line.Split(inputSeperator); + segments = line.Split(inputSeparator); for (int s = 0; s < segments.Length; s++) vs.Add(segments[s].Length); for (int i = group[0]; i <= group[1]; i++) { line = lines[i]; - segments = line.Split(inputSeperator); + segments = line.Split(inputSeparator); for (int s = 0; s < segments.Length; s++) { if (vs[s] < segments[s].Length) @@ -390,16 +388,16 @@ public class ProcessDataStandardFormat } _ = stringBuilder.Clear(); for (int s = 0; s < segments.Length; s++) - _ = stringBuilder.Append((s + 1).ToString().PadLeft(vs[s], ' ')).Append(outputSeperator); + _ = stringBuilder.Append((s + 1).ToString().PadLeft(vs[s], ' ')).Append(outputSeparator); _ = stringBuilder.Remove(stringBuilder.Length - 1, 1); results.Add(stringBuilder.ToString()); for (int i = group[0]; i <= group[1]; i++) { line = lines[i]; _ = stringBuilder.Clear(); - segments = line.Split(inputSeperator); + segments = line.Split(inputSeparator); for (int s = 0; s < segments.Length; s++) - _ = stringBuilder.Append(segments[s].PadLeft(vs[s], ' ')).Append(outputSeperator); + _ = stringBuilder.Append(segments[s].PadLeft(vs[s], ' ')).Append(outputSeparator); _ = stringBuilder.Remove(stringBuilder.Length - 1, 1); results.Add(stringBuilder.ToString()); } diff --git a/Adaptation/_Tests/CreateSelfDescription/Staging/v2.43.0/MET08ANLYSDIFAAST230.cs b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.43.0/MET08ANLYSDIFAAST230.cs index 6263ae4..19d7f69 100644 --- a/Adaptation/_Tests/CreateSelfDescription/Staging/v2.43.0/MET08ANLYSDIFAAST230.cs +++ b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.43.0/MET08ANLYSDIFAAST230.cs @@ -1,14 +1,10 @@ using Adaptation._Tests.Shared; -using Adaptation.Shared.Methods; using Microsoft.Extensions.Logging; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; -using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; -using System.Text.Json; -using System.Threading; namespace Adaptation._Tests.CreateSelfDescription.Staging.v2_43_0; @@ -57,7 +53,7 @@ public class MET08ANLYSDIFAAST230 : EAFLoggingUnitTesting string check = "*.pdsf"; MethodBase methodBase = new StackFrame().GetMethod(); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); - _ = Helpers.Metrology.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); + _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); } @@ -67,7 +63,7 @@ public class MET08ANLYSDIFAAST230 : EAFLoggingUnitTesting string check = "*.pdsf"; MethodBase methodBase = new StackFrame().GetMethod(); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); - _ = Helpers.Metrology.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); + _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); } @@ -77,7 +73,7 @@ public class MET08ANLYSDIFAAST230 : EAFLoggingUnitTesting string check = "*.pdsf"; MethodBase methodBase = new StackFrame().GetMethod(); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); - _ = Helpers.Metrology.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); + _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); } @@ -87,7 +83,7 @@ public class MET08ANLYSDIFAAST230 : EAFLoggingUnitTesting string check = "*.pdsf"; MethodBase methodBase = new StackFrame().GetMethod(); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); - _ = Helpers.Metrology.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); + _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); } @@ -97,7 +93,7 @@ public class MET08ANLYSDIFAAST230 : EAFLoggingUnitTesting string check = "*.pdsf"; MethodBase methodBase = new StackFrame().GetMethod(); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); - _ = Helpers.Metrology.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); + _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); } @@ -107,7 +103,7 @@ public class MET08ANLYSDIFAAST230 : EAFLoggingUnitTesting string check = "*.pdsf"; MethodBase methodBase = new StackFrame().GetMethod(); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); - _ = Helpers.Metrology.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); + _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); } @@ -117,7 +113,7 @@ public class MET08ANLYSDIFAAST230 : EAFLoggingUnitTesting string check = "*.pdsf"; MethodBase methodBase = new StackFrame().GetMethod(); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); - _ = Helpers.Metrology.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); + _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); } @@ -127,7 +123,7 @@ public class MET08ANLYSDIFAAST230 : EAFLoggingUnitTesting string check = "*.pdsf"; MethodBase methodBase = new StackFrame().GetMethod(); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); - _ = Helpers.Metrology.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); + _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); } @@ -137,7 +133,7 @@ public class MET08ANLYSDIFAAST230 : EAFLoggingUnitTesting string check = "*.pdsf"; MethodBase methodBase = new StackFrame().GetMethod(); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); - _ = Helpers.Metrology.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); + _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); } @@ -147,7 +143,7 @@ public class MET08ANLYSDIFAAST230 : EAFLoggingUnitTesting string check = "637400762024374000.zip"; MethodBase methodBase = new StackFrame().GetMethod(); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); - _ = Helpers.Metrology.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); + _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting); EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); } diff --git a/Adaptation/_Tests/Extract/Staging/v2.43.0/MET08ANLYSDIFAAST230.cs b/Adaptation/_Tests/Extract/Staging/v2.43.0/MET08ANLYSDIFAAST230.cs index 3c6adb3..d6901b3 100644 --- a/Adaptation/_Tests/Extract/Staging/v2.43.0/MET08ANLYSDIFAAST230.cs +++ b/Adaptation/_Tests/Extract/Staging/v2.43.0/MET08ANLYSDIFAAST230.cs @@ -1,15 +1,8 @@ -using Adaptation._Tests.Shared; using Adaptation.Shared; using Adaptation.Shared.Methods; -using Microsoft.Extensions.Logging; using Microsoft.VisualStudio.TestTools.UnitTesting; -using System; -using System.Collections.Generic; using System.Diagnostics; -using System.IO; using System.Reflection; -using System.Text.Json; -using System.Threading; namespace Adaptation._Tests.Extract.Staging.v2_43_0; @@ -41,7 +34,7 @@ public class MET08ANLYSDIFAAST230 string[] variables = _MET08ANLYSDIFAAST230.AdaptationTesting.GetVariables(methodBase, check); IFileRead fileRead = _MET08ANLYSDIFAAST230.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false); Logistics logistics = new(fileRead); - _ = Helpers.Metrology.ReExtractComapareUpdatePassDirectory(variables, fileRead, logistics); + _ = Shared.AdaptationTesting.ReExtractCompareUpdatePassDirectory(variables, fileRead, logistics, validatePDSF: false); } [TestMethod] @@ -50,6 +43,18 @@ public class MET08ANLYSDIFAAST230 [TestMethod] public void Staging__v2_43_0__MET08ANLYSDIFAAST230__IQSSi() => _MET08ANLYSDIFAAST230.Staging__v2_43_0__MET08ANLYSDIFAAST230__IQSSi(); + [TestMethod] + public void Staging__v2_43_0__MET08ANLYSDIFAAST230__IQSSi637884771880950000__Normal() + { + string check = "*.pdsf"; + MethodBase methodBase = new StackFrame().GetMethod(); + _MET08ANLYSDIFAAST230.Staging__v2_43_0__MET08ANLYSDIFAAST230__IQSSi(); + string[] variables = _MET08ANLYSDIFAAST230.AdaptationTesting.GetVariables(methodBase, check); + IFileRead fileRead = _MET08ANLYSDIFAAST230.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false); + Logistics logistics = new(fileRead); + _ = Shared.AdaptationTesting.ReExtractCompareUpdatePassDirectory(variables, fileRead, logistics, validatePDSF: false); + } + [TestMethod] public void Staging__v2_43_0__MET08ANLYSDIFAAST230__OpenInsight() => _MET08ANLYSDIFAAST230.Staging__v2_43_0__MET08ANLYSDIFAAST230__OpenInsight(); diff --git a/Adaptation/_Tests/Helpers/Metrology.cs b/Adaptation/_Tests/Helpers/Metrology.cs deleted file mode 100644 index 30ed92e..0000000 --- a/Adaptation/_Tests/Helpers/Metrology.cs +++ /dev/null @@ -1,192 +0,0 @@ -using Adaptation.Shared; -using Adaptation.Shared.Methods; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text.Json; - -namespace Adaptation._Tests.Helpers; - -public class Metrology -{ - - internal static Tuple GetLogisticsColumnsAndBody(string fileFullName) - { - Tuple results; - results = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(fileFullName); - Assert.IsFalse(string.IsNullOrEmpty(results.Item1)); - Assert.IsTrue(results.Item2.Length > 0, "Column check"); - Assert.IsTrue(results.Item3.Length > 0, "Body check"); - return results; - } - - internal static Tuple GetLogisticsColumnsAndBody(string searchDirectory, string searchPattern) - { - Tuple results; - if (searchPattern.Length > 3 && !searchPattern.Contains('*') && File.Exists(searchPattern)) - results = GetLogisticsColumnsAndBody(searchPattern); - else - { - string[] pdsfFiles; - pdsfFiles = Directory.GetFiles(searchDirectory, searchPattern, SearchOption.TopDirectoryOnly); - if (!pdsfFiles.Any()) - _ = Process.Start("explorer.exe", searchDirectory); - Assert.IsTrue(pdsfFiles.Any(), "GetFiles check"); - results = GetLogisticsColumnsAndBody(pdsfFiles[0]); - } - Assert.IsFalse(string.IsNullOrEmpty(results.Item1)); - Assert.IsTrue(results.Item2.Length > 0, "Column check"); - Assert.IsTrue(results.Item3.Length > 0, "Body check"); - return results; - } - - internal static Tuple GetLogisticsColumnsAndBody(IFileRead fileRead, Logistics logistics, Tuple> extractResult, Tuple pdsf) - { - Tuple results; - string text = ProcessDataStandardFormat.GetPDSFText(fileRead, logistics, extractResult.Item3, logisticsText: pdsf.Item1); - string[] lines = text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); - results = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(logistics.ReportFullPath, lines); - Assert.IsFalse(string.IsNullOrEmpty(results.Item1)); - Assert.IsTrue(results.Item2.Length > 0, "Column check"); - Assert.IsTrue(results.Item3.Length > 0, "Body check"); - return results; - } - - internal static string[] GetItem2(Tuple pdsf, Tuple pdsfNew) - { - JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true }; - string jsonOld = JsonSerializer.Serialize(pdsf.Item2, pdsf.Item2.GetType(), jsonSerializerOptions); - string jsonNew = JsonSerializer.Serialize(pdsfNew.Item2, pdsfNew.Item2.GetType(), jsonSerializerOptions); - return new string[] { jsonOld, jsonNew }; - } - - internal static string[] GetItem3(Tuple pdsf, Tuple pdsfNew) - { - string joinOld = string.Join(Environment.NewLine, from l in pdsf.Item3 select string.Join('\t', from t in l.Split('\t') where !t.Contains(@"\\") select t)); - string joinNew = string.Join(Environment.NewLine, from l in pdsfNew.Item3 select string.Join('\t', from t in l.Split('\t') where !t.Contains(@"\\") select t)); - return new string[] { joinOld, joinNew }; - } - - internal static void UpdatePassDirectory(string searchDirectory) - { - DateTime dateTime = DateTime.Now; - try - { Directory.SetLastWriteTime(searchDirectory, dateTime); } - catch (Exception) { } - string ticksDirectory = Path.GetDirectoryName(searchDirectory); - try - { Directory.SetLastWriteTime(ticksDirectory, dateTime); } - catch (Exception) { } - string[] directories = Directory.GetDirectories(searchDirectory, "*", SearchOption.TopDirectoryOnly); - foreach (string directory in directories) - { - try - { Directory.SetLastWriteTime(directory, dateTime); } - catch (Exception) { } - } - } - - internal static string GetFileName(MethodBase methodBase) - { - string result; - string connectionName; - string seperator = "__"; - string connectionNameAndTicks; - string[] segments = methodBase.Name.Split(new string[] { seperator }, StringSplitOptions.None); - string environment = segments[0]; - string rawVersionName = segments[1]; - string equipmentTypeDirectory = segments[2]; - string ticks = DateTime.Now.Ticks.ToString(); - string comment = segments[segments.Length - 1]; - string versionName = segments[1].Replace('_', '.'); - string before = string.Concat(environment, seperator, rawVersionName, seperator, equipmentTypeDirectory, seperator); - string after = methodBase.Name.Substring(before.Length); - if (after.Length < ticks.Length) - { - connectionName = after; - } - else - { - connectionNameAndTicks = after.Substring(0, after.Length - 2 - comment.Length); - connectionName = connectionNameAndTicks.Substring(0, connectionNameAndTicks.Length - ticks.Length); - ticks = connectionNameAndTicks.Substring(connectionName.Length); - } - result = Path.Combine(environment, equipmentTypeDirectory, versionName, $"{environment}__{rawVersionName}__{equipmentTypeDirectory}__{connectionName}", ticks, $"{connectionName.Replace('_', '-')}.json"); - if (result.Contains('/')) - result = string.Concat('/', result); - else - result = string.Concat('\\', result); - return result; - } - - internal static void CompareSaveTSV(string textFileDirectory, string[] join) - { - if (join[0] != join[1]) - { - _ = Process.Start("explorer.exe", textFileDirectory); - File.WriteAllText(Path.Combine(textFileDirectory, "0.tsv"), join[0]); - File.WriteAllText(Path.Combine(textFileDirectory, "1.tsv"), join[1]); - } - } - - internal static void CompareSaveJSON(string textFileDirectory, string[] json) - { - if (json[0] != json[1]) - { - _ = Process.Start("explorer.exe", textFileDirectory); - File.WriteAllText(Path.Combine(textFileDirectory, "0.json"), json[0]); - File.WriteAllText(Path.Combine(textFileDirectory, "1.json"), json[1]); - } - } - - internal static void CompareSave(string textFileDirectory, Tuple pdsf, Tuple pdsfNew) - { - if (pdsf.Item1 != pdsfNew.Item1) - { - _ = Process.Start("explorer.exe", textFileDirectory); - File.WriteAllText(Path.Combine(textFileDirectory, "0.dat"), pdsf.Item1); - File.WriteAllText(Path.Combine(textFileDirectory, "1.dat"), pdsfNew.Item1); - } - } - - internal static IFileRead GetWriteConfigurationGetFileRead(MethodBase methodBase, string check, Shared.AdaptationTesting adaptationTesting) - { - IFileRead result; - string[] fileNameAndJson = adaptationTesting.GetConfiguration(methodBase); - Assert.IsTrue(fileNameAndJson[1].Contains(check)); - File.WriteAllText(fileNameAndJson[0], fileNameAndJson[1]); - result = adaptationTesting.Get(methodBase, sourceFileLocation: string.Empty, sourceFileFilter: string.Empty, useCyclicalForDescription: false); - Assert.IsFalse(string.IsNullOrEmpty(result.CellInstanceConnectionName)); - return result; - } - - internal static string ReExtractComapareUpdatePassDirectory(string[] variables, IFileRead fileRead, Logistics logistics, bool validatePDSF = true) - { - string result; - Tuple> extractResult = fileRead.ReExtract(); - Assert.IsFalse(string.IsNullOrEmpty(extractResult?.Item1)); - Assert.IsTrue(extractResult.Item3.Length > 0, "extractResult Array Length check!"); - Assert.IsNotNull(extractResult.Item4); - Tuple pdsf = GetLogisticsColumnsAndBody(variables[2], variables[4]); - Tuple pdsfNew = GetLogisticsColumnsAndBody(fileRead, logistics, extractResult, pdsf); - if (validatePDSF) - { - CompareSave(variables[5], pdsf, pdsfNew); - Assert.IsTrue(pdsf.Item1 == pdsfNew.Item1, "Item1 check!"); - string[] json = GetItem2(pdsf, pdsfNew); - CompareSaveJSON(variables[5], json); - Assert.IsTrue(json[0] == json[1], "Item2 check!"); - string[] join = GetItem3(pdsf, pdsfNew); - CompareSaveTSV(variables[5], join); - Assert.IsTrue(join[0] == join[1], "Item3 (Join) check!"); - } - UpdatePassDirectory(variables[2]); - result = extractResult.Item1; - return result; - } - -} \ No newline at end of file diff --git a/Adaptation/_Tests/Shared/AdaptationTesting.cs b/Adaptation/_Tests/Shared/AdaptationTesting.cs index 1af6d2c..997a93e 100644 --- a/Adaptation/_Tests/Shared/AdaptationTesting.cs +++ b/Adaptation/_Tests/Shared/AdaptationTesting.cs @@ -5,6 +5,7 @@ using Adaptation._Tests.Shared.PasteSpecialXml.EAF.XML.API.EquipmentType; using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; using Adaptation.Ifx.Eaf.Common.Configuration; using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared; using Adaptation.Shared.Methods; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; @@ -175,20 +176,20 @@ public class AdaptationTesting : ISMTP string fileFullName; string comment; string[] textFiles; - string seperator = "__"; + string separator = "__"; string connectionNameAndTicks; string cellInstanceConnectionName; string ticks = DateTime.Now.Ticks.ToString(); string cellInstanceConnectionNameFromMethodBaseName; string testResultsDirectory = GetTestResultsDirectory(); - string[] segments = methodBaseName.Split(new string[] { seperator }, StringSplitOptions.None); + string[] segments = methodBaseName.Split(new string[] { separator }, StringSplitOptions.None); if (segments[0] != _Environment) throw new Exception(); string rawVersionName = segments[1]; string rawCellInstanceName = segments[2]; string cellInstanceVersionName = segments[1].Replace('_', '.'); string cellInstanceName = segments[2].Replace('_', '-').Replace("_EQPT", "-EQPT"); - string before = string.Concat(_Environment, seperator, rawVersionName, seperator, cellInstanceName, seperator); + string before = string.Concat(_Environment, separator, rawVersionName, separator, cellInstanceName, separator); string after = methodBaseName.Substring(before.Length); string versionDirectory = Path.Combine(testResultsDirectory, _Environment, cellInstanceName, cellInstanceVersionName); if (!Directory.Exists(versionDirectory)) @@ -555,7 +556,7 @@ public class AdaptationTesting : ISMTP Append("string check = \"").Append(check.Split('\\').Last()).AppendLine("\";"). AppendLine("MethodBase methodBase = new StackFrame().GetMethod();"). AppendLine("EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, \" - Getting configuration\"));"). - AppendLine("_ = Helpers.Metrology.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);"). + AppendLine("_ = Shared.AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);"). AppendLine("EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, \" - Exit\"));"). AppendLine("}"). AppendLine(); @@ -860,7 +861,7 @@ public class AdaptationTesting : ISMTP { Dictionary results = new() { - { nameof(Environment), _Environment }, + { nameof(System.Environment), _Environment }, { nameof(HostNameAndPort), _HostNameAndPort }, { nameof(cellInstanceName), cellInstanceName }, { nameof(equipmentTypeName), equipmentTypeName }, @@ -894,6 +895,7 @@ public class AdaptationTesting : ISMTP { string[] results; string[] segments = GetSegments(methodBase.Name); + string ticks = GetTicks(segments); FileInfo fileInfo = GetFileName(segments); string cellInstanceName = GetCellInstanceName(segments); string cellInstanceVersionName = GetCellInstanceVersionName(segments); @@ -902,6 +904,16 @@ public class AdaptationTesting : ISMTP _ = Directory.CreateDirectory(fileInfo.Directory.FullName); Tuple cellInstanceVersionTuple = GetCellInstanceVersionTuple(cellInstanceName, cellInstanceVersionName); Tuple fileConnectorConfigurationTuple = GetFileConnectorConfigurationTuple(cellInstanceVersionTuple, cellInstanceConnectionName); + if (string.IsNullOrEmpty(ticks) && fileConnectorConfigurationTuple.Item2?.FileScanningIntervalInSeconds is not null) + { + string fileScanningIntervalInSecondsLine; + string versionDirectory = Path.GetDirectoryName(fileInfo.DirectoryName); + if (fileConnectorConfigurationTuple.Item2.FileScanningIntervalInSeconds.Value < 0) + fileScanningIntervalInSecondsLine = $"-\t{fileConnectorConfigurationTuple.Item2.FileScanningIntervalInSeconds.Value:0000}\t{Path.GetFileName(fileInfo.DirectoryName)}"; + else + fileScanningIntervalInSecondsLine = $"+\t{fileConnectorConfigurationTuple.Item2.FileScanningIntervalInSeconds.Value:+0000}\t{Path.GetFileName(fileInfo.DirectoryName)}"; + File.AppendAllLines(Path.Combine(versionDirectory, "FileScanningIntervalInSeconds.txt"), new string[] { fileScanningIntervalInSecondsLine }); + } Tuple equipmentTypeVersionTuple = GetEquipmentTypeVersionTuple(cellInstanceVersionTuple.Item2, cellInstanceConnectionName); Tuple parameterizedModelObjectDefinitionTypeTuple = GetParameterizedModelObjectDefinitionTypeTuple(equipmentTypeVersionTuple); Tuple> modelObjectParametersTuple = GetModelObjectParameters(equipmentTypeVersionTuple); @@ -925,6 +937,7 @@ public class AdaptationTesting : ISMTP if (!string.IsNullOrEmpty(cellInstanceConnectionName) && !Directory.Exists(fileInfo.DirectoryName)) _ = Directory.CreateDirectory(fileInfo.Directory.FullName); Dictionary> dummyRuns = new(); + Dictionary> staticRuns = new(); Tuple cellInstanceVersionTuple = GetCellInstanceVersionTuple(cellInstanceName, cellInstanceVersionName); Tuple fileConnectorConfigurationTuple = GetFileConnectorConfigurationTuple(cellInstanceVersionTuple, cellInstanceConnectionName); Tuple equipmentTypeVersionTuple = GetEquipmentTypeVersionTuple(cellInstanceVersionTuple.Item2, cellInstanceConnectionName); @@ -939,7 +952,30 @@ public class AdaptationTesting : ISMTP fileConnectorConfigurationTuple.Item2.SourceFileFilter = sourceFileFilter; fileConnectorConfigurationTuple.Item2.SourceFileFilters = sourceFileFilter.Split('|').ToList(); } - result = FileHandlers.CellInstanceConnectionName.Get(this, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfigurationTuple.Item2, equipmentTypeVersionTuple.Item2, parameterizedModelObjectDefinitionTypeTuple.Item2, modelObjectParametersTuple.Item2, equipmentDictionaryVersionTuple.Item2, dummyRuns, useCyclicalForDescription, isEAFHosted: false); + if (_TestContext.FullyQualifiedTestClassName.Contains(nameof(Extract))) + { + if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.ErrorTargetFileLocation)) + { + if (!Directory.Exists(fileConnectorConfigurationTuple.Item2.ErrorTargetFileLocation)) + _ = Directory.CreateDirectory(fileConnectorConfigurationTuple.Item2.ErrorTargetFileLocation); + } + if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.SourceFileLocation)) + { + if (!Directory.Exists(fileConnectorConfigurationTuple.Item2.SourceFileLocation)) + _ = Directory.CreateDirectory(fileConnectorConfigurationTuple.Item2.SourceFileLocation); + } + if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.TargetFileLocation)) + { + if (!Directory.Exists(fileConnectorConfigurationTuple.Item2.TargetFileLocation)) + _ = Directory.CreateDirectory(fileConnectorConfigurationTuple.Item2.TargetFileLocation); + } + if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder)) + { + if (!Directory.Exists(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder)) + _ = Directory.CreateDirectory(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder); + } + } + result = FileHandlers.CellInstanceConnectionName.Get(this, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfigurationTuple.Item2, equipmentTypeVersionTuple.Item2, parameterizedModelObjectDefinitionTypeTuple.Item2, modelObjectParametersTuple.Item2, equipmentDictionaryVersionTuple.Item2, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: false); return result; } @@ -1042,6 +1078,183 @@ public class AdaptationTesting : ISMTP return results; } + internal static Tuple GetLogisticsColumnsAndBody(string fileFullName) + { + Tuple results; + results = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(fileFullName); + Assert.IsFalse(string.IsNullOrEmpty(results.Item1)); + Assert.IsTrue(results.Item2.Length > 0, "Column check"); + Assert.IsTrue(results.Item3.Length > 0, "Body check"); + return results; + } + + internal static Tuple GetLogisticsColumnsAndBody(string searchDirectory, string searchPattern) + { + Tuple results; + if (searchPattern.Length > 3 && !searchPattern.Contains('*') && File.Exists(searchPattern)) + results = GetLogisticsColumnsAndBody(searchPattern); + else + { + string[] pdsfFiles; + pdsfFiles = Directory.GetFiles(searchDirectory, searchPattern, SearchOption.TopDirectoryOnly); + if (!pdsfFiles.Any()) + _ = Process.Start("explorer.exe", searchDirectory); + Assert.IsTrue(pdsfFiles.Any(), "GetFiles check"); + results = GetLogisticsColumnsAndBody(pdsfFiles[0]); + } + Assert.IsFalse(string.IsNullOrEmpty(results.Item1)); + Assert.IsTrue(results.Item2.Length > 0, "Column check"); + Assert.IsTrue(results.Item3.Length > 0, "Body check"); + return results; + } + + internal static Tuple GetLogisticsColumnsAndBody(IFileRead fileRead, Logistics logistics, Tuple> extractResult, Tuple pdsf) + { + Tuple results; + string text = ProcessDataStandardFormat.GetPDSFText(fileRead, logistics, extractResult.Item3, logisticsText: pdsf.Item1); + string[] lines = text.Split(new string[] { System.Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + results = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(logistics.ReportFullPath, lines); + Assert.IsFalse(string.IsNullOrEmpty(results.Item1)); + Assert.IsTrue(results.Item2.Length > 0, "Column check"); + Assert.IsTrue(results.Item3.Length > 0, "Body check"); + return results; + } + + internal static string[] GetItem2(Tuple pdsf, Tuple pdsfNew) + { + JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true }; + string jsonOld = JsonSerializer.Serialize(pdsf.Item2, pdsf.Item2.GetType(), jsonSerializerOptions); + string jsonNew = JsonSerializer.Serialize(pdsfNew.Item2, pdsfNew.Item2.GetType(), jsonSerializerOptions); + return new string[] { jsonOld, jsonNew }; + } + + internal static string[] GetItem3(Tuple pdsf, Tuple pdsfNew) + { + string joinOld = string.Join(System.Environment.NewLine, from l in pdsf.Item3 select string.Join('\t', from t in l.Split('\t') where !t.Contains(@"\\") select t)); + string joinNew = string.Join(System.Environment.NewLine, from l in pdsfNew.Item3 select string.Join('\t', from t in l.Split('\t') where !t.Contains(@"\\") select t)); + return new string[] { joinOld, joinNew }; + } + + internal static void UpdatePassDirectory(string searchDirectory) + { + DateTime dateTime = DateTime.Now; + try + { Directory.SetLastWriteTime(searchDirectory, dateTime); } + catch (Exception) { } + string ticksDirectory = Path.GetDirectoryName(searchDirectory); + try + { Directory.SetLastWriteTime(ticksDirectory, dateTime); } + catch (Exception) { } + string[] directories = Directory.GetDirectories(searchDirectory, "*", SearchOption.TopDirectoryOnly); + foreach (string directory in directories) + { + try + { Directory.SetLastWriteTime(directory, dateTime); } + catch (Exception) { } + } + } + + internal static string GetFileName(MethodBase methodBase) + { + string result; + string connectionName; + string separator = "__"; + string connectionNameAndTicks; + string[] segments = methodBase.Name.Split(new string[] { separator }, StringSplitOptions.None); + string environment = segments[0]; + string rawVersionName = segments[1]; + string equipmentTypeDirectory = segments[2]; + string ticks = DateTime.Now.Ticks.ToString(); + string comment = segments[segments.Length - 1]; + string versionName = segments[1].Replace('_', '.'); + string before = string.Concat(environment, separator, rawVersionName, separator, equipmentTypeDirectory, separator); + string after = methodBase.Name.Substring(before.Length); + if (after.Length < ticks.Length) + { + connectionName = after; + } + else + { + connectionNameAndTicks = after.Substring(0, after.Length - 2 - comment.Length); + connectionName = connectionNameAndTicks.Substring(0, connectionNameAndTicks.Length - ticks.Length); + ticks = connectionNameAndTicks.Substring(connectionName.Length); + } + result = Path.Combine(environment, equipmentTypeDirectory, versionName, $"{environment}__{rawVersionName}__{equipmentTypeDirectory}__{connectionName}", ticks, $"{connectionName.Replace('_', '-')}.json"); + if (result.Contains('/')) + result = string.Concat('/', result); + else + result = string.Concat('\\', result); + return result; + } + + internal static void CompareSaveTSV(string textFileDirectory, string[] join) + { + if (join[0] != join[1]) + { + _ = Process.Start("explorer.exe", textFileDirectory); + File.WriteAllText(Path.Combine(textFileDirectory, "0.tsv"), join[0]); + File.WriteAllText(Path.Combine(textFileDirectory, "1.tsv"), join[1]); + } + } + + internal static void CompareSaveJSON(string textFileDirectory, string[] json) + { + if (json[0] != json[1]) + { + _ = Process.Start("explorer.exe", textFileDirectory); + File.WriteAllText(Path.Combine(textFileDirectory, "0.json"), json[0]); + File.WriteAllText(Path.Combine(textFileDirectory, "1.json"), json[1]); + } + } + + internal static void CompareSave(string textFileDirectory, Tuple pdsf, Tuple pdsfNew) + { + if (pdsf.Item1 != pdsfNew.Item1) + { + _ = Process.Start("explorer.exe", textFileDirectory); + File.WriteAllText(Path.Combine(textFileDirectory, "0.dat"), pdsf.Item1); + File.WriteAllText(Path.Combine(textFileDirectory, "1.dat"), pdsfNew.Item1); + } + } + + internal static IFileRead GetWriteConfigurationGetFileRead(MethodBase methodBase, string check, AdaptationTesting adaptationTesting) + { + IFileRead result; + string[] fileNameAndJson = adaptationTesting.GetConfiguration(methodBase); + Assert.IsTrue(fileNameAndJson[1].Contains(check)); + File.WriteAllText(fileNameAndJson[0], fileNameAndJson[1]); + result = adaptationTesting.Get(methodBase, sourceFileLocation: string.Empty, sourceFileFilter: string.Empty, useCyclicalForDescription: false); + Assert.IsFalse(string.IsNullOrEmpty(result.CellInstanceConnectionName)); + return result; + } + + internal static string ReExtractCompareUpdatePassDirectory(string[] variables, IFileRead fileRead, Logistics logistics, bool validatePDSF = true) + { + string result; + Tuple> extractResult = fileRead.ReExtract(); + Assert.IsFalse(string.IsNullOrEmpty(extractResult?.Item1)); + Assert.IsTrue(extractResult.Item3.Length > 0, "extractResult Array Length check!"); + Assert.IsNotNull(extractResult.Item4); + if (!validatePDSF) + _ = GetLogisticsColumnsAndBody(fileRead, logistics, extractResult, new(string.Empty, Array.Empty(), Array.Empty())); + else + { + Tuple pdsf = GetLogisticsColumnsAndBody(variables[2], variables[4]); + Tuple pdsfNew = GetLogisticsColumnsAndBody(fileRead, logistics, extractResult, pdsf); + CompareSave(variables[5], pdsf, pdsfNew); + Assert.IsTrue(pdsf.Item1 == pdsfNew.Item1, "Item1 check!"); + string[] json = GetItem2(pdsf, pdsfNew); + CompareSaveJSON(variables[5], json); + Assert.IsTrue(json[0] == json[1], "Item2 check!"); + string[] join = GetItem3(pdsf, pdsfNew); + CompareSaveTSV(variables[5], join); + Assert.IsTrue(join[0] == join[1], "Item3 (Join) check!"); + } + UpdatePassDirectory(variables[2]); + result = extractResult.Item1; + return result; + } + } // namespace Adaptation._Tests.Helpers { public class AdaptationTesting { } } // 2022-05-12 -> AdaptationTesting \ No newline at end of file diff --git a/Adaptation/_Tests/Shared/Log/ConsoleLogger.cs b/Adaptation/_Tests/Shared/Log/ConsoleLogger.cs index 6b91bb6..8ea4d19 100644 --- a/Adaptation/_Tests/Shared/Log/ConsoleLogger.cs +++ b/Adaptation/_Tests/Shared/Log/ConsoleLogger.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using System; namespace Adaptation._Tests.Shared.Log; diff --git a/Adaptation/_Tests/Shared/Log/ConsoleProvider.cs b/Adaptation/_Tests/Shared/Log/ConsoleProvider.cs index 490f569..94cad4d 100644 --- a/Adaptation/_Tests/Shared/Log/ConsoleProvider.cs +++ b/Adaptation/_Tests/Shared/Log/ConsoleProvider.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using System; using System.Collections.Concurrent; namespace Adaptation._Tests.Shared.Log; diff --git a/Adaptation/_Tests/Shared/Log/DebugLogger.cs b/Adaptation/_Tests/Shared/Log/DebugLogger.cs index 08e1ba6..87e312d 100644 --- a/Adaptation/_Tests/Shared/Log/DebugLogger.cs +++ b/Adaptation/_Tests/Shared/Log/DebugLogger.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using System; namespace Adaptation._Tests.Shared.Log; diff --git a/Adaptation/_Tests/Shared/Log/DebugProvider.cs b/Adaptation/_Tests/Shared/Log/DebugProvider.cs index bd6a488..0511f67 100644 --- a/Adaptation/_Tests/Shared/Log/DebugProvider.cs +++ b/Adaptation/_Tests/Shared/Log/DebugProvider.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using System; using System.Collections.Concurrent; namespace Adaptation._Tests.Shared.Log; diff --git a/Adaptation/_Tests/Shared/Log/FeedbackLogger.cs b/Adaptation/_Tests/Shared/Log/FeedbackLogger.cs index 27d337a..5a6cabf 100644 --- a/Adaptation/_Tests/Shared/Log/FeedbackLogger.cs +++ b/Adaptation/_Tests/Shared/Log/FeedbackLogger.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using System; namespace Adaptation._Tests.Shared.Log; diff --git a/Adaptation/_Tests/Shared/Log/FeedbackProvider.cs b/Adaptation/_Tests/Shared/Log/FeedbackProvider.cs index cb3ea87..f207b9b 100644 --- a/Adaptation/_Tests/Shared/Log/FeedbackProvider.cs +++ b/Adaptation/_Tests/Shared/Log/FeedbackProvider.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using System; using System.Collections.Concurrent; namespace Adaptation._Tests.Shared.Log; diff --git a/Adaptation/_Tests/Shared/Log/IFeedback.cs b/Adaptation/_Tests/Shared/Log/IFeedback.cs index 8ba82fa..9cd7e79 100644 --- a/Adaptation/_Tests/Shared/Log/IFeedback.cs +++ b/Adaptation/_Tests/Shared/Log/IFeedback.cs @@ -1,4 +1,6 @@ -namespace Adaptation._Tests.Shared.Log; +using System.Collections.Generic; + +namespace Adaptation._Tests.Shared.Log; public interface IFeedback { diff --git a/Adaptation/_Tests/Shared/Log/Log.cs b/Adaptation/_Tests/Shared/Log/Log.cs index 7760fb9..8a57ac6 100644 --- a/Adaptation/_Tests/Shared/Log/Log.cs +++ b/Adaptation/_Tests/Shared/Log/Log.cs @@ -1,4 +1,7 @@ using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.IO; namespace Adaptation._Tests.Shared.Log; diff --git a/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/CellInstance.cs b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/CellInstance.cs index 1c8c8dc..77ac5ab 100644 --- a/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/CellInstance.cs +++ b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/CellInstance.cs @@ -1,4 +1,6 @@ -namespace Adaptation._Tests.Shared.PasteSpecialXml.EAF.XML.API.CellInstance; +using System; + +namespace Adaptation._Tests.Shared.PasteSpecialXml.EAF.XML.API.CellInstance; // NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0. /// diff --git a/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentDictionary.cs b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentDictionary.cs index b426395..040401c 100644 --- a/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentDictionary.cs +++ b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentDictionary.cs @@ -1,4 +1,6 @@ -namespace Adaptation._Tests.Shared.PasteSpecialXml.EAF.XML.API.EquipmentDictionary; +using System; + +namespace Adaptation._Tests.Shared.PasteSpecialXml.EAF.XML.API.EquipmentDictionary; // NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0. /// diff --git a/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentType.cs b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentType.cs index f6bdc85..ae223c9 100644 --- a/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentType.cs +++ b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentType.cs @@ -1,4 +1,6 @@ -namespace Adaptation._Tests.Shared.PasteSpecialXml.EAF.XML.API.EquipmentType; +using System; + +namespace Adaptation._Tests.Shared.PasteSpecialXml.EAF.XML.API.EquipmentType; // NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0. /// diff --git a/Adaptation/package.json b/Adaptation/package.json index cb498b4..7c289a0 100644 --- a/Adaptation/package.json +++ b/Adaptation/package.json @@ -1,22 +1,26 @@ { "scripts": { "Alpha": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "nuget-clear": "dotnet nuget locals all --clear", "build": "dotnet build --runtime win-x64 --self-contained", + "build-Package-Management": "dotnet build --runtime win-x64 --self-contained --source https://packagemanagement.eu.infineon.com:4430/api/v2/", + "build-nuget-And-Package-Management": "dotnet build --runtime win-x64 --self-contained --source https://api.nuget.org/v3/index.json --source https://packagemanagement.eu.infineon.com:4430/api/v2/", "build-All-Sources": "dotnet build --runtime win-x64 --self-contained --source https://api.nuget.org/v3/index.json --source https://packagemanagement.eu.infineon.com:4430/api/v2/ --source https://tfs.intra.infineon.com/tfs/ManufacturingIT/_packaging/eaf/nuget/v3/index.json --source http://192.168.0.73:5002/v3/index.json", "dotnet-format": "dotnet format --report .vscode --verbosity detailed --severity warn", - "MSBuild": "\"C:\\Program Files\\Microsoft Visual Studio\\2022\\Professional\\MSBuild\\Current\\Bin\\MSBuild.exe\" /target:Build /restore:True /p:RestoreSources=https://api.nuget.org/v3/index.json%3Bhttps://packagemanagement.eu.infineon.com:4430/api/v2/%3Bhttps://tfs.intra.infineon.com/tfs/ManufacturingIT/_packaging/eaf/nuget/v3/index.json /DetailedSummary /ConsoleLoggerParameters:PerformanceSummary;ErrorsOnly; /property:Configuration=Debug;TargetFrameworkVersion=v4.8 \"..\\MET08ANLYSDIFAAST230.csproj\"", + "MSBuild": "\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin/MSBuild.exe\" /target:Build /restore:True /p:RestoreSources=https://api.nuget.org/v3/index.json%3Bhttps://packagemanagement.eu.infineon.com:4430/api/v2/%3Bhttps://tfs.intra.infineon.com/tfs/ManufacturingIT/_packaging/eaf/nuget/v3/index.json /DetailedSummary /ConsoleLoggerParameters:PerformanceSummary;ErrorsOnly; /property:Configuration=Debug;TargetFrameworkVersion=v4.8 ../MET08ANLYSDIFAAST230.csproj", "pull": "git pull", "garbage-collect": "git gc", - "AT-CreateSelfDescription.Staging.v2_43_0-MET08ANLYSDIFAAST230": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_43_0 & ClassName~MET08ANLYSDIFAAST230\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", - "AX-CreateSelfDescription.Staging.v2_43_0-SPV01_EQPT": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_43_0 & ClassName~SPV01_EQPT\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", - "AY-CreateSelfDescription.Staging.v2_43_0-SPV01": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_43_0 & ClassName~SPV01\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", - "AZ-CreateSelfDescription.Staging.v2_43_0": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_43_0\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", - "BA-Extract.Staging.v2_43_0-MET08ANLYSDIFAAST230-Staging__v2_43_0__MET08ANLYSDIFAAST230__MoveMatchingFiles637710931421087642__Normal": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.Extract.Staging.v2_43_0 & ClassName~MET08ANLYSDIFAAST230 & Staging__v2_43_0__MET08ANLYSDIFAAST230__MoveMatchingFiles637710931421087642__Normal\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", - "BB-Extract.Staging.v2_43_0-SPV01-Staging__v2_43_0__SPV01__RsM643047560320000000__Normal": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.Extract.Staging.v2_43_0 & ClassName~SPV01 & Staging__v2_43_0__SPV01__RsM643047560320000000__Normal\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", - "BT-Extract.Staging.v2_43_0-MET08ANLYSDIFAAST230": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.Extract.Staging.v2_43_0 & ClassName~MET08ANLYSDIFAAST230\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", - "BX-Extract.Staging.v2_43_0-SPV01_EQPT": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.Extract.Staging.v2_43_0 & ClassName~SPV01_EQPT\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", - "BY-Extract.Staging.v2_43_0-SPV01": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.Extract.Staging.v2_43_0 & ClassName~SPV01\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", - "BZ-Extract.Staging.v2_43_0": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.Extract.Staging.v2_43_0\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "AT-CreateSelfDescription.Staging.v2_43_0-MET08ANLYSDIFAAST230": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_43_0 & ClassName~MET08ANLYSDIFAAST230\" -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "AX-CreateSelfDescription.Staging.v2_43_0-SPV01_EQPT": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_43_0 & ClassName~SPV01_EQPT\" -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "AY-CreateSelfDescription.Staging.v2_43_0-SPV01": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_43_0 & ClassName~SPV01\" -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "AZ-CreateSelfDescription.Staging.v2_43_0": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_43_0\" -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "BA-Extract.Staging.v2_43_0-MET08ANLYSDIFAAST230-Staging__v2_43_0__MET08ANLYSDIFAAST230__MoveMatchingFiles637710931421087642__Normal": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_43_0 & ClassName~MET08ANLYSDIFAAST230 & Name~Staging__v2_43_0__MET08ANLYSDIFAAST230__MoveMatchingFiles637710931421087642__Normal\" -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "BB-Extract.Staging.v2_43_0-MET08ANLYSDIFAAST230-Staging__v2_43_0__MET08ANLYSDIFAAST230__IQSSi637884771880950000__Normal": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_43_0 & ClassName~MET08ANLYSDIFAAST230 & Name~Staging__v2_43_0__MET08ANLYSDIFAAST230__IQSSi637884771880950000__Normal\" -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "BC-Extract.Staging.v2_43_0-SPV01-Staging__v2_43_0__SPV01__RsM643047560320000000__Normal": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_43_0 & ClassName~SPV01 & Name~Staging__v2_43_0__SPV01__RsM643047560320000000__Normal\" -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "BT-Extract.Staging.v2_43_0-MET08ANLYSDIFAAST230": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_43_0 & ClassName~MET08ANLYSDIFAAST230\" -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "BX-Extract.Staging.v2_43_0-SPV01_EQPT": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_43_0 & ClassName~SPV01_EQPT\" -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "BY-Extract.Staging.v2_43_0-SPV01": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_43_0 & ClassName~SPV01\" -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "BZ-Extract.Staging.v2_43_0": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_43_0\" -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", "EDA": "\\\\messv02ecc1.ec.local\\EC_EDA\\Staging\\PDSF\\MET08ANLYSDIFAAST230\\So~~~~~~~~~~~~~~~urce", "OpenInsightMetrologyViewer": "\\\\messv02ecc1.ec.local\\EC_EDA\\Staging\\PDSF\\MET08ANLYSDIFAAST230\\10~~~~~~~~~~~~~~~\\messv02ecc1.ec.local\\EC_Metrology_Si\\PDSF\\MET08ANLYSDIFAAST230\\Source", "IQSSi": "\\\\messv02ecc1.ec.local\\EC_EDA\\Staging\\PDSF\\MET08ANLYSDIFAAST230\\11~~~~~~~~~~~~~~~\\messv02ecc1.ec.local\\EC_SPC_Si\\PDSF\\MET08ANLYSDIFAAST230\\Source", diff --git a/FileHandlers/FileRead.cs b/FileHandlers/FileRead.cs index 5b367bb..7f2e2cb 100644 --- a/FileHandlers/FileRead.cs +++ b/FileHandlers/FileRead.cs @@ -37,8 +37,13 @@ public partial class FileRead : FileReaderHandler, ISMTP private FilePathGenerator _FilePathGeneratorForTarget; private readonly List _EquipmentParameters; private static readonly Dictionary> _DummyRuns; + private static readonly Dictionary> _StaticRuns; - static FileRead() => _DummyRuns = new Dictionary>(); + static FileRead() + { + _DummyRuns = new(); + _StaticRuns = new(); + } public FileRead() { @@ -192,7 +197,7 @@ public partial class FileRead : FileReaderHandler, ISMTP FileConnectorConfiguration fileConnectorConfiguration = Mapper.Map(Configuration); string parameterizedModelObjectDefinitionType = methodBase.DeclaringType.FullName; IList modelObjectParameters = Mapper.Map(ConfiguredParameters); - _FileRead = CellInstanceConnectionName.Get(this, FileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, _DummyRuns, _UseCyclicalForDescription, isEAFHosted: true); + _FileRead = CellInstanceConnectionName.Get(this, FileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, _DummyRuns, _StaticRuns, _UseCyclicalForDescription, isEAFHosted: true); if (_FileRead.IsEvent) AddParameterRangeAndEvent(); } @@ -333,7 +338,7 @@ public partial class FileRead : FileReaderHandler, ISMTP if (modelObjectParameterDefinitionJsonElement.ValueKind != JsonValueKind.Array) throw new Exception(); IList modelObjectParameters = JsonSerializer.Deserialize>(modelObjectParameterDefinitionJsonElement.ToString(), jsonSerializerOptions); - _FileRead = CellInstanceConnectionName.Get(this, FileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, _DummyRuns, _UseCyclicalForDescription, isEAFHosted: false); + _FileRead = CellInstanceConnectionName.Get(this, FileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, _DummyRuns, _StaticRuns, _UseCyclicalForDescription, isEAFHosted: false); results = _FileRead.ReExtract(); if (results?.Item2 is null) throw new Exception(); diff --git a/MET08ANLYSDIFAAST230.csproj b/MET08ANLYSDIFAAST230.csproj index 0f3274b..9fa0e4e 100644 --- a/MET08ANLYSDIFAAST230.csproj +++ b/MET08ANLYSDIFAAST230.csproj @@ -96,17 +96,17 @@ - + - - - - + + + + @@ -119,26 +119,26 @@ - - - - - - - - - - - + + + + + + + + + + +