diff --git a/APC Viewer/.vscode/format-report.json b/APC Viewer/.vscode/format-report.json new file mode 100644 index 0000000..4f2111a --- /dev/null +++ b/APC Viewer/.vscode/format-report.json @@ -0,0 +1,7292 @@ +[ + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "32bd84fd-86ed-4ec9-a031-ee36dda7d398" + }, + "FileName": "Description.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Description.cs", + "FileChanges": [ + { + "LineNumber": 48, + "CharNumber": 1, + "DiagnosticId": "IDE2000", + "FormatDescription": "warning IDE2000: Avoid multiple blank lines" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 58, + "CharNumber": 1, + "DiagnosticId": "IDE2000", + "FormatDescription": "warning IDE2000: Avoid multiple blank lines" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 38, + "CharNumber": 51, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 95, + "CharNumber": 37, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 96, + "CharNumber": 43, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 104, + "CharNumber": 40, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 196, + "CharNumber": 60, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 159, + "CharNumber": 51, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 217, + "CharNumber": 78, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 227, + "CharNumber": 53, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 293, + "CharNumber": 40, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 309, + "CharNumber": 43, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 317, + "CharNumber": 38, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 394, + "CharNumber": 40, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 406, + "CharNumber": 38, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 457, + "CharNumber": 40, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 467, + "CharNumber": 32, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 468, + "CharNumber": 38, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 470, + "CharNumber": 47, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 40, + "CharNumber": 17, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 41, + "CharNumber": 17, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 42, + "CharNumber": 17, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 49, + "CharNumber": 25, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 53, + "CharNumber": 17, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 57, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 58, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 59, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 60, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 62, + "CharNumber": 25, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 63, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 81, + "CharNumber": 17, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 83, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 139, + "CharNumber": 25, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 162, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 169, + "CharNumber": 29, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 178, + "CharNumber": 33, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 180, + "CharNumber": 33, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 182, + "CharNumber": 33, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 185, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 186, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 188, + "CharNumber": 17, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 316, + "CharNumber": 13, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 352, + "CharNumber": 25, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 353, + "CharNumber": 25, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 358, + "CharNumber": 33, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 362, + "CharNumber": 37, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 364, + "CharNumber": 37, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 366, + "CharNumber": 37, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 368, + "CharNumber": 37, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 370, + "CharNumber": 37, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 372, + "CharNumber": 29, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 377, + "CharNumber": 33, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 379, + "CharNumber": 33, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 380, + "CharNumber": 29, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 381, + "CharNumber": 29, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 382, + "CharNumber": 29, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 384, + "CharNumber": 25, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 385, + "CharNumber": 25, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 405, + "CharNumber": 13, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 414, + "CharNumber": 17, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 415, + "CharNumber": 17, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 427, + "CharNumber": 29, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 432, + "CharNumber": 29, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 434, + "CharNumber": 29, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 436, + "CharNumber": 29, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 438, + "CharNumber": 29, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 440, + "CharNumber": 29, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 442, + "CharNumber": 29, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 443, + "CharNumber": 25, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 448, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 449, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 505, + "CharNumber": 17, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 507, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 508, + "CharNumber": 17, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 513, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 516, + "CharNumber": 25, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 517, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 340, + "CharNumber": 46, + "DiagnosticId": "IDE0083", + "FormatDescription": "warning IDE0083: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 273, + "CharNumber": 13, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 278, + "CharNumber": 13, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 283, + "CharNumber": 13, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 288, + "CharNumber": 13, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "32bd84fd-86ed-4ec9-a031-ee36dda7d398" + }, + "FileName": "Description.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Description.cs", + "FileChanges": [ + { + "LineNumber": 74, + "CharNumber": 48, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "32bd84fd-86ed-4ec9-a031-ee36dda7d398" + }, + "FileName": "Description.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Description.cs", + "FileChanges": [ + { + "LineNumber": 125, + "CharNumber": 48, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "32bd84fd-86ed-4ec9-a031-ee36dda7d398" + }, + "FileName": "Description.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Description.cs", + "FileChanges": [ + { + "LineNumber": 133, + "CharNumber": 105, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "32bd84fd-86ed-4ec9-a031-ee36dda7d398" + }, + "FileName": "Description.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Description.cs", + "FileChanges": [ + { + "LineNumber": 125, + "CharNumber": 34, + "DiagnosticId": "IDE0059", + "FormatDescription": "warning IDE0059: Unnecessary assignment of a value to \u0027results\u0027" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "32bd84fd-86ed-4ec9-a031-ee36dda7d398" + }, + "FileName": "Description.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Description.cs", + "FileChanges": [ + { + "LineNumber": 146, + "CharNumber": 25, + "DiagnosticId": "IDE0066", + "FormatDescription": "warning IDE0066: Use \u0027switch\u0027 expression" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "32bd84fd-86ed-4ec9-a031-ee36dda7d398" + }, + "FileName": "Description.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Description.cs", + "FileChanges": [ + { + "LineNumber": 115, + "CharNumber": 57, + "DiagnosticId": "IDE0083", + "FormatDescription": "warning IDE0083: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "32bd84fd-86ed-4ec9-a031-ee36dda7d398" + }, + "FileName": "Description.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Description.cs", + "FileChanges": [ + { + "LineNumber": 138, + "CharNumber": 25, + "DiagnosticId": "IDE0078", + "FormatDescription": "warning IDE0078: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "32bd84fd-86ed-4ec9-a031-ee36dda7d398" + }, + "FileName": "Description.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Description.cs", + "FileChanges": [ + { + "LineNumber": 47, + "CharNumber": 31, + "DiagnosticId": "IDE1006", + "FormatDescription": "warning IDE1006: Naming rule violation: Missing prefix: \u0027_\u0027" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "32bd84fd-86ed-4ec9-a031-ee36dda7d398" + }, + "FileName": "Description.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Description.cs", + "FileChanges": [ + { + "LineNumber": 13, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 32, + "CharNumber": 44, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 44, + "CharNumber": 44, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 38, + "CharNumber": 44, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 50, + "CharNumber": 44, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 56, + "CharNumber": 44, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 62, + "CharNumber": 44, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 75, + "CharNumber": 42, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 81, + "CharNumber": 42, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 102, + "CharNumber": 61, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 66, + "CharNumber": 31, + "DiagnosticId": "IDE0083", + "FormatDescription": "warning IDE0083: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 66, + "CharNumber": 21, + "DiagnosticId": "IDE0078", + "FormatDescription": "warning IDE0078: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 28, + "CharNumber": 51, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 5, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 185, + "CharNumber": 89, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 283, + "CharNumber": 54, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 243, + "CharNumber": 47, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 326, + "CharNumber": 63, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 333, + "CharNumber": 74, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 347, + "CharNumber": 60, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 391, + "CharNumber": 57, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 397, + "CharNumber": 63, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 251, + "CharNumber": 13, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 255, + "CharNumber": 17, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 267, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 274, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 58, + "CharNumber": 13, + "DiagnosticId": "IDE0066", + "FormatDescription": "warning IDE0066: Use \u0027switch\u0027 expression" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 204, + "CharNumber": 21, + "DiagnosticId": "IDE0066", + "FormatDescription": "warning IDE0066: Use \u0027switch\u0027 expression" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 247, + "CharNumber": 25, + "DiagnosticId": "IDE0083", + "FormatDescription": "warning IDE0083: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 266, + "CharNumber": 29, + "DiagnosticId": "IDE0083", + "FormatDescription": "warning IDE0083: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 382, + "CharNumber": 52, + "DiagnosticId": "IDE0083", + "FormatDescription": "warning IDE0083: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 401, + "CharNumber": 31, + "DiagnosticId": "IDE0083", + "FormatDescription": "warning IDE0083: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 307, + "CharNumber": 31, + "DiagnosticId": "IDE0083", + "FormatDescription": "warning IDE0083: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 195, + "CharNumber": 21, + "DiagnosticId": "IDE0078", + "FormatDescription": "warning IDE0078: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 401, + "CharNumber": 21, + "DiagnosticId": "IDE0078", + "FormatDescription": "warning IDE0078: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 361, + "CharNumber": 25, + "DiagnosticId": "IDE0078", + "FormatDescription": "warning IDE0078: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 307, + "CharNumber": 21, + "DiagnosticId": "IDE0078", + "FormatDescription": "warning IDE0078: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 311, + "CharNumber": 25, + "DiagnosticId": "IDE0078", + "FormatDescription": "warning IDE0078: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 10, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 376, + "CharNumber": 55, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 377, + "CharNumber": 65, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 378, + "CharNumber": 66, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 379, + "CharNumber": 79, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 446, + "CharNumber": 40, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 513, + "CharNumber": 38, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 514, + "CharNumber": 65, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 551, + "CharNumber": 41, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 552, + "CharNumber": 47, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 561, + "CharNumber": 37, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 562, + "CharNumber": 46, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 563, + "CharNumber": 53, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 566, + "CharNumber": 59, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 567, + "CharNumber": 59, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 568, + "CharNumber": 58, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 569, + "CharNumber": 58, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 570, + "CharNumber": 58, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 571, + "CharNumber": 58, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 572, + "CharNumber": 58, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 573, + "CharNumber": 58, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 574, + "CharNumber": 60, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 821, + "CharNumber": 47, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 954, + "CharNumber": 55, + "DiagnosticId": "IDE0090", + "FormatDescription": "warning IDE0090: \u0027new\u0027 expression can be simplified" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 846, + "CharNumber": 25, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 943, + "CharNumber": 33, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 967, + "CharNumber": 45, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 582, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 606, + "CharNumber": 17, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 608, + "CharNumber": 21, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 421, + "CharNumber": 35, + "DiagnosticId": "IDE0083", + "FormatDescription": "warning IDE0083: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 429, + "CharNumber": 32, + "DiagnosticId": "IDE0083", + "FormatDescription": "warning IDE0083: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 434, + "CharNumber": 32, + "DiagnosticId": "IDE0083", + "FormatDescription": "warning IDE0083: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 521, + "CharNumber": 35, + "DiagnosticId": "IDE0083", + "FormatDescription": "warning IDE0083: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 529, + "CharNumber": 32, + "DiagnosticId": "IDE0083", + "FormatDescription": "warning IDE0083: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 534, + "CharNumber": 32, + "DiagnosticId": "IDE0083", + "FormatDescription": "warning IDE0083: Use pattern matching" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "df9bec2d-3800-4063-9dff-05d5f5ace82d" + }, + "FileName": "FileConnectorParameterTypeDefinitionProvider.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\SelfDescription\\FileConnectorParameterTypeDefinitionProvider.cs", + "FileChanges": [ + { + "LineNumber": 12, + "CharNumber": 82, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "df9bec2d-3800-4063-9dff-05d5f5ace82d" + }, + "FileName": "FileConnectorParameterTypeDefinitionProvider.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\SelfDescription\\FileConnectorParameterTypeDefinitionProvider.cs", + "FileChanges": [ + { + "LineNumber": 11, + "CharNumber": 87, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "df9bec2d-3800-4063-9dff-05d5f5ace82d" + }, + "FileName": "FileConnectorParameterTypeDefinitionProvider.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\SelfDescription\\FileConnectorParameterTypeDefinitionProvider.cs", + "FileChanges": [ + { + "LineNumber": 5, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "99978c5d-2cb9-4551-8e56-0c21811c8556" + }, + "FileName": "ConnectionSetting.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\Common\\Configuration\\ConnectionSetting.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "c82f7452-7b93-49a8-b0d6-d5fc447b4fde" + }, + "FileName": "FilePathGenerator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\FilePathGenerator.cs", + "FileChanges": [ + { + "LineNumber": 19, + "CharNumber": 157, + "DiagnosticId": "IDE0021", + "FormatDescription": "warning IDE0021: Use expression body for constructors" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "c82f7452-7b93-49a8-b0d6-d5fc447b4fde" + }, + "FileName": "FilePathGenerator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\FilePathGenerator.cs", + "FileChanges": [ + { + "LineNumber": 18, + "CharNumber": 120, + "DiagnosticId": "IDE0021", + "FormatDescription": "warning IDE0021: Use expression body for constructors" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "c82f7452-7b93-49a8-b0d6-d5fc447b4fde" + }, + "FileName": "FilePathGenerator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\FilePathGenerator.cs", + "FileChanges": [ + { + "LineNumber": 20, + "CharNumber": 169, + "DiagnosticId": "IDE0021", + "FormatDescription": "warning IDE0021: Use expression body for constructors" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "c82f7452-7b93-49a8-b0d6-d5fc447b4fde" + }, + "FileName": "FilePathGenerator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\FilePathGenerator.cs", + "FileChanges": [ + { + "LineNumber": 28, + "CharNumber": 45, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "c82f7452-7b93-49a8-b0d6-d5fc447b4fde" + }, + "FileName": "FilePathGenerator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\FilePathGenerator.cs", + "FileChanges": [ + { + "LineNumber": 29, + "CharNumber": 53, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "c82f7452-7b93-49a8-b0d6-d5fc447b4fde" + }, + "FileName": "FilePathGenerator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\FilePathGenerator.cs", + "FileChanges": [ + { + "LineNumber": 30, + "CharNumber": 79, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "c82f7452-7b93-49a8-b0d6-d5fc447b4fde" + }, + "FileName": "FilePathGenerator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\FilePathGenerator.cs", + "FileChanges": [ + { + "LineNumber": 31, + "CharNumber": 93, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "c82f7452-7b93-49a8-b0d6-d5fc447b4fde" + }, + "FileName": "FilePathGenerator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\FilePathGenerator.cs", + "FileChanges": [ + { + "LineNumber": 33, + "CharNumber": 65, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "c82f7452-7b93-49a8-b0d6-d5fc447b4fde" + }, + "FileName": "FilePathGenerator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\FilePathGenerator.cs", + "FileChanges": [ + { + "LineNumber": 32, + "CharNumber": 101, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "c82f7452-7b93-49a8-b0d6-d5fc447b4fde" + }, + "FileName": "FilePathGenerator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\FilePathGenerator.cs", + "FileChanges": [ + { + "LineNumber": 5, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5e775f91-9002-42e6-8d9a-30008520b3d6" + }, + "FileName": "ModelObjectParameterDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\CellAutomation\\ModelObjectParameterDefinition.cs", + "FileChanges": [ + { + "LineNumber": 23, + "CharNumber": 65, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5e775f91-9002-42e6-8d9a-30008520b3d6" + }, + "FileName": "ModelObjectParameterDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\CellAutomation\\ModelObjectParameterDefinition.cs", + "FileChanges": [ + { + "LineNumber": 24, + "CharNumber": 58, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5e775f91-9002-42e6-8d9a-30008520b3d6" + }, + "FileName": "ModelObjectParameterDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\CellAutomation\\ModelObjectParameterDefinition.cs", + "FileChanges": [ + { + "LineNumber": 3, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "d239b9e1-7fbc-47cf-bee4-0ea9fc4fd697" + }, + "FileName": "StructuredType.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ParameterTypes\\StructuredType.cs", + "FileChanges": [ + { + "LineNumber": 3, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "3c534437-da8c-44b8-9ee5-e222135bb99c" + }, + "FileName": "ParameterTypeDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ParameterTypes\\ParameterTypeDefinition.cs", + "FileChanges": [ + { + "LineNumber": 10, + "CharNumber": 45, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "3c534437-da8c-44b8-9ee5-e222135bb99c" + }, + "FileName": "ParameterTypeDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ParameterTypes\\ParameterTypeDefinition.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "9249b876-9ce1-483c-a6fd-3428729ffa31" + }, + "FileName": "Field.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ParameterTypes\\Field.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 20, + "CharNumber": 45, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 21, + "CharNumber": 47, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 3, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "39e4a77e-c109-4e5b-9365-9625b7bdfc2a" + }, + "FileName": "ParameterValue.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\DataCollection\\Reporting\\ParameterValue.cs", + "FileChanges": [ + { + "LineNumber": 17, + "CharNumber": 81, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "39e4a77e-c109-4e5b-9365-9625b7bdfc2a" + }, + "FileName": "ParameterValue.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\DataCollection\\Reporting\\ParameterValue.cs", + "FileChanges": [ + { + "LineNumber": 18, + "CharNumber": 45, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "39e4a77e-c109-4e5b-9365-9625b7bdfc2a" + }, + "FileName": "ParameterValue.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\DataCollection\\Reporting\\ParameterValue.cs", + "FileChanges": [ + { + "LineNumber": 5, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "9034dd59-daf2-4d6f-ba04-c441aa4ef02f" + }, + "FileName": "EmailMessage.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Smtp\\EmailMessage.cs", + "FileChanges": [ + { + "LineNumber": 15, + "CharNumber": 46, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "9034dd59-daf2-4d6f-ba04-c441aa4ef02f" + }, + "FileName": "EmailMessage.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Smtp\\EmailMessage.cs", + "FileChanges": [ + { + "LineNumber": 16, + "CharNumber": 45, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "9034dd59-daf2-4d6f-ba04-c441aa4ef02f" + }, + "FileName": "EmailMessage.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Smtp\\EmailMessage.cs", + "FileChanges": [ + { + "LineNumber": 17, + "CharNumber": 48, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "9034dd59-daf2-4d6f-ba04-c441aa4ef02f" + }, + "FileName": "EmailMessage.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Smtp\\EmailMessage.cs", + "FileChanges": [ + { + "LineNumber": 18, + "CharNumber": 52, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "9034dd59-daf2-4d6f-ba04-c441aa4ef02f" + }, + "FileName": "EmailMessage.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Smtp\\EmailMessage.cs", + "FileChanges": [ + { + "LineNumber": 19, + "CharNumber": 66, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "9034dd59-daf2-4d6f-ba04-c441aa4ef02f" + }, + "FileName": "EmailMessage.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Smtp\\EmailMessage.cs", + "FileChanges": [ + { + "LineNumber": 20, + "CharNumber": 58, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "9034dd59-daf2-4d6f-ba04-c441aa4ef02f" + }, + "FileName": "EmailMessage.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Smtp\\EmailMessage.cs", + "FileChanges": [ + { + "LineNumber": 3, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "877b4fae-5757-49c4-a22e-91f85af7df7a" + }, + "FileName": "Backbone.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Backbone.cs", + "FileChanges": [ + { + "LineNumber": 33, + "CharNumber": 60, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "877b4fae-5757-49c4-a22e-91f85af7df7a" + }, + "FileName": "Backbone.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Backbone.cs", + "FileChanges": [ + { + "LineNumber": 35, + "CharNumber": 52, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "877b4fae-5757-49c4-a22e-91f85af7df7a" + }, + "FileName": "Backbone.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Backbone.cs", + "FileChanges": [ + { + "LineNumber": 36, + "CharNumber": 72, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "877b4fae-5757-49c4-a22e-91f85af7df7a" + }, + "FileName": "Backbone.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Backbone.cs", + "FileChanges": [ + { + "LineNumber": 37, + "CharNumber": 59, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "877b4fae-5757-49c4-a22e-91f85af7df7a" + }, + "FileName": "Backbone.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Backbone.cs", + "FileChanges": [ + { + "LineNumber": 38, + "CharNumber": 81, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "877b4fae-5757-49c4-a22e-91f85af7df7a" + }, + "FileName": "Backbone.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Backbone.cs", + "FileChanges": [ + { + "LineNumber": 5, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "7e312fe1-880b-41a2-938a-84b2a8f11415" + }, + "FileName": "TimedHostedService.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\HostedService\\TimedHostedService.cs", + "FileChanges": [ + { + "LineNumber": 109, + "CharNumber": 13, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "7e312fe1-880b-41a2-938a-84b2a8f11415" + }, + "FileName": "TimedHostedService.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\HostedService\\TimedHostedService.cs", + "FileChanges": [ + { + "LineNumber": 157, + "CharNumber": 13, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "7e312fe1-880b-41a2-938a-84b2a8f11415" + }, + "FileName": "TimedHostedService.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\HostedService\\TimedHostedService.cs", + "FileChanges": [ + { + "LineNumber": 133, + "CharNumber": 13, + "DiagnosticId": "IDE0058", + "FormatDescription": "warning IDE0058: Expression value is never used" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "3b9f1aae-5268-455c-93d7-f504df71604f" + }, + "FileName": "Column.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\Column.cs", + "FileChanges": [ + { + "LineNumber": 12, + "CharNumber": 13, + "DiagnosticId": "IDE0066", + "FormatDescription": "warning IDE0066: Use \u0027switch\u0027 expression" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "3b9f1aae-5268-455c-93d7-f504df71604f" + }, + "FileName": "Column.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\Column.cs", + "FileChanges": [ + { + "LineNumber": 679, + "CharNumber": 13, + "DiagnosticId": "IDE0066", + "FormatDescription": "warning IDE0066: Use \u0027switch\u0027 expression" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "3b9f1aae-5268-455c-93d7-f504df71604f" + }, + "FileName": "Column.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\Column.cs", + "FileChanges": [ + { + "LineNumber": 3, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 88, + "CharNumber": 36, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 5, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "d1add91c-1840-4850-a03c-8f1eb68c04e1" + }, + "FileName": "File.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\File.cs", + "FileChanges": [ + { + "LineNumber": 8, + "CharNumber": 40, + "DiagnosticId": "IDE0021", + "FormatDescription": "warning IDE0021: Use expression body for constructors" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "d1add91c-1840-4850-a03c-8f1eb68c04e1" + }, + "FileName": "File.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\File.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 64, + "DiagnosticId": "IDE0021", + "FormatDescription": "warning IDE0021: Use expression body for constructors" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "d1add91c-1840-4850-a03c-8f1eb68c04e1" + }, + "FileName": "File.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\File.cs", + "FileChanges": [ + { + "LineNumber": 16, + "CharNumber": 93, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "d1add91c-1840-4850-a03c-8f1eb68c04e1" + }, + "FileName": "File.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\File.cs", + "FileChanges": [ + { + "LineNumber": 17, + "CharNumber": 61, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "d1add91c-1840-4850-a03c-8f1eb68c04e1" + }, + "FileName": "File.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\File.cs", + "FileChanges": [ + { + "LineNumber": 4, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "dcdb195d-ee88-41b0-90b6-af1e491067da" + }, + "FileName": "Logistics.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Logistics.cs", + "FileChanges": [ + { + "LineNumber": 208, + "CharNumber": 13, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "dcdb195d-ee88-41b0-90b6-af1e491067da" + }, + "FileName": "Logistics.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Logistics.cs", + "FileChanges": [ + { + "LineNumber": 213, + "CharNumber": 13, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "dcdb195d-ee88-41b0-90b6-af1e491067da" + }, + "FileName": "Logistics.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Logistics.cs", + "FileChanges": [ + { + "LineNumber": 218, + "CharNumber": 13, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "dcdb195d-ee88-41b0-90b6-af1e491067da" + }, + "FileName": "Logistics.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Logistics.cs", + "FileChanges": [ + { + "LineNumber": 223, + "CharNumber": 13, + "DiagnosticId": "IDE0022", + "FormatDescription": "warning IDE0022: Use expression body for methods" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "dcdb195d-ee88-41b0-90b6-af1e491067da" + }, + "FileName": "Logistics.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Logistics.cs", + "FileChanges": [ + { + "LineNumber": 57, + "CharNumber": 30, + "DiagnosticId": "IDE0008", + "FormatDescription": "warning IDE0008: Use explicit type instead of \u0027var\u0027" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "dcdb195d-ee88-41b0-90b6-af1e491067da" + }, + "FileName": "Logistics.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Logistics.cs", + "FileChanges": [ + { + "LineNumber": 6, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "1ebdb742-b34f-4174-a4cf-95409b62a9ac" + }, + "FileName": "EquipmentType.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\EquipmentType.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "cbea9416-af53-469f-8ff7-75a75e2f1bb3" + }, + "FileName": "IProcessData.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\IProcessData.cs", + "FileChanges": [ + { + "LineNumber": 7, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "138a6a9d-c797-4a2c-87ca-b051a1b9b2bd" + }, + "FileName": "IProcessDataDescription.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\IProcessDataDescription.cs", + "FileChanges": [ + { + "LineNumber": 4, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "0b635710-dfd7-4b73-8f0f-26cf625b1c54" + }, + "FileName": "IScopeInfo.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\IScopeInfo.cs", + "FileChanges": [ + { + "LineNumber": 3, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "ba6000df-4bef-48a7-b264-177420f0ecd1" + }, + "FileName": "IsEnvironment.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\IsEnvironment.cs", + "FileChanges": [ + { + "LineNumber": 5, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "8f996432-9c06-4be9-a583-1f11a09b7911" + }, + "FileName": "Logistics2.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Logistics2.cs", + "FileChanges": [ + { + "LineNumber": 3, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "d12c2f48-9933-4d19-ab24-ceea1c0091ab" + }, + "FileName": "BackboneComponent.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\AutoGenerated\\BackboneComponent.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "345f1663-b7a5-49d2-83d3-9381ec0a6944" + }, + "FileName": "BackboneStatusCache.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\AutoGenerated\\BackboneStatusCache.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "87c35748-4cd6-4cab-81ae-3e7ed58a4c30" + }, + "FileName": "ILoggingSetupManager.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\AutoGenerated\\ILoggingSetupManager.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "69e17539-cf07-4d46-87e3-847840e9d17f" + }, + "FileName": "StatusItem.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\AutoGenerated\\StatusItem.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "b8032303-4b58-453f-a27c-3f142cde6e19" + }, + "FileName": "NotNullAttribute.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\PeerGroup\\GCL\\Annotations\\NotNullAttribute.cs", + "FileChanges": [ + { + "LineNumber": 3, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "01dded99-41c8-41b4-9bd2-03fed81ed41b" + }, + "FileName": "ISmtp.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Smtp\\ISmtp.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "e86d2b70-06b9-4dd1-be57-a1f087743acf" + }, + "FileName": "MailPriority.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Smtp\\MailPriority.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5d5d6cbe-f71d-4ef1-aec1-17926f910eff" + }, + "FileName": "ChangeDataCollectionHandler.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\ChangeDataCollectionHandler.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "1ab04479-a4b5-4cd7-b98b-6252df7277a9" + }, + "FileName": "DataCollectionRequest.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\DataCollectionRequest.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "4bd37df7-2a30-481b-9e4d-61ed205d1634" + }, + "FileName": "EquipmentEvent.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\EquipmentEvent.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "0dc8983e-ffbe-4e4e-9b34-9ce562e90370" + }, + "FileName": "EquipmentException.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\EquipmentException.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "dd1b34ab-ee13-4b18-8ce2-6146c4f5fb53" + }, + "FileName": "EquipmentSelfDescription.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\EquipmentSelfDescription.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "793ad9a9-f262-4679-bf5b-7e2c1ed46bc9" + }, + "FileName": "GetParameterValuesHandler.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\GetParameterValuesHandler.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "21389ed0-cda2-4a53-a918-f36b427ad523" + }, + "FileName": "IConnectionControl.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\IConnectionControl.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "f0854655-effd-49b8-b576-0fc2cd23b6d9" + }, + "FileName": "IDataTracingHandler.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\IDataTracingHandler.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "2043b37f-dfa7-4c27-8120-d6e81a8d7b52" + }, + "FileName": "IEquipmentCommandService.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\IEquipmentCommandService.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "976ba59a-c64d-4d3e-8076-e904f5787a6e" + }, + "FileName": "IEquipmentControl.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\IEquipmentControl.cs", + "FileChanges": [ + { + "LineNumber": 3, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12c28256-22a4-461b-86f7-d047f72b1b45" + }, + "FileName": "IEquipmentSelfDescriptionBuilder.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\IEquipmentSelfDescriptionBuilder.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "7a68c6f9-9253-45dc-ad38-f5318a4be56b" + }, + "FileName": "IPackage.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\IPackage.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "bebcdb00-a231-4a2e-a41f-a0958adf2ee6" + }, + "FileName": "ISelfDescriptionLookup.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\ISelfDescriptionLookup.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "7f0a5092-5509-498c-b2d3-7c03f500bc0f" + }, + "FileName": "IVirtualParameterValuesHandler.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\IVirtualParameterValuesHandler.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "802e5bee-f1b0-486a-9dd8-99b9a86574a2" + }, + "FileName": "SetParameterValuesHandler.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\SetParameterValuesHandler.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a9b04543-63e4-49c3-adbe-952207e7ece0" + }, + "FileName": "TraceRequest.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\AutoGenerated\\TraceRequest.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "ad689250-1208-47ab-a2e8-d30c627ae02d" + }, + "FileName": "IEquipmentDataCollection.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\IEquipmentDataCollection.cs", + "FileChanges": [ + { + "LineNumber": 6, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "dd3d333f-b4c3-4f89-9f00-3a9c0b245497" + }, + "FileName": "IPackageSource.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\Control\\IPackageSource.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "64a9c72e-225c-4958-868f-86b6aaa85eeb" + }, + "FileName": "EventName.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\EventName.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5c85272d-eeb9-4d65-af92-6cce2b81b56d" + }, + "FileName": "ILogic.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ILogic.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "09d4c75e-429b-4708-b188-eff6b374b660" + }, + "FileName": "MET08AFMD3100.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08AFMD3100.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "e2fb53ad-671e-4d8d-a0cf-a17a5bafa816" + }, + "FileName": "MET08BVHGPROBE.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08BVHGPROBE.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fef3a1bb-65e7-40c2-a585-56410411ef88" + }, + "FileName": "MET08CVHGPROBE802B150.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08CVHGPROBE802B150.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "c45a2845-2f19-40bc-96f3-8937594d144a" + }, + "FileName": "MET08DDINCAN8620.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08DDINCAN8620.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "bcbb9a8e-7e56-4387-bb14-cdc43c16d541" + }, + "FileName": "MET08DDUPSFS6420.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08DDUPSFS6420.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "b7eb265f-76f8-4a5f-8f4d-f940eb0ddc4e" + }, + "FileName": "MET08DDUPSP1TBI.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08DDUPSP1TBI.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "f2836841-1e70-4459-a08b-72af7ef75de2" + }, + "FileName": "MET08EBEAMINTEGRITY26.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08EBEAMINTEGRITY26.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "e879dae1-d84e-4725-bf53-2f0ba1d829ed" + }, + "FileName": "MET08HALLHL5580.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08HALLHL5580.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "b3ad2b9c-c306-4a89-8836-ee5ea50dd42b" + }, + "FileName": "MET08MESMICROSCOPE.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08MESMICROSCOPE.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "450146d9-38a3-4337-9630-133ab3c528a8" + }, + "FileName": "MET08NDFRESIMAP151C.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08NDFRESIMAP151C.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "6456bd48-a761-47d1-ba72-8dbbda713cb2" + }, + "FileName": "MET08PLMAPRPM.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08PLMAPRPM.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a675463a-0421-4cd7-aca0-90e411843c12" + }, + "FileName": "MET08PRFUSB4000.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08PRFUSB4000.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "7be53979-88ed-4bc0-a66f-df65bfcccb8b" + }, + "FileName": "MET08RESIHGCV.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08RESIHGCV.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "3183ae33-f533-4b41-8d57-7a66bb23f712" + }, + "FileName": "MET08RESIMAPCDE.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08RESIMAPCDE.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a7c62229-4a21-4f08-918a-ef7366ce56dd" + }, + "FileName": "MET08THFTIRQS408M.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08THFTIRQS408M.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "0c92dfd2-52bf-4c04-83a0-3037bdb986b7" + }, + "FileName": "MET08THFTIRSTRATUS.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08THFTIRSTRATUS.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "d7c6cda9-238a-4841-96ac-41b0837733c1" + }, + "FileName": "MET08UVH44GS100M.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08UVH44GS100M.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "7e33527e-b539-4ccb-9ab5-f1cdfe6af57b" + }, + "FileName": "MET08VPDSUBCON.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08VPDSUBCON.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "786a2d9b-9962-478d-9cf5-0867cdde8cbb" + }, + "FileName": "MET08WGEOMX203641Q.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08WGEOMX203641Q.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "bdc24f14-80bc-43db-bdf2-85ba814373be" + }, + "FileName": "MET08XRDXPERTPROMRDXL.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\MET08XRDXPERTPROMRDXL.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fd61a816-aace-4806-a41e-b7e4fd60f20b" + }, + "FileName": "Test.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\Test.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "f3823b39-f3ff-4f4b-be46-82058c0e49d5" + }, + "FileName": "IConfigurationObject.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\CellAutomation\\IConfigurationObject.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "f8ae2588-a5fa-48aa-abb6-837f074fa52c" + }, + "FileName": "ModelObjectParameterType.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\CellAutomation\\ModelObjectParameterType.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "4bc48944-d881-4f13-949c-cd17f1fba6c7" + }, + "FileName": "HsmsConnectionMode.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\PeerGroup\\GCL\\SecsDriver\\HsmsConnectionMode.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "64f61cfe-0794-4966-b7ba-a06323142643" + }, + "FileName": "SecsConnectionConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\Semiconductor\\CellInstances\\SecsConnectionConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 4, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "95a2d5e2-ad17-489f-a8a7-63fcf35ec146" + }, + "FileName": "HsmsSessionMode.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\PeerGroup\\GCL\\SecsDriver\\HsmsSessionMode.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "dd6a0001-0327-428b-8862-3748af859733" + }, + "FileName": "SecsTransportType.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\PeerGroup\\GCL\\SecsDriver\\SecsTransportType.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5b96eefd-d941-4f53-8455-c735cafe52e9" + }, + "FileName": "SerialBaudRate.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\PeerGroup\\GCL\\SecsDriver\\SerialBaudRate.cs", + "FileChanges": [ + { + "LineNumber": 1, + "CharNumber": 11, + "DiagnosticId": "IDE0161", + "FormatDescription": "warning IDE0161: Convert to file-scoped namespace" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "32bd84fd-86ed-4ec9-a031-ee36dda7d398" + }, + "FileName": "Description.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Description.cs", + "FileChanges": [ + { + "LineNumber": 123, + "CharNumber": 189, + "DiagnosticId": "CS8625", + "FormatDescription": "warning CS8625: Cannot convert null literal to non-nullable reference type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "c82f7452-7b93-49a8-b0d6-d5fc447b4fde" + }, + "FileName": "FilePathGenerator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\FilePathGenerator.cs", + "FileChanges": [ + { + "LineNumber": 18, + "CharNumber": 112, + "DiagnosticId": "CS8625", + "FormatDescription": "warning CS8625: Cannot convert null literal to non-nullable reference type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "c82f7452-7b93-49a8-b0d6-d5fc447b4fde" + }, + "FileName": "FilePathGenerator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\FilePathGenerator.cs", + "FileChanges": [ + { + "LineNumber": 19, + "CharNumber": 149, + "DiagnosticId": "CS8625", + "FormatDescription": "warning CS8625: Cannot convert null literal to non-nullable reference type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "c82f7452-7b93-49a8-b0d6-d5fc447b4fde" + }, + "FileName": "FilePathGenerator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Component\\FilePathGenerator.cs", + "FileChanges": [ + { + "LineNumber": 20, + "CharNumber": 161, + "DiagnosticId": "CS8625", + "FormatDescription": "warning CS8625: Cannot convert null literal to non-nullable reference type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 362, + "CharNumber": 203, + "DiagnosticId": "CS8625", + "FormatDescription": "warning CS8625: Cannot convert null literal to non-nullable reference type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 362, + "CharNumber": 225, + "DiagnosticId": "CS8625", + "FormatDescription": "warning CS8625: Cannot convert null literal to non-nullable reference type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5c85272d-eeb9-4d65-af92-6cce2b81b56d" + }, + "FileName": "ILogic.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ILogic.cs", + "FileChanges": [ + { + "LineNumber": 31, + "CharNumber": 124, + "DiagnosticId": "CS8625", + "FormatDescription": "warning CS8625: Cannot convert null literal to non-nullable reference type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 92, + "CharNumber": 124, + "DiagnosticId": "CS8625", + "FormatDescription": "warning CS8625: Cannot convert null literal to non-nullable reference type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 291, + "CharNumber": 319, + "DiagnosticId": "CS8625", + "FormatDescription": "warning CS8625: Cannot convert null literal to non-nullable reference type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 291, + "CharNumber": 348, + "DiagnosticId": "CS8625", + "FormatDescription": "warning CS8625: Cannot convert null literal to non-nullable reference type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 392, + "CharNumber": 316, + "DiagnosticId": "CS8625", + "FormatDescription": "warning CS8625: Cannot convert null literal to non-nullable reference type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "64f61cfe-0794-4966-b7ba-a06323142643" + }, + "FileName": "SecsConnectionConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\Semiconductor\\CellInstances\\SecsConnectionConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Host\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "df9bec2d-3800-4063-9dff-05d5f5ace82d" + }, + "FileName": "FileConnectorParameterTypeDefinitionProvider.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\SelfDescription\\FileConnectorParameterTypeDefinitionProvider.cs", + "FileChanges": [ + { + "LineNumber": 11, + "CharNumber": 94, + "DiagnosticId": "CS8603", + "FormatDescription": "warning CS8603: Possible null reference return." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "df9bec2d-3800-4063-9dff-05d5f5ace82d" + }, + "FileName": "FileConnectorParameterTypeDefinitionProvider.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\SelfDescription\\FileConnectorParameterTypeDefinitionProvider.cs", + "FileChanges": [ + { + "LineNumber": 12, + "CharNumber": 89, + "DiagnosticId": "CS8603", + "FormatDescription": "warning CS8603: Possible null reference return." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 22, + "CharNumber": 23, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027AlternateTargetFolder\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 30, + "CharNumber": 23, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027FileAgeThreshold\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 37, + "CharNumber": 23, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027ZipTargetFileName\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 39, + "CharNumber": 23, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027ZipErrorTargetFileName\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 43, + "CharNumber": 23, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027DefaultPlaceHolderValue\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 47, + "CharNumber": 40, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027ConnectionSettings\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 48, + "CharNumber": 23, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027SourceDirectoryCloaking\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 49, + "CharNumber": 23, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027FolderAgeThreshold\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 57, + "CharNumber": 23, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027SourceFileLocation\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 59, + "CharNumber": 23, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027SourceFileFilter\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 60, + "CharNumber": 29, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027SourceFileFilters\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 66, + "CharNumber": 23, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027TargetFileLocation\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 68, + "CharNumber": 23, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027ErrorTargetFileLocation\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 70, + "CharNumber": 23, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027TargetFileName\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "261be54a-47e8-46c7-bb8f-9315dde208cc" + }, + "FileName": "FileConnectorConfiguration.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\EquipmentConnector\\File\\Configuration\\FileConnectorConfiguration.cs", + "FileChanges": [ + { + "LineNumber": 86, + "CharNumber": 23, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027ErrorTargetFileName\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5e775f91-9002-42e6-8d9a-30008520b3d6" + }, + "FileName": "ModelObjectParameterDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\CellAutomation\\ModelObjectParameterDefinition.cs", + "FileChanges": [ + { + "LineNumber": 8, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Name\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5e775f91-9002-42e6-8d9a-30008520b3d6" + }, + "FileName": "ModelObjectParameterDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\CellAutomation\\ModelObjectParameterDefinition.cs", + "FileChanges": [ + { + "LineNumber": 8, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Value\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5e775f91-9002-42e6-8d9a-30008520b3d6" + }, + "FileName": "ModelObjectParameterDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\CellAutomation\\ModelObjectParameterDefinition.cs", + "FileChanges": [ + { + "LineNumber": 8, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027EnumType\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5e775f91-9002-42e6-8d9a-30008520b3d6" + }, + "FileName": "ModelObjectParameterDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\CellAutomation\\ModelObjectParameterDefinition.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Name\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5e775f91-9002-42e6-8d9a-30008520b3d6" + }, + "FileName": "ModelObjectParameterDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\CellAutomation\\ModelObjectParameterDefinition.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Value\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5e775f91-9002-42e6-8d9a-30008520b3d6" + }, + "FileName": "ModelObjectParameterDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\CellAutomation\\ModelObjectParameterDefinition.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027EnumType\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5e775f91-9002-42e6-8d9a-30008520b3d6" + }, + "FileName": "ModelObjectParameterDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\CellAutomation\\ModelObjectParameterDefinition.cs", + "FileChanges": [ + { + "LineNumber": 10, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Name\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5e775f91-9002-42e6-8d9a-30008520b3d6" + }, + "FileName": "ModelObjectParameterDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\CellAutomation\\ModelObjectParameterDefinition.cs", + "FileChanges": [ + { + "LineNumber": 10, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Value\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5e775f91-9002-42e6-8d9a-30008520b3d6" + }, + "FileName": "ModelObjectParameterDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\CellAutomation\\ModelObjectParameterDefinition.cs", + "FileChanges": [ + { + "LineNumber": 10, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027EnumType\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "5e775f91-9002-42e6-8d9a-30008520b3d6" + }, + "FileName": "ModelObjectParameterDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Management\\ConfigurationData\\CellAutomation\\ModelObjectParameterDefinition.cs", + "FileChanges": [ + { + "LineNumber": 23, + "CharNumber": 72, + "DiagnosticId": "CS8603", + "FormatDescription": "warning CS8603: Possible null reference return." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "99978c5d-2cb9-4551-8e56-0c21811c8556" + }, + "FileName": "ConnectionSetting.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\Common\\Configuration\\ConnectionSetting.cs", + "FileChanges": [ + { + "LineNumber": 6, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Name\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "99978c5d-2cb9-4551-8e56-0c21811c8556" + }, + "FileName": "ConnectionSetting.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Ifx\\Eaf\\Common\\Configuration\\ConnectionSetting.cs", + "FileChanges": [ + { + "LineNumber": 6, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Value\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "9034dd59-daf2-4d6f-ba04-c441aa4ef02f" + }, + "FileName": "EmailMessage.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Smtp\\EmailMessage.cs", + "FileChanges": [ + { + "LineNumber": 8, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Body\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "9034dd59-daf2-4d6f-ba04-c441aa4ef02f" + }, + "FileName": "EmailMessage.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Smtp\\EmailMessage.cs", + "FileChanges": [ + { + "LineNumber": 8, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Subject\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "9034dd59-daf2-4d6f-ba04-c441aa4ef02f" + }, + "FileName": "EmailMessage.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Smtp\\EmailMessage.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Body\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "9034dd59-daf2-4d6f-ba04-c441aa4ef02f" + }, + "FileName": "EmailMessage.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Smtp\\EmailMessage.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Subject\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "877b4fae-5757-49c4-a22e-91f85af7df7a" + }, + "FileName": "Backbone.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Backbone.cs", + "FileChanges": [ + { + "LineNumber": 15, + "CharNumber": 19, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027LoggingConfigurationManager\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "877b4fae-5757-49c4-a22e-91f85af7df7a" + }, + "FileName": "Backbone.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Backbone.cs", + "FileChanges": [ + { + "LineNumber": 15, + "CharNumber": 19, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Status\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "877b4fae-5757-49c4-a22e-91f85af7df7a" + }, + "FileName": "Backbone.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Backbone.cs", + "FileChanges": [ + { + "LineNumber": 15, + "CharNumber": 19, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027StartTime\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "877b4fae-5757-49c4-a22e-91f85af7df7a" + }, + "FileName": "Backbone.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Backbone.cs", + "FileChanges": [ + { + "LineNumber": 15, + "CharNumber": 19, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027State\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "877b4fae-5757-49c4-a22e-91f85af7df7a" + }, + "FileName": "Backbone.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Backbone.cs", + "FileChanges": [ + { + "LineNumber": 15, + "CharNumber": 19, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Name\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "877b4fae-5757-49c4-a22e-91f85af7df7a" + }, + "FileName": "Backbone.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Backbone.cs", + "FileChanges": [ + { + "LineNumber": 15, + "CharNumber": 19, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027ConfigurationServiceAddress\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "877b4fae-5757-49c4-a22e-91f85af7df7a" + }, + "FileName": "Backbone.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Backbone.cs", + "FileChanges": [ + { + "LineNumber": 15, + "CharNumber": 19, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027CellName\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "877b4fae-5757-49c4-a22e-91f85af7df7a" + }, + "FileName": "Backbone.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Backbone.cs", + "FileChanges": [ + { + "LineNumber": 15, + "CharNumber": 19, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027BackboneComponents\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "877b4fae-5757-49c4-a22e-91f85af7df7a" + }, + "FileName": "Backbone.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\Core\\Backbone.cs", + "FileChanges": [ + { + "LineNumber": 18, + "CharNumber": 32, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Instance\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "d239b9e1-7fbc-47cf-bee4-0ea9fc4fd697" + }, + "FileName": "StructuredType.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ParameterTypes\\StructuredType.cs", + "FileChanges": [ + { + "LineNumber": 8, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Fields\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "3c534437-da8c-44b8-9ee5-e222135bb99c" + }, + "FileName": "ParameterTypeDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ParameterTypes\\ParameterTypeDefinition.cs", + "FileChanges": [ + { + "LineNumber": 5, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Name\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "3c534437-da8c-44b8-9ee5-e222135bb99c" + }, + "FileName": "ParameterTypeDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ParameterTypes\\ParameterTypeDefinition.cs", + "FileChanges": [ + { + "LineNumber": 5, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Description\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "3c534437-da8c-44b8-9ee5-e222135bb99c" + }, + "FileName": "ParameterTypeDefinition.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ParameterTypes\\ParameterTypeDefinition.cs", + "FileChanges": [ + { + "LineNumber": 10, + "CharNumber": 52, + "DiagnosticId": "CS8603", + "FormatDescription": "warning CS8603: Possible null reference return." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "9249b876-9ce1-483c-a6fd-3428729ffa31" + }, + "FileName": "Field.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ParameterTypes\\Field.cs", + "FileChanges": [ + { + "LineNumber": 5, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Name\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "9249b876-9ce1-483c-a6fd-3428729ffa31" + }, + "FileName": "Field.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ParameterTypes\\Field.cs", + "FileChanges": [ + { + "LineNumber": 5, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Description\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "9249b876-9ce1-483c-a6fd-3428729ffa31" + }, + "FileName": "Field.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ParameterTypes\\Field.cs", + "FileChanges": [ + { + "LineNumber": 5, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027TypeDefinition\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 7, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Name\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 7, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Id\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 7, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Description\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 7, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027SourcePath\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 7, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027SourceEquipment\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 7, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027TypeDefinition\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 8, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Name\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 8, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Id\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 8, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Description\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 8, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027SourcePath\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 8, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027SourceEquipment\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 8, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027TypeDefinition\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Name\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Id\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Description\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027SourcePath\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027SourceEquipment\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027TypeDefinition\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 20, + "CharNumber": 52, + "DiagnosticId": "CS8603", + "FormatDescription": "warning CS8603: Possible null reference return." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "a05fb638-c9dd-4b79-bbf9-3b0ebb212f10" + }, + "FileName": "EquipmentParameter.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs", + "FileChanges": [ + { + "LineNumber": 21, + "CharNumber": 54, + "DiagnosticId": "CS8603", + "FormatDescription": "warning CS8603: Possible null reference return." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "39e4a77e-c109-4e5b-9365-9625b7bdfc2a" + }, + "FileName": "ParameterValue.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\DataCollection\\Reporting\\ParameterValue.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Value\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "39e4a77e-c109-4e5b-9365-9625b7bdfc2a" + }, + "FileName": "ParameterValue.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\DataCollection\\Reporting\\ParameterValue.cs", + "FileChanges": [ + { + "LineNumber": 9, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Definition\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "39e4a77e-c109-4e5b-9365-9625b7bdfc2a" + }, + "FileName": "ParameterValue.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\DataCollection\\Reporting\\ParameterValue.cs", + "FileChanges": [ + { + "LineNumber": 10, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Value\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "39e4a77e-c109-4e5b-9365-9625b7bdfc2a" + }, + "FileName": "ParameterValue.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\DataCollection\\Reporting\\ParameterValue.cs", + "FileChanges": [ + { + "LineNumber": 10, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Definition\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "39e4a77e-c109-4e5b-9365-9625b7bdfc2a" + }, + "FileName": "ParameterValue.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Library\\Eaf\\EquipmentCore\\DataCollection\\Reporting\\ParameterValue.cs", + "FileChanges": [ + { + "LineNumber": 18, + "CharNumber": 52, + "DiagnosticId": "CS8603", + "FormatDescription": "warning CS8603: Possible null reference return." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "ba6000df-4bef-48a7-b264-177420f0ecd1" + }, + "FileName": "IsEnvironment.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\IsEnvironment.cs", + "FileChanges": [ + { + "LineNumber": 35, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027ASPNetCoreEnvironment\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "ba6000df-4bef-48a7-b264-177420f0ecd1" + }, + "FileName": "IsEnvironment.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\IsEnvironment.cs", + "FileChanges": [ + { + "LineNumber": 63, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027ASPNetCoreEnvironment\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "dcdb195d-ee88-41b0-90b6-af1e491067da" + }, + "FileName": "Logistics.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Logistics.cs", + "FileChanges": [ + { + "LineNumber": 28, + "CharNumber": 24, + "DiagnosticId": "CS8625", + "FormatDescription": "warning CS8625: Cannot convert null literal to non-nullable reference type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "dcdb195d-ee88-41b0-90b6-af1e491067da" + }, + "FileName": "Logistics.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Logistics.cs", + "FileChanges": [ + { + "LineNumber": 25, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027NullData\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 65, + "CharNumber": 34, + "DiagnosticId": "CS8600", + "FormatDescription": "warning CS8600: Converting null literal or possible null value to non-nullable type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "ba6000df-4bef-48a7-b264-177420f0ecd1" + }, + "FileName": "IsEnvironment.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\IsEnvironment.cs", + "FileChanges": [ + { + "LineNumber": 77, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027ASPNetCoreEnvironment\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 18, + "CharNumber": 27, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027EventName\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 19, + "CharNumber": 27, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027NullData\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 20, + "CharNumber": 27, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027JobID\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 21, + "CharNumber": 27, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Sequence\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 22, + "CharNumber": 27, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027MesEntity\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 23, + "CharNumber": 27, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027ReportFullPath\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 24, + "CharNumber": 27, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027ProcessJobID\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 25, + "CharNumber": 27, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027MID\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "fec37076-bf7b-4b42-98d5-1a2fec67a816" + }, + "FileName": "ProcessData.Duplicator.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessData.Duplicator.cs", + "FileChanges": [ + { + "LineNumber": 26, + "CharNumber": 27, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027Date\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "dcdb195d-ee88-41b0-90b6-af1e491067da" + }, + "FileName": "Logistics.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Logistics.cs", + "FileChanges": [ + { + "LineNumber": 107, + "CharNumber": 28, + "DiagnosticId": "CS8625", + "FormatDescription": "warning CS8625: Cannot convert null literal to non-nullable reference type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "dcdb195d-ee88-41b0-90b6-af1e491067da" + }, + "FileName": "Logistics.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Logistics.cs", + "FileChanges": [ + { + "LineNumber": 126, + "CharNumber": 32, + "DiagnosticId": "CS8625", + "FormatDescription": "warning CS8625: Cannot convert null literal to non-nullable reference type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "dcdb195d-ee88-41b0-90b6-af1e491067da" + }, + "FileName": "Logistics.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Logistics.cs", + "FileChanges": [ + { + "LineNumber": 99, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027NullData\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "dcdb195d-ee88-41b0-90b6-af1e491067da" + }, + "FileName": "Logistics.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Logistics.cs", + "FileChanges": [ + { + "LineNumber": 230, + "CharNumber": 24, + "DiagnosticId": "CS8625", + "FormatDescription": "warning CS8625: Cannot convert null literal to non-nullable reference type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 37, + "CharNumber": 16, + "DiagnosticId": "CS8618", + "FormatDescription": "warning CS8618: Non-nullable property \u0027ProcessDataDescription\u0027 must contain a non-null value when exiting constructor. Consider declaring the property as nullable." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 96, + "CharNumber": 29, + "DiagnosticId": "CS8600", + "FormatDescription": "warning CS8600: Converting null literal or possible null value to non-nullable type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 97, + "CharNumber": 20, + "DiagnosticId": "CS8603", + "FormatDescription": "warning CS8603: Possible null reference return." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 178, + "CharNumber": 30, + "DiagnosticId": "CS8600", + "FormatDescription": "warning CS8600: Converting null literal or possible null value to non-nullable type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 467, + "CharNumber": 33, + "DiagnosticId": "CS8600", + "FormatDescription": "warning CS8600: Converting null literal or possible null value to non-nullable type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 469, + "CharNumber": 37, + "DiagnosticId": "CS8600", + "FormatDescription": "warning CS8600: Converting null literal or possible null value to non-nullable type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 323, + "CharNumber": 28, + "DiagnosticId": "CS8600", + "FormatDescription": "warning CS8600: Converting null literal or possible null value to non-nullable type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "7fecd9ea-598f-451d-94c4-c9d8a9cf0d62" + }, + "FileName": "Program.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Program.cs", + "FileChanges": [ + { + "LineNumber": 22, + "CharNumber": 68, + "DiagnosticId": "CS1503", + "FormatDescription": "error CS1503: Argument 1: cannot convert from \u0027method group\u0027 to \u0027IConfigurationRoot\u0027" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "7fecd9ea-598f-451d-94c4-c9d8a9cf0d62" + }, + "FileName": "Program.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Program.cs", + "FileChanges": [ + { + "LineNumber": 27, + "CharNumber": 100, + "DiagnosticId": "CS1503", + "FormatDescription": "error CS1503: Argument 2: cannot convert from \u0027method group\u0027 to \u0027IConfiguration\u0027" + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "12811f79-a5d3-4ec3-9926-a8f6c1c4cdb0" + }, + "FileName": "ProcessDataStandardFormat.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ProcessDataStandardFormat.cs", + "FileChanges": [ + { + "LineNumber": 410, + "CharNumber": 28, + "DiagnosticId": "CS8600", + "FormatDescription": "warning CS8600: Converting null literal or possible null value to non-nullable type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 306, + "CharNumber": 34, + "DiagnosticId": "CS8600", + "FormatDescription": "warning CS8600: Converting null literal or possible null value to non-nullable type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 327, + "CharNumber": 23, + "DiagnosticId": "CS8600", + "FormatDescription": "warning CS8600: Converting null literal or possible null value to non-nullable type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 328, + "CharNumber": 20, + "DiagnosticId": "CS8603", + "FormatDescription": "warning CS8603: Possible null reference return." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "80e113a4-39a6-4f8d-ab89-8771a0664ab4" + }, + "FileName": "Background.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Singleton\\Background.cs", + "FileChanges": [ + { + "LineNumber": 580, + "CharNumber": 39, + "DiagnosticId": "CS8600", + "FormatDescription": "warning CS8600: Converting null literal or possible null value to non-nullable type." + } + ] + }, + { + "DocumentId": { + "ProjectId": { + "Id": "dc6788d5-035c-4ea5-b68f-10ff0669f8af" + }, + "Id": "31bfc11b-c39f-44d9-8b9c-0d2b64ed0936" + }, + "FileName": "ConfigDataBase.cs", + "FilePath": "G:\\Mesa_FI\\APC-Viewer\\APC Viewer\\Shared\\Metrology\\ConfigDataBase.cs", + "FileChanges": [ + { + "LineNumber": 400, + "CharNumber": 27, + "DiagnosticId": "CS8600", + "FormatDescription": "warning CS8600: Converting null literal or possible null value to non-nullable type." + } + ] + } +] \ No newline at end of file diff --git a/APC Viewer/APC Viewer.csproj b/APC Viewer/APC Viewer.csproj index 66a2de1..4c140d5 100644 --- a/APC Viewer/APC Viewer.csproj +++ b/APC Viewer/APC Viewer.csproj @@ -6,12 +6,16 @@ SAK - 9.0 - net6.0 - APCViewer - 5.0.2 OutOfProcess - d71a673c-be39-45b5-ae5f-4c22639be045 + enable + false + 10.0 + enable + APCViewer + win-x64 + net6.0 + + true true true @@ -27,23 +31,35 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + Always + + + Always + + + Always + + \ No newline at end of file diff --git a/APC Viewer/Blazor/Counter.razor b/APC Viewer/Blazor/Counter.razor new file mode 100644 index 0000000..ee23e7a --- /dev/null +++ b/APC Viewer/Blazor/Counter.razor @@ -0,0 +1,16 @@ +

Counter

+ +

+ Current Count: @i +

+ + + +@code { + int i = 0; + + private void IncrementCounter() + { + i += 1; + } +} diff --git a/APC Viewer/Controllers/BackgroundController.cs b/APC Viewer/Controllers/BackgroundController.cs new file mode 100644 index 0000000..c0e39be --- /dev/null +++ b/APC Viewer/Controllers/BackgroundController.cs @@ -0,0 +1,83 @@ +using APCViewer.Models.Stateless.Methods; +using IFX.Shared; +using Microsoft.AspNetCore.Mvc; +using Serilog.Context; +using System.Text.Json; + +namespace APCViewer.Controllers; + +public class BackgroundController : Controller, Models.Properties.IBackgroundController, IBackgroundController +{ + + protected readonly List _Exceptions; + protected readonly string _AppSettingsURLs; + protected readonly string _IsEnvironmentProfile; + protected readonly string _IsPrimaryInstance; + protected readonly string _Message; + protected readonly string _WorkingDirectory; + public List Exceptions => _Exceptions; + public string AppSettingsURLs => _AppSettingsURLs; + public string IsEnvironmentProfile => _IsEnvironmentProfile; + public string IsPrimaryInstance => _IsPrimaryInstance; + public string Message => _Message; + public string WorkingDirectory => _WorkingDirectory; + + private readonly Serilog.ILogger _Log; + private readonly Models.Methods.IBackground _BackgroundMethods; + + public BackgroundController(IsEnvironment isEnvironment, Models.AppSettings appSettings, Singleton.Background background) + { + _Message = background.Message; + _BackgroundMethods = background; + _AppSettingsURLs = appSettings.URLs; + _Exceptions = background.Exceptions; + _IsEnvironmentProfile = isEnvironment.Profile; + _WorkingDirectory = background.WorkingDirectory; + _Log = Serilog.Log.ForContext(); + Models.Methods.IBackground backgroundMethods = background; + _IsPrimaryInstance = backgroundMethods.IsPrimaryInstance().ToString(); + } + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); + return result; + } + + public ActionResult Index(bool? message_clear = null, bool? exceptions_clear = null, bool? set_is_primary_instance = null) + { + string? methodName = IMethodName.GetActualAsyncMethodName(); + using (LogContext.PushProperty("MethodName", methodName)) + { + _Log.Debug("() => ..."); + if (message_clear.HasValue && message_clear.Value) + _BackgroundMethods.ClearMessage(); + if (exceptions_clear.HasValue && exceptions_clear.Value) + _Exceptions.Clear(); + if (set_is_primary_instance.HasValue) + { + if (set_is_primary_instance.Value) + _BackgroundMethods.SetIsPrimaryInstance(); + else + _BackgroundMethods.ClearIsPrimaryInstance(); + } + string message; + if (string.IsNullOrWhiteSpace(_Message)) + message = "N/A"; + else + message = _Message; + List exceptions = new(); + foreach (Exception exception in _Exceptions) + exceptions.Add(exception); + ViewBag.Message = message; + ViewBag.Exceptions = exceptions; + ViewBag.URLs = _AppSettingsURLs; + ViewBag.Profile = _IsEnvironmentProfile; + ViewBag.WorkingDirectory = _WorkingDirectory; + ViewBag.IsPrimaryInstance = _IsPrimaryInstance; + ViewBag.ExceptionsCount = string.Concat("Exception(s) - ", exceptions.Count); + return View(); + } + } + +} \ No newline at end of file diff --git a/APC Viewer/Controllers/HomeController.cs b/APC Viewer/Controllers/HomeController.cs index f6691b7..1ca6ffe 100644 --- a/APC Viewer/Controllers/HomeController.cs +++ b/APC Viewer/Controllers/HomeController.cs @@ -1,352 +1,300 @@ using APCViewer.Models; +using APCViewer.Models.Methods; using APCViewer.Singleton; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -using Shared; using System; using System.Collections.Generic; using System.Diagnostics; -using System.IO; using System.Text; using System.Web; -namespace APCViewer.Controllers +namespace APCViewer.Controllers; + +public class HomeController : Controller, IHomeController { - public class HomeController : Controller, IHomeController + private readonly Serilog.ILogger _Log; + private readonly Background _Background; + private readonly IBackground _BackgroundMethods; + + public HomeController(Background background) { - - private readonly Log _Log; - private readonly Singleton.IBackground _Background; - private readonly IHttpContextAccessor _HttpContextAccessor; - - public HomeController(ILogger logger, Singleton.IBackground background, IHttpContextAccessor httpContextAccessor) - { - _Log = new Log(logger); - _Background = background; - _HttpContextAccessor = httpContextAccessor; - } - - public ActionResult Index() - { - return View(); - } - - public ActionResult Privacy() - { - return View(); - } - - [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] - public ActionResult Error() - { - return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); - } - - public ActionResult Encode(string value = null) - { - string result = string.Empty; - if (!string.IsNullOrEmpty(value)) - result = HttpUtility.UrlEncode(value); - return Content(result, "text/plain"); - } - - public ActionResult Background(bool? message_clear = null, bool? exceptions_clear = null, bool? set_is_primary_instance = null, bool? logistics_clear = null) - { - _Background.SendStatusOk(); - if (message_clear.HasValue && message_clear.Value) - _Background.ClearMessage(); - if (exceptions_clear.HasValue && exceptions_clear.Value) - _Background.Exceptions.Clear(); - if (set_is_primary_instance.HasValue) - { - if (set_is_primary_instance.Value) - _Background.SetIsPrimaryInstance(); - else - _Background.ClearIsPrimaryInstance(); - } - if (logistics_clear.HasValue && logistics_clear.Value) - _Background.LogisticsClear(); - string message; - if (string.IsNullOrWhiteSpace(_Background.Message)) - message = "N/A"; - else - message = _Background.Message; - //Response.AppendToLog(_Background.Message); - List exceptions = new(); - foreach (Exception exception in _Background.Exceptions) - exceptions.Add(exception); - ViewBag.Message = message; - ViewBag.Exceptions = exceptions; - ViewBag.URLs = _Background.AppSettings.URLs; - ViewBag.Profile = _Background.IsEnvironment.Profile; - ViewBag.WorkingDirectory = _Background.WorkingDirectory; - ViewBag.IsPrimaryInstance = _Background.IsPrimaryInstance(); - ViewBag.ExceptionsCount = string.Concat("Exception(s) - ", exceptions.Count); - return View(); - } - - public ActionResult PDSF(string directory = null, string filter = null, bool is_gaN = false, bool is_Si = false) - { - Tuple tuple = _Background.SetViewBag(directory, filter, isGaN: is_gaN, isSi: is_Si, forPDSF: true); - ViewBag.Files = tuple.Item1; - ViewBag.Grouped = tuple.Item2; - ViewBag.Sorted = tuple.Item3; - ViewBag.Directory = tuple.Item4; - return View(); - } - - private StringBuilder GetPDSFHtml(string pdsfFile) - { - StringBuilder result = new(); - result.AppendLine(""); - if (string.IsNullOrEmpty(pdsfFile)) - throw new Exception(""); - else if (!System.IO.File.Exists(pdsfFile)) - result.AppendLine(""); - else - { - bool header = true; - bool body = false; - bool footer = false; - string logisticsSegment; - List logistics = new(); - string[] pdsfLines = System.IO.File.ReadAllLines(pdsfFile); - foreach (string pdsfLine in pdsfLines) - { - if (pdsfLine.StartsWith("LOGISTICS_")) - { - logisticsSegment = pdsfLine.Split('\t')[0]; - if (!logistics.Contains(logisticsSegment)) - { - logistics.Add(logisticsSegment); - result.AppendLine("
Invalid input
File doesn't exist!

"); - } - } - if (pdsfLine.StartsWith("NUM_DATA_ROWS") || pdsfLine.StartsWith("END_HEADER")) - { - body = false; - footer = true; - result.AppendLine("

"); - } - if (header) - result.Append(""); - else if (body) - result.Append(""); - else if (footer) - { - if (pdsfLine.StartsWith("DELIMITER")) - result.Append(""); - else - result.Append(""); - } - else - throw new Exception(); - if (pdsfLine.StartsWith("END_OFFSET")) - { - header = false; - body = true; - result.AppendLine("
").Append(pdsfLine.Replace("\t", "")).AppendLine(" 
").Append(pdsfLine.Replace("\t", "")).AppendLine(" 
").Append(pdsfLine.Replace(";", "")).AppendLine(" 
").Append(pdsfLine.Replace("\t", "").Replace("=", "").Replace(";", "")).AppendLine(" 

"); - } - } - } - result.AppendLine("
"); - return result; - } - - public ContentResult ViewPDSF(string id = null) - { - string pdsfFile; - StringBuilder result = new(); - if (!id.Contains('_')) - result.AppendLine("
A) Error: Invalid input
"); - else - { - if (!long.TryParse(id.Split('_')[1], out long sequence)) - result.AppendLine("
B) Error: Invalid input
"); - else - { - pdsfFile = _Background.GetPDSF(sequence); - result = GetPDSFHtml(pdsfFile); - } - } - return Content(result.ToString(), "text/html"); - } - - public ActionResult DownloadPDSF(string id = null) - { - string pdsfFile; - if (!id.Contains('_')) - throw new Exception("A) Error: Invalid input"); - else - { - if (!long.TryParse(id.Split('_')[1], out long sequence)) - throw new Exception("B) Error: Invalid input"); - else - pdsfFile = _Background.GetPDSF(sequence); - } - return File(pdsfFile, "text/plain", Path.GetFileName(pdsfFile)); - } - - public ContentResult ViewCustomPDSF(string pdsf_file = null) - { - StringBuilder result = GetPDSFHtml(pdsf_file); - return Content(result.ToString(), "text/html"); - } - - public ActionResult DownloadCustomPDSF(string pdsf_file = null) - { - if (string.IsNullOrEmpty(pdsf_file)) - throw new Exception("Error: Invalid input"); - else if (!System.IO.File.Exists(pdsf_file)) - throw new Exception("Error: file does not exist"); - return File(pdsf_file, "text/plain", Path.GetFileName(pdsf_file)); - } - - public ActionResult IPDSF(string directory = null, string filter = null, bool is_gaN = false, bool is_Si = false) - { - Tuple tuple = _Background.SetViewBag(directory, filter, isGaN: is_gaN, isSi: is_Si, forIPDSF: true); - ViewBag.Files = tuple.Item1; - ViewBag.Grouped = tuple.Item2; - ViewBag.Sorted = tuple.Item3; - ViewBag.Directory = tuple.Item4; - return View(); - } - - private StringBuilder GetIPDSFHtml(string ipdsfFile) - { - StringBuilder result = new(); - result.AppendLine(""); - if (string.IsNullOrEmpty(ipdsfFile)) - throw new Exception(""); - else if (!System.IO.File.Exists(ipdsfFile)) - result.AppendLine(""); - else - { - bool header = true; - bool body = false; - bool footer = false; - string logisticsSegment; - List logistics = new(); - string[] ipdsfLines = System.IO.File.ReadAllLines(ipdsfFile); - foreach (string ipdsfLine in ipdsfLines) - { - if (ipdsfLine.StartsWith("LOGISTICS_")) - { - logisticsSegment = ipdsfLine.Split('\t')[0]; - if (!logistics.Contains(logisticsSegment)) - { - logistics.Add(logisticsSegment); - result.AppendLine("
Invalid input
File doesn't exist!

"); - } - } - if (ipdsfLine.StartsWith("NUM_DATA_ROWS") || ipdsfLine.StartsWith("END_HEADER")) - { - body = false; - footer = true; - result.AppendLine("

"); - } - if (header) - result.Append(""); - else if (body) - result.Append(""); - else if (footer) - { - if (ipdsfLine.StartsWith("DELIMITER")) - result.Append(""); - else - result.Append(""); - } - else - throw new Exception(); - if (ipdsfLine.StartsWith("END_OFFSET")) - { - header = false; - body = true; - result.AppendLine("
").Append(ipdsfLine.Replace("\t", "")).AppendLine(" 
").Append(ipdsfLine.Replace("\t", "")).AppendLine(" 
").Append(ipdsfLine.Replace(";", "")).AppendLine(" 
").Append(ipdsfLine.Replace("\t", "").Replace("=", "").Replace(";", "")).AppendLine(" 

"); - } - } - } - result.AppendLine("
"); - return result; - } - - public ContentResult ViewIPDSF(string id = null) - { - string ipdsfFile; - StringBuilder result = new(); - if (!id.Contains('_')) - result.AppendLine("
A) Error: Invalid input
"); - else - { - if (!long.TryParse(id.Split('_')[1], out long sequence)) - result.AppendLine("
B) Error: Invalid input
"); - else - { - ipdsfFile = _Background.GetIPDSF(sequence); - result = GetIPDSFHtml(ipdsfFile); - } - } - return Content(result.ToString(), "text/html"); - } - - public ActionResult DownloadIPDSF(string id = null) - { - string ipdsfFile; - if (!id.Contains('_')) - throw new Exception("A) Error: Invalid input"); - else - { - if (!long.TryParse(id.Split('_')[1], out long sequence)) - throw new Exception("B) Error: Invalid input"); - else - ipdsfFile = _Background.GetIPDSF(sequence); - } - return File(ipdsfFile, "text/plain", Path.GetFileName(ipdsfFile)); - } - - public ContentResult ViewCustomIPDSF(string ipdsf_file = null) - { - StringBuilder result = GetIPDSFHtml(ipdsf_file); - return Content(result.ToString(), "text/html"); - } - - public ActionResult DownloadCustomIPDSF(string ipdsf_file = null) - { - if (string.IsNullOrEmpty(ipdsf_file)) - throw new Exception("Error: Invalid input"); - else if (!System.IO.File.Exists(ipdsf_file)) - throw new Exception("Error: file does not exist"); - return File(ipdsf_file, "text/plain", Path.GetFileName(ipdsf_file)); - } - - public ActionResult TimePivot(bool is_gaN = false, bool is_Si = false) - { - Tuple, List> tuple = _Background.GetTimePivot(isGaN: is_gaN, isSi: is_Si); - ViewBag.forIPDSF = tuple.Item1; - ViewBag.forPDSF = tuple.Item2; - return View(); - } - - IActionResult IHomeController.Background(bool? message_clear, bool? exceptions_clear, bool? set_is_primary_instance, bool? logistics_clear) => throw new NotImplementedException(); - IActionResult IHomeController.DownloadCustomIPDSF(string ipdsf_file) => throw new NotImplementedException(); - IActionResult IHomeController.DownloadCustomPDSF(string pdsf_file) => throw new NotImplementedException(); - IActionResult IHomeController.DownloadIPDSF(string id) => throw new NotImplementedException(); - IActionResult IHomeController.DownloadPDSF(string id) => throw new NotImplementedException(); - IActionResult IHomeController.Encode(string value) => throw new NotImplementedException(); - IActionResult IHomeController.Error() => throw new NotImplementedException(); - IActionResult IHomeController.Index() => throw new NotImplementedException(); - IActionResult IHomeController.IPDSF(string directory, string filter, bool is_gaN, bool is_Si) => throw new NotImplementedException(); - IActionResult IHomeController.PDSF(string directory, string filter, bool is_gaN, bool is_Si) => throw new NotImplementedException(); - IActionResult IHomeController.Privacy() => throw new NotImplementedException(); - IActionResult IHomeController.TimePivot(bool is_gaN, bool is_Si) => throw new NotImplementedException(); + _Background = background; + _BackgroundMethods = background; + _Log = Serilog.Log.ForContext(); } -} -// dotnet publish --configuration Release --runtime win-x64 --verbosity normal --self-contained true -o "L:\net5.0\APCViewer" -// dotnet publish --configuration Release --runtime win-x64 --verbosity normal --self-contained true -o "D:\net5.0\APCViewer" -// dotnet publish --configuration Release --runtime win-x64 --verbosity normal --self-contained true -o "D:\.jenkins\publish\manual-Mesa-0\APCViewer" -//http://mestsa005.infineon.com:8080/job/Mesa/buildWithParameters?token=DotnetRules&projectName=APC%20Viewer -// http://mestsa02ec.ec.local:8080/job/Mesa/buildWithParameters?token=DotnetRules&projectName=APC%20Viewer -//sc create APCViewer_5003 binPath="D:\.jenkins\publish\manual-Mesa-0\APCViewer\APC Viewer.exe" \ No newline at end of file + public ActionResult Index() => View(); + + public ActionResult Privacy() => View(); + + [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] + public ActionResult Error() => View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); + + public ActionResult Encode(string value = "") + { + string result = string.Empty; + if (!string.IsNullOrEmpty(value)) + result = HttpUtility.UrlEncode(value); + return Content(result, "text/plain"); + } + + public ActionResult TestTry() + { + ActionResult result; + try + { + throw new Exception("This is a test"); + } + catch (Exception ex) + { + result = Content(string.Concat(ex.Message, Environment.NewLine, Environment.NewLine, ex.StackTrace)); + } + return result; + } + + public ActionResult PDSF(string? directory = null, string? filter = null, bool is_gaN = false, bool is_Si = false) + { + Tuple tuple = _Background.SetViewBag(directory, filter, isGaN: is_gaN, isSi: is_Si, forPDSF: true); + ViewBag.Files = tuple.Item1; + ViewBag.Grouped = tuple.Item2; + ViewBag.Sorted = tuple.Item3; + ViewBag.Directory = tuple.Item4; + return View(); + } + + private static StringBuilder GetPDSFHtml(string? pdsfFile) + { + StringBuilder result = new(); + _ = result.AppendLine(""); + if (string.IsNullOrEmpty(pdsfFile)) + throw new Exception(""); + else if (!System.IO.File.Exists(pdsfFile)) + _ = result.AppendLine(""); + else + { + bool header = true; + bool body = false; + bool footer = false; + string logisticsSegment; + List logistics = new(); + string[] pdsfLines = System.IO.File.ReadAllLines(pdsfFile); + foreach (string pdsfLine in pdsfLines) + { + if (pdsfLine.StartsWith("LOGISTICS_")) + { + logisticsSegment = pdsfLine.Split('\t')[0]; + if (!logistics.Contains(logisticsSegment)) + { + logistics.Add(logisticsSegment); + _ = result.AppendLine("
Invalid input
File doesn't exist!

"); + } + } + if (pdsfLine.StartsWith("NUM_DATA_ROWS") || pdsfLine.StartsWith("END_HEADER")) + { + body = false; + footer = true; + _ = result.AppendLine("

"); + } + if (header) + _ = result.Append(""); + else if (body) + _ = result.Append(""); + else if (footer) + { + if (pdsfLine.StartsWith("DELIMITER")) + _ = result.Append(""); + else + _ = result.Append(""); + } + else + throw new Exception(); + if (pdsfLine.StartsWith("END_OFFSET")) + { + header = false; + body = true; + _ = result.AppendLine("
").Append(pdsfLine.Replace("\t", "")).AppendLine(" 
").Append(pdsfLine.Replace("\t", "")).AppendLine(" 
").Append(pdsfLine.Replace(";", "")).AppendLine(" 
").Append(pdsfLine.Replace("\t", "").Replace("=", "").Replace(";", "")).AppendLine(" 

"); + } + } + } + _ = result.AppendLine("
"); + return result; + } + + public ContentResult ViewPDSF(string? id = null) + { + string pdsfFile; + StringBuilder result = new(); + if (string.IsNullOrEmpty(id) || !id.Contains('_')) + _ = result.AppendLine("
A) Error: Invalid input
"); + else + { + if (!long.TryParse(id.Split('_')[1], out long sequence)) + _ = result.AppendLine("
B) Error: Invalid input
"); + else + { + pdsfFile = _Background.GetPDSF(sequence); + result = GetPDSFHtml(pdsfFile); + } + } + return Content(result.ToString(), "text/html"); + } + + public ActionResult DownloadPDSF(string? id = null) + { + string pdsfFile; + if (string.IsNullOrEmpty(id) || !id.Contains('_')) + throw new Exception("A) Error: Invalid input"); + else + { + if (!long.TryParse(id.Split('_')[1], out long sequence)) + throw new Exception("B) Error: Invalid input"); + else + pdsfFile = _Background.GetPDSF(sequence); + } + return File(pdsfFile, "text/plain", Path.GetFileName(pdsfFile)); + } + + public ContentResult ViewCustomPDSF(string? pdsf_file = null) + { + StringBuilder result = GetPDSFHtml(pdsf_file); + return Content(result.ToString(), "text/html"); + } + + public ActionResult DownloadCustomPDSF(string? pdsf_file = null) + { + if (string.IsNullOrEmpty(pdsf_file)) + throw new Exception("Error: Invalid input"); + else if (!System.IO.File.Exists(pdsf_file)) + throw new Exception("Error: file does not exist"); + return File(pdsf_file, "text/plain", Path.GetFileName(pdsf_file)); + } + + public ActionResult IPDSF(string? directory = null, string? filter = null, bool is_gaN = false, bool is_Si = false) + { + Tuple tuple = _Background.SetViewBag(directory, filter, isGaN: is_gaN, isSi: is_Si, forIPDSF: true); + ViewBag.Files = tuple.Item1; + ViewBag.Grouped = tuple.Item2; + ViewBag.Sorted = tuple.Item3; + ViewBag.Directory = tuple.Item4; + return View(); + } + + private static StringBuilder GetIPDSFHtml(string? ipdsfFile) + { + StringBuilder result = new(); + _ = result.AppendLine(""); + if (string.IsNullOrEmpty(ipdsfFile)) + throw new Exception(""); + else if (!System.IO.File.Exists(ipdsfFile)) + _ = result.AppendLine(""); + else + { + bool header = true; + bool body = false; + bool footer = false; + string logisticsSegment; + List logistics = new(); + string[] ipdsfLines = System.IO.File.ReadAllLines(ipdsfFile); + foreach (string ipdsfLine in ipdsfLines) + { + if (ipdsfLine.StartsWith("LOGISTICS_")) + { + logisticsSegment = ipdsfLine.Split('\t')[0]; + if (!logistics.Contains(logisticsSegment)) + { + logistics.Add(logisticsSegment); + _ = result.AppendLine("
Invalid input
File doesn't exist!

"); + } + } + if (ipdsfLine.StartsWith("NUM_DATA_ROWS") || ipdsfLine.StartsWith("END_HEADER")) + { + body = false; + footer = true; + _ = result.AppendLine("

"); + } + if (header) + _ = result.Append(""); + else if (body) + _ = result.Append(""); + else if (footer) + { + if (ipdsfLine.StartsWith("DELIMITER")) + _ = result.Append(""); + else + _ = result.Append(""); + } + else + throw new Exception(); + if (ipdsfLine.StartsWith("END_OFFSET")) + { + header = false; + body = true; + _ = result.AppendLine("
").Append(ipdsfLine.Replace("\t", "")).AppendLine(" 
").Append(ipdsfLine.Replace("\t", "")).AppendLine(" 
").Append(ipdsfLine.Replace(";", "")).AppendLine(" 
").Append(ipdsfLine.Replace("\t", "").Replace("=", "").Replace(";", "")).AppendLine(" 

"); + } + } + } + _ = result.AppendLine("
"); + return result; + } + + public ContentResult ViewIPDSF(string? id = null) + { + string ipdsfFile; + StringBuilder result = new(); + if (string.IsNullOrEmpty(id) || !id.Contains('_')) + _ = result.AppendLine("
A) Error: Invalid input
"); + else + { + if (!long.TryParse(id.Split('_')[1], out long sequence)) + _ = result.AppendLine("
B) Error: Invalid input
"); + else + { + ipdsfFile = _Background.GetIPDSF(sequence); + result = GetIPDSFHtml(ipdsfFile); + } + } + return Content(result.ToString(), "text/html"); + } + + public ActionResult DownloadIPDSF(string? id = null) + { + string ipdsfFile; + if (string.IsNullOrEmpty(id) || !id.Contains('_')) + throw new Exception("A) Error: Invalid input"); + else + { + if (!long.TryParse(id.Split('_')[1], out long sequence)) + throw new Exception("B) Error: Invalid input"); + else + ipdsfFile = _Background.GetIPDSF(sequence); + } + return File(ipdsfFile, "text/plain", Path.GetFileName(ipdsfFile)); + } + + public ContentResult ViewCustomIPDSF(string? ipdsf_file = null) + { + StringBuilder result = GetIPDSFHtml(ipdsf_file); + return Content(result.ToString(), "text/html"); + } + + public ActionResult DownloadCustomIPDSF(string? ipdsf_file = null) + { + if (string.IsNullOrEmpty(ipdsf_file)) + throw new Exception("Error: Invalid input"); + else if (!System.IO.File.Exists(ipdsf_file)) + throw new Exception("Error: file does not exist"); + return File(ipdsf_file, "text/plain", Path.GetFileName(ipdsf_file)); + } + + public ActionResult TimePivot(bool is_gaN = false, bool is_Si = false) + { + Tuple, List> tuple = _Background.GetTimePivot(isGaN: is_gaN, isSi: is_Si); + ViewBag.forIPDSF = tuple.Item1; + ViewBag.forPDSF = tuple.Item2; + return View(); + } + +} \ No newline at end of file diff --git a/APC Viewer/GlobalSuppressions.cs b/APC Viewer/GlobalSuppressions.cs deleted file mode 100644 index 74f319c..0000000 --- a/APC Viewer/GlobalSuppressions.cs +++ /dev/null @@ -1,9 +0,0 @@ -// This file is used by Code Analysis to maintain SuppressMessage -// attributes that are applied to this project. -// Project-level suppressions either have no target or are given -// a specific target and scoped to a namespace, type, member, etc. - -using System.Diagnostics.CodeAnalysis; - -[assembly: SuppressMessage("Performance", "CA1822:Mark members as static", Justification = "", Scope = "member", Target = "~M:APCViewer.Controllers.HomeController.GetPDSFHtml(System.String)~System.Text.StringBuilder")] -[assembly: SuppressMessage("Performance", "CA1822:Mark members as static", Justification = "", Scope = "member", Target = "~M:APCViewer.Controllers.HomeController.GetIPDSFHtml(System.String)~System.Text.StringBuilder")] \ No newline at end of file diff --git a/APC Viewer/HostedService/TimedHostedService.cs b/APC Viewer/HostedService/TimedHostedService.cs index 49f0f19..64bb56f 100644 --- a/APC Viewer/HostedService/TimedHostedService.cs +++ b/APC Viewer/HostedService/TimedHostedService.cs @@ -1,168 +1,168 @@ -using APCViewer.Singleton; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; -using System; +using APCViewer.Models.Methods; +using APCViewer.Models.Stateless; +using APCViewer.Models.Stateless.Methods; +using APCViewer.Singleton; +using IFX.Shared; +using Serilog.Context; using System.Diagnostics; -using System.IO; -using System.Net; -using System.Threading; -using System.Threading.Tasks; -namespace APCViewer.HostedService +namespace APCViewer.HostedService; + +public class TimedHostedService : IHostedService { - public class TimedHostedService : IHostedService, IDisposable + private readonly Timer _APCDataTimer; + private readonly Timer _EDADataTimer; + private readonly Timer _EAFLogDataTimer; + private readonly int _ExecutionCount; + private readonly List _Timers; + private readonly Serilog.ILogger _Log; + private readonly Background _Background; + private readonly IsEnvironment _IsEnvironment; + private readonly IBackground _BackgroundMethods; + + public TimedHostedService(IsEnvironment isEnvironment, Background background) { + _Timers = new(); + _ExecutionCount = 0; + _Background = background; + _IsEnvironment = isEnvironment; + _BackgroundMethods = background; + _Log = Serilog.Log.ForContext(); + _APCDataTimer = new Timer(APCDataCallback, null, Timeout.Infinite, Timeout.Infinite); + _EAFLogDataTimer = new Timer(EAFLogDataCallback, null, Timeout.Infinite, Timeout.Infinite); + _EDADataTimer = new Timer(EDADataCallback, null, Timeout.Infinite, Timeout.Infinite); + } - private readonly int _ExecutionCount; - private readonly WebClient _WebClient; - private readonly Background _Background; - private readonly IConfiguration _Configuration; - private readonly ILogger _Log; - - private Timer _APCDataTimer; - private Timer _EDADataTimer; - private Timer _EAFLogDataTimer; - - public TimedHostedService(Background background, IConfiguration configuration, IServiceProvider serviceProvider) + public Task StartAsync(CancellationToken stoppingToken) + { + string? methodName = IMethodName.GetActualAsyncMethodName(); + using (LogContext.PushProperty("MethodName", methodName)) { - _ExecutionCount = 0; - _Background = background; - _Configuration = configuration; - _WebClient = serviceProvider.GetRequiredService(); - _Log = serviceProvider.GetRequiredService>(); - //_HttpContextAccessor = serviceProvider.GetRequiredService(); - _WebClient = serviceProvider.GetRequiredService(); - } - - public Task StartAsync(CancellationToken stoppingToken) - { - _Log.LogInformation(string.Concat("Timed Hosted Service: ", nameof(Background), ":", _Background.IsEnvironment.Profile, ":", Environment.ProcessId, " running.")); - _Background.Update(_Log, _WebClient); - if (_Background.IsEnvironment.Development) + _Log.Info(string.Concat("Timed Hosted Service: ", _IsEnvironment.Profile, ":", Environment.ProcessId, " running.")); + int milliSeconds = 3000; + if (_IsEnvironment.Development) { - int milliSeconds = 3000; if (milliSeconds == 0) { } } - else if (_Background.IsEnvironment.Staging) + else if (_IsEnvironment.Staging) { - int milliSeconds = 3000; - _APCDataTimer = new Timer(APCDataCallback, null, milliSeconds, Timeout.Infinite); - _Background.Timers.Add(_APCDataTimer); + _ = _APCDataTimer.Change(milliSeconds, Timeout.Infinite); + _Timers.Add(_APCDataTimer); milliSeconds += 2000; - _EAFLogDataTimer = new Timer(EAFLogDataCallback, null, milliSeconds, Timeout.Infinite); - _Background.Timers.Add(_EAFLogDataTimer); + _ = _EAFLogDataTimer.Change(milliSeconds, Timeout.Infinite); + _Timers.Add(_EAFLogDataTimer); milliSeconds += 2000; - _EDADataTimer = new Timer(EDADataCallback, null, milliSeconds, Timeout.Infinite); - _Background.Timers.Add(_EDADataTimer); + _ = _EDADataTimer.Change(milliSeconds, Timeout.Infinite); + _Timers.Add(_EDADataTimer); milliSeconds += 2000; } - else if (_Background.IsEnvironment.Production) + else if (_IsEnvironment.Production) { - int milliSeconds = 3000; - _APCDataTimer = new Timer(APCDataCallback, null, milliSeconds, Timeout.Infinite); - _Background.Timers.Add(_APCDataTimer); + _ = _APCDataTimer.Change(milliSeconds, Timeout.Infinite); + _Timers.Add(_APCDataTimer); milliSeconds += 2000; - _EAFLogDataTimer = new Timer(EAFLogDataCallback, null, milliSeconds, Timeout.Infinite); - _Background.Timers.Add(_EAFLogDataTimer); + _ = _EAFLogDataTimer.Change(milliSeconds, Timeout.Infinite); + _Timers.Add(_EAFLogDataTimer); milliSeconds += 2000; - _EDADataTimer = new Timer(EDADataCallback, null, milliSeconds, Timeout.Infinite); - _Background.Timers.Add(_EDADataTimer); + _ = _EDADataTimer.Change(milliSeconds, Timeout.Infinite); + _Timers.Add(_EDADataTimer); milliSeconds += 2000; } else throw new Exception(); - if (_Background.IsEnvironment.Staging || _Background.IsEnvironment.Production) - { - string countDirectory = _Background.GetCountDirectory("Start"); - string checkDirectory = Path.GetPathRoot(countDirectory); - if (Directory.Exists(checkDirectory)) - Directory.CreateDirectory(countDirectory); - } - return Task.CompletedTask; } + return Task.CompletedTask; + } - public Task StopAsync(CancellationToken stoppingToken) + public Task StopAsync(CancellationToken stoppingToken) + { + string? methodName = IMethodName.GetActualAsyncMethodName(); + using (LogContext.PushProperty("MethodName", methodName)) { - _Log.LogInformation(string.Concat("Timed Hosted Service: ", nameof(Background), ":", _Background.IsEnvironment.Profile, ":", Environment.ProcessId, " is stopping.")); - _Background.Stop(immediate: true); + _Log.Info(string.Concat("Timed Hosted Service: ", _IsEnvironment.Profile, ":", Environment.ProcessId, " is stopping.")); + _BackgroundMethods.Stop(immediate: true); for (short i = 0; i < short.MaxValue; i++) { Thread.Sleep(500); if (_ExecutionCount == 0) break; } - return Task.CompletedTask; } + return Task.CompletedTask; + } - public void Dispose() + private void APCDataCallback(object? state) + { + try { - _Background.Dispose(); - } - - private void APCDataCallback(object state) - { - try + string? methodName = IMethodName.GetActualAsyncMethodName(); + using (LogContext.PushProperty("MethodName", methodName)) { - if (_Background.IsPrimaryInstance()) + if (_BackgroundMethods.IsPrimaryInstance()) _Background.APCDataCallback(); } - catch (Exception e) { _Background.Catch(e); } - try - { - TimeSpan timeSpan; - if (!_Background.IsPrimaryInstance()) - timeSpan = new TimeSpan(DateTime.Now.AddSeconds(15).Ticks - DateTime.Now.Ticks); - else - timeSpan = new TimeSpan(DateTime.Now.AddMinutes(1).Ticks - DateTime.Now.Ticks); - _APCDataTimer.Change((int)timeSpan.TotalMilliseconds, Timeout.Infinite); - } - catch (Exception e) { _Background.Catch(e); } } - - private void EDADataCallback(object state) + catch (Exception e) { _Log.Error(e, "Error: "); } + try { - try + TimeSpan timeSpan; + if (!_BackgroundMethods.IsPrimaryInstance()) + timeSpan = new TimeSpan(DateTime.Now.AddSeconds(15).Ticks - DateTime.Now.Ticks); + else + timeSpan = new TimeSpan(DateTime.Now.AddMinutes(1).Ticks - DateTime.Now.Ticks); + _ = _APCDataTimer.Change((int)timeSpan.TotalMilliseconds, Timeout.Infinite); + } + catch (Exception e) { _Log.Error(e, "Error: "); } + } + + private void EDADataCallback(object? state) + { + try + { + string? methodName = IMethodName.GetActualAsyncMethodName(); + using (LogContext.PushProperty("MethodName", methodName)) { - if (_Background.IsPrimaryInstance()) + if (_BackgroundMethods.IsPrimaryInstance()) _Background.EDADataCallback(); } - catch (Exception e) { _Background.Catch(e); } - try - { - TimeSpan timeSpan; - if (!_Background.IsPrimaryInstance()) - timeSpan = new TimeSpan(DateTime.Now.AddSeconds(15).Ticks - DateTime.Now.Ticks); - else - timeSpan = new TimeSpan(DateTime.Now.AddMinutes(1).Ticks - DateTime.Now.Ticks); - _EDADataTimer.Change((int)timeSpan.TotalMilliseconds, Timeout.Infinite); - } - catch (Exception e) { _Background.Catch(e); } } - - private void EAFLogDataCallback(object state) + catch (Exception e) { _Log.Error(e, "Error: "); } + try { - try + TimeSpan timeSpan; + if (!_BackgroundMethods.IsPrimaryInstance()) + timeSpan = new TimeSpan(DateTime.Now.AddSeconds(15).Ticks - DateTime.Now.Ticks); + else + timeSpan = new TimeSpan(DateTime.Now.AddMinutes(1).Ticks - DateTime.Now.Ticks); + _ = _EDADataTimer.Change((int)timeSpan.TotalMilliseconds, Timeout.Infinite); + } + catch (Exception e) { _Log.Error(e, "Error: "); } + } + + private void EAFLogDataCallback(object? state) + { + try + { + string? methodName = IMethodName.GetActualAsyncMethodName(); + using (LogContext.PushProperty("MethodName", methodName)) { - if (_Background.IsPrimaryInstance()) + if (_BackgroundMethods.IsPrimaryInstance()) _Background.EAFLogDataCallback(); } - catch (Exception e) { _Background.Catch(e); } - try - { - TimeSpan timeSpan; - if (!_Background.IsPrimaryInstance()) - timeSpan = new TimeSpan(DateTime.Now.AddSeconds(15).Ticks - DateTime.Now.Ticks); - else - timeSpan = new TimeSpan(DateTime.Now.AddMinutes(1).Ticks - DateTime.Now.Ticks); - _EAFLogDataTimer.Change((int)timeSpan.TotalMilliseconds, Timeout.Infinite); - } - catch (Exception e) { _Background.Catch(e); } } - + catch (Exception e) { _Log.Error(e, "Error: "); } + try + { + TimeSpan timeSpan; + if (!_BackgroundMethods.IsPrimaryInstance()) + timeSpan = new TimeSpan(DateTime.Now.AddSeconds(15).Ticks - DateTime.Now.Ticks); + else + timeSpan = new TimeSpan(DateTime.Now.AddMinutes(1).Ticks - DateTime.Now.Ticks); + _ = _EAFLogDataTimer.Change((int)timeSpan.TotalMilliseconds, Timeout.Infinite); + } + catch (Exception e) { _Log.Error(e, "Error: "); } } } \ No newline at end of file diff --git a/APC Viewer/IFX/Shared/IsEnvironment.cs b/APC Viewer/IFX/Shared/IsEnvironment.cs new file mode 100644 index 0000000..403cdda --- /dev/null +++ b/APC Viewer/IFX/Shared/IsEnvironment.cs @@ -0,0 +1,167 @@ +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace IFX.Shared; + +public class IsEnvironment +{ + + public enum Name + { + LinuxDevelopment, + LinuxProduction, + LinuxStaging, + OSXDevelopment, + OSXProduction, + OSXStaging, + WindowsDevelopment, + WindowsProduction, + WindowsStaging + } + + public bool DebuggerWasAttachedDuringConstructor { get; private set; } + public bool Development { get; private set; } + public bool Linux { get; private set; } + public bool OSX { get; private set; } + public bool Production { get; private set; } + public bool Staging { get; private set; } + public bool Windows { get; private set; } + public string Profile { get; private set; } + public string AppSettingsFileName { get; private set; } + public string? ASPNetCoreEnvironment { get; private set; } + + public IsEnvironment(string testCategory) + { + if (testCategory.EndsWith(".json")) + { + Production = testCategory == "appsettings.json"; + Staging = testCategory.EndsWith(nameof(Staging)); + OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); + Development = testCategory.EndsWith(nameof(Development)); + Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + } + else + { + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + OSX = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(OSX)); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + Linux = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(Linux)); + Staging = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Staging)); + Windows = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(Windows)); + Production = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Production)); + Development = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Development)); + } + Profile = GetProfile(); + AppSettingsFileName = GetAppSettingsFileName(processesCount: null); + } + + public IsEnvironment(bool isDevelopment, bool isStaging, bool isProduction) + { + Staging = isStaging; + Production = isProduction; + Development = isDevelopment; + OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); + Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + Profile = GetProfile(); + AppSettingsFileName = GetAppSettingsFileName(processesCount: null); + } + + public IsEnvironment(int? processesCount, bool nullASPNetCoreEnvironmentIsDevelopment, bool nullASPNetCoreEnvironmentIsProduction) + { + OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); + Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + if (nullASPNetCoreEnvironmentIsDevelopment && nullASPNetCoreEnvironmentIsProduction) + throw new Exception(); + else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && nullASPNetCoreEnvironmentIsProduction) + Production = true; + else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && nullASPNetCoreEnvironmentIsDevelopment) + Development = true; + else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && !nullASPNetCoreEnvironmentIsDevelopment && !nullASPNetCoreEnvironmentIsProduction) + throw new Exception(); + else + { + Staging = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Staging)); + Production = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Production)); + Development = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Development)); + } + Profile = GetProfile(); + AppSettingsFileName = GetAppSettingsFileName(processesCount); + } + + private string GetProfile() + { + string result; + if (Windows && Production) + result = nameof(Production); + else if (Windows && Staging) + result = nameof(Staging); + else if (Windows && Development) + result = nameof(Development); + else if (Linux && Production) + result = nameof(Name.LinuxProduction); + else if (Linux && Staging) + result = nameof(Name.LinuxStaging); + else if (Linux && Development) + result = nameof(Name.LinuxDevelopment); + else if (OSX && Production) + result = nameof(Name.OSXProduction); + else if (OSX && Staging) + result = nameof(Name.OSXStaging); + else if (OSX && Development) + result = nameof(Name.OSXDevelopment); + else + throw new Exception(); + return result; + } + + private string GetAppSettingsFileName(int? processesCount) + { + string result; + if (Production) + { + if (processesCount is null) + result = "appsettings.json"; + else + result = $"appsettings.{processesCount}.json"; + } + else + { + string environment; + if (Staging) + environment = nameof(Staging); + else if (Development) + environment = nameof(Development); + else + throw new Exception(); + if (processesCount is null) + result = $"appsettings.{environment}.json"; + else + result = $"appsettings.{environment}.{processesCount}.json"; + } + return result; + } + + public static string GetEnvironmentName(IsEnvironment isEnvironment) + { + string result; + if (isEnvironment.Windows) + result = nameof(IsEnvironment.Windows); + else if (isEnvironment.Linux) + result = nameof(IsEnvironment.Linux); + else if (isEnvironment.OSX) + result = nameof(IsEnvironment.OSX); + else + throw new Exception(); + return result; + } + +} \ No newline at end of file diff --git a/APC Viewer/IFX/Shared/RijndaelEncryption.cs b/APC Viewer/IFX/Shared/RijndaelEncryption.cs new file mode 100644 index 0000000..1ebbf72 --- /dev/null +++ b/APC Viewer/IFX/Shared/RijndaelEncryption.cs @@ -0,0 +1,93 @@ +#pragma warning disable SYSLIB0022 + +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; + +namespace IFX.Shared; + +public static class RijndaelEncryption +{ + /// + /// Change the Inputkey GUID when you use this code in your own program. + /// Keep this inputkey very safe and prevent someone from decoding it some way!! + /// Generated 2021-08-10 + /// + internal const string _Inputkey = "970CCEF6-4307-4F6A-9AC8-377DADB889BD"; + + /// + /// Encrypt the given text and give the byte array back as a BASE64 string + /// + /// The text to encrypt + /// The pasword salt + /// The encrypted text + public static string Encrypt(string text, string salt) + { + string result; + if (string.IsNullOrEmpty(text)) + throw new ArgumentNullException(nameof(text)); + RijndaelManaged aesAlg = NewRijndaelManaged(salt); + ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); + MemoryStream msEncrypt = new(); + using (CryptoStream csEncrypt = new(msEncrypt, encryptor, CryptoStreamMode.Write)) + using (StreamWriter swEncrypt = new(csEncrypt)) + swEncrypt.Write(text); + result = Convert.ToBase64String(msEncrypt.ToArray()); + return result; + } + + /// + /// Checks if a string is base64 encoded + /// + /// The base64 encoded string + /// + public static bool IsBase64String(string base64String) + { + bool result; + base64String = base64String.Trim(); + result = (base64String.Length % 4 == 0) && Regex.IsMatch(base64String, @"^[a-zA-Z0-9\+/]*={0,3}$", RegexOptions.None); + return result; + } + + /// + /// Decrypts the given text + /// + /// The encrypted BASE64 text + /// The pasword salt + /// De gedecrypte text + public static string Decrypt(string cipherText, string salt) + { + if (string.IsNullOrEmpty(cipherText)) + throw new ArgumentNullException(nameof(cipherText)); + if (!IsBase64String(cipherText)) + throw new Exception("The cipherText input parameter is not base64 encoded"); + string text; + RijndaelManaged aesAlg = NewRijndaelManaged(salt); + ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); + byte[] cipher = Convert.FromBase64String(cipherText); + using (MemoryStream msDecrypt = new(cipher)) + { + using CryptoStream csDecrypt = new(msDecrypt, decryptor, CryptoStreamMode.Read); + using StreamReader srDecrypt = new(csDecrypt); + text = srDecrypt.ReadToEnd(); + } + return text; + } + + /// + /// Create a new RijndaelManaged class and initialize it + /// + /// The pasword salt + /// + private static RijndaelManaged NewRijndaelManaged(string salt) + { + if (salt == null) + throw new ArgumentNullException(nameof(salt)); + byte[] saltBytes = Encoding.ASCII.GetBytes(salt); + Rfc2898DeriveBytes key = new(_Inputkey, saltBytes); + RijndaelManaged aesAlg = new(); + aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); + aesAlg.IV = key.GetBytes(aesAlg.BlockSize / 8); + return aesAlg; + } +} \ No newline at end of file diff --git a/APC Viewer/Library/Eaf/Core/AutoGenerated/BackboneComponent.cs b/APC Viewer/Library/Eaf/Core/AutoGenerated/BackboneComponent.cs index 02f026c..520150f 100644 --- a/APC Viewer/Library/Eaf/Core/AutoGenerated/BackboneComponent.cs +++ b/APC Viewer/Library/Eaf/Core/AutoGenerated/BackboneComponent.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.Core +namespace Library.Eaf.Core; + +public class BackboneComponent { - public class BackboneComponent - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/Core/AutoGenerated/BackboneStatusCache.cs b/APC Viewer/Library/Eaf/Core/AutoGenerated/BackboneStatusCache.cs index 3f03747..5694a36 100644 --- a/APC Viewer/Library/Eaf/Core/AutoGenerated/BackboneStatusCache.cs +++ b/APC Viewer/Library/Eaf/Core/AutoGenerated/BackboneStatusCache.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.Core +namespace Library.Eaf.Core; + +public class BackboneStatusCache { - public class BackboneStatusCache - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/Core/AutoGenerated/ILoggingSetupManager.cs b/APC Viewer/Library/Eaf/Core/AutoGenerated/ILoggingSetupManager.cs index d8de627..2f6c72c 100644 --- a/APC Viewer/Library/Eaf/Core/AutoGenerated/ILoggingSetupManager.cs +++ b/APC Viewer/Library/Eaf/Core/AutoGenerated/ILoggingSetupManager.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.Core +namespace Library.Eaf.Core; + +public interface ILoggingSetupManager { - public interface ILoggingSetupManager - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/Core/AutoGenerated/StatusItem.cs b/APC Viewer/Library/Eaf/Core/AutoGenerated/StatusItem.cs index c895fc2..4fe8b5b 100644 --- a/APC Viewer/Library/Eaf/Core/AutoGenerated/StatusItem.cs +++ b/APC Viewer/Library/Eaf/Core/AutoGenerated/StatusItem.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.Core +namespace Library.Eaf.Core; + +public class StatusItem { - public class StatusItem - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/Core/Backbone.cs b/APC Viewer/Library/Eaf/Core/Backbone.cs index 845b46b..afbeb0e 100644 --- a/APC Viewer/Library/Eaf/Core/Backbone.cs +++ b/APC Viewer/Library/Eaf/Core/Backbone.cs @@ -2,47 +2,46 @@ using System; using System.Collections.Generic; -namespace Library.Eaf.Core +namespace Library.Eaf.Core; + +public class Backbone { - public class Backbone - { - public const string STATE_ERROR = "Error"; - public const string STATE_OFFLINE = "Offline"; - public const string STATE_RUNNING = "Running"; - public const string STATE_SHUTDOWN = "Shutting Down"; - public const string STATE_STARTING = "Starting"; + public const string STATE_ERROR = "Error"; + public const string STATE_OFFLINE = "Offline"; + public const string STATE_RUNNING = "Running"; + public const string STATE_SHUTDOWN = "Shutting Down"; + public const string STATE_STARTING = "Starting"; - protected Backbone() { } + protected Backbone() { } - [NotNull] - public static Backbone Instance { get; } - [NotNull] - public ILoggingSetupManager LoggingConfigurationManager { get; set; } - public BackboneStatusCache Status { get; } - public bool IsAutomatedRestartActive { get; } - public bool IsReadyForRestart { get; } - public string StartTime { get; } - public string State { get; } - public string Name { get; } - public string ConfigurationServiceAddress { get; } - public string CellName { get; } - protected bool IsInitialized { get; set; } - protected Dictionary BackboneComponents { get; } + [NotNull] + public static Backbone Instance { get; } + [NotNull] + public ILoggingSetupManager LoggingConfigurationManager { get; set; } + public BackboneStatusCache Status { get; } + public bool IsAutomatedRestartActive { get; } + public bool IsReadyForRestart { get; } + public string StartTime { get; } + public string State { get; } + public string Name { get; } + public string ConfigurationServiceAddress { get; } + public string CellName { get; } + protected bool IsInitialized { get; set; } + protected Dictionary BackboneComponents { get; } - public void AddBackboneComponent(BackboneComponent backboneComponent) { } - public bool ContainsBackboneComponent(string id) { throw new NotImplementedException(); } - [Obsolete("Use the capabilities exposed via the Status property -> GetAll. Will be removed with next major release.")] - public List GetAllStatuses() { throw new NotImplementedException(); } - public BackboneComponent GetBackboneComponentById(string id) { throw new NotImplementedException(); } - public List GetBackboneComponentsOfType() { throw new NotImplementedException(); } - public List GetBackboneComponentsOfType(Type type) { throw new NotImplementedException(); } - public void RegisterSubprocess(int pid) { } - [Obsolete("Use the capabilities exposed via the Status property -> SetValue. Will be removed with next major release.")] - public void SetStatus(string statusName, string statusValue) { } - [Obsolete("Use the capabilities exposed via the Status property -> SetValue. Will be removed with next major release.")] - public void SetStatus(BackboneComponent source, string statusName, string statusValue) { } - protected void CloseConnectionOfComponents(List components) { } - protected virtual void StopAllComponents() { } - protected void StopComponents(List components) { } - } -} \ No newline at end of file + public void AddBackboneComponent(BackboneComponent backboneComponent) { } + public bool ContainsBackboneComponent(string id) => throw new NotImplementedException(); + [Obsolete("Use the capabilities exposed via the Status property -> GetAll. Will be removed with next major release.")] + public List GetAllStatuses() => throw new NotImplementedException(); + public BackboneComponent GetBackboneComponentById(string id) => throw new NotImplementedException(); + public List GetBackboneComponentsOfType() => throw new NotImplementedException(); + public List GetBackboneComponentsOfType(Type type) => throw new NotImplementedException(); + public void RegisterSubprocess(int pid) { } + [Obsolete("Use the capabilities exposed via the Status property -> SetValue. Will be removed with next major release.")] + public void SetStatus(string statusName, string statusValue) { } + [Obsolete("Use the capabilities exposed via the Status property -> SetValue. Will be removed with next major release.")] + public void SetStatus(BackboneComponent source, string statusName, string statusValue) { } + protected void CloseConnectionOfComponents(List components) { } + protected virtual void StopAllComponents() { } + protected void StopComponents(List components) { } +} diff --git a/APC Viewer/Library/Eaf/Core/Smtp/EmailMessage.cs b/APC Viewer/Library/Eaf/Core/Smtp/EmailMessage.cs index c727cd5..752e925 100644 --- a/APC Viewer/Library/Eaf/Core/Smtp/EmailMessage.cs +++ b/APC Viewer/Library/Eaf/Core/Smtp/EmailMessage.cs @@ -1,24 +1,21 @@ using System; -namespace Library.Eaf.Core.Smtp +namespace Library.Eaf.Core.Smtp; + +public class EmailMessage { + public EmailMessage() { } + public EmailMessage(string subject, string body, MailPriority priority = MailPriority.Normal) { } - public class EmailMessage - { - public EmailMessage() { } - public EmailMessage(string subject, string body, MailPriority priority = MailPriority.Normal) { } + public string Body { get; } + public MailPriority Priority { get; } + public string Subject { get; } - public string Body { get; } - public MailPriority Priority { get; } - public string Subject { get; } + public EmailMessage PriorityHigh() => throw new NotImplementedException(); + public EmailMessage PriorityLow() => throw new NotImplementedException(); + public EmailMessage PriorityNormal() => throw new NotImplementedException(); + public EmailMessage SetBody(string body) => throw new NotImplementedException(); + public EmailMessage SetPriority(MailPriority priority) => throw new NotImplementedException(); + public EmailMessage SetSubject(string subject) => throw new NotImplementedException(); - public EmailMessage PriorityHigh() { throw new NotImplementedException(); } - public EmailMessage PriorityLow() { throw new NotImplementedException(); } - public EmailMessage PriorityNormal() { throw new NotImplementedException(); } - public EmailMessage SetBody(string body) { throw new NotImplementedException(); } - public EmailMessage SetPriority(MailPriority priority) { throw new NotImplementedException(); } - public EmailMessage SetSubject(string subject) { throw new NotImplementedException(); } - - } - -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/Core/Smtp/ISmtp.cs b/APC Viewer/Library/Eaf/Core/Smtp/ISmtp.cs index d7604c3..9ecdf3c 100644 --- a/APC Viewer/Library/Eaf/Core/Smtp/ISmtp.cs +++ b/APC Viewer/Library/Eaf/Core/Smtp/ISmtp.cs @@ -1,9 +1,6 @@ -namespace Library.Eaf.Core.Smtp +namespace Library.Eaf.Core.Smtp; + +public interface ISmtp { - - public interface ISmtp - { - void Send(EmailMessage message); - } - -} \ No newline at end of file + void Send(EmailMessage message); +} diff --git a/APC Viewer/Library/Eaf/Core/Smtp/MailPriority.cs b/APC Viewer/Library/Eaf/Core/Smtp/MailPriority.cs index e6d37a0..cf00e87 100644 --- a/APC Viewer/Library/Eaf/Core/Smtp/MailPriority.cs +++ b/APC Viewer/Library/Eaf/Core/Smtp/MailPriority.cs @@ -1,11 +1,8 @@ -namespace Library.Eaf.Core.Smtp +namespace Library.Eaf.Core.Smtp; + +public enum MailPriority { - - public enum MailPriority - { - Low = 0, - Normal = 1, - High = 2 - } - -} \ No newline at end of file + Low = 0, + Normal = 1, + High = 2 +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/ChangeDataCollectionHandler.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/ChangeDataCollectionHandler.cs index 869066d..292a41b 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/ChangeDataCollectionHandler.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/ChangeDataCollectionHandler.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public class ChangeDataCollectionHandler { - public class ChangeDataCollectionHandler - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/DataCollectionRequest.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/DataCollectionRequest.cs index e901799..b1f2aef 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/DataCollectionRequest.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/DataCollectionRequest.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public class DataCollectionRequest { - public class DataCollectionRequest - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentEvent.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentEvent.cs index 9a2dea9..273041c 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentEvent.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentEvent.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public class EquipmentEvent { - public class EquipmentEvent - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentException.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentException.cs index 6542474..c51dc39 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentException.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentException.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public class EquipmentException { - public class EquipmentException - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentSelfDescription.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentSelfDescription.cs index c325af1..2d83c64 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentSelfDescription.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentSelfDescription.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public class EquipmentSelfDescription { - public class EquipmentSelfDescription - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/GetParameterValuesHandler.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/GetParameterValuesHandler.cs index 385ef82..5dfe5f8 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/GetParameterValuesHandler.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/GetParameterValuesHandler.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public class GetParameterValuesHandler { - public class GetParameterValuesHandler - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IConnectionControl.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IConnectionControl.cs index b346524..693fcb6 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IConnectionControl.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IConnectionControl.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public interface IConnectionControl { - public interface IConnectionControl - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IDataTracingHandler.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IDataTracingHandler.cs index 3e73a9d..9b7496b 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IDataTracingHandler.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IDataTracingHandler.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public interface IDataTracingHandler { - public interface IDataTracingHandler - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentCommandService.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentCommandService.cs index d00a9ce..b90afc3 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentCommandService.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentCommandService.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public interface IEquipmentCommandService { - public interface IEquipmentCommandService - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentControl.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentControl.cs index 647d1ec..ea7d13b 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentControl.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentControl.cs @@ -1,16 +1,15 @@ using Library.PeerGroup.GCL.Annotations; -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public interface IEquipmentControl : IPackageSource { - public interface IEquipmentControl : IPackageSource - { - [NotNull] - IEquipmentSelfDescriptionBuilder SelfDescriptionBuilder { get; } - [NotNull] - IEquipmentDataCollection DataCollection { get; } - [NotNull] - IEquipmentCommandService Commands { get; } - [NotNull] - IConnectionControl Connection { get; } - } -} \ No newline at end of file + [NotNull] + IEquipmentSelfDescriptionBuilder SelfDescriptionBuilder { get; } + [NotNull] + IEquipmentDataCollection DataCollection { get; } + [NotNull] + IEquipmentCommandService Commands { get; } + [NotNull] + IConnectionControl Connection { get; } +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentSelfDescriptionBuilder.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentSelfDescriptionBuilder.cs index 15ca25f..f17ab11 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentSelfDescriptionBuilder.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentSelfDescriptionBuilder.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public interface IEquipmentSelfDescriptionBuilder { - public interface IEquipmentSelfDescriptionBuilder - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IPackage.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IPackage.cs index 0df5871..51a7a19 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IPackage.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IPackage.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public interface IPackage { - public interface IPackage - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/ISelfDescriptionLookup.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/ISelfDescriptionLookup.cs index 6c04747..f949afe 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/ISelfDescriptionLookup.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/ISelfDescriptionLookup.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public interface ISelfDescriptionLookup { - public interface ISelfDescriptionLookup - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IVirtualParameterValuesHandler.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IVirtualParameterValuesHandler.cs index 7d8b40e..9bb4776 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IVirtualParameterValuesHandler.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/IVirtualParameterValuesHandler.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public interface IVirtualParameterValuesHandler { - public interface IVirtualParameterValuesHandler - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/SetParameterValuesHandler.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/SetParameterValuesHandler.cs index 6371ae8..4864117 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/SetParameterValuesHandler.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/SetParameterValuesHandler.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public class SetParameterValuesHandler { - public class SetParameterValuesHandler - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/TraceRequest.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/TraceRequest.cs index cee5da9..ca623e5 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/TraceRequest.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/AutoGenerated/TraceRequest.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public class TraceRequest { - public class TraceRequest - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/IEquipmentDataCollection.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/IEquipmentDataCollection.cs index e0f09e8..aba5a90 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/IEquipmentDataCollection.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/IEquipmentDataCollection.cs @@ -3,37 +3,36 @@ using Library.Eaf.EquipmentCore.SelfDescription.ElementDescription; using System; using System.Collections.Generic; -namespace Library.Eaf.EquipmentCore.Control -{ - public interface IEquipmentDataCollection - { - IVirtualParameterValuesHandler VirtualParameterValuesHandler { get; } - ISelfDescriptionLookup SelfDescriptionLookup { get; } - EquipmentSelfDescription SelfDescription { get; } - IEnumerable ActiveRequests { get; } - IDataTracingHandler DataTracingHandler { get; } +namespace Library.Eaf.EquipmentCore.Control; - ParameterValue CreateParameterValue(EquipmentParameter parameter, object value); - void NotifyDataTracingAvailable(bool isAvailable); - void RegisterChangeDataCollectionHandler(ChangeDataCollectionHandler handler); - void RegisterDataTracingHandler(IDataTracingHandler handler); - void RegisterGetParameterValuesHandler(GetParameterValuesHandler handler); - void RegisterSetParameterValuesHandler(SetParameterValuesHandler handler); - void TriggerDeactivate(DataCollectionRequest deactivateRequest); - void TriggerEvent(EquipmentEvent equipmentEvent, IEnumerable parameters); - void TriggerEvent(EquipmentEvent equipmentEvent, IEnumerable parameters, IPackage sourcePackage); - void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters); - void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters, IPackage sourcePackage); - void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride); - void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride, IPackage sourcePackage); - void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride, IPackage sourcePackage); - void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride); - void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters, IPackage sourcePackage); - void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters); - void TriggerPerformanceRestored(); - void TriggerPerformanceWarning(); - void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable parameters); - void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable parameters, IPackage sourcePackage); - void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable parameters, DateTime equipmentTimeStamp); - } -} \ No newline at end of file +public interface IEquipmentDataCollection +{ + IVirtualParameterValuesHandler VirtualParameterValuesHandler { get; } + ISelfDescriptionLookup SelfDescriptionLookup { get; } + EquipmentSelfDescription SelfDescription { get; } + IEnumerable ActiveRequests { get; } + IDataTracingHandler DataTracingHandler { get; } + + ParameterValue CreateParameterValue(EquipmentParameter parameter, object value); + void NotifyDataTracingAvailable(bool isAvailable); + void RegisterChangeDataCollectionHandler(ChangeDataCollectionHandler handler); + void RegisterDataTracingHandler(IDataTracingHandler handler); + void RegisterGetParameterValuesHandler(GetParameterValuesHandler handler); + void RegisterSetParameterValuesHandler(SetParameterValuesHandler handler); + void TriggerDeactivate(DataCollectionRequest deactivateRequest); + void TriggerEvent(EquipmentEvent equipmentEvent, IEnumerable parameters); + void TriggerEvent(EquipmentEvent equipmentEvent, IEnumerable parameters, IPackage sourcePackage); + void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters); + void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters, IPackage sourcePackage); + void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride); + void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride, IPackage sourcePackage); + void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride, IPackage sourcePackage); + void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride); + void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters, IPackage sourcePackage); + void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters); + void TriggerPerformanceRestored(); + void TriggerPerformanceWarning(); + void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable parameters); + void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable parameters, IPackage sourcePackage); + void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable parameters, DateTime equipmentTimeStamp); +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/Control/IPackageSource.cs b/APC Viewer/Library/Eaf/EquipmentCore/Control/IPackageSource.cs index 4771a37..812db20 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/Control/IPackageSource.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/Control/IPackageSource.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.EquipmentCore.Control +namespace Library.Eaf.EquipmentCore.Control; + +public interface IPackageSource { - public interface IPackageSource - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/DataCollection/Reporting/ParameterValue.cs b/APC Viewer/Library/Eaf/EquipmentCore/DataCollection/Reporting/ParameterValue.cs index ae30878..3185a9c 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/DataCollection/Reporting/ParameterValue.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/DataCollection/Reporting/ParameterValue.cs @@ -2,19 +2,18 @@ using Library.PeerGroup.GCL.Annotations; using System; -namespace Library.Eaf.EquipmentCore.DataCollection.Reporting +namespace Library.Eaf.EquipmentCore.DataCollection.Reporting; + +public class ParameterValue { - public class ParameterValue - { - public ParameterValue(EquipmentParameter definition, object value) { } - public ParameterValue(EquipmentParameter definition, object value, DateTime timestamp) { } + public ParameterValue(EquipmentParameter definition, object value) { } + public ParameterValue(EquipmentParameter definition, object value, DateTime timestamp) { } - public virtual object Value { get; protected internal set; } - [NotNull] - public EquipmentParameter Definition { get; } - public DateTime Timestamp { get; protected set; } + public virtual object Value { get; protected internal set; } + [NotNull] + public EquipmentParameter Definition { get; } + public DateTime Timestamp { get; protected set; } - public virtual ParameterValue Clone(EquipmentParameter newDefinition) { throw new NotImplementedException(); } - public override string ToString() { return base.ToString(); } - } -} \ No newline at end of file + public virtual ParameterValue Clone(EquipmentParameter newDefinition) => throw new NotImplementedException(); + public override string ToString() => base.ToString(); +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ElementDescription/EquipmentParameter.cs b/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ElementDescription/EquipmentParameter.cs index bcd9b96..ec39ba4 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ElementDescription/EquipmentParameter.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ElementDescription/EquipmentParameter.cs @@ -1,24 +1,22 @@ using Library.Eaf.EquipmentCore.SelfDescription.ParameterTypes; -namespace Library.Eaf.EquipmentCore.SelfDescription.ElementDescription +namespace Library.Eaf.EquipmentCore.SelfDescription.ElementDescription; + +public class EquipmentParameter { - public class EquipmentParameter - { - public EquipmentParameter(EquipmentParameter source, ParameterTypeDefinition typeDefinition) { } - public EquipmentParameter(string name, ParameterTypeDefinition typeDefinition, string description, bool isTransient = false, bool isReadOnly = true) { } - public EquipmentParameter(string id, string name, ParameterTypeDefinition typeDefinition, string description, bool isTransient = false, bool isReadOnly = true) { } + public EquipmentParameter(EquipmentParameter source, ParameterTypeDefinition typeDefinition) { } + public EquipmentParameter(string name, ParameterTypeDefinition typeDefinition, string description, bool isTransient = false, bool isReadOnly = true) { } + public EquipmentParameter(string id, string name, ParameterTypeDefinition typeDefinition, string description, bool isTransient = false, bool isReadOnly = true) { } - public string Name { get; } - public string Id { get; } - public string Description { get; } - public string SourcePath { get; } - public string SourceEquipment { get; } - public ParameterTypeDefinition TypeDefinition { get; } - public bool IsTransient { get; } - public bool IsReadOnly { get; } + public string Name { get; } + public string Id { get; } + public string Description { get; } + public string SourcePath { get; } + public string SourceEquipment { get; } + public ParameterTypeDefinition TypeDefinition { get; } + public bool IsTransient { get; } + public bool IsReadOnly { get; } - public override string ToString() { return base.ToString(); } - public string ToStringWithDetails() { return base.ToString(); } - } - -} \ No newline at end of file + public override string ToString() => base.ToString(); + public string ToStringWithDetails() => base.ToString(); +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ParameterTypes/Field.cs b/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ParameterTypes/Field.cs index a31b67a..2d486bc 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ParameterTypes/Field.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ParameterTypes/Field.cs @@ -1,12 +1,11 @@ -namespace Library.Eaf.EquipmentCore.SelfDescription.ParameterTypes -{ - public class Field - { - public Field(string name, string description, bool canBeNull, ParameterTypeDefinition typeDefinition) { } +namespace Library.Eaf.EquipmentCore.SelfDescription.ParameterTypes; - public string Name { get; } - public string Description { get; } - public ParameterTypeDefinition TypeDefinition { get; } - public bool CanBeNull { get; } - } -} \ No newline at end of file +public class Field +{ + public Field(string name, string description, bool canBeNull, ParameterTypeDefinition typeDefinition) { } + + public string Name { get; } + public string Description { get; } + public ParameterTypeDefinition TypeDefinition { get; } + public bool CanBeNull { get; } +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ParameterTypes/ParameterTypeDefinition.cs b/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ParameterTypes/ParameterTypeDefinition.cs index 4d32eae..d5de25c 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ParameterTypes/ParameterTypeDefinition.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ParameterTypes/ParameterTypeDefinition.cs @@ -1,12 +1,11 @@ -namespace Library.Eaf.EquipmentCore.SelfDescription.ParameterTypes +namespace Library.Eaf.EquipmentCore.SelfDescription.ParameterTypes; + +public abstract class ParameterTypeDefinition { - public abstract class ParameterTypeDefinition - { - public ParameterTypeDefinition(string name, string description) { } + public ParameterTypeDefinition(string name, string description) { } - public string Name { get; } - public string Description { get; } + public string Name { get; } + public string Description { get; } - public override string ToString() { return base.ToString(); } - } -} \ No newline at end of file + public override string ToString() => base.ToString(); +} diff --git a/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ParameterTypes/StructuredType.cs b/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ParameterTypes/StructuredType.cs index 5913805..228f28d 100644 --- a/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ParameterTypes/StructuredType.cs +++ b/APC Viewer/Library/Eaf/EquipmentCore/SelfDescription/ParameterTypes/StructuredType.cs @@ -1,12 +1,11 @@ using System.Collections.Generic; -namespace Library.Eaf.EquipmentCore.SelfDescription.ParameterTypes +namespace Library.Eaf.EquipmentCore.SelfDescription.ParameterTypes; + +public class StructuredType : ParameterTypeDefinition { - public class StructuredType : ParameterTypeDefinition - { - public StructuredType(string name, string description, IList fields) : base(name, description) { } + public StructuredType(string name, string description, IList fields) : base(name, description) { } - public IList Fields { get; } - } -} \ No newline at end of file + public IList Fields { get; } +} diff --git a/APC Viewer/Library/Eaf/Management/ConfigurationData/CellAutomation/IConfigurationObject.cs b/APC Viewer/Library/Eaf/Management/ConfigurationData/CellAutomation/IConfigurationObject.cs index e7dc564..f87ef65 100644 --- a/APC Viewer/Library/Eaf/Management/ConfigurationData/CellAutomation/IConfigurationObject.cs +++ b/APC Viewer/Library/Eaf/Management/ConfigurationData/CellAutomation/IConfigurationObject.cs @@ -1,6 +1,5 @@ -namespace Library.Eaf.Management.ConfigurationData.CellAutomation +namespace Library.Eaf.Management.ConfigurationData.CellAutomation; + +public interface IConfigurationObject { - public interface IConfigurationObject - { - } -} \ No newline at end of file +} diff --git a/APC Viewer/Library/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterDefinition.cs b/APC Viewer/Library/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterDefinition.cs index 537bbcf..c106534 100644 --- a/APC Viewer/Library/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterDefinition.cs +++ b/APC Viewer/Library/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterDefinition.cs @@ -1,26 +1,25 @@ using System; -namespace Library.Eaf.Management.ConfigurationData.CellAutomation +namespace Library.Eaf.Management.ConfigurationData.CellAutomation; + +[System.Runtime.Serialization.DataContractAttribute(IsReference = true)] +public class ModelObjectParameterDefinition : IConfigurationObject { - [System.Runtime.Serialization.DataContractAttribute(IsReference = true)] - public class ModelObjectParameterDefinition : IConfigurationObject - { - public ModelObjectParameterDefinition() { } - public ModelObjectParameterDefinition(string name, ModelObjectParameterType valueType, object defaultValue) { } - public ModelObjectParameterDefinition(string name, Type enumType, object defaultValue) { } + public ModelObjectParameterDefinition() { } + public ModelObjectParameterDefinition(string name, ModelObjectParameterType valueType, object defaultValue) { } + public ModelObjectParameterDefinition(string name, Type enumType, object defaultValue) { } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long Id { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual string Name { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual string Value { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual ModelObjectParameterType ValueType { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual string EnumType { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long Id { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual string Name { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual string Value { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual ModelObjectParameterType ValueType { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual string EnumType { get; set; } - public virtual ModelObjectParameterDefinition Clone() { return null; } - public virtual bool IsValidValue(string value) { return false; } - } -} \ No newline at end of file + public virtual ModelObjectParameterDefinition? Clone() => null; + public virtual bool IsValidValue(string value) => false; +} diff --git a/APC Viewer/Library/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterType.cs b/APC Viewer/Library/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterType.cs index 9d25435..5fbea1e 100644 --- a/APC Viewer/Library/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterType.cs +++ b/APC Viewer/Library/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterType.cs @@ -1,17 +1,16 @@ -namespace Library.Eaf.Management.ConfigurationData.CellAutomation +namespace Library.Eaf.Management.ConfigurationData.CellAutomation; + +public enum ModelObjectParameterType { - public enum ModelObjectParameterType - { - String = 0, - Bool = 1, - Byte = 2, - SignedByte = 3, - Integer = 4, - UnsignedInteger = 5, - LongInteger = 6, - UnsignedLongInteger = 7, - Double = 8, - Float = 9, - Enum = 10 - } -} \ No newline at end of file + String = 0, + Bool = 1, + Byte = 2, + SignedByte = 3, + Integer = 4, + UnsignedInteger = 5, + LongInteger = 6, + UnsignedLongInteger = 7, + Double = 8, + Float = 9, + Enum = 10 +} diff --git a/APC Viewer/Library/Eaf/Management/ConfigurationData/Semiconductor/CellInstances/SecsConnectionConfiguration.cs b/APC Viewer/Library/Eaf/Management/ConfigurationData/Semiconductor/CellInstances/SecsConnectionConfiguration.cs index 91ef359..207adb3 100644 --- a/APC Viewer/Library/Eaf/Management/ConfigurationData/Semiconductor/CellInstances/SecsConnectionConfiguration.cs +++ b/APC Viewer/Library/Eaf/Management/ConfigurationData/Semiconductor/CellInstances/SecsConnectionConfiguration.cs @@ -1,44 +1,43 @@ using Library.PeerGroup.GCL.SecsDriver; using System; -namespace Library.Eaf.Management.ConfigurationData.Semiconductor.CellInstances -{ - [System.Runtime.Serialization.DataContractAttribute] - public class SecsConnectionConfiguration - { - public SecsConnectionConfiguration() { } +namespace Library.Eaf.Management.ConfigurationData.Semiconductor.CellInstances; - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T6HsmsControlMessage { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T5ConnectionSeperation { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T4InterBlock { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T3MessageReply { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T2Protocol { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T1InterCharacter { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual SerialBaudRate? BaudRate { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual SecsTransportType? PortType { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long? Port { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan LinkTestTimer { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual string Host { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long? DeviceId { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual HsmsSessionMode? SessionMode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual HsmsConnectionMode? ConnectionMode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T7ConnectionIdle { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T8NetworkIntercharacter { get; set; } - } -} \ No newline at end of file +[System.Runtime.Serialization.DataContractAttribute] +public class SecsConnectionConfiguration +{ + public SecsConnectionConfiguration() { } + + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T6HsmsControlMessage { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T5ConnectionSeperation { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T4InterBlock { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T3MessageReply { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T2Protocol { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T1InterCharacter { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual SerialBaudRate? BaudRate { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual SecsTransportType? PortType { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long? Port { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan LinkTestTimer { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual string Host { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long? DeviceId { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual HsmsSessionMode? SessionMode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual HsmsConnectionMode? ConnectionMode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T7ConnectionIdle { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T8NetworkIntercharacter { get; set; } +} diff --git a/APC Viewer/Library/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs b/APC Viewer/Library/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs index eaea75b..a77ad1b 100644 --- a/APC Viewer/Library/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs +++ b/APC Viewer/Library/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs @@ -1,13 +1,12 @@ -namespace Library.Ifx.Eaf.Common.Configuration -{ - [System.Runtime.Serialization.DataContractAttribute] - public class ConnectionSetting - { - public ConnectionSetting(string name, string value) { } +namespace Library.Ifx.Eaf.Common.Configuration; - [System.Runtime.Serialization.DataMemberAttribute] - public string Name { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string Value { get; set; } - } -} \ No newline at end of file +[System.Runtime.Serialization.DataContractAttribute] +public class ConnectionSetting +{ + public ConnectionSetting(string name, string value) { } + + [System.Runtime.Serialization.DataMemberAttribute] + public string Name { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string Value { get; set; } +} diff --git a/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/Component/File.cs b/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/Component/File.cs index 79f855c..22e71ad 100644 --- a/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/Component/File.cs +++ b/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/Component/File.cs @@ -1,19 +1,18 @@ using System; using System.Collections.Generic; -namespace Library.Ifx.Eaf.EquipmentConnector.File.Component +namespace Library.Ifx.Eaf.EquipmentConnector.File.Component; + +public class File { - public class File - { - public File(string filePath) { throw new NotImplementedException(); } - public File(string filePath, DateTime timeFileFound) { throw new NotImplementedException(); } + public File(string filePath) => throw new NotImplementedException(); + public File(string filePath, DateTime timeFileFound) => throw new NotImplementedException(); - public string Path { get; } - public DateTime TimeFound { get; } - public bool IsErrorFile { get; } - public Dictionary ContentParameters { get; } + public string Path { get; } + public DateTime TimeFound { get; } + public bool IsErrorFile { get; } + public Dictionary ContentParameters { get; } - public File UpdateContentParameters(Dictionary contentParameters) { throw new NotImplementedException(); } - public File UpdateParsingStatus(bool isErrorFile) { throw new NotImplementedException(); } - } -} \ No newline at end of file + public File UpdateContentParameters(Dictionary contentParameters) => throw new NotImplementedException(); + public File UpdateParsingStatus(bool isErrorFile) => throw new NotImplementedException(); +} diff --git a/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/Component/FilePathGenerator.cs b/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/Component/FilePathGenerator.cs index 8dafbc1..af5ed6c 100644 --- a/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/Component/FilePathGenerator.cs +++ b/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/Component/FilePathGenerator.cs @@ -2,34 +2,33 @@ using System; using System.Collections.Generic; -namespace Library.Ifx.Eaf.EquipmentConnector.File.Component +namespace Library.Ifx.Eaf.EquipmentConnector.File.Component; + +public class FilePathGenerator { - public class FilePathGenerator - { - public const char PLACEHOLDER_IDENTIFIER = '%'; - public const char PLACEHOLDER_SEPARATOR = ':'; - public const string PLACEHOLDER_NOT_AVAILABLE = "NA"; - public const string PLACEHOLDER_ORIGINAL_FILE_NAME = "OriginalFileName"; - public const string PLACEHOLDER_ORIGINAL_FILE_EXTENSION = "OriginalFileExtension"; - public const string PLACEHOLDER_DATE_TIME = "DateTime"; - public const string PLACEHOLDER_SUB_FOLDER = "SubFolder"; - public const string PLACEHOLDER_CELL_NAME = "CellName"; + public const char PLACEHOLDER_IDENTIFIER = '%'; + public const char PLACEHOLDER_SEPARATOR = ':'; + public const string PLACEHOLDER_NOT_AVAILABLE = "NA"; + public const string PLACEHOLDER_ORIGINAL_FILE_NAME = "OriginalFileName"; + public const string PLACEHOLDER_ORIGINAL_FILE_EXTENSION = "OriginalFileExtension"; + public const string PLACEHOLDER_DATE_TIME = "DateTime"; + public const string PLACEHOLDER_SUB_FOLDER = "SubFolder"; + public const string PLACEHOLDER_CELL_NAME = "CellName"; - public FilePathGenerator(FileConnectorConfiguration config, Dictionary customPattern = null) { throw new NotImplementedException(); } - public FilePathGenerator(FileConnectorConfiguration config, File file, bool isErrorFile = false, Dictionary customPattern = null) { throw new NotImplementedException(); } - public FilePathGenerator(FileConnectorConfiguration config, string sourceFilePath, bool isErrorFile = false, Dictionary customPattern = null) { throw new NotImplementedException(); } + public FilePathGenerator(FileConnectorConfiguration config, Dictionary? customPattern = null) => throw new NotImplementedException(); + public FilePathGenerator(FileConnectorConfiguration config, File file, bool isErrorFile = false, Dictionary? customPattern = null) => throw new NotImplementedException(); + public FilePathGenerator(FileConnectorConfiguration config, string sourceFilePath, bool isErrorFile = false, Dictionary? customPattern = null) => throw new NotImplementedException(); - protected string SubFolderPath { get; } - protected FileConnectorConfiguration Configuration { get; } - protected File File { get; } - protected bool IsErrorFile { get; } - protected string DefaultPlaceHolderValue { get; } + protected string SubFolderPath { get; } + protected FileConnectorConfiguration Configuration { get; } + protected File File { get; } + protected bool IsErrorFile { get; } + protected string DefaultPlaceHolderValue { get; } - public string GetFullTargetPath() { throw new NotImplementedException(); } - public virtual string GetTargetFileName() { throw new NotImplementedException(); } - public string GetTargetFolder(bool throwExceptionIfNotExist = true) { throw new NotImplementedException(); } - protected virtual string GetSubFolder(string folderPattern, string subFolderPath) { throw new NotImplementedException(); } - protected virtual string PrepareFolderPath(string targetFolderPath, string subFolderPath) { throw new NotImplementedException(); } - protected string ReplacePlaceholder(string inputPath) { throw new NotImplementedException(); } - } -} \ No newline at end of file + public string GetFullTargetPath() => throw new NotImplementedException(); + public virtual string GetTargetFileName() => throw new NotImplementedException(); + public string GetTargetFolder(bool throwExceptionIfNotExist = true) => throw new NotImplementedException(); + protected virtual string GetSubFolder(string folderPattern, string subFolderPath) => throw new NotImplementedException(); + protected virtual string PrepareFolderPath(string targetFolderPath, string subFolderPath) => throw new NotImplementedException(); + protected string ReplacePlaceholder(string inputPath) => throw new NotImplementedException(); +} diff --git a/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/Configuration/FileConnectorConfiguration.cs b/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/Configuration/FileConnectorConfiguration.cs index 5dc949d..779416d 100644 --- a/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/Configuration/FileConnectorConfiguration.cs +++ b/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/Configuration/FileConnectorConfiguration.cs @@ -2,134 +2,133 @@ using System; using System.Collections.Generic; -namespace Library.Ifx.Eaf.EquipmentConnector.File.Configuration +namespace Library.Ifx.Eaf.EquipmentConnector.File.Configuration; + +[System.Runtime.Serialization.DataContractAttribute] +public class FileConnectorConfiguration { - [System.Runtime.Serialization.DataContractAttribute] - public class FileConnectorConfiguration + public const ulong IDLE_EVENT_WAIT_TIME_DEFAULT = 360; + public const ulong FILE_HANDLE_TIMEOUT_DEFAULT = 15; + + [System.Runtime.Serialization.DataMemberAttribute] + public virtual bool? TriggerOnChanged { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long? PostProcessingRetries { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual bool? CopySourceFolderStructure { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public IfPostProcessingFailsEnum? IfPostProcessingFailsAction { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string AlternateTargetFolder { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public long? FileHandleTimeout { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public bool? DeleteEmptySourceSubFolders { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public long? IdleEventWaitTimeInSeconds { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string FileAgeThreshold { get; set; } + public bool? FolderAgeCheckIndividualSubFolders { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual ZipModeEnum? ZipMode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public FileAgeFilterEnum? FileAgeFilterMode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string ZipTargetFileName { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string ZipErrorTargetFileName { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public long? ZipFileSubFolderLevel { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string DefaultPlaceHolderValue { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public bool? UseZip64Mode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public List ConnectionSettings { get; set; } + public string SourceDirectoryCloaking { get; set; } + public string FolderAgeThreshold { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long? FileScanningIntervalInSeconds { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual bool? TriggerOnCreated { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long? ZipFileTime { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string SourceFileLocation { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string SourceFileFilter { get; set; } + public List SourceFileFilters { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual bool? IncludeSubDirectories { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual FileScanningOptionEnum? FileScanningOption { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string TargetFileLocation { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string ErrorTargetFileLocation { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string TargetFileName { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long? FileHandleWaitTime { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public IfFileExistEnum? IfFileExistAction { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public long? ConnectionRetryInterval { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public PreProcessingModeEnum? PreProcessingMode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public PostProcessingModeEnum? PostProcessingMode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public PostProcessingModeEnum? ErrorPostProcessingMode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long? ZipFileAmount { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string ErrorTargetFileName { get; set; } + + public void Initialize() => throw new NotImplementedException(); + + public enum PostProcessingModeEnum { - public const ulong IDLE_EVENT_WAIT_TIME_DEFAULT = 360; - public const ulong FILE_HANDLE_TIMEOUT_DEFAULT = 15; - - [System.Runtime.Serialization.DataMemberAttribute] - public virtual bool? TriggerOnChanged { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long? PostProcessingRetries { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual bool? CopySourceFolderStructure { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public IfPostProcessingFailsEnum? IfPostProcessingFailsAction { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string AlternateTargetFolder { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public long? FileHandleTimeout { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public bool? DeleteEmptySourceSubFolders { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public long? IdleEventWaitTimeInSeconds { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string FileAgeThreshold { get; set; } - public bool? FolderAgeCheckIndividualSubFolders { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual ZipModeEnum? ZipMode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public FileAgeFilterEnum? FileAgeFilterMode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string ZipTargetFileName { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string ZipErrorTargetFileName { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public long? ZipFileSubFolderLevel { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string DefaultPlaceHolderValue { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public bool? UseZip64Mode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public List ConnectionSettings { get; set; } - public string SourceDirectoryCloaking { get; set; } - public string FolderAgeThreshold { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long? FileScanningIntervalInSeconds { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual bool? TriggerOnCreated { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long? ZipFileTime { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string SourceFileLocation { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string SourceFileFilter { get; set; } - public List SourceFileFilters { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual bool? IncludeSubDirectories { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual FileScanningOptionEnum? FileScanningOption { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string TargetFileLocation { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string ErrorTargetFileLocation { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string TargetFileName { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long? FileHandleWaitTime { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public IfFileExistEnum? IfFileExistAction { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public long? ConnectionRetryInterval { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public PreProcessingModeEnum? PreProcessingMode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public PostProcessingModeEnum? PostProcessingMode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public PostProcessingModeEnum? ErrorPostProcessingMode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long? ZipFileAmount { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string ErrorTargetFileName { get; set; } - - public void Initialize() { throw new NotImplementedException(); } - - public enum PostProcessingModeEnum - { - None = 0, - Move = 1, - Copy = 2, - Rename = 3, - Zip = 4, - Delete = 5, - MoveFolder = 6, - CopyFolder = 7, - DeleteFolder = 8 - } - public enum PreProcessingModeEnum - { - None = 0, - Process = 1 - } - public enum IfFileExistEnum - { - Overwrite = 0, - LeaveFiles = 1, - Delete = 2 - } - public enum IfPostProcessingFailsEnum - { - LeaveFiles = 0, - Delete = 1 - } - public enum FileScanningOptionEnum - { - FileWatcher = 0, - TimeBased = 1 - } - public enum ZipModeEnum - { - ZipByAmountOrTime = 0, - ZipByFileName = 1, - ZipBySubFolderName = 2 - } - public enum FileAgeFilterEnum - { - IgnoreNewer = 0, - IgnoreOlder = 1 - } + None = 0, + Move = 1, + Copy = 2, + Rename = 3, + Zip = 4, + Delete = 5, + MoveFolder = 6, + CopyFolder = 7, + DeleteFolder = 8 } -} \ No newline at end of file + public enum PreProcessingModeEnum + { + None = 0, + Process = 1 + } + public enum IfFileExistEnum + { + Overwrite = 0, + LeaveFiles = 1, + Delete = 2 + } + public enum IfPostProcessingFailsEnum + { + LeaveFiles = 0, + Delete = 1 + } + public enum FileScanningOptionEnum + { + FileWatcher = 0, + TimeBased = 1 + } + public enum ZipModeEnum + { + ZipByAmountOrTime = 0, + ZipByFileName = 1, + ZipBySubFolderName = 2 + } + public enum FileAgeFilterEnum + { + IgnoreNewer = 0, + IgnoreOlder = 1 + } +} diff --git a/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs b/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs index 23353cb..e7856ae 100644 --- a/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs +++ b/APC Viewer/Library/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs @@ -2,13 +2,12 @@ using System; using System.Collections.Generic; -namespace Library.Ifx.Eaf.EquipmentConnector.File.SelfDescription -{ - public class FileConnectorParameterTypeDefinitionProvider - { - public FileConnectorParameterTypeDefinitionProvider() { } +namespace Library.Ifx.Eaf.EquipmentConnector.File.SelfDescription; - public IEnumerable GetAllParameterTypeDefinition() { return null; } - public ParameterTypeDefinition GetParameterTypeDefinition(string name) { return null; } - } -} \ No newline at end of file +public class FileConnectorParameterTypeDefinitionProvider +{ + public FileConnectorParameterTypeDefinitionProvider() { } + + public IEnumerable? GetAllParameterTypeDefinition() => null; + public ParameterTypeDefinition? GetParameterTypeDefinition(string name) => null; +} diff --git a/APC Viewer/Library/PeerGroup/GCL/Annotations/NotNullAttribute.cs b/APC Viewer/Library/PeerGroup/GCL/Annotations/NotNullAttribute.cs index fa311f4..2d6b2da 100644 --- a/APC Viewer/Library/PeerGroup/GCL/Annotations/NotNullAttribute.cs +++ b/APC Viewer/Library/PeerGroup/GCL/Annotations/NotNullAttribute.cs @@ -1,10 +1,9 @@ using System; -namespace Library.PeerGroup.GCL.Annotations +namespace Library.PeerGroup.GCL.Annotations; + +[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.Delegate, AllowMultiple = false, Inherited = true)] +public sealed class NotNullAttribute : Attribute { - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.Delegate, AllowMultiple = false, Inherited = true)] - public sealed class NotNullAttribute : Attribute - { - public NotNullAttribute() { } - } -} \ No newline at end of file + public NotNullAttribute() { } +} diff --git a/APC Viewer/Library/PeerGroup/GCL/SecsDriver/HsmsConnectionMode.cs b/APC Viewer/Library/PeerGroup/GCL/SecsDriver/HsmsConnectionMode.cs index 21ecf38..e25db91 100644 --- a/APC Viewer/Library/PeerGroup/GCL/SecsDriver/HsmsConnectionMode.cs +++ b/APC Viewer/Library/PeerGroup/GCL/SecsDriver/HsmsConnectionMode.cs @@ -1,8 +1,7 @@ -namespace Library.PeerGroup.GCL.SecsDriver +namespace Library.PeerGroup.GCL.SecsDriver; + +public enum HsmsConnectionMode { - public enum HsmsConnectionMode - { - Active = 0, - Passive = 1 - } -} \ No newline at end of file + Active = 0, + Passive = 1 +} diff --git a/APC Viewer/Library/PeerGroup/GCL/SecsDriver/HsmsSessionMode.cs b/APC Viewer/Library/PeerGroup/GCL/SecsDriver/HsmsSessionMode.cs index 6ea9d07..1d08375 100644 --- a/APC Viewer/Library/PeerGroup/GCL/SecsDriver/HsmsSessionMode.cs +++ b/APC Viewer/Library/PeerGroup/GCL/SecsDriver/HsmsSessionMode.cs @@ -1,8 +1,7 @@ -namespace Library.PeerGroup.GCL.SecsDriver +namespace Library.PeerGroup.GCL.SecsDriver; + +public enum HsmsSessionMode { - public enum HsmsSessionMode - { - MultiSession = 0, - SingleSession = 1 - } -} \ No newline at end of file + MultiSession = 0, + SingleSession = 1 +} diff --git a/APC Viewer/Library/PeerGroup/GCL/SecsDriver/SecsTransportType.cs b/APC Viewer/Library/PeerGroup/GCL/SecsDriver/SecsTransportType.cs index f5afda3..e67216e 100644 --- a/APC Viewer/Library/PeerGroup/GCL/SecsDriver/SecsTransportType.cs +++ b/APC Viewer/Library/PeerGroup/GCL/SecsDriver/SecsTransportType.cs @@ -1,8 +1,7 @@ -namespace Library.PeerGroup.GCL.SecsDriver +namespace Library.PeerGroup.GCL.SecsDriver; + +public enum SecsTransportType { - public enum SecsTransportType - { - HSMS = 0, - Serial = 1 - } -} \ No newline at end of file + HSMS = 0, + Serial = 1 +} diff --git a/APC Viewer/Library/PeerGroup/GCL/SecsDriver/SerialBaudRate.cs b/APC Viewer/Library/PeerGroup/GCL/SecsDriver/SerialBaudRate.cs index c3ffd63..d537ffc 100644 --- a/APC Viewer/Library/PeerGroup/GCL/SecsDriver/SerialBaudRate.cs +++ b/APC Viewer/Library/PeerGroup/GCL/SecsDriver/SerialBaudRate.cs @@ -1,16 +1,15 @@ -namespace Library.PeerGroup.GCL.SecsDriver +namespace Library.PeerGroup.GCL.SecsDriver; + +public enum SerialBaudRate { - public enum SerialBaudRate - { - Baud9600 = 0, - Baud19200 = 1, - Baud4800 = 2, - Baud2400 = 3, - Baud1200 = 4, - Baud300 = 5, - Baud150 = 6, - Baud38400 = 7, - Baud57600 = 8, - Baud115200 = 9 - } -} \ No newline at end of file + Baud9600 = 0, + Baud19200 = 1, + Baud4800 = 2, + Baud2400 = 3, + Baud1200 = 4, + Baud300 = 5, + Baud150 = 6, + Baud38400 = 7, + Baud57600 = 8, + Baud115200 = 9 +} diff --git a/APC Viewer/Models/AppSettings.cs b/APC Viewer/Models/AppSettings.cs index 10470a0..f43f750 100644 --- a/APC Viewer/Models/AppSettings.cs +++ b/APC Viewer/Models/AppSettings.cs @@ -1,12 +1,46 @@ -namespace APCViewer.Models +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace APCViewer.Models; + +public class AppSettings { - public class AppSettings + + protected string _Company; + protected string _EncryptedPassword; + protected string _MonARessource; + protected string _Server; + protected string _ServiceUser; + protected string _URLs; + protected string _WorkingDirectoryName; + public string Company => _Company; + public string EncryptedPassword => _EncryptedPassword; + public string MonARessource => _MonARessource; + public string Server => _Server; + public string ServiceUser => _ServiceUser; + public string URLs => _URLs; + public string WorkingDirectoryName => _WorkingDirectoryName; + + // public AppSettings() + // { + // } + + [JsonConstructor] + public AppSettings(string company, string encryptedPassword, string monARessource, string server, string serviceUser, string urls, string workingDirectoryName) { - public string Company { get; set; } - public string EncryptedPassword { get; set; } - public string MonARessource { get; set; } - public string Server { get; set; } - public string ServiceUser { get; set; } - public string URLs { get; set; } + _Company = company; + _EncryptedPassword = encryptedPassword; + _MonARessource = monARessource; + _Server = server; + _ServiceUser = serviceUser; + _URLs = urls; + _WorkingDirectoryName = workingDirectoryName; } + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); + return result; + } + } \ No newline at end of file diff --git a/APC Viewer/Models/Binder/AppSettings.cs b/APC Viewer/Models/Binder/AppSettings.cs new file mode 100644 index 0000000..f4bbbaa --- /dev/null +++ b/APC Viewer/Models/Binder/AppSettings.cs @@ -0,0 +1,34 @@ +using System.ComponentModel.DataAnnotations; +using System.Text.Json; + +namespace APCViewer.Models.Binder; + +public class AppSettings +{ + + [Display(Name = "Company"), Required] public string Company { get; set; } + [Display(Name = "Encrypted Password"), Required] public string EncryptedPassword { get; set; } + [Display(Name = "MonARessource"), Required] public string MonARessource { get; set; } + [Display(Name = "Server"), Required] public string Server { get; set; } + [Display(Name = "Service User"), Required] public string ServiceUser { get; set; } + [Display(Name = "URLs"), Required] public string URLs { get; set; } + [Display(Name = "Working Directory Name"), Required] public string WorkingDirectoryName { get; set; } + + public AppSettings() + { + Company = string.Empty; + EncryptedPassword = string.Empty; + MonARessource = string.Empty; + Server = string.Empty; + ServiceUser = string.Empty; + URLs = string.Empty; + WorkingDirectoryName = string.Empty; + } + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); + return result; + } + +} \ No newline at end of file diff --git a/APC Viewer/Models/ErrorViewModel.cs b/APC Viewer/Models/ErrorViewModel.cs index 8ed9f75..9a2c475 100644 --- a/APC Viewer/Models/ErrorViewModel.cs +++ b/APC Viewer/Models/ErrorViewModel.cs @@ -1,9 +1,8 @@ -namespace APCViewer.Models -{ - public class ErrorViewModel - { - public string RequestId { get; set; } +namespace APCViewer.Models; - public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); - } +public class ErrorViewModel +{ + public string? RequestId { get; set; } + + public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); } \ No newline at end of file diff --git a/APC Viewer/Models/IBackground.cs b/APC Viewer/Models/IBackground.cs deleted file mode 100644 index ee0a5aa..0000000 --- a/APC Viewer/Models/IBackground.cs +++ /dev/null @@ -1,91 +0,0 @@ -namespace APCViewer.Models -{ - public interface IBackground - { - void APCDataCallback(); - // public void DataForApc(string workingDirectory, bool isGaN = false, bool isSi = false) - // { - // long ticks = DateTime.Now.Ticks; - // string server = GetServer(debugIsNotEC: false); - // Logic2019Q2 logic2019Q2 = new Logic2019Q2(_Log); - // Logic2020Q3 logic2020Q3 = new Logic2020Q3(_Log); - // string[] equipmentTypes = GetEquipmentTypes(isGaN, isSi); - // Dictionary pdsfFiles = new Dictionary(); - // Dictionary apcLogistics = new Dictionary(); - // Dictionary edaLogistics = new Dictionary(); - // Dictionary eafLogLogistics = new Dictionary(); - // logic2019Q2.Data(server, equipmentTypes, apcLogistics, pdsfFiles, isAPC: true); - // Tuple tuple = logic2020Q3.SetViewBag(apcLogistics, edaLogistics, eafLogLogistics, directory: null, filter: null, forPDSF: true, forIPDSF: false); - // if (tuple is null) { } - // List timePivot = logic2020Q3.GetTimePivot(equipmentTypes, apcLogistics, edaLogistics, eafLogLogistics, forPDSF: true, forIPDSF: false); - // _Log.Debug(string.Concat("Took ", new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds, " second(s)")); - // List list = new List(); - // StringBuilder stringBuilder = new StringBuilder(); - // foreach (string[] segments in timePivot) - // { - // foreach (string segment in segments) - // stringBuilder.Append(segment).Append('\t'); - // list.Add(stringBuilder.ToString()); - // stringBuilder.Clear(); - // } - // ShowWindow(workingDirectory, ShowWindowCommand.ShowMaximized, list); - // } - void EAFLogDataCallback(); - // public void DataForEafLog(string workingDirectory, bool isGaN = false, bool isSi = false) - // { - // long ticks = DateTime.Now.Ticks; - // string server = GetServer(debugIsNotEC: false); - // Logic2019Q2 logic2019Q2 = new Logic2019Q2(_Log); - // Logic2020Q3 logic2020Q3 = new Logic2020Q3(_Log); - // string[] equipmentTypes = GetEquipmentTypes(isGaN, isSi); - // Dictionary pdsfFiles = new Dictionary(); - // Dictionary apcLogistics = new Dictionary(); - // Dictionary edaLogistics = new Dictionary(); - // Dictionary eafLogLogistics = new Dictionary(); - // logic2019Q2.Data(server, equipmentTypes, eafLogLogistics, pdsfFiles, isEAFLog: true); - // Tuple tuple = logic2020Q3.SetViewBag(apcLogistics, edaLogistics, eafLogLogistics, directory: null, filter: null, forPDSF: false, forIPDSF: true); - // if (tuple is null) { } - // List timePivot = logic2020Q3.GetTimePivot(equipmentTypes, apcLogistics, edaLogistics, eafLogLogistics, forPDSF: false, forIPDSF: true); - // _Log.Debug(string.Concat("Took ", new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds, " second(s)")); - // List list = new List(); - // StringBuilder stringBuilder = new StringBuilder(); - // foreach (string[] segments in timePivot) - // { - // foreach (string segment in segments) - // stringBuilder.Append(segment).Append('\t'); - // list.Add(stringBuilder.ToString()); - // stringBuilder.Clear(); - // } - // ShowWindow(workingDirectory, ShowWindowCommand.ShowMaximized, list); - // } - void EDADataCallback(); - // public void DataForEda(string workingDirectory, bool isGaN = false, bool isSi = false) - // { - // long ticks = DateTime.Now.Ticks; - // string server = GetServer(debugIsNotEC: true); - // Logic2019Q2 logic2019Q2 = new Logic2019Q2(_Log); - // Logic2020Q3 logic2020Q3 = new Logic2020Q3(_Log); - // string[] equipmentTypes = GetEquipmentTypes(isGaN, isSi); - // Dictionary pdsfFiles = new Dictionary(); - // Dictionary apcLogistics = new Dictionary(); - // Dictionary edaLogistics = new Dictionary(); - // Dictionary eafLogLogistics = new Dictionary(); - // logic2019Q2.Data(server, equipmentTypes, edaLogistics, pdsfFiles, isEDA: true); - // Tuple tuple = logic2020Q3.SetViewBag(apcLogistics, edaLogistics, eafLogLogistics, directory: null, filter: null, forPDSF: true, forIPDSF: false); - // if (tuple is null) { } - // List timePivot = logic2020Q3.GetTimePivot(equipmentTypes, apcLogistics, edaLogistics, eafLogLogistics, forPDSF: true, forIPDSF: false); - // _Log.Debug(string.Concat("Took ", new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds, " second(s)")); - // List list = new List(); - // StringBuilder stringBuilder = new StringBuilder(); - // foreach (string[] segments in timePivot) - // { - // foreach (string segment in segments) - // stringBuilder.Append(segment).Append('\t'); - // list.Add(stringBuilder.ToString()); - // stringBuilder.Clear(); - // } - // ShowWindow(workingDirectory, ShowWindowCommand.ShowMaximized, list); - // } - } - -} \ No newline at end of file diff --git a/APC Viewer/Models/IHomeController.cs b/APC Viewer/Models/IHomeController.cs index 0ad79eb..c2ac58a 100644 --- a/APC Viewer/Models/IHomeController.cs +++ b/APC Viewer/Models/IHomeController.cs @@ -1,25 +1,11 @@ using Microsoft.AspNetCore.Mvc; -namespace APCViewer.Models -{ - public interface IHomeController - { - IActionResult Background(bool? message_clear = null, bool? exceptions_clear = null, bool? set_is_primary_instance = null, bool? logistics_clear = null); - IActionResult DownloadCustomIPDSF(string ipdsf_file = null); - IActionResult DownloadCustomPDSF(string pdsf_file = null); - IActionResult DownloadIPDSF(string id = null); - IActionResult DownloadPDSF(string id = null); - IActionResult Encode(string value = null); - IActionResult Error(); - IActionResult Index(); - IActionResult IPDSF(string directory = null, string filter = null, bool is_gaN = false, bool is_Si = false); - IActionResult PDSF(string directory = null, string filter = null, bool is_gaN = false, bool is_Si = false); - IActionResult Privacy(); - IActionResult TimePivot(bool is_gaN = false, bool is_Si = false); - ContentResult ViewCustomIPDSF(string ipdsf_file = null); - ContentResult ViewCustomPDSF(string pdsf_file = null); - ContentResult ViewIPDSF(string id = null); - ContentResult ViewPDSF(string id = null); - } +namespace APCViewer.Controllers; +public interface IHomeController +{ + ActionResult Encode(string value = ""); + ActionResult Error(); + ActionResult Index(); + ActionResult Privacy(); } \ No newline at end of file diff --git a/APC Viewer/Models/Methods/IBackground.cs b/APC Viewer/Models/Methods/IBackground.cs new file mode 100644 index 0000000..b8c43d0 --- /dev/null +++ b/APC Viewer/Models/Methods/IBackground.cs @@ -0,0 +1,19 @@ +namespace APCViewer.Models.Methods; + +public interface IBackground +{ + + void Update(); + void ClearMessage(); + List DoBackup(); + bool IsPrimaryInstance(); + void Stop(bool immediate); + void SetIsPrimaryInstance(); + string GetPDSF(long Sequence); + void ClearIsPrimaryInstance(); + string GetIPDSF(long Sequence); + void Catch(Exception exception); + Tuple, List> GetTimePivot(bool isGaN = false, bool isSi = false); + Tuple SetViewBag(string directory, string filter, bool isGaN = false, bool isSi = false, bool forPDSF = false, bool forIPDSF = false); + +} \ No newline at end of file diff --git a/APC Viewer/Models/Properties/IBackground.cs b/APC Viewer/Models/Properties/IBackground.cs new file mode 100644 index 0000000..251c8c6 --- /dev/null +++ b/APC Viewer/Models/Properties/IBackground.cs @@ -0,0 +1,6 @@ +namespace APCViewer.Models.Properties; + +public interface IBackground +{ + +} \ No newline at end of file diff --git a/APC Viewer/Models/Properties/IBackgroundPage.cs b/APC Viewer/Models/Properties/IBackgroundPage.cs new file mode 100644 index 0000000..256c37c --- /dev/null +++ b/APC Viewer/Models/Properties/IBackgroundPage.cs @@ -0,0 +1,10 @@ +namespace APCViewer.Models.Properties; + +public interface IBackgroundController +{ + + public List Exceptions { get; } + public string Message { get; } + public string WorkingDirectory { get; } + +} \ No newline at end of file diff --git a/APC Viewer/Models/Stateless/AppSettings.cs b/APC Viewer/Models/Stateless/AppSettings.cs new file mode 100644 index 0000000..ff4027d --- /dev/null +++ b/APC Viewer/Models/Stateless/AppSettings.cs @@ -0,0 +1,24 @@ +using System.Text.Json; + +namespace APCViewer.Models.Stateless; + +public abstract class AppSettings +{ + + public static Models.AppSettings Get(IConfigurationRoot configurationRoot) + { + Models.AppSettings? result; + Models.Binder.AppSettings appSettings = configurationRoot.Get(); + string json = JsonSerializer.Serialize(appSettings, new JsonSerializerOptions() { WriteIndented = true }); + result = JsonSerializer.Deserialize(json); + if (result is null) + throw new Exception(json); + if (string.IsNullOrEmpty(result.Company)) + throw new Exception(json); + string jsonThis = result.ToString(); + if (jsonThis != json) + throw new Exception(json); + return result; + } + +} \ No newline at end of file diff --git a/APC Viewer/Models/Stateless/Methods/IBackgroundController.cs b/APC Viewer/Models/Stateless/Methods/IBackgroundController.cs new file mode 100644 index 0000000..bfc5b21 --- /dev/null +++ b/APC Viewer/Models/Stateless/Methods/IBackgroundController.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Mvc; + +namespace APCViewer.Models.Stateless.Methods; + +public interface IBackgroundController +{ + + ActionResult Index(bool? message_clear = null, bool? exceptions_clear = null, bool? set_is_primary_instance = null); + + static string GetRouteName() => nameof(IBackgroundController).Replace("Controller", string.Empty)[1..]; + +} \ No newline at end of file diff --git a/APC Viewer/Models/Stateless/Methods/IMethodName.cs b/APC Viewer/Models/Stateless/Methods/IMethodName.cs new file mode 100644 index 0000000..46aea45 --- /dev/null +++ b/APC Viewer/Models/Stateless/Methods/IMethodName.cs @@ -0,0 +1,10 @@ +using System.Runtime.CompilerServices; + +namespace APCViewer.Models.Stateless.Methods; + +public interface IMethodName +{ + + static string? GetActualAsyncMethodName([CallerMemberName] string? name = null) => name; + +} \ No newline at end of file diff --git a/APC Viewer/Models/Stateless/Methods/IWorkingDirectory.cs b/APC Viewer/Models/Stateless/Methods/IWorkingDirectory.cs new file mode 100644 index 0000000..89ffa29 --- /dev/null +++ b/APC Viewer/Models/Stateless/Methods/IWorkingDirectory.cs @@ -0,0 +1,8 @@ +namespace APCViewer.Models.Stateless.Methods; + +public interface IWorkingDirectory +{ + + static string GetWorkingDirectory(string? executingAssemblyName, string subDirectoryName) => WorkingDirectory.GetWorkingDirectory(executingAssemblyName, subDirectoryName); + +} \ No newline at end of file diff --git a/APC Viewer/Models/Stateless/Methods/WorkingDirectory.cs b/APC Viewer/Models/Stateless/Methods/WorkingDirectory.cs new file mode 100644 index 0000000..f95769b --- /dev/null +++ b/APC Viewer/Models/Stateless/Methods/WorkingDirectory.cs @@ -0,0 +1,50 @@ +namespace APCViewer.Models.Stateless.Methods; + +internal abstract class WorkingDirectory +{ + + internal static string GetWorkingDirectory(string? executingAssemblyName, string subDirectoryName) + { + string result = string.Empty; + if (executingAssemblyName is null) + throw new Exception(); + string traceFile; + List directories = new(); + Environment.SpecialFolder[] specialFolders = new Environment.SpecialFolder[] + { + Environment.SpecialFolder.LocalApplicationData, + Environment.SpecialFolder.ApplicationData, + Environment.SpecialFolder.History, + Environment.SpecialFolder.CommonApplicationData, + Environment.SpecialFolder.InternetCache + }; + foreach (Environment.SpecialFolder specialFolder in specialFolders) + directories.Add(Path.Combine(Environment.GetFolderPath(specialFolder), subDirectoryName, executingAssemblyName)); + foreach (string directory in directories) + { + for (int i = 1; i < 3; i++) + { + if (i == 1) + result = directory; + else + result = string.Concat("D", directory[1..]); + try + { + if (!Directory.Exists(result)) + _ = Directory.CreateDirectory(result); + traceFile = string.Concat(result, @"\", DateTime.Now.Ticks, ".txt"); + File.WriteAllText(traceFile, traceFile); + File.Delete(traceFile); + break; + } + catch (Exception) { result = string.Empty; } + } + if (!string.IsNullOrEmpty(result)) + break; + } + if (string.IsNullOrEmpty(result)) + throw new Exception("Unable to set working directory!"); + return result; + } + +} \ No newline at end of file diff --git a/APC Viewer/Models/Stateless/SerilogExtensionMethods.cs b/APC Viewer/Models/Stateless/SerilogExtensionMethods.cs new file mode 100644 index 0000000..3d39988 --- /dev/null +++ b/APC Viewer/Models/Stateless/SerilogExtensionMethods.cs @@ -0,0 +1,10 @@ +namespace APCViewer.Models.Stateless; + +public static class SerilogExtensionMethods +{ + + internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); + + internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); + +} \ No newline at end of file diff --git a/APC Viewer/Program.cs b/APC Viewer/Program.cs index c7b6ba5..429bddd 100644 --- a/APC Viewer/Program.cs +++ b/APC Viewer/Program.cs @@ -1,40 +1,90 @@ -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Hosting; -using Shared; -using System.Diagnostics; +using APCViewer.HostedService; +using APCViewer.Models; +using APCViewer.Models.Stateless.Methods; +using IFX.Shared; +using Serilog; +using System.Reflection; -namespace APCViewer +namespace APCViewer; + +public class Program { - public class Program + public static int Main(string[] args) { - - public static void Main(string[] args) + LoggerConfiguration loggerConfiguration = new(); + // ConsoleLoggerConfigurationExtensions.Console(loggerConfiguration.WriteTo); + Assembly assembly = Assembly.GetExecutingAssembly(); + string? assemblyName = assembly.GetName()?.Name; + if (string.IsNullOrEmpty(assemblyName)) + throw new Exception(); + WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args); + AppSettings appSettings = Models.Stateless.AppSettings.Get(webApplicationBuilder.Configuration); + if (string.IsNullOrEmpty(appSettings.WorkingDirectoryName)) + throw new Exception("Working directory name must have a value!"); + string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assemblyName, appSettings.WorkingDirectoryName); + Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); + _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, webApplicationBuilder.Configuration); + _ = SerilogHostBuilderExtensions.UseSerilog(webApplicationBuilder.Host); + Log.Logger = loggerConfiguration.CreateLogger(); + Serilog.ILogger log = Log.ForContext(); + try { - CreateHostBuilder(args).Build().Run(); - } + IsEnvironment isEnvironment = new(webApplicationBuilder.Environment.IsDevelopment(), webApplicationBuilder.Environment.IsStaging(), webApplicationBuilder.Environment.IsProduction()); + Singleton.Background background = new(isEnvironment, appSettings, workingDirectory); + if (isEnvironment.Development && !string.IsNullOrEmpty("storage.UrlRoot")) + throw new Exception(); + _ = webApplicationBuilder.Services.AddControllersWithViews(); + // _ = webApplicationBuilder.Services.AddRazorPages(configure => configure.Conventions.AuthorizeFolder("/Admin").AddPageRoute("/index", "{*url}")); + _ = webApplicationBuilder.Services.AddRazorPages(); + _ = webApplicationBuilder.Services.AddSingleton(_ => appSettings); + _ = webApplicationBuilder.Services.AddSingleton(_ => isEnvironment); + _ = webApplicationBuilder.Services.AddSingleton(_ => background); + _ = webApplicationBuilder.Services.AddHostedService(t => new TimedHostedService(isEnvironment, background)); + _ = webApplicationBuilder.Services.AddSwaggerGen(); + WebApplication webApplication = webApplicationBuilder.Build(); + if (isEnvironment.Development) + { + webApplication.UseWebAssemblyDebugging(); + if (!string.IsNullOrEmpty("storage.UrlRoot")) + { + Environment.ExitCode = -1; + webApplication.Lifetime.StopApplication(); + } + _ = webApplication.UseSwagger(); + _ = webApplication.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "APC Viewer API V1")); + } + else + { + _ = webApplication.UseExceptionHandler("/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + _ = webApplication.UseHsts(); + } + _ = webApplication.Lifetime.ApplicationStopped.Register(Log.CloseAndFlush); + _ = ApplicationBuilderSerilogClientExtensions.UseSerilogIngestion(webApplication); + _ = SerilogApplicationBuilderExtensions.UseSerilogRequestLogging(webApplication); + _ = webApplication.UseDeveloperExceptionPage(); + _ = webApplication.UseHttpsRedirection(); + _ = webApplication.UseBlazorFrameworkFiles(); + _ = webApplication.UseStaticFiles(); + _ = webApplication.UseRouting(); + _ = webApplication.MapRazorPages(); + _ = webApplication.MapControllers(); + _ = webApplication.MapFallbackToFile("index.html"); + log.Information("Starting Web Application"); + webApplication.Run(); - public static IHostBuilder CreateHostBuilder(string[] args) + return 0; + } + catch (Exception ex) { - IHostBuilder result; - IsEnvironment isEnvironment = new IsEnvironment(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: Debugger.IsAttached, nullASPNetCoreEnvironmentIsProduction: !Debugger.IsAttached); - result = Host.CreateDefaultBuilder(args) - .UseWindowsService() - .ConfigureAppConfiguration((context, configuration) => - { - configuration - .AddEnvironmentVariables() - .AddCommandLine(args) - .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true); - }) - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseStartup(); - }); - return result; + log.Fatal(ex, "Host terminated unexpectedly"); + return 1; + } + finally + { + Log.CloseAndFlush(); } - } } \ No newline at end of file diff --git a/APC Viewer/Shared/Description.cs b/APC Viewer/Shared/Description.cs index fd3db42..fb7ef92 100644 --- a/APC Viewer/Shared/Description.cs +++ b/APC Viewer/Shared/Description.cs @@ -10,183 +10,168 @@ using System.Collections.Generic; using System.Linq; using System.Text.Json; -namespace Shared +namespace Shared; + +public class Description { - public class Description + public enum RowColumn { - - public enum RowColumn - { - Test = 1000, - Count, - Index - } - - public enum LogisticsColumn - { - EventName = 2000, - NullData, - JobID, - Sequence, - MesEntity, - ReportFullPath, - ProcessJobID, - MID - } - - public enum Param - { - String = 0, - Integer = 2, - Double = 3, - Boolean = 4, - StructuredType = 5 - } - - internal const string FileFound = "FileFound"; - - - public List EquipmentParameters { get; private set; } - public List ParameterTypeDefinitions { get; private set; } - - private readonly bool _UseCyclical; - private readonly List _HeaderNames; - private readonly Dictionary _KeyIndexPairs; - private readonly ParameterTypeDefinition _StructuredType; - private readonly FileConnectorParameterTypeDefinitionProvider _FileConnectorParameterTypeDefinitionProvider; - - public Description(ILogic logic, ConfigDataBase configDataBase, IEquipmentControl equipmentControl) - { - _KeyIndexPairs = new Dictionary(); - _HeaderNames = configDataBase.GetHeaderNames(logic); - _UseCyclical = configDataBase.UseCyclicalForDescription; - _StructuredType = new StructuredType(nameof(StructuredType), string.Empty, new List()); - _FileConnectorParameterTypeDefinitionProvider = new FileConnectorParameterTypeDefinitionProvider(); - EquipmentParameters = new List(); - ParameterTypeDefinitions = new List { _StructuredType }; - Dictionary>> keyValuePairsCollection = configDataBase.GetParameterInfo(logic, allowNull: false); - List results = GetParameterValues(equipmentControl, keyValuePairsCollection); - } - - private List GetParameterValues(IEquipmentControl equipmentControl, Dictionary>> keyValuePairsCollection) - { - List results = new List(); - Enum param; - object value; - Enum[] @params; - string description; - List list; - EquipmentParameter equipmentParameter; - ParameterTypeDefinition parameterTypeDefinition; - bool addToEquipmentParameters = !EquipmentParameters.Any(); - foreach (KeyValuePair>> keyValuePair in keyValuePairsCollection) - { - if (!addToEquipmentParameters && !_KeyIndexPairs.ContainsKey(keyValuePair.Key)) - continue; - @params = (from l in keyValuePair.Value select l.Item1).Distinct().ToArray(); - if (@params.Length != 1) - throw new Exception(); - if (keyValuePair.Value[0].Item2 != keyValuePair.Key) - throw new Exception(); - param = @params[0]; - if (!addToEquipmentParameters) - equipmentParameter = EquipmentParameters[_KeyIndexPairs[keyValuePair.Key]]; - else - { - description = keyValuePair.Value[0].Item3; - _KeyIndexPairs.Add(keyValuePair.Key, EquipmentParameters.Count()); - if (param is Param.StructuredType || (_UseCyclical && !_HeaderNames.Contains(keyValuePair.Key))) - parameterTypeDefinition = _StructuredType; - else - parameterTypeDefinition = _FileConnectorParameterTypeDefinitionProvider.GetParameterTypeDefinition(param.ToString()); - equipmentParameter = new EquipmentParameter(keyValuePair.Key, parameterTypeDefinition, description); - EquipmentParameters.Add(equipmentParameter); - } - if (!_UseCyclical || _HeaderNames.Contains(keyValuePair.Key)) - value = keyValuePair.Value[0].Item4; - else - { - list = new List(); - for (int i = 0; i < keyValuePair.Value.Count; i++) - list.Add(new object[] { i, keyValuePair.Value[i].Item4 }); - value = list; - } - if (equipmentControl is null || !(param is Param.StructuredType)) - results.Add(new ParameterValue(equipmentParameter, value, DateTime.Now)); - else - results.Add(equipmentControl.DataCollection.CreateParameterValue(equipmentParameter, value)); - } - return results; - } - - public List GetParameterValues(ILogic logic, IEquipmentControl equipmentControl, JsonElement jsonElement, int? i = null, Dictionary keyValuePairs = null) - { - List results = new List(); - if (_UseCyclical && (i is null || i.Value > 0)) - throw new Exception(); - if (jsonElement.ValueKind != JsonValueKind.Array) - throw new Exception(); - Enum param; - Tuple tuple; - JsonElement[] jsonElements = jsonElement.EnumerateArray().ToArray(); - Dictionary>> keyValuePairsCollection = new Dictionary>>(); - for (int r = i.Value; r < jsonElements.Length; r++) - { - foreach (JsonProperty jsonProperty in jsonElement[r].EnumerateObject()) - { - if (jsonProperty.Value.ValueKind == JsonValueKind.Object || jsonProperty.Value.ValueKind == JsonValueKind.Array) - { - param = Param.StructuredType; - //jValue = jObject.Value("Item1"); - throw new NotImplementedException("Item1"); - } - else - { - switch (jsonProperty.Value.ValueKind) - { - case JsonValueKind.String: - param = Param.String; - break; - case JsonValueKind.Number: - param = Param.Double; - break; - case JsonValueKind.True: - case JsonValueKind.False: - param = Param.Boolean; - break; - case JsonValueKind.Null: - param = Param.String; - break; - default: - param = Param.StructuredType; - break; - } - } - tuple = new Tuple(param, jsonProperty.Name, string.Empty, jsonProperty.Value.ToString()); - if (!keyValuePairsCollection.ContainsKey(jsonProperty.Name)) - keyValuePairsCollection.Add(jsonProperty.Name, new List>()); - keyValuePairsCollection[jsonProperty.Name].Add(tuple); - } - if (!_UseCyclical) - break; - } - results = GetParameterValues(equipmentControl, keyValuePairsCollection); - return results; - } - - public static string GetCellName() - { - string result; - if (Backbone.Instance?.CellName is null) - result = string.Empty; - else - result = Backbone.Instance.CellName; - if (result.Contains("-IO")) - result = result.Replace("-IO", string.Empty); - return result; - } - + Test = 1000, + Count, + Index } -} \ No newline at end of file + public enum LogisticsColumn + { + EventName = 2000, + NullData, + JobID, + Sequence, + MesEntity, + ReportFullPath, + ProcessJobID, + MID + } + + public enum Param + { + String = 0, + Integer = 2, + Double = 3, + Boolean = 4, + StructuredType = 5 + } + + internal const string FileFound = "FileFound"; + + public List EquipmentParameters { get; private set; } + public List ParameterTypeDefinitions { get; private set; } + + private readonly bool _UseCyclical; + private readonly List _HeaderNames; + private readonly Dictionary _KeyIndexPairs; + private readonly ParameterTypeDefinition _StructuredType; + private readonly FileConnectorParameterTypeDefinitionProvider _FileConnectorParameterTypeDefinitionProvider; + + public Description(ILogic logic, ConfigDataBase configDataBase, IEquipmentControl equipmentControl) + { + _KeyIndexPairs = new Dictionary(); + _HeaderNames = configDataBase.GetHeaderNames(logic); + _UseCyclical = configDataBase.UseCyclicalForDescription; + _StructuredType = new StructuredType(nameof(StructuredType), string.Empty, new List()); + _FileConnectorParameterTypeDefinitionProvider = new FileConnectorParameterTypeDefinitionProvider(); + EquipmentParameters = new List(); + ParameterTypeDefinitions = new List { _StructuredType }; + Dictionary>> keyValuePairsCollection = configDataBase.GetParameterInfo(logic, allowNull: false); + List results = GetParameterValues(equipmentControl, keyValuePairsCollection); + } + + private List GetParameterValues(IEquipmentControl equipmentControl, Dictionary>> keyValuePairsCollection) + { + List results = new(); + Enum param; + object value; + Enum[] @params; + string description; + List list; + EquipmentParameter equipmentParameter; + ParameterTypeDefinition parameterTypeDefinition; + bool addToEquipmentParameters = !EquipmentParameters.Any(); + foreach (KeyValuePair>> keyValuePair in keyValuePairsCollection) + { + if (!addToEquipmentParameters && !_KeyIndexPairs.ContainsKey(keyValuePair.Key)) + continue; + @params = (from l in keyValuePair.Value select l.Item1).Distinct().ToArray(); + if (@params.Length != 1) + throw new Exception(); + if (keyValuePair.Value[0].Item2 != keyValuePair.Key) + throw new Exception(); + param = @params[0]; + if (!addToEquipmentParameters) + equipmentParameter = EquipmentParameters[_KeyIndexPairs[keyValuePair.Key]]; + else + { + description = keyValuePair.Value[0].Item3; + _KeyIndexPairs.Add(keyValuePair.Key, EquipmentParameters.Count()); + if (param is Param.StructuredType || (_UseCyclical && !_HeaderNames.Contains(keyValuePair.Key))) + parameterTypeDefinition = _StructuredType; + else + parameterTypeDefinition = _FileConnectorParameterTypeDefinitionProvider.GetParameterTypeDefinition(param.ToString()); + equipmentParameter = new EquipmentParameter(keyValuePair.Key, parameterTypeDefinition, description); + EquipmentParameters.Add(equipmentParameter); + } + if (!_UseCyclical || _HeaderNames.Contains(keyValuePair.Key)) + value = keyValuePair.Value[0].Item4; + else + { + list = new List(); + for (int i = 0; i < keyValuePair.Value.Count; i++) + list.Add(new object[] { i, keyValuePair.Value[i].Item4 }); + value = list; + } + if (equipmentControl is null || param is not Param.StructuredType) + results.Add(new ParameterValue(equipmentParameter, value, DateTime.Now)); + else + results.Add(equipmentControl.DataCollection.CreateParameterValue(equipmentParameter, value)); + } + return results; + } + + public List GetParameterValues(ILogic logic, IEquipmentControl equipmentControl, JsonElement jsonElement, int? i = null, Dictionary? keyValuePairs = null) + { + _ = new List(); + if (_UseCyclical && (i is null || i.Value > 0)) + throw new Exception(); + if (jsonElement.ValueKind != JsonValueKind.Array) + throw new Exception(); + Enum param; + Tuple tuple; + JsonElement[] jsonElements = jsonElement.EnumerateArray().ToArray(); + Dictionary>> keyValuePairsCollection = new(); + for (int r = i.Value; r < jsonElements.Length; r++) + { + foreach (JsonProperty jsonProperty in jsonElement[r].EnumerateObject()) + { + if (jsonProperty.Value.ValueKind is JsonValueKind.Object or JsonValueKind.Array) + { + param = Param.StructuredType; + //jValue = jObject.Value("Item1"); + throw new NotImplementedException("Item1"); + } + else + { + param = jsonProperty.Value.ValueKind switch + { + JsonValueKind.String => Param.String, + JsonValueKind.Number => Param.Double, + JsonValueKind.True or JsonValueKind.False => Param.Boolean, + JsonValueKind.Null => Param.String, + _ => Param.StructuredType, + }; + } + tuple = new Tuple(param, jsonProperty.Name, string.Empty, jsonProperty.Value.ToString()); + if (!keyValuePairsCollection.ContainsKey(jsonProperty.Name)) + keyValuePairsCollection.Add(jsonProperty.Name, new List>()); + keyValuePairsCollection[jsonProperty.Name].Add(tuple); + } + if (!_UseCyclical) + break; + } + List results = GetParameterValues(equipmentControl, keyValuePairsCollection); + return results; + } + + public static string GetCellName() + { + string result; + if (Backbone.Instance?.CellName is null) + result = string.Empty; + else + result = Backbone.Instance.CellName; + if (result.Contains("-IO")) + result = result.Replace("-IO", string.Empty); + return result; + } + +} diff --git a/APC Viewer/Shared/EquipmentType.cs b/APC Viewer/Shared/EquipmentType.cs index dd1413a..425c92d 100644 --- a/APC Viewer/Shared/EquipmentType.cs +++ b/APC Viewer/Shared/EquipmentType.cs @@ -1,53 +1,50 @@ -namespace Shared +namespace Shared; + +public enum EquipmentType { - - public enum EquipmentType - { - FileEquipment, - SemiEquipment, - // - DEP08EGANAIXG5, - // - MET08ANLYSDIFAAST230_Semi, - MET08DDUPSFS6420, - MET08DDUPSP1TBI, - MET08RESIHGCV, - MET08RESIMAPCDE, - MET08THFTIRQS408M, - MET08THFTIRSTRATUS, - // - MET08AFMD3100, - MET08BVHGPROBE, - MET08CVHGPROBE802B150, - MET08CVHGPROBE802B150_Monthly, - MET08CVHGPROBE802B150_Weekly, - MET08DDINCAN8620, - MET08DDINCAN8620_Daily, - MET08EBEAMINTEGRITY26, - MET08HALLHL5580, - MET08HALLHL5580_Monthly, - MET08HALLHL5580_Weekly, - MET08MESMICROSCOPE, - MET08NDFRESIMAP151C, - MET08NDFRESIMAP151C_Verification, - MET08PLMAPRPM, - MET08PLMAPRPM_Daily, - MET08PLMAPRPM_Verification, - MET08PLMPPLATO, - MET08PRFUSB4000, - MET08PRFUSB4000_Daily, - MET08PRFUSB4000_Monthly, - MET08PRFUSB4000_Weekly, - MET08PRFUSB4000_Verification, - MET08PRFUSB4000_Villach, - MET08UVH44GS100M, - MET08VPDSUBCON, - MET08WGEOMX203641Q, - MET08WGEOMX203641Q_Verification, - MET08XRDXPERTPROMRDXL, - MET08XRDXPERTPROMRDXL_Monthly, - MET08XRDXPERTPROMRDXL_Weekly, - METBRXRAYJV7300L - } - -} \ No newline at end of file + FileEquipment, + SemiEquipment, + // + DEP08EGANAIXG5, + // + MET08ANLYSDIFAAST230_Semi, + MET08DDUPSFS6420, + MET08DDUPSP1TBI, + MET08RESIHGCV, + MET08RESIMAPCDE, + MET08THFTIRQS408M, + MET08THFTIRSTRATUS, + // + MET08AFMD3100, + MET08BVHGPROBE, + MET08CVHGPROBE802B150, + MET08CVHGPROBE802B150_Monthly, + MET08CVHGPROBE802B150_Weekly, + MET08DDINCAN8620, + MET08DDINCAN8620_Daily, + MET08EBEAMINTEGRITY26, + MET08HALLHL5580, + MET08HALLHL5580_Monthly, + MET08HALLHL5580_Weekly, + MET08MESMICROSCOPE, + MET08NDFRESIMAP151C, + MET08NDFRESIMAP151C_Verification, + MET08PLMAPRPM, + MET08PLMAPRPM_Daily, + MET08PLMAPRPM_Verification, + MET08PLMPPLATO, + MET08PRFUSB4000, + MET08PRFUSB4000_Daily, + MET08PRFUSB4000_Monthly, + MET08PRFUSB4000_Weekly, + MET08PRFUSB4000_Verification, + MET08PRFUSB4000_Villach, + MET08UVH44GS100M, + MET08VPDSUBCON, + MET08WGEOMX203641Q, + MET08WGEOMX203641Q_Verification, + MET08XRDXPERTPROMRDXL, + MET08XRDXPERTPROMRDXL_Monthly, + MET08XRDXPERTPROMRDXL_Weekly, + METBRXRAYJV7300L +} diff --git a/APC Viewer/Shared/IProcessData.cs b/APC Viewer/Shared/IProcessData.cs index 16017fe..6d40c00 100644 --- a/APC Viewer/Shared/IProcessData.cs +++ b/APC Viewer/Shared/IProcessData.cs @@ -4,13 +4,11 @@ using System.Collections.Generic; using System.IO; using System.Text.Json; -namespace Shared +namespace Shared; + +public interface IProcessData { - public interface IProcessData - { - Tuple> GetResults(ILogic logic, ConfigDataBase configData, List fileInfoCollection); + Tuple> GetResults(ILogic logic, ConfigDataBase configData, List fileInfoCollection); - } - -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/IProcessDataDescription.cs b/APC Viewer/Shared/IProcessDataDescription.cs index b949bef..3e55b9e 100644 --- a/APC Viewer/Shared/IProcessDataDescription.cs +++ b/APC Viewer/Shared/IProcessDataDescription.cs @@ -1,26 +1,23 @@ using Shared.Metrology; using System.Collections.Generic; -namespace Shared +namespace Shared; + +public interface IProcessDataDescription { - public interface IProcessDataDescription - { + int Test { get; set; } + int Count { get; set; } + int Index { get; set; } + IProcessDataDescription GetDefault(ILogic logic, ConfigDataBase configDataBase); + IProcessDataDescription GetDisplayNames(ILogic logic, ConfigDataBase configDataBase); + List GetDescription(ILogic logic, ConfigDataBase configDataBase, List tests, IProcessData iProcessData); + List GetDetailNames(ILogic logic, ConfigDataBase configDataBase); + List GetHeaderNames(ILogic logic, ConfigDataBase configDataBase); + List GetIgnoreParameterNames(ILogic logic, ConfigDataBase configDataBase, Test test); + List GetNames(ILogic logic, ConfigDataBase configDataBase); + List GetPairedParameterNames(ILogic logic, ConfigDataBase configDataBase); + List GetParameterNames(ILogic logic, ConfigDataBase configDataBase); + string GetEventDescription(); - int Test { get; set; } - int Count { get; set; } - int Index { get; set; } - IProcessDataDescription GetDefault(ILogic logic, ConfigDataBase configDataBase); - IProcessDataDescription GetDisplayNames(ILogic logic, ConfigDataBase configDataBase); - List GetDescription(ILogic logic, ConfigDataBase configDataBase, List tests, IProcessData iProcessData); - List GetDetailNames(ILogic logic, ConfigDataBase configDataBase); - List GetHeaderNames(ILogic logic, ConfigDataBase configDataBase); - List GetIgnoreParameterNames(ILogic logic, ConfigDataBase configDataBase, Test test); - List GetNames(ILogic logic, ConfigDataBase configDataBase); - List GetPairedParameterNames(ILogic logic, ConfigDataBase configDataBase); - List GetParameterNames(ILogic logic, ConfigDataBase configDataBase); - string GetEventDescription(); - - } - -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/IScopeInfo.cs b/APC Viewer/Shared/IScopeInfo.cs index b0dfd33..d99807d 100644 --- a/APC Viewer/Shared/IScopeInfo.cs +++ b/APC Viewer/Shared/IScopeInfo.cs @@ -1,21 +1,18 @@ using System; -namespace Shared +namespace Shared; + +public interface IScopeInfo { - public interface IScopeInfo - { + Enum Enum { get; } + string HTML { get; } + string Title { get; } + string FileName { get; } + int TestValue { get; } + string Header { get; } + string QueryFilter { get; } + string FileNameWithoutExtension { get; } + EquipmentType EquipmentType { get; } - Enum Enum { get; } - string HTML { get; } - string Title { get; } - string FileName { get; } - int TestValue { get; } - string Header { get; } - string QueryFilter { get; } - string FileNameWithoutExtension { get; } - EquipmentType EquipmentType { get; } - - } - -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/IsEnvironment.cs b/APC Viewer/Shared/IsEnvironment.cs index c24b236..4185e96 100644 --- a/APC Viewer/Shared/IsEnvironment.cs +++ b/APC Viewer/Shared/IsEnvironment.cs @@ -2,170 +2,167 @@ using System; using System.Diagnostics; using System.Runtime.InteropServices; -namespace Shared +namespace Shared; + +public class IsEnvironment { - public class IsEnvironment + public enum Name { - - public enum Name - { - LinuxDevelopment, - LinuxProduction, - LinuxStaging, - OSXDevelopment, - OSXProduction, - OSXStaging, - WindowsDevelopment, - WindowsProduction, - WindowsStaging - } - - public bool DebuggerWasAttachedDuringConstructor { get; private set; } - public bool Development { get; private set; } - public bool Linux { get; private set; } - public bool OSX { get; private set; } - public bool Production { get; private set; } - public bool Staging { get; private set; } - public bool Windows { get; private set; } - public string Profile { get; private set; } - public string AppSettingsFileName { get; private set; } - public string ASPNetCoreEnvironment { get; private set; } - - public IsEnvironment(string testCategory) - { - if (testCategory.EndsWith(".json")) - { - Production = testCategory == "appsettings.json"; - Staging = testCategory.EndsWith(nameof(Staging)); - OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); - Development = testCategory.EndsWith(nameof(Development)); - Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); - DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; - Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); - ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - } - else - { - DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; - OSX = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(OSX)); - ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - Linux = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(Linux)); - Staging = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Staging)); - Windows = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(Windows)); - Production = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Production)); - Development = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Development)); - } - Profile = GetProfile(); - AppSettingsFileName = GetAppSettingsFileName(processesCount: null); - } - - public IsEnvironment(bool isDevelopment, bool isStaging, bool isProduction) - { - Staging = isStaging; - Production = isProduction; - Development = isDevelopment; - OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); - Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); - DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; - Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); - ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - Profile = GetProfile(); - AppSettingsFileName = GetAppSettingsFileName(processesCount: null); - } - - public IsEnvironment(int? processesCount, bool nullASPNetCoreEnvironmentIsDevelopment, bool nullASPNetCoreEnvironmentIsProduction) - { - OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); - Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); - DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; - Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); - ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - if (nullASPNetCoreEnvironmentIsDevelopment && nullASPNetCoreEnvironmentIsProduction) - throw new Exception(); - else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && nullASPNetCoreEnvironmentIsProduction) - Production = true; - else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && nullASPNetCoreEnvironmentIsDevelopment) - Development = true; - else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && !nullASPNetCoreEnvironmentIsDevelopment && !nullASPNetCoreEnvironmentIsProduction) - throw new Exception(); - else - { - Staging = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Staging)); - Production = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Production)); - Development = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Development)); - } - Profile = GetProfile(); - AppSettingsFileName = GetAppSettingsFileName(processesCount); - } - - private string GetProfile() - { - string result; - if (Windows && Production) - result = nameof(Production); - else if (Windows && Staging) - result = nameof(Staging); - else if (Windows && Development) - result = nameof(Development); - else if (Linux && Production) - result = nameof(Name.LinuxProduction); - else if (Linux && Staging) - result = nameof(Name.LinuxStaging); - else if (Linux && Development) - result = nameof(Name.LinuxDevelopment); - else if (OSX && Production) - result = nameof(Name.OSXProduction); - else if (OSX && Staging) - result = nameof(Name.OSXStaging); - else if (OSX && Development) - result = nameof(Name.OSXDevelopment); - else - throw new Exception(); - return result; - } - - private string GetAppSettingsFileName(int? processesCount) - { - string result; - if (Production) - { - if (processesCount is null) - result = "appsettings.json"; - else - result = $"appsettings.{processesCount}.json"; - } - else - { - string environment; - if (Staging) - environment = nameof(Staging); - else if (Development) - environment = nameof(Development); - else - throw new Exception(); - if (processesCount is null) - result = $"appsettings.{environment}.json"; - else - result = $"appsettings.{environment}.{processesCount}.json"; - } - return result; - } - - public static string GetEnvironmentName(IsEnvironment isEnvironment) - { - string result; - if (isEnvironment.Windows) - result = nameof(IsEnvironment.Windows); - else if (isEnvironment.Linux) - result = nameof(IsEnvironment.Linux); - else if (isEnvironment.OSX) - result = nameof(IsEnvironment.OSX); - else - throw new Exception(); - return result; - } - + LinuxDevelopment, + LinuxProduction, + LinuxStaging, + OSXDevelopment, + OSXProduction, + OSXStaging, + WindowsDevelopment, + WindowsProduction, + WindowsStaging } -} \ No newline at end of file + public bool DebuggerWasAttachedDuringConstructor { get; private set; } + public bool Development { get; private set; } + public bool Linux { get; private set; } + public bool OSX { get; private set; } + public bool Production { get; private set; } + public bool Staging { get; private set; } + public bool Windows { get; private set; } + public string Profile { get; private set; } + public string AppSettingsFileName { get; private set; } + public string ASPNetCoreEnvironment { get; private set; } + + public IsEnvironment(string testCategory) + { + if (testCategory.EndsWith(".json")) + { + Production = testCategory == "appsettings.json"; + Staging = testCategory.EndsWith(nameof(Staging)); + OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); + Development = testCategory.EndsWith(nameof(Development)); + Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + } + else + { + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + OSX = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(OSX)); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + Linux = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(Linux)); + Staging = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Staging)); + Windows = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(Windows)); + Production = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Production)); + Development = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Development)); + } + Profile = GetProfile(); + AppSettingsFileName = GetAppSettingsFileName(processesCount: null); + } + + public IsEnvironment(bool isDevelopment, bool isStaging, bool isProduction) + { + Staging = isStaging; + Production = isProduction; + Development = isDevelopment; + OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); + Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + Profile = GetProfile(); + AppSettingsFileName = GetAppSettingsFileName(processesCount: null); + } + + public IsEnvironment(int? processesCount, bool nullASPNetCoreEnvironmentIsDevelopment, bool nullASPNetCoreEnvironmentIsProduction) + { + OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); + Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + if (nullASPNetCoreEnvironmentIsDevelopment && nullASPNetCoreEnvironmentIsProduction) + throw new Exception(); + else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && nullASPNetCoreEnvironmentIsProduction) + Production = true; + else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && nullASPNetCoreEnvironmentIsDevelopment) + Development = true; + else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && !nullASPNetCoreEnvironmentIsDevelopment && !nullASPNetCoreEnvironmentIsProduction) + throw new Exception(); + else + { + Staging = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Staging)); + Production = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Production)); + Development = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Development)); + } + Profile = GetProfile(); + AppSettingsFileName = GetAppSettingsFileName(processesCount); + } + + private string GetProfile() + { + string result; + if (Windows && Production) + result = nameof(Production); + else if (Windows && Staging) + result = nameof(Staging); + else if (Windows && Development) + result = nameof(Development); + else if (Linux && Production) + result = nameof(Name.LinuxProduction); + else if (Linux && Staging) + result = nameof(Name.LinuxStaging); + else if (Linux && Development) + result = nameof(Name.LinuxDevelopment); + else if (OSX && Production) + result = nameof(Name.OSXProduction); + else if (OSX && Staging) + result = nameof(Name.OSXStaging); + else if (OSX && Development) + result = nameof(Name.OSXDevelopment); + else + throw new Exception(); + return result; + } + + private string GetAppSettingsFileName(int? processesCount) + { + string result; + if (Production) + { + if (processesCount is null) + result = "appsettings.json"; + else + result = $"appsettings.{processesCount}.json"; + } + else + { + string environment; + if (Staging) + environment = nameof(Staging); + else if (Development) + environment = nameof(Development); + else + throw new Exception(); + if (processesCount is null) + result = $"appsettings.{environment}.json"; + else + result = $"appsettings.{environment}.{processesCount}.json"; + } + return result; + } + + public static string GetEnvironmentName(IsEnvironment isEnvironment) + { + string result; + if (isEnvironment.Windows) + result = nameof(IsEnvironment.Windows); + else if (isEnvironment.Linux) + result = nameof(IsEnvironment.Linux); + else if (isEnvironment.OSX) + result = nameof(IsEnvironment.OSX); + else + throw new Exception(); + return result; + } + +} diff --git a/APC Viewer/Shared/Logistics.cs b/APC Viewer/Shared/Logistics.cs index 8953f04..8af750d 100644 --- a/APC Viewer/Shared/Logistics.cs +++ b/APC Viewer/Shared/Logistics.cs @@ -3,243 +3,228 @@ using System.Collections.Generic; using System.IO; using System.Linq; -namespace Shared +namespace Shared; + +public class Logistics { - public class Logistics + public object NullData { get; private set; } + public string JobID { get; private set; } //CellName + public long Sequence { get; private set; } //Ticks + public DateTime DateTimeFromSequence { get; private set; } + public double TotalSecondsSinceLastWriteTimeFromSequence { get; private set; } + public string MesEntity { get; private set; } //SPC + public string ReportFullPath { get; private set; } //Extract file + public string ProcessJobID { get; internal set; } //Reactor (duplicate but I want it in the logistics) + public string MID { get; internal set; } //Lot & Pocket || Lot + public List Tags { get; internal set; } + public List Logistics1 { get; internal set; } + public List Logistics2 { get; internal set; } + + public Logistics() { + DateTime dateTime = DateTime.Now; + NullData = null; + JobID = Description.GetCellName(); + Sequence = dateTime.Ticks; + DateTimeFromSequence = dateTime; + TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTime).TotalSeconds; + MesEntity = DefaultMesEntity(dateTime); + ReportFullPath = string.Empty; + ProcessJobID = nameof(ProcessJobID); + MID = nameof(MID); + Tags = new List(); + Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); + Logistics2 = new List(); + } - public object NullData { get; private set; } - public string JobID { get; private set; } //CellName - public long Sequence { get; private set; } //Ticks - public DateTime DateTimeFromSequence { get; private set; } - public double TotalSecondsSinceLastWriteTimeFromSequence { get; private set; } - public string MesEntity { get; private set; } //SPC - public string ReportFullPath { get; private set; } //Extract file - public string ProcessJobID { get; internal set; } //Reactor (duplicate but I want it in the logistics) - public string MID { get; internal set; } //Lot & Pocket || Lot - public List Tags { get; internal set; } - public List Logistics1 { get; internal set; } - public List Logistics2 { get; internal set; } - - public Logistics() + public Logistics(object nullData, Dictionary cellNames, Dictionary mesEntities, FileInfo fileInfo, bool useSplitForMID, int? fileInfoLength = null) + { + NullData = nullData; + string mesEntity = string.Empty; + string jobID = Description.GetCellName(); + DateTime dateTime = fileInfo.LastWriteTime; + if (fileInfoLength.HasValue && fileInfo.Length < fileInfoLength.Value) + dateTime = dateTime.AddTicks(-1); + if (string.IsNullOrEmpty(jobID)) + { + if (cellNames.Count == 1) + jobID = cellNames.ElementAt(0).Key; + else + { + string reportFullPathLower = fileInfo.FullName.ToLower(); + foreach (KeyValuePair element in cellNames) + { + if (reportFullPathLower.Contains(element.Key) || reportFullPathLower.Contains(element.Value)) + { + jobID = element.Key; + break; + } + } + } + } + if (string.IsNullOrEmpty(jobID)) + throw new Exception(); + if (mesEntities.ContainsKey(jobID)) + mesEntity = mesEntities[jobID]; + else if (mesEntities.Count == 1) + mesEntity = mesEntities.ElementAt(0).Value; + // + if (string.IsNullOrEmpty(mesEntity)) + throw new Exception(); + JobID = jobID; + Sequence = dateTime.Ticks; + DateTimeFromSequence = dateTime; + TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTime).TotalSeconds; + MesEntity = mesEntity; + ReportFullPath = fileInfo.FullName; + ProcessJobID = nameof(ProcessJobID); + string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileInfo.FullName); + if (useSplitForMID) + { + if (fileNameWithoutExtension.IndexOf(".") > -1) + fileNameWithoutExtension = fileNameWithoutExtension.Split('.')[0].Trim(); + if (fileNameWithoutExtension.IndexOf("_") > -1) + fileNameWithoutExtension = fileNameWithoutExtension.Split('_')[0].Trim(); + if (fileNameWithoutExtension.IndexOf("-") > -1) + fileNameWithoutExtension = fileNameWithoutExtension.Split('-')[0].Trim(); + } + MID = string.Concat(fileNameWithoutExtension.Substring(0, 1).ToUpper(), fileNameWithoutExtension.Substring(1).ToLower()); + Tags = new List(); + Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); + Logistics2 = new List(); + } + + public Logistics(string reportFullPath, string logistics) + { + string key; + DateTime dateTime; + string[] segments; + Logistics1 = logistics.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList(); + if (!Logistics1.Any() || !Logistics1[0].StartsWith("LOGISTICS_1")) { - DateTime dateTime = DateTime.Now; NullData = null; - JobID = Description.GetCellName(); + JobID = "null"; + dateTime = new FileInfo(reportFullPath).LastWriteTime; Sequence = dateTime.Ticks; DateTimeFromSequence = dateTime; TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTime).TotalSeconds; MesEntity = DefaultMesEntity(dateTime); - ReportFullPath = string.Empty; - ProcessJobID = nameof(ProcessJobID); - MID = nameof(MID); + ReportFullPath = reportFullPath; + ProcessJobID = "R##"; + MID = "null"; Tags = new List(); Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); Logistics2 = new List(); } - - public Logistics(object nullData, Dictionary cellNames, Dictionary mesEntities, FileInfo fileInfo, bool useSplitForMID, int? fileInfoLength = null) + else { - NullData = nullData; - string mesEntity = string.Empty; - string jobID = Description.GetCellName(); - DateTime dateTime = fileInfo.LastWriteTime; - if (fileInfoLength.HasValue && fileInfo.Length < fileInfoLength.Value) - dateTime = dateTime.AddTicks(-1); - if (string.IsNullOrEmpty(jobID)) + string logistics1Line1 = Logistics1[0]; + key = "NULL_DATA="; + if (!logistics1Line1.Contains(key)) + NullData = null; + else { - if (cellNames.Count == 1) - jobID = cellNames.ElementAt(0).Key; - else - { - string reportFullPathLower = fileInfo.FullName.ToLower(); - foreach (var element in cellNames) - { - if (reportFullPathLower.Contains(element.Key) || reportFullPathLower.Contains(element.Value)) - { - jobID = element.Key; - break; - } - } - } + segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + NullData = segments[1].Split(';')[0]; + } + key = "JOBID="; + if (!logistics1Line1.Contains(key)) + JobID = "null"; + else + { + segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + JobID = segments[1].Split(';')[0]; + } + key = "SEQUENCE="; + if (!logistics1Line1.Contains(key)) + dateTime = new FileInfo(reportFullPath).LastWriteTime; + else + { + segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + if (!long.TryParse(segments[1].Split(';')[0].Split('.')[0], out long sequence) || sequence < new DateTime(1999, 1, 1).Ticks) + dateTime = new FileInfo(reportFullPath).LastWriteTime; + else + dateTime = new DateTime(sequence); } - if (string.IsNullOrEmpty(jobID)) - throw new Exception(); - if (mesEntities.ContainsKey(jobID)) - mesEntity = mesEntities[jobID]; - else if (mesEntities.Count == 1) - mesEntity = mesEntities.ElementAt(0).Value; - // - if (string.IsNullOrEmpty(mesEntity)) - throw new Exception(); - JobID = jobID; Sequence = dateTime.Ticks; DateTimeFromSequence = dateTime; TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTime).TotalSeconds; - MesEntity = mesEntity; - ReportFullPath = fileInfo.FullName; - ProcessJobID = nameof(ProcessJobID); - string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileInfo.FullName); - if (useSplitForMID) + DateTime lastWriteTime = new FileInfo(reportFullPath).LastWriteTime; + if (TotalSecondsSinceLastWriteTimeFromSequence > 600) { - if (fileNameWithoutExtension.IndexOf(".") > -1) - fileNameWithoutExtension = fileNameWithoutExtension.Split('.')[0].Trim(); - if (fileNameWithoutExtension.IndexOf("_") > -1) - fileNameWithoutExtension = fileNameWithoutExtension.Split('_')[0].Trim(); - if (fileNameWithoutExtension.IndexOf("-") > -1) - fileNameWithoutExtension = fileNameWithoutExtension.Split('-')[0].Trim(); + if (lastWriteTime != dateTime) + try + { File.SetLastWriteTime(reportFullPath, dateTime); } + catch (Exception) { } } - MID = string.Concat(fileNameWithoutExtension.Substring(0, 1).ToUpper(), fileNameWithoutExtension.Substring(1).ToLower()); - Tags = new List(); - Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); - Logistics2 = new List(); - } - - public Logistics(string reportFullPath, string logistics) - { - string key; - DateTime dateTime; - string[] segments; - Logistics1 = logistics.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList(); - if (!Logistics1.Any() || !Logistics1[0].StartsWith("LOGISTICS_1")) - { - NullData = null; - JobID = "null"; - dateTime = new FileInfo(reportFullPath).LastWriteTime; - Sequence = dateTime.Ticks; - DateTimeFromSequence = dateTime; - TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTime).TotalSeconds; + key = "MES_ENTITY="; + if (!logistics1Line1.Contains(key)) MesEntity = DefaultMesEntity(dateTime); - ReportFullPath = reportFullPath; - ProcessJobID = "R##"; - MID = "null"; - Tags = new List(); - Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); - Logistics2 = new List(); - } else { - string logistics1Line1 = Logistics1[0]; - key = "NULL_DATA="; - if (!logistics1Line1.Contains(key)) - NullData = null; - else - { - segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - NullData = segments[1].Split(';')[0]; - } - key = "JOBID="; - if (!logistics1Line1.Contains(key)) - JobID = "null"; - else - { - segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - JobID = segments[1].Split(';')[0]; - } - key = "SEQUENCE="; - if (!logistics1Line1.Contains(key)) - dateTime = new FileInfo(reportFullPath).LastWriteTime; - else - { - segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - if (!long.TryParse(segments[1].Split(';')[0].Split('.')[0], out long sequence) || sequence < new DateTime(1999, 1, 1).Ticks) - dateTime = new FileInfo(reportFullPath).LastWriteTime; - else - dateTime = new DateTime(sequence); - } - Sequence = dateTime.Ticks; - DateTimeFromSequence = dateTime; - TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTime).TotalSeconds; - DateTime lastWriteTime = new FileInfo(reportFullPath).LastWriteTime; - if (TotalSecondsSinceLastWriteTimeFromSequence > 600) - { - if (lastWriteTime != dateTime) - try - { File.SetLastWriteTime(reportFullPath, dateTime); } - catch (Exception) { } - } - key = "MES_ENTITY="; - if (!logistics1Line1.Contains(key)) - MesEntity = DefaultMesEntity(dateTime); - else - { - segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - MesEntity = segments[1].Split(';')[0]; - } - ReportFullPath = reportFullPath; - key = "PROCESS_JOBID="; - if (!logistics1Line1.Contains(key)) - ProcessJobID = "R##"; - else - { - segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - ProcessJobID = segments[1].Split(';')[0]; - } - key = "MID="; - if (!logistics1Line1.Contains(key)) - MID = "null"; - else - { - segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - MID = segments[1].Split(';')[0]; - } + segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + MesEntity = segments[1].Split(';')[0]; } - Logistics2 logistics2; - Tags = new List(); - Logistics2 = new List(); - for (int i = 1; i < Logistics1.Count(); i++) + ReportFullPath = reportFullPath; + key = "PROCESS_JOBID="; + if (!logistics1Line1.Contains(key)) + ProcessJobID = "R##"; + else { - if (Logistics1[i].StartsWith("LOGISTICS_2")) - { - logistics2 = new Logistics2(Logistics1[i]); - Logistics2.Add(logistics2); - } + segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + ProcessJobID = segments[1].Split(';')[0]; } - for (int i = Logistics1.Count() - 1; i > -1; i--) + key = "MID="; + if (!logistics1Line1.Contains(key)) + MID = "null"; + else { - if (Logistics1[i].StartsWith("LOGISTICS_2")) - Logistics1.RemoveAt(i); + segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + MID = segments[1].Split(';')[0]; } } - - public Logistics ShallowCopy() + Logistics2 logistics2; + Tags = new List(); + Logistics2 = new List(); + for (int i = 1; i < Logistics1.Count(); i++) { - return (Logistics)MemberwiseClone(); + if (Logistics1[i].StartsWith("LOGISTICS_2")) + { + logistics2 = new Logistics2(Logistics1[i]); + Logistics2.Add(logistics2); + } } - - private string DefaultMesEntity(DateTime dateTime) + for (int i = Logistics1.Count() - 1; i > -1; i--) { - return string.Concat(dateTime.Ticks, "_MES_ENTITY"); - } - - internal string GetLotViaMostCommonMethod() - { - return MID.Substring(0, MID.Length - 2); - } - - internal string GetPocketNumberViaMostCommonMethod() - { - return MID.Substring(MID.Length - 2); - } - - internal void Update(string dateTime, string processJobID, string mid) - { - if (!DateTime.TryParse(dateTime, out DateTime dateTimeCasted)) - dateTimeCasted = DateTime.Now; - NullData = null; - //JobID = Description.GetCellName(); - Sequence = dateTimeCasted.Ticks; - DateTimeFromSequence = dateTimeCasted; - TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTimeCasted).TotalSeconds; - //MesEntity = DefaultMesEntity(dateTime); - //ReportFullPath = string.Empty; - ProcessJobID = processJobID; - MID = mid; - Tags = new List(); - Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); - Logistics2 = new List(); + if (Logistics1[i].StartsWith("LOGISTICS_2")) + Logistics1.RemoveAt(i); } } -} \ No newline at end of file + public Logistics ShallowCopy() => (Logistics)MemberwiseClone(); + + private string DefaultMesEntity(DateTime dateTime) => string.Concat(dateTime.Ticks, "_MES_ENTITY"); + + internal string GetLotViaMostCommonMethod() => MID.Substring(0, MID.Length - 2); + + internal string GetPocketNumberViaMostCommonMethod() => MID.Substring(MID.Length - 2); + + internal void Update(string dateTime, string processJobID, string mid) + { + if (!DateTime.TryParse(dateTime, out DateTime dateTimeCasted)) + dateTimeCasted = DateTime.Now; + NullData = null; + //JobID = Description.GetCellName(); + Sequence = dateTimeCasted.Ticks; + DateTimeFromSequence = dateTimeCasted; + TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTimeCasted).TotalSeconds; + //MesEntity = DefaultMesEntity(dateTime); + //ReportFullPath = string.Empty; + ProcessJobID = processJobID; + MID = mid; + Tags = new List(); + Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); + Logistics2 = new List(); + } +} diff --git a/APC Viewer/Shared/Logistics2.cs b/APC Viewer/Shared/Logistics2.cs index f41d4c5..ee51525 100644 --- a/APC Viewer/Shared/Logistics2.cs +++ b/APC Viewer/Shared/Logistics2.cs @@ -1,80 +1,78 @@ using System; -namespace Shared +namespace Shared; + +public class Logistics2 { - public class Logistics2 + + public string MID { get; private set; } + public string RunNumber { get; private set; } + public string SatelliteGroup { get; private set; } + public string PartNumber { get; private set; } + public string PocketNumber { get; private set; } + public string WaferLot { get; private set; } + public string Recipe { get; private set; } + + public Logistics2(string logistics2) { - - public string MID { get; private set; } - public string RunNumber { get; private set; } - public string SatelliteGroup { get; private set; } - public string PartNumber { get; private set; } - public string PocketNumber { get; private set; } - public string WaferLot { get; private set; } - public string Recipe { get; private set; } - - public Logistics2(string logistics2) + string key; + string[] segments; + key = "JOBID="; + if (!logistics2.Contains(key)) + MID = "null"; + else { - string key; - string[] segments; - key = "JOBID="; - if (!logistics2.Contains(key)) - MID = "null"; - else - { - segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - MID = segments[1].Split(';')[0]; - } - key = "MID="; - if (!logistics2.Contains(key)) - RunNumber = "null"; - else - { - segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - RunNumber = segments[1].Split(';')[0]; - } - key = "INFO="; - if (!logistics2.Contains(key)) - SatelliteGroup = "null"; - else - { - segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - SatelliteGroup = segments[1].Split(';')[0]; - } - key = "PRODUCT="; - if (!logistics2.Contains(key)) - PartNumber = "null"; - else - { - segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - PartNumber = segments[1].Split(';')[0]; - } - key = "CHAMBER="; - if (!logistics2.Contains(key)) - PocketNumber = "null"; - else - { - segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - PocketNumber = segments[1].Split(';')[0]; - } - key = "WAFER_ID="; - if (!logistics2.Contains(key)) - WaferLot = "null"; - else - { - segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - WaferLot = segments[1].Split(';')[0]; - } - key = "PPID="; - if (!logistics2.Contains(key)) - Recipe = "null"; - else - { - segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - Recipe = segments[1].Split(';')[0]; - } + segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + MID = segments[1].Split(';')[0]; + } + key = "MID="; + if (!logistics2.Contains(key)) + RunNumber = "null"; + else + { + segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + RunNumber = segments[1].Split(';')[0]; + } + key = "INFO="; + if (!logistics2.Contains(key)) + SatelliteGroup = "null"; + else + { + segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + SatelliteGroup = segments[1].Split(';')[0]; + } + key = "PRODUCT="; + if (!logistics2.Contains(key)) + PartNumber = "null"; + else + { + segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + PartNumber = segments[1].Split(';')[0]; + } + key = "CHAMBER="; + if (!logistics2.Contains(key)) + PocketNumber = "null"; + else + { + segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + PocketNumber = segments[1].Split(';')[0]; + } + key = "WAFER_ID="; + if (!logistics2.Contains(key)) + WaferLot = "null"; + else + { + segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + WaferLot = segments[1].Split(';')[0]; + } + key = "PPID="; + if (!logistics2.Contains(key)) + Recipe = "null"; + else + { + segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + Recipe = segments[1].Split(';')[0]; } - } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/Column.cs b/APC Viewer/Shared/Metrology/Column.cs index 60957aa..11b8725 100644 --- a/APC Viewer/Shared/Metrology/Column.cs +++ b/APC Viewer/Shared/Metrology/Column.cs @@ -1,1605 +1,798 @@ using System; -namespace Shared.Metrology +namespace Shared.Metrology; + +public static class ColumnGet { - public static class ColumnGet + public static string GetDiplayName(this Column column) { - - public static string GetDiplayName(this Column column) + string results = column switch { - string results; - switch (column) - { - //case Column._8in_Total_Warp_Verification: results = "8in Total Warp Verification"; break; - //case Column.AFM_Monthly_Y: results = "AFM-Monthly Y"; break; - //case Column.AFM_Monthly: results = "AFM_Monthly"; break; - case Column.AFM_Pit_Count: - results = "AFM Pit Count"; - break; - case Column.AFM_Roughness: - results = "AFM Roughness"; - break; - //case Column.Adder_Bin_1: results = "Adder Bin 1"; break; - //case Column.Adder_Bin_2: results = "Adder Bin 2"; break; - //case Column.Adder_Bin_3: results = "Adder Bin 3"; break; - //case Column.Adder_Bin_4: results = "Adder Bin 4"; break; - //case Column.Adder_Bin_5: results = "Adder Bin 5"; break; - //case Column.Adder_Bin_6: results = "Adder Bin 6"; break; - //case Column.Adder_Bin_9: results = "Adder Bin 9"; break; - case Column.Al_B_B_WTAVG: - results = "Al% B.B. WTAVG"; - break; - case Column.Al_B_B_: - results = "Al% B.B."; - break; - case Column.Al_Barrier_WTAVG: - results = "Al% Barrier WTAVG"; - break; - case Column.Al_Barrier: - results = "Al% Barrier"; - break; - case Column.Al_SLS_WTAVG: - results = "Al% SLS WTAVG"; - break; - case Column.Al_SLS: - results = "Al% SLS"; - break; - case Column.Al_TL1_WTAVG: - results = "Al% TL1 WTAVG"; - break; - case Column.Al_TL1: - results = "Al% TL1"; - break; - case Column.Al_TL2_WTAVG: - results = "Al% TL2 WTAVG"; - break; - //case Column.BV_Resistance: results = "BV Resistance"; break; //BV Monthly Verification - case Column.BandEdge_V: - results = "BandEdge_V"; - break; - case Column.BandEdge_V_XY: - results = "BandEdge_V_XY"; - break; - case Column.BandEdge_nm: - results = "BandEdge_nm"; - break; - case Column.Barrier_Composition_RPM_XY: - results = "Barrier_Composition_RPM_XY"; - break; - case Column.Bow_Calibration: - results = "Bow Calibration"; - break; - case Column.Bow_Range: - results = "Bow Range"; - break; - case Column.Bow: - results = "Bow"; - break; - case Column.BowCenter: - results = "BowCenter"; - break; - case Column.BowX: - results = "BowX"; - break; - case Column.BowY: - results = "BowY"; - break; - case Column.Breakdown_Voltage_Edge: - results = "Breakdown Voltage - Edge"; - break; - case Column.Breakdown_VoltageMiddle: - results = "Breakdown Voltage - Middle"; - break; - case Column.Breakdown_Voltage: - results = "Breakdown Voltage"; - break; - case Column.CV_C_at_10V: - results = "CV C at -10V"; - break; - case Column.CV_Nd_Min: - results = "CV Nd Min"; - break; - //case Column.Candela_Large_LPD_Quarterly: results = "Candela Large LPD Quarterly"; break; - //case Column.Candela_Medium_LPD_Quarterly: results = "Candela Medium LPD Quarterly"; break; - //case Column.Candela_Small_LPD_Quarterly: results = "Candela Small LPD Quarterly"; break; - //case Column.Candela_Total_Quarterly: results = "Candela Total Quarterly"; break; - case Column.Candela_102_83nm: - results = "102-83nm"; - break; - case Column.Candela_1_1um: - results = "1.1um"; - break; - case Column.Candela_496nm: - results = "496nm"; - break; - case Column.Candela_600nm: - results = "600nm"; - break; - case Column.Candela_8620_Small: - results = "Candela 8620 Small"; - break; - case Column.Candela_Crack_Verification: - results = "Crack Verification"; - break; - case Column.Candela_Cracking: - results = "Candela Cracking"; - break; - case Column.Candela_Cracking_Acceptable: - results = "Candela Cracking Acceptable"; - break; - case Column.Candela_Crater: - results = "Candela Crater"; - break; - case Column.Candela_Crater_Verification: - results = "Crater verification"; - break; - case Column.Candela_Haze: - results = "Candela Haze"; - break; - case Column.Candela_LPD_Large: - results = "Candela LPD Large"; - break; - case Column.Candela_LPD_Medium: - results = "Candela LPD Medium"; - break; - case Column.Candela_LPD_Small: - results = "Candela LPD Small"; - break; - case Column.Candela_Large_Verification: - results = "Large Verification"; - break; - case Column.Candela_Medium_Verification: - results = "Medium Verification"; - break; - case Column.Candela_Pits: - results = "Candela Pits"; - break; - case Column.Candela_Pits_Verification: - results = "Pits verification"; - break; - case Column.Candela_SPE: - results = "Candela SPE"; - break; - case Column.Candela_SPE_Verification: - results = "SPE verification"; - break; - case Column.Candela_Slip: - results = "Candela Slip"; - break; - case Column.Candela_Small_Verification: - results = "Small Verification"; - break; - case Column.Candela_Spirals: - results = "Candela Spirals"; - break; - case Column.Candela_Spirals_Verification: - results = "Candela Spirals Verification"; - break; - case Column.Candela_Total_Defects: - results = "Candela Total Defects"; - break; - case Column.Candela_Total_PSL: - results = "Candela Total PSL"; - break; - case Column.Candela__1_1um: - results = ">1.1um"; - break; - //case Column.Comment: results = "Comment"; break; - //case Column.Conductivity: results = "Conductivity"; break; - case Column.Contact_Symmetry: - results = "Contact Symmetry"; - break; - //case Column.Cracking_verification: results = "Cracking verification"; break; - //case Column.Crater_verification: results = "Crater verification"; break; - case Column.Date: - results = "Date"; - break; - case Column.Denton_Crystal_Life: - results = "Denton_Crystal_Life"; - break; - case Column.Denton_Current_AVG: - results = "Denton_Current_AVG"; - break; - case Column.Denton_Current_STDEV: - results = "Denton_Current_STDEV"; - break; - case Column.Denton_Deposition_Power_AVG: - results = "Denton_Deposition_Power_AVG"; - break; - case Column.Denton_Deposition_Power_STDEV: - results = "Denton_Deposition_Power_STDEV"; - break; - case Column.Denton_Deposition_Rate_AVG: - results = "Denton_Deposition_Rate_AVG"; - break; - case Column.Denton_Deposition_Rate_STDEV: - results = "Denton_Deposition_Rate_STDEV"; - break; - case Column.Denton_Gun_Pocket: - results = "Denton_Gun_Pocket"; - break; - case Column.Denton_Pumpdown_Time: - results = "Denton_Pumpdown_Time"; - break; - case Column.Denton_Voltage_AVG: - results = "Denton_Voltage_AVG"; - break; - case Column.Denton_Voltage_STDEV: - results = "Denton_Voltage_STDEV"; - break; - case Column.Employee: - results = "Employee"; - break; - case Column.Epi_Thickness_Mean: - results = "Epi Thickness Mean"; - break; - case Column.Epi_Thickness_Mean_XY: - results = "Epi Thickness Mean_XY"; - break; - case Column.Epi_Thickness_Std_Dev_: - results = "Epi Thickness Std Dev %"; - break; - case Column.FWHM_006_WTAVG: - results = "FWHM 006 WTAVG"; - break; - case Column.FWHM_006: - results = "FWHM 006"; - break; - case Column.FWHM_105_WTAVG: - results = "FWHM 105 WTAVG"; - break; - case Column.FWHM_105: - results = "FWHM 105"; - break; - case Column.Hall_Rs: - results = "Hall Rs"; - break; - case Column.Hall_Mobility_verif_sample: - results = "Hall_Mobility_verif_sample"; - break; - case Column.Hall_Ns_verif_sample: - results = "Hall_Ns_verif_sample"; - break; - case Column.Hall_Rs_verif_sample: - results = "Hall_Rs_verif_sample"; - break; - case Column.Job: - results = "Job"; - break; - case Column.LEI_RS_Average_value: - results = "LEI RS Average value"; - break; - case Column.LEI_RS_Maximum_value: - results = "LEI RS Maximum value"; - break; - case Column.LEI_RS_Minimum_value: - results = "LEI RS Minimum value"; - break; - case Column.LEI_RS_STDEV: - results = "LEI RS STDEV"; - break; - case Column.LEI_RS_STDEV_: - results = "LEI RS STDEV%"; - break; - //case Column.Large_Adder_Sum: results = "Large Adder Sum"; break; - case Column.Lot: - results = "Lot"; - break; - //case Column.Medium_Adder_Sum: results = "Medium Adder Sum"; break; - case Column.Microscope_Center_5x: - results = "Microscope Center 5x"; - break; - case Column.Microscope_Center_50x: - results = "Microscope Center 50x"; - break; - case Column.Microscope_Middle_5x: - results = "Microscope Middle 5x"; - break; - case Column.Microscope_Middle_50x: - results = "Microscope Middle 50x"; - break; - case Column.Microscope_Edge_5x: - results = "Microscope Edge 5x"; - break; - case Column.Microscope_Edge_50x: - results = "Microscope Edge 50x"; - break; - case Column.Mobility_Verification: - results = "Mobility Verification"; - break; - case Column.Mobility: - results = "Mobility"; - break; - case Column.Ns_Verification: - results = "Ns Verification"; - break; - case Column.PL_Edge_Wavelength: - results = "PL Edge Wavelength"; - break; - case Column.PL_Ratio: - results = "PL Ratio"; - break; - case Column.PR_Barrier_Composition: - results = "PR Barrier Composition"; - break; - case Column.PR_Peak: - results = "PR Peak"; - break; - case Column.Part: - results = "Part"; - break; - //case Column.Particles_verification: results = "Particles verification"; break; - //case Column.Pits_verification: results = "Pits verification"; break; - //case Column.Pocket: results = "Pocket"; break; - //case Column.Post_Bin_1: results = "Post Bin 1"; break; - //case Column.Post_Bin_2: results = "Post Bin 2"; break; - //case Column.Post_Bin_3: results = "Post Bin 3"; break; - //case Column.Post_Bin_4: results = "Post Bin 4"; break; - //case Column.Post_Bin_5: results = "Post Bin 5"; break; - //case Column.Post_Bin_6: results = "Post Bin 6"; break; - //case Column.Post_Bin_9: results = "Post Bin 9"; break; - //case Column.Pre_Bin_1: results = "Pre Bin 1"; break; - //case Column.Pre_Bin_2: results = "Pre Bin 2"; break; - //case Column.Pre_Bin_3: results = "Pre Bin 3"; break; - //case Column.Pre_Bin_4: results = "Pre Bin 4"; break; - //case Column.Pre_Bin_5: results = "Pre Bin 5"; break; - //case Column.Pre_Bin_6: results = "Pre Bin 6"; break; - //case Column.Pre_Bin_9: results = "Pre Bin 9"; break; - case Column.Process: - results = "Process"; - break; - //case Column.RPM_verif_Thickness_1: results = "RPM_verif_Thickness_1"; break; - //case Column.RPM_verif_Thickness_2: results = "RPM_verif_Thickness_2"; break; - //case Column.RPM_verif_Thickness_3: results = "RPM_verif_Thickness_3"; break; - //case Column.RPM_verif_Thickness_Average: results = "RPM_verif_Thickness_Average"; break; - //case Column.RTA_oxide_Thk_Change: results = "RTA oxide Thk Change"; break; - //case Column.RTA_oxide_post_anneal_Thk: results = "RTA oxide post-anneal Thk"; break; - //case Column.RTA_oxide_pre_anneal_Thk: results = "RTA oxide pre-anneal Thk"; break; - case Column.Recipe: - results = "Recipe"; - break; - //case Column.Resistivity_2_ohm_cm: results = "Resistivity 2 ohm cm"; break; //LEI Weekly Verification - //case Column.Resistivity_600_ohm_cm: results = "Resistivity 600 ohm cm"; break; //LEI Weekly Verification - case Column.Rs_verification: - results = "Rs verification"; - break; - case Column.Rs_verif_100kohm: - results = "Rs_verif_100kohm"; - break; - case Column.Rs_verif_10ohm: - results = "Rs_verif_10ohm"; - break; - case Column.Rs_verif_1kohm: - results = "Rs_verif_1kohm"; - break; - case Column.SID: - results = "SID"; - break; - case Column.SL_Period_WTAVG: - results = "SL Period WTAVG"; - break; - case Column.SL_Period: - results = "SL Period"; - break; - //case Column.SPE_verification: results = "SPE verification"; break; - //case Column.Sample_ID: results = "Sample ID"; break; - case Column.Sheet_Concentration: - results = "Sheet Concentration"; - break; - //case Column.Size: results = "Size"; break; - //case Column.Small_Adder_Sum: results = "Small Adder Sum"; break; - //case Column.Spirals_verification: results = "Spirals verification"; break; - case Column.Time: - results = "Time"; - break; - case Column.Tool_ID: - results = "Tool ID"; - break; - //case Column.Total_LPD_Adder: results = "Total LPD Adder"; break; - //case Column.Total_Verification: results = "Total Verification"; break; - case Column.Total_Warp_Calibration: - results = "Total Warp Calibration"; - break; - case Column.UV_Broken: - results = "UV Broken"; - break; - case Column.UV_Chipping: - results = "UV Chipping"; - break; - case Column.UV_Cracking_0_3mm_: - results = "UV Cracking (0-3mm)"; - break; - case Column.UV_Cracking_3_7mm_: - results = "UV Cracking (3-7mm)"; - break; - case Column.UV_Cracking_7mm_: - results = "UV Cracking (>7mm)"; - break; - case Column.UV_Crazing: - results = "UV Crazing"; - break; - case Column.UV_Crazing_Acceptable: - results = "UV Crazing Acceptable"; - break; - case Column.UV_FULL_Characterization_Wafer: - results = "UV FULL Characterization Wafer"; - break; - case Column.UV_Haze_count_: - results = "UV Haze (count)"; - break; - case Column.UV_LIGHT_Characterization_Wafer: - results = "UV LIGHT Characterization Wafer"; - break; - case Column.UV_Non_rotation: - results = "UV Non-rotation"; - break; - case Column.UV_Other: - results = "UV Other"; - break; - case Column.UV_Scratch_count_: - results = "UV Scratch (count)"; - break; - case Column.UV_Slip_count_: - results = "UV Slip (count)"; - break; - case Column.UV_True_Haze: - results = "UV True Haze"; - break; - case Column.UV_True_Haze_Acceptable: - results = "UV True Haze Acceptable"; - break; - case Column.UV_SPE_1mm_count: - results = "UV-SPE (>1mm) count"; - break; - case Column.UV_SPE_count_: - results = "UV-SPE (count)"; - break; - case Column.Verification_Contact_Symmetry: - results = "Verification Contact Symmetry"; - break; - case Column.Vp_Pinch_Off_Voltage: - results = "Vp Pinch Off Voltage"; - break; - case Column.Wafer_ID: - results = "Wafer ID"; - break; - //case Column.Wafer_Pocket: results = "Wafer Pocket"; break; - case Column.Wafer_Region: - results = "Wafer Region"; - break; - case Column.Wafer_Scribe: - results = "Wafer Scribe"; - break; - case Column.WaferPocket_Candela: - results = "WaferPocket_Candela"; - break; - case Column.WaferPocket_Warp: - results = "WaferPocket_Warp"; - break; - case Column.WaferPosition_CV: - results = "WaferPosition_CV"; - break; - case Column.WaferPosition_BV: - results = "WaferPosition_BV"; - break; - case Column.WaferPosition_Hall: - results = "WaferPosition_Hall"; - break; - case Column.WaferPosition_PR: - results = "WaferPosition_PR"; - break; - case Column.Warp: - results = "Warp"; - break; - case Column.X_Coord: - results = "X-Coord"; - break; - case Column.XRD_2_Theta_Peak_002: - results = "XRD 2 Theta Peak 002"; - break; - case Column.XRD_2_Theta_Peak_101: - results = "XRD 2 Theta Peak 101"; - break; - case Column.XRD_2_Theta_Position: - results = "XRD 2-Theta Position"; - break; - case Column.XRD_2_Theta_Position_Si_1: - results = "XRD 2-Theta Position Si 1"; - break; - case Column.XRD_2_Theta_Position_Si_2: - results = "XRD 2-Theta Position Si 2"; - break; - case Column.XRD_2_Theta_Position_Si_3: - results = "XRD 2-Theta Position Si 3"; - break; - case Column.XRD_Peak_002_Intensity: - results = "XRD Peak 002 Intensity"; - break; - case Column.XRD_Peak_101_Intensity: - results = "XRD Peak 101 Intensity"; - break; - case Column.XRD_Weekly_AL_Center: - results = "XRD Weekly AL% Center"; - break; - case Column.XRD_Weekly_Back_Barrier_Al_: - results = "Back Barrier Al%"; - break; - case Column.XRD_Weekly_Barrier_Al_: - results = "Barrier Al%"; - break; - case Column.XRD_Weekly_FWHM_002: - results = "XRD Weekly FWHM 002"; - break; - case Column.XRD_Weekly_FWHM_101: - results = "XRD Weekly FWHM 101"; - break; - case Column.XRD_Weekly_FWHM_105: - results = "XRD Weekly FWHM 105"; - break; - case Column.XRD_Weekly_Fringe_thick_0_0_: - results = "XRD Weekly Fringe thick (0,0)"; - break; - case Column.XRD_Weekly_Fringe_thick_48_48_: - results = "XRD Weekly Fringe thick (48,48)"; - break; - case Column.XRD_Weekly_Intensity: - results = "XRD Weekly Intensity"; - break; - case Column.XRD_Weekly_Super_Lattice_Al_: - results = "Super Lattice Al%"; - break; - case Column.XRD_Weekly_Super_Lattice_period: - results = "Super Lattice period"; - break; - case Column.XRD_Weekly_Super_Lattice_tks: - results = "Super Lattice tks"; - break; - case Column.XRR_Thickness_nm_WTAVG: - results = "XRR Thickness (nm) WTAVG"; - break; - case Column.XRR_Thickness_nm_: - results = "XRR Thickness (nm)"; - break; - case Column.Y_Coord: - results = "Y-Coord"; - break; - case Column.YellowBand_Power_mW_: - results = "YellowBand_Power (mW)"; - break; - case Column.YellowBand_V: - results = "YellowBand_V"; - break; - case Column.YellowBand_V_XY: - results = "YellowBand_V_XY"; - break; - case Column.YellowBand_nm: - results = "YellowBand_nm"; - break; - //case Column.pH: results = "pH"; break; - case Column.Ag: - results = "Ag"; - break; - case Column.Al: - results = "Al"; - break; - case Column.As: - results = "As"; - break; - case Column.Au: - results = "Au"; - break; - case Column.B: - results = "B"; - break; - case Column.Ba: - results = "Ba"; - break; - case Column.Ca: - results = "Ca"; - break; - case Column.Ce: - results = "Ce"; - break; - case Column.Co: - results = "Co"; - break; - case Column.Cr: - results = "Cr"; - break; - case Column.Cu: - results = "Cu"; - break; - case Column.Fe: - results = "Fe"; - break; - case Column.Ga: - results = "Ga"; - break; - case Column.Ge: - results = "Ge"; - break; - case Column.Hf: - results = "Hf"; - break; - case Column.K: - results = "K"; - break; - case Column.Li: - results = "Li"; - break; - case Column.Mg: - results = "Mg"; - break; - case Column.Mn: - results = "Mn"; - break; - case Column.Mo: - results = "Mo"; - break; - case Column.Na: - results = "Na"; - break; - case Column.Ni: - results = "Ni"; - break; - case Column.P: - results = "P"; - break; - case Column.Pb: - results = "Pb"; - break; - case Column.Sn: - results = "Sn"; - break; - case Column.Ta: - results = "Ta"; - break; - case Column.Ti: - results = "Ti"; - break; - case Column.W: - results = "W"; - break; - case Column.Y: - results = "Y"; - break; - case Column.Zn: - results = "Zn"; - break; - default: - throw new Exception(); - } - return results; - } - - public static Description.Param GetParam(this Column column) - { - Description.Param results; - switch (column) - { - //case Column._8in_Total_Warp_Verification: results = Description.Param.String; break; - //case Column.AFM_Monthly_Y: results = Description.Param.String; break; - //case Column.AFM_Monthly: results = Description.Param.String; break; - case Column.AFM_Pit_Count: - results = Description.Param.String; - break; - case Column.AFM_Roughness: - results = Description.Param.String; - break; - //case Column.Adder_Bin_1: results = Description.Param.String; break; - //case Column.Adder_Bin_2: results = Description.Param.String; break; - //case Column.Adder_Bin_3: results = Description.Param.String; break; - //case Column.Adder_Bin_4: results = Description.Param.String; break; - //case Column.Adder_Bin_5: results = Description.Param.String; break; - //case Column.Adder_Bin_6: results = Description.Param.String; break; - //case Column.Adder_Bin_9: results = Description.Param.String; break; - case Column.Al_B_B_WTAVG: - results = Description.Param.String; - break; - case Column.Al_B_B_: - results = Description.Param.String; - break; - case Column.Al_Barrier_WTAVG: - results = Description.Param.String; - break; - case Column.Al_Barrier: - results = Description.Param.String; - break; - case Column.Al_SLS_WTAVG: - results = Description.Param.String; - break; - case Column.Al_SLS: - results = Description.Param.String; - break; - case Column.Al_TL1_WTAVG: - results = Description.Param.String; - break; - case Column.Al_TL1: - results = Description.Param.String; - break; - case Column.Al_TL2_WTAVG: - results = Description.Param.String; - break; - //case Column.BV_Resistance: results = Description.Param.String; break; - case Column.BandEdge_V: - results = Description.Param.String; - break; - case Column.BandEdge_V_XY: - results = Description.Param.String; - break; - case Column.BandEdge_nm: - results = Description.Param.String; - break; - case Column.Barrier_Composition_RPM_XY: - results = Description.Param.String; - break; - case Column.Bow_Calibration: - results = Description.Param.String; - break; - case Column.Bow_Range: - results = Description.Param.String; - break; - case Column.Bow: - results = Description.Param.String; - break; - case Column.BowCenter: - results = Description.Param.String; - break; - case Column.BowX: - results = Description.Param.String; - break; - case Column.BowY: - results = Description.Param.String; - break; - case Column.Breakdown_Voltage_Edge: - results = Description.Param.String; - break; - case Column.Breakdown_VoltageMiddle: - results = Description.Param.String; - break; - case Column.Breakdown_Voltage: - results = Description.Param.String; - break; - case Column.CV_C_at_10V: - results = Description.Param.String; - break; - case Column.CV_Nd_Min: - results = Description.Param.String; - break; - //case Column.Candela_Large_LPD_Quarterly: results = Description.Param.String; break; - //case Column.Candela_Medium_LPD_Quarterly: results = Description.Param.String; break; - //case Column.Candela_Small_LPD_Quarterly: results = Description.Param.String; break; - //case Column.Candela_Total_Quarterly: results = Description.Param.String; break; - case Column.Candela_102_83nm: - results = Description.Param.String; - break; - case Column.Candela_1_1um: - results = Description.Param.String; - break; - case Column.Candela_496nm: - results = Description.Param.String; - break; - case Column.Candela_600nm: - results = Description.Param.String; - break; - case Column.Candela_8620_Small: - results = Description.Param.String; - break; - case Column.Candela_Crack_Verification: - results = Description.Param.String; - break; - case Column.Candela_Cracking: - results = Description.Param.String; - break; - case Column.Candela_Cracking_Acceptable: - results = Description.Param.String; - break; - case Column.Candela_Crater: - results = Description.Param.String; - break; - case Column.Candela_Crater_Verification: - results = Description.Param.String; - break; - case Column.Candela_Haze: - results = Description.Param.String; - break; - case Column.Candela_LPD_Large: - results = Description.Param.String; - break; - case Column.Candela_LPD_Medium: - results = Description.Param.String; - break; - case Column.Candela_LPD_Small: - results = Description.Param.String; - break; - case Column.Candela_Large_Verification: - results = Description.Param.String; - break; - case Column.Candela_Medium_Verification: - results = Description.Param.String; - break; - case Column.Candela_Pits: - results = Description.Param.String; - break; - case Column.Candela_Pits_Verification: - results = Description.Param.String; - break; - case Column.Candela_SPE: - results = Description.Param.String; - break; - case Column.Candela_SPE_Verification: - results = Description.Param.String; - break; - case Column.Candela_Slip: - results = Description.Param.String; - break; - case Column.Candela_Small_Verification: - results = Description.Param.String; - break; - case Column.Candela_Spirals: - results = Description.Param.String; - break; - case Column.Candela_Spirals_Verification: - results = Description.Param.String; - break; - case Column.Candela_Total_Defects: - results = Description.Param.String; - break; - case Column.Candela_Total_PSL: - results = Description.Param.String; - break; - case Column.Candela__1_1um: - results = Description.Param.String; - break; - //case Column.Comment: results = Description.Param.String; break; - //case Column.Conductivity: results = Description.Param.String; break; - case Column.Contact_Symmetry: - results = Description.Param.String; - break; - //case Column.Cracking_verification: results = Description.Param.String; break; - //case Column.Crater_verification: results = Description.Param.String; break; - case Column.Date: - results = Description.Param.String; - break; - case Column.Denton_Crystal_Life: - results = Description.Param.String; - break; - case Column.Denton_Current_AVG: - results = Description.Param.String; - break; - case Column.Denton_Current_STDEV: - results = Description.Param.String; - break; - case Column.Denton_Deposition_Power_AVG: - results = Description.Param.String; - break; - case Column.Denton_Deposition_Power_STDEV: - results = Description.Param.String; - break; - case Column.Denton_Deposition_Rate_AVG: - results = Description.Param.String; - break; - case Column.Denton_Deposition_Rate_STDEV: - results = Description.Param.String; - break; - case Column.Denton_Gun_Pocket: - results = Description.Param.String; - break; - case Column.Denton_Pumpdown_Time: - results = Description.Param.String; - break; - case Column.Denton_Voltage_AVG: - results = Description.Param.String; - break; - case Column.Denton_Voltage_STDEV: - results = Description.Param.String; - break; - case Column.Employee: - results = Description.Param.String; - break; - case Column.Epi_Thickness_Mean: - results = Description.Param.String; - break; - case Column.Epi_Thickness_Mean_XY: - results = Description.Param.String; - break; - case Column.Epi_Thickness_Std_Dev_: - results = Description.Param.String; - break; - case Column.FWHM_006_WTAVG: - results = Description.Param.String; - break; - case Column.FWHM_006: - results = Description.Param.String; - break; - case Column.FWHM_105_WTAVG: - results = Description.Param.String; - break; - case Column.FWHM_105: - results = Description.Param.String; - break; - case Column.Hall_Rs: - results = Description.Param.String; - break; - case Column.Hall_Mobility_verif_sample: - results = Description.Param.String; - break; - case Column.Hall_Ns_verif_sample: - results = Description.Param.String; - break; - case Column.Hall_Rs_verif_sample: - results = Description.Param.String; - break; - case Column.Job: - results = Description.Param.String; - break; - case Column.LEI_RS_Average_value: - results = Description.Param.String; - break; - case Column.LEI_RS_Maximum_value: - results = Description.Param.String; - break; - case Column.LEI_RS_Minimum_value: - results = Description.Param.String; - break; - case Column.LEI_RS_STDEV: - results = Description.Param.String; - break; - case Column.LEI_RS_STDEV_: - results = Description.Param.String; - break; - //case Column.Large_Adder_Sum: results = Description.Param.String; break; - case Column.Lot: - results = Description.Param.String; - break; - //case Column.Medium_Adder_Sum: results = Description.Param.String; break; - case Column.Microscope_Center_5x: - results = Description.Param.String; - break; - case Column.Microscope_Center_50x: - results = Description.Param.String; - break; - case Column.Microscope_Middle_5x: - results = Description.Param.String; - break; - case Column.Microscope_Middle_50x: - results = Description.Param.String; - break; - case Column.Microscope_Edge_5x: - results = Description.Param.String; - break; - case Column.Microscope_Edge_50x: - results = Description.Param.String; - break; - case Column.Mobility_Verification: - results = Description.Param.String; - break; - case Column.Mobility: - results = Description.Param.String; - break; - case Column.Ns_Verification: - results = Description.Param.String; - break; - case Column.PL_Edge_Wavelength: - results = Description.Param.String; - break; - case Column.PL_Ratio: - results = Description.Param.String; - break; - case Column.PR_Barrier_Composition: - results = Description.Param.String; - break; - case Column.PR_Peak: - results = Description.Param.String; - break; - case Column.Part: - results = Description.Param.String; - break; - //case Column.Particles_verification: results = Description.Param.String; break; - //case Column.Pits_verification: results = Description.Param.String; break; - //case Column.Pocket: results = Description.Param.String; break; - //case Column.Post_Bin_1: results = Description.Param.String; break; - //case Column.Post_Bin_2: results = Description.Param.String; break; - //case Column.Post_Bin_3: results = Description.Param.String; break; - //case Column.Post_Bin_4: results = Description.Param.String; break; - //case Column.Post_Bin_5: results = Description.Param.String; break; - //case Column.Post_Bin_6: results = Description.Param.String; break; - //case Column.Post_Bin_9: results = Description.Param.String; break; - //case Column.Pre_Bin_1: results = Description.Param.String; break; - //case Column.Pre_Bin_2: results = Description.Param.String; break; - //case Column.Pre_Bin_3: results = Description.Param.String; break; - //case Column.Pre_Bin_4: results = Description.Param.String; break; - //case Column.Pre_Bin_5: results = Description.Param.String; break; - //case Column.Pre_Bin_6: results = Description.Param.String; break; - //case Column.Pre_Bin_9: results = Description.Param.String; break; - case Column.Process: - results = Description.Param.String; - break; - //case Column.RPM_verif_Thickness_1: results = Description.Param.String; break; - //case Column.RPM_verif_Thickness_2: results = Description.Param.String; break; - //case Column.RPM_verif_Thickness_3: results = Description.Param.String; break; - //case Column.RPM_verif_Thickness_Average: results = Description.Param.String; break; - //case Column.RTA_oxide_Thk_Change: results = Description.Param.String; break; - //case Column.RTA_oxide_post_anneal_Thk: results = Description.Param.String; break; - //case Column.RTA_oxide_pre_anneal_Thk: results = Description.Param.String; break; - case Column.Recipe: - results = Description.Param.String; - break; - //case Column.Resistivity_2_ohm_cm: results = Description.Param.String; break; - //case Column.Resistivity_600_ohm_cm: results = Description.Param.String; break; - case Column.Rs_verification: - results = Description.Param.String; - break; - case Column.Rs_verif_100kohm: - results = Description.Param.String; - break; - case Column.Rs_verif_10ohm: - results = Description.Param.String; - break; - case Column.Rs_verif_1kohm: - results = Description.Param.String; - break; - case Column.SID: - results = Description.Param.String; - break; - case Column.SL_Period_WTAVG: - results = Description.Param.String; - break; - case Column.SL_Period: - results = Description.Param.String; - break; - //case Column.SPE_verification: results = Description.Param.String; break; - //case Column.Sample_ID: results = Description.Param.String; break; - case Column.Sheet_Concentration: - results = Description.Param.String; - break; - //case Column.Size: results = Description.Param.String; break; - //case Column.Small_Adder_Sum: results = Description.Param.String; break; - //case Column.Spirals_verification: results = Description.Param.String; break; - case Column.Time: - results = Description.Param.String; - break; - case Column.Tool_ID: - results = Description.Param.String; - break; - //case Column.Total_LPD_Adder: results = Description.Param.String; break; - //case Column.Total_Verification: results = Description.Param.String; break; - case Column.Total_Warp_Calibration: - results = Description.Param.String; - break; - case Column.UV_Broken: - results = Description.Param.String; - break; - case Column.UV_Chipping: - results = Description.Param.String; - break; - case Column.UV_Cracking_0_3mm_: - results = Description.Param.String; - break; - case Column.UV_Cracking_3_7mm_: - results = Description.Param.String; - break; - case Column.UV_Cracking_7mm_: - results = Description.Param.String; - break; - case Column.UV_Crazing: - results = Description.Param.String; - break; - case Column.UV_Crazing_Acceptable: - results = Description.Param.String; - break; - case Column.UV_FULL_Characterization_Wafer: - results = Description.Param.String; - break; - case Column.UV_Haze_count_: - results = Description.Param.String; - break; - case Column.UV_LIGHT_Characterization_Wafer: - results = Description.Param.String; - break; - case Column.UV_Non_rotation: - results = Description.Param.String; - break; - case Column.UV_Other: - results = Description.Param.String; - break; - case Column.UV_Scratch_count_: - results = Description.Param.String; - break; - case Column.UV_Slip_count_: - results = Description.Param.String; - break; - case Column.UV_True_Haze: - results = Description.Param.String; - break; - case Column.UV_True_Haze_Acceptable: - results = Description.Param.String; - break; - case Column.UV_SPE_1mm_count: - results = Description.Param.String; - break; - case Column.UV_SPE_count_: - results = Description.Param.String; - break; - case Column.Verification_Contact_Symmetry: - results = Description.Param.String; - break; - case Column.Vp_Pinch_Off_Voltage: - results = Description.Param.String; - break; - case Column.Wafer_ID: - results = Description.Param.String; - break; - //case Column.Wafer_Pocket: results = Description.Param.String; break; - case Column.Wafer_Region: - results = Description.Param.String; - break; - case Column.Wafer_Scribe: - results = Description.Param.String; - break; - case Column.WaferPocket_Candela: - results = Description.Param.String; - break; - case Column.WaferPocket_Warp: - results = Description.Param.String; - break; - case Column.WaferPosition_CV: - results = Description.Param.String; - break; - case Column.WaferPosition_BV: - results = Description.Param.String; - break; - case Column.WaferPosition_Hall: - results = Description.Param.String; - break; - case Column.WaferPosition_PR: - results = Description.Param.String; - break; - case Column.Warp: - results = Description.Param.String; - break; - case Column.X_Coord: - results = Description.Param.String; - break; - case Column.XRD_2_Theta_Peak_002: - results = Description.Param.String; - break; - case Column.XRD_2_Theta_Peak_101: - results = Description.Param.String; - break; - case Column.XRD_2_Theta_Position: - results = Description.Param.String; - break; - case Column.XRD_2_Theta_Position_Si_1: - results = Description.Param.String; - break; - case Column.XRD_2_Theta_Position_Si_2: - results = Description.Param.String; - break; - case Column.XRD_2_Theta_Position_Si_3: - results = Description.Param.String; - break; - case Column.XRD_Peak_002_Intensity: - results = Description.Param.String; - break; - case Column.XRD_Peak_101_Intensity: - results = Description.Param.String; - break; - case Column.XRD_Weekly_AL_Center: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Back_Barrier_Al_: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Barrier_Al_: - results = Description.Param.String; - break; - case Column.XRD_Weekly_FWHM_002: - results = Description.Param.String; - break; - case Column.XRD_Weekly_FWHM_101: - results = Description.Param.String; - break; - case Column.XRD_Weekly_FWHM_105: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Fringe_thick_0_0_: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Fringe_thick_48_48_: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Intensity: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Super_Lattice_Al_: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Super_Lattice_period: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Super_Lattice_tks: - results = Description.Param.String; - break; - case Column.XRR_Thickness_nm_WTAVG: - results = Description.Param.String; - break; - case Column.XRR_Thickness_nm_: - results = Description.Param.String; - break; - case Column.Y_Coord: - results = Description.Param.String; - break; - case Column.YellowBand_Power_mW_: - results = Description.Param.String; - break; - case Column.YellowBand_V: - results = Description.Param.String; - break; - case Column.YellowBand_V_XY: - results = Description.Param.String; - break; - case Column.YellowBand_nm: - results = Description.Param.String; - break; - //case Column.pH: results = Description.Param.String; break; - case Column.Ag: - results = Description.Param.String; - break; - case Column.Al: - results = Description.Param.String; - break; - case Column.As: - results = Description.Param.String; - break; - case Column.Au: - results = Description.Param.String; - break; - case Column.B: - results = Description.Param.String; - break; - case Column.Ba: - results = Description.Param.String; - break; - case Column.Ca: - results = Description.Param.String; - break; - case Column.Ce: - results = Description.Param.String; - break; - case Column.Co: - results = Description.Param.String; - break; - case Column.Cr: - results = Description.Param.String; - break; - case Column.Cu: - results = Description.Param.String; - break; - case Column.Fe: - results = Description.Param.String; - break; - case Column.Ga: - results = Description.Param.String; - break; - case Column.Ge: - results = Description.Param.String; - break; - case Column.Hf: - results = Description.Param.String; - break; - case Column.K: - results = Description.Param.String; - break; - case Column.Li: - results = Description.Param.String; - break; - case Column.Mg: - results = Description.Param.String; - break; - case Column.Mn: - results = Description.Param.String; - break; - case Column.Mo: - results = Description.Param.String; - break; - case Column.Na: - results = Description.Param.String; - break; - case Column.Ni: - results = Description.Param.String; - break; - case Column.P: - results = Description.Param.String; - break; - case Column.Pb: - results = Description.Param.String; - break; - case Column.Sn: - results = Description.Param.String; - break; - case Column.Ta: - results = Description.Param.String; - break; - case Column.Ti: - results = Description.Param.String; - break; - case Column.W: - results = Description.Param.String; - break; - case Column.Y: - results = Description.Param.String; - break; - case Column.Zn: - results = Description.Param.String; - break; - default: - throw new Exception(); - } - return results; - } - + //case Column._8in_Total_Warp_Verification: results = "8in Total Warp Verification"; break; + //case Column.AFM_Monthly_Y: results = "AFM-Monthly Y"; break; + //case Column.AFM_Monthly: results = "AFM_Monthly"; break; + Column.AFM_Pit_Count => "AFM Pit Count", + Column.AFM_Roughness => "AFM Roughness", + //case Column.Adder_Bin_1: results = "Adder Bin 1"; break; + //case Column.Adder_Bin_2: results = "Adder Bin 2"; break; + //case Column.Adder_Bin_3: results = "Adder Bin 3"; break; + //case Column.Adder_Bin_4: results = "Adder Bin 4"; break; + //case Column.Adder_Bin_5: results = "Adder Bin 5"; break; + //case Column.Adder_Bin_6: results = "Adder Bin 6"; break; + //case Column.Adder_Bin_9: results = "Adder Bin 9"; break; + Column.Al_B_B_WTAVG => "Al% B.B. WTAVG", + Column.Al_B_B_ => "Al% B.B.", + Column.Al_Barrier_WTAVG => "Al% Barrier WTAVG", + Column.Al_Barrier => "Al% Barrier", + Column.Al_SLS_WTAVG => "Al% SLS WTAVG", + Column.Al_SLS => "Al% SLS", + Column.Al_TL1_WTAVG => "Al% TL1 WTAVG", + Column.Al_TL1 => "Al% TL1", + Column.Al_TL2_WTAVG => "Al% TL2 WTAVG", + //case Column.BV_Resistance: results = "BV Resistance"; break; //BV Monthly Verification + Column.BandEdge_V => "BandEdge_V", + Column.BandEdge_V_XY => "BandEdge_V_XY", + Column.BandEdge_nm => "BandEdge_nm", + Column.Barrier_Composition_RPM_XY => "Barrier_Composition_RPM_XY", + Column.Bow_Calibration => "Bow Calibration", + Column.Bow_Range => "Bow Range", + Column.Bow => "Bow", + Column.BowCenter => "BowCenter", + Column.BowX => "BowX", + Column.BowY => "BowY", + Column.Breakdown_Voltage_Edge => "Breakdown Voltage - Edge", + Column.Breakdown_VoltageMiddle => "Breakdown Voltage - Middle", + Column.Breakdown_Voltage => "Breakdown Voltage", + Column.CV_C_at_10V => "CV C at -10V", + Column.CV_Nd_Min => "CV Nd Min", + //case Column.Candela_Large_LPD_Quarterly: results = "Candela Large LPD Quarterly"; break; + //case Column.Candela_Medium_LPD_Quarterly: results = "Candela Medium LPD Quarterly"; break; + //case Column.Candela_Small_LPD_Quarterly: results = "Candela Small LPD Quarterly"; break; + //case Column.Candela_Total_Quarterly: results = "Candela Total Quarterly"; break; + Column.Candela_102_83nm => "102-83nm", + Column.Candela_1_1um => "1.1um", + Column.Candela_496nm => "496nm", + Column.Candela_600nm => "600nm", + Column.Candela_8620_Small => "Candela 8620 Small", + Column.Candela_Crack_Verification => "Crack Verification", + Column.Candela_Cracking => "Candela Cracking", + Column.Candela_Cracking_Acceptable => "Candela Cracking Acceptable", + Column.Candela_Crater => "Candela Crater", + Column.Candela_Crater_Verification => "Crater verification", + Column.Candela_Haze => "Candela Haze", + Column.Candela_LPD_Large => "Candela LPD Large", + Column.Candela_LPD_Medium => "Candela LPD Medium", + Column.Candela_LPD_Small => "Candela LPD Small", + Column.Candela_Large_Verification => "Large Verification", + Column.Candela_Medium_Verification => "Medium Verification", + Column.Candela_Pits => "Candela Pits", + Column.Candela_Pits_Verification => "Pits verification", + Column.Candela_SPE => "Candela SPE", + Column.Candela_SPE_Verification => "SPE verification", + Column.Candela_Slip => "Candela Slip", + Column.Candela_Small_Verification => "Small Verification", + Column.Candela_Spirals => "Candela Spirals", + Column.Candela_Spirals_Verification => "Candela Spirals Verification", + Column.Candela_Total_Defects => "Candela Total Defects", + Column.Candela_Total_PSL => "Candela Total PSL", + Column.Candela__1_1um => ">1.1um", + //case Column.Comment: results = "Comment"; break; + //case Column.Conductivity: results = "Conductivity"; break; + Column.Contact_Symmetry => "Contact Symmetry", + //case Column.Cracking_verification: results = "Cracking verification"; break; + //case Column.Crater_verification: results = "Crater verification"; break; + Column.Date => "Date", + Column.Denton_Crystal_Life => "Denton_Crystal_Life", + Column.Denton_Current_AVG => "Denton_Current_AVG", + Column.Denton_Current_STDEV => "Denton_Current_STDEV", + Column.Denton_Deposition_Power_AVG => "Denton_Deposition_Power_AVG", + Column.Denton_Deposition_Power_STDEV => "Denton_Deposition_Power_STDEV", + Column.Denton_Deposition_Rate_AVG => "Denton_Deposition_Rate_AVG", + Column.Denton_Deposition_Rate_STDEV => "Denton_Deposition_Rate_STDEV", + Column.Denton_Gun_Pocket => "Denton_Gun_Pocket", + Column.Denton_Pumpdown_Time => "Denton_Pumpdown_Time", + Column.Denton_Voltage_AVG => "Denton_Voltage_AVG", + Column.Denton_Voltage_STDEV => "Denton_Voltage_STDEV", + Column.Employee => "Employee", + Column.Epi_Thickness_Mean => "Epi Thickness Mean", + Column.Epi_Thickness_Mean_XY => "Epi Thickness Mean_XY", + Column.Epi_Thickness_Std_Dev_ => "Epi Thickness Std Dev %", + Column.FWHM_006_WTAVG => "FWHM 006 WTAVG", + Column.FWHM_006 => "FWHM 006", + Column.FWHM_105_WTAVG => "FWHM 105 WTAVG", + Column.FWHM_105 => "FWHM 105", + Column.Hall_Rs => "Hall Rs", + Column.Hall_Mobility_verif_sample => "Hall_Mobility_verif_sample", + Column.Hall_Ns_verif_sample => "Hall_Ns_verif_sample", + Column.Hall_Rs_verif_sample => "Hall_Rs_verif_sample", + Column.Job => "Job", + Column.LEI_RS_Average_value => "LEI RS Average value", + Column.LEI_RS_Maximum_value => "LEI RS Maximum value", + Column.LEI_RS_Minimum_value => "LEI RS Minimum value", + Column.LEI_RS_STDEV => "LEI RS STDEV", + Column.LEI_RS_STDEV_ => "LEI RS STDEV%", + //case Column.Large_Adder_Sum: results = "Large Adder Sum"; break; + Column.Lot => "Lot", + //case Column.Medium_Adder_Sum: results = "Medium Adder Sum"; break; + Column.Microscope_Center_5x => "Microscope Center 5x", + Column.Microscope_Center_50x => "Microscope Center 50x", + Column.Microscope_Middle_5x => "Microscope Middle 5x", + Column.Microscope_Middle_50x => "Microscope Middle 50x", + Column.Microscope_Edge_5x => "Microscope Edge 5x", + Column.Microscope_Edge_50x => "Microscope Edge 50x", + Column.Mobility_Verification => "Mobility Verification", + Column.Mobility => "Mobility", + Column.Ns_Verification => "Ns Verification", + Column.PL_Edge_Wavelength => "PL Edge Wavelength", + Column.PL_Ratio => "PL Ratio", + Column.PR_Barrier_Composition => "PR Barrier Composition", + Column.PR_Peak => "PR Peak", + Column.Part => "Part", + //case Column.Particles_verification: results = "Particles verification"; break; + //case Column.Pits_verification: results = "Pits verification"; break; + //case Column.Pocket: results = "Pocket"; break; + //case Column.Post_Bin_1: results = "Post Bin 1"; break; + //case Column.Post_Bin_2: results = "Post Bin 2"; break; + //case Column.Post_Bin_3: results = "Post Bin 3"; break; + //case Column.Post_Bin_4: results = "Post Bin 4"; break; + //case Column.Post_Bin_5: results = "Post Bin 5"; break; + //case Column.Post_Bin_6: results = "Post Bin 6"; break; + //case Column.Post_Bin_9: results = "Post Bin 9"; break; + //case Column.Pre_Bin_1: results = "Pre Bin 1"; break; + //case Column.Pre_Bin_2: results = "Pre Bin 2"; break; + //case Column.Pre_Bin_3: results = "Pre Bin 3"; break; + //case Column.Pre_Bin_4: results = "Pre Bin 4"; break; + //case Column.Pre_Bin_5: results = "Pre Bin 5"; break; + //case Column.Pre_Bin_6: results = "Pre Bin 6"; break; + //case Column.Pre_Bin_9: results = "Pre Bin 9"; break; + Column.Process => "Process", + //case Column.RPM_verif_Thickness_1: results = "RPM_verif_Thickness_1"; break; + //case Column.RPM_verif_Thickness_2: results = "RPM_verif_Thickness_2"; break; + //case Column.RPM_verif_Thickness_3: results = "RPM_verif_Thickness_3"; break; + //case Column.RPM_verif_Thickness_Average: results = "RPM_verif_Thickness_Average"; break; + //case Column.RTA_oxide_Thk_Change: results = "RTA oxide Thk Change"; break; + //case Column.RTA_oxide_post_anneal_Thk: results = "RTA oxide post-anneal Thk"; break; + //case Column.RTA_oxide_pre_anneal_Thk: results = "RTA oxide pre-anneal Thk"; break; + Column.Recipe => "Recipe", + //case Column.Resistivity_2_ohm_cm: results = "Resistivity 2 ohm cm"; break; //LEI Weekly Verification + //case Column.Resistivity_600_ohm_cm: results = "Resistivity 600 ohm cm"; break; //LEI Weekly Verification + Column.Rs_verification => "Rs verification", + Column.Rs_verif_100kohm => "Rs_verif_100kohm", + Column.Rs_verif_10ohm => "Rs_verif_10ohm", + Column.Rs_verif_1kohm => "Rs_verif_1kohm", + Column.SID => "SID", + Column.SL_Period_WTAVG => "SL Period WTAVG", + Column.SL_Period => "SL Period", + //case Column.SPE_verification: results = "SPE verification"; break; + //case Column.Sample_ID: results = "Sample ID"; break; + Column.Sheet_Concentration => "Sheet Concentration", + //case Column.Size: results = "Size"; break; + //case Column.Small_Adder_Sum: results = "Small Adder Sum"; break; + //case Column.Spirals_verification: results = "Spirals verification"; break; + Column.Time => "Time", + Column.Tool_ID => "Tool ID", + //case Column.Total_LPD_Adder: results = "Total LPD Adder"; break; + //case Column.Total_Verification: results = "Total Verification"; break; + Column.Total_Warp_Calibration => "Total Warp Calibration", + Column.UV_Broken => "UV Broken", + Column.UV_Chipping => "UV Chipping", + Column.UV_Cracking_0_3mm_ => "UV Cracking (0-3mm)", + Column.UV_Cracking_3_7mm_ => "UV Cracking (3-7mm)", + Column.UV_Cracking_7mm_ => "UV Cracking (>7mm)", + Column.UV_Crazing => "UV Crazing", + Column.UV_Crazing_Acceptable => "UV Crazing Acceptable", + Column.UV_FULL_Characterization_Wafer => "UV FULL Characterization Wafer", + Column.UV_Haze_count_ => "UV Haze (count)", + Column.UV_LIGHT_Characterization_Wafer => "UV LIGHT Characterization Wafer", + Column.UV_Non_rotation => "UV Non-rotation", + Column.UV_Other => "UV Other", + Column.UV_Scratch_count_ => "UV Scratch (count)", + Column.UV_Slip_count_ => "UV Slip (count)", + Column.UV_True_Haze => "UV True Haze", + Column.UV_True_Haze_Acceptable => "UV True Haze Acceptable", + Column.UV_SPE_1mm_count => "UV-SPE (>1mm) count", + Column.UV_SPE_count_ => "UV-SPE (count)", + Column.Verification_Contact_Symmetry => "Verification Contact Symmetry", + Column.Vp_Pinch_Off_Voltage => "Vp Pinch Off Voltage", + Column.Wafer_ID => "Wafer ID", + //case Column.Wafer_Pocket: results = "Wafer Pocket"; break; + Column.Wafer_Region => "Wafer Region", + Column.Wafer_Scribe => "Wafer Scribe", + Column.WaferPocket_Candela => "WaferPocket_Candela", + Column.WaferPocket_Warp => "WaferPocket_Warp", + Column.WaferPosition_CV => "WaferPosition_CV", + Column.WaferPosition_BV => "WaferPosition_BV", + Column.WaferPosition_Hall => "WaferPosition_Hall", + Column.WaferPosition_PR => "WaferPosition_PR", + Column.Warp => "Warp", + Column.X_Coord => "X-Coord", + Column.XRD_2_Theta_Peak_002 => "XRD 2 Theta Peak 002", + Column.XRD_2_Theta_Peak_101 => "XRD 2 Theta Peak 101", + Column.XRD_2_Theta_Position => "XRD 2-Theta Position", + Column.XRD_2_Theta_Position_Si_1 => "XRD 2-Theta Position Si 1", + Column.XRD_2_Theta_Position_Si_2 => "XRD 2-Theta Position Si 2", + Column.XRD_2_Theta_Position_Si_3 => "XRD 2-Theta Position Si 3", + Column.XRD_Peak_002_Intensity => "XRD Peak 002 Intensity", + Column.XRD_Peak_101_Intensity => "XRD Peak 101 Intensity", + Column.XRD_Weekly_AL_Center => "XRD Weekly AL% Center", + Column.XRD_Weekly_Back_Barrier_Al_ => "Back Barrier Al%", + Column.XRD_Weekly_Barrier_Al_ => "Barrier Al%", + Column.XRD_Weekly_FWHM_002 => "XRD Weekly FWHM 002", + Column.XRD_Weekly_FWHM_101 => "XRD Weekly FWHM 101", + Column.XRD_Weekly_FWHM_105 => "XRD Weekly FWHM 105", + Column.XRD_Weekly_Fringe_thick_0_0_ => "XRD Weekly Fringe thick (0,0)", + Column.XRD_Weekly_Fringe_thick_48_48_ => "XRD Weekly Fringe thick (48,48)", + Column.XRD_Weekly_Intensity => "XRD Weekly Intensity", + Column.XRD_Weekly_Super_Lattice_Al_ => "Super Lattice Al%", + Column.XRD_Weekly_Super_Lattice_period => "Super Lattice period", + Column.XRD_Weekly_Super_Lattice_tks => "Super Lattice tks", + Column.XRR_Thickness_nm_WTAVG => "XRR Thickness (nm) WTAVG", + Column.XRR_Thickness_nm_ => "XRR Thickness (nm)", + Column.Y_Coord => "Y-Coord", + Column.YellowBand_Power_mW_ => "YellowBand_Power (mW)", + Column.YellowBand_V => "YellowBand_V", + Column.YellowBand_V_XY => "YellowBand_V_XY", + Column.YellowBand_nm => "YellowBand_nm", + //case Column.pH: results = "pH"; break; + Column.Ag => "Ag", + Column.Al => "Al", + Column.As => "As", + Column.Au => "Au", + Column.B => "B", + Column.Ba => "Ba", + Column.Ca => "Ca", + Column.Ce => "Ce", + Column.Co => "Co", + Column.Cr => "Cr", + Column.Cu => "Cu", + Column.Fe => "Fe", + Column.Ga => "Ga", + Column.Ge => "Ge", + Column.Hf => "Hf", + Column.K => "K", + Column.Li => "Li", + Column.Mg => "Mg", + Column.Mn => "Mn", + Column.Mo => "Mo", + Column.Na => "Na", + Column.Ni => "Ni", + Column.P => "P", + Column.Pb => "Pb", + Column.Sn => "Sn", + Column.Ta => "Ta", + Column.Ti => "Ti", + Column.W => "W", + Column.Y => "Y", + Column.Zn => "Zn", + _ => throw new Exception(), + }; + return results; } - public enum Column + public static Description.Param GetParam(this Column column) { - //_8in_Total_Warp_Verification, - //AFM_Monthly_Y, - //AFM_Monthly, - AFM_Pit_Count, - AFM_Roughness, - //Adder_Bin_1, - //Adder_Bin_2, - //Adder_Bin_3, - //Adder_Bin_4, - //Adder_Bin_5, - //Adder_Bin_6, - //Adder_Bin_9, - Al_B_B_WTAVG, - Al_B_B_, - Al_Barrier_WTAVG, - Al_Barrier, - Al_SLS_WTAVG, - Al_SLS, - Al_TL1_WTAVG, - Al_TL1, - Al_TL2_WTAVG, - //BV_Resistance, - BandEdge_V, - BandEdge_V_XY, - BandEdge_nm, - Barrier_Composition_RPM_XY, - Bow_Calibration, - Bow_Range, - Bow, - BowCenter, - BowX, - BowY, - Breakdown_Voltage_Edge, - Breakdown_VoltageMiddle, - Breakdown_Voltage, - CV_C_at_10V, - CV_Nd_Min, - //Candela_Large_LPD_Quarterly, - //Candela_Medium_LPD_Quarterly, - //Candela_Small_LPD_Quarterly, - //Candela_Total_Quarterly, - Candela_102_83nm, - Candela_1_1um, - Candela_496nm, - Candela_600nm, - Candela_8620_Small, - Candela_Crack_Verification, - Candela_Cracking, - Candela_Cracking_Acceptable, - Candela_Crater, - Candela_Crater_Verification, - Candela_Haze, - Candela_LPD_Large, - Candela_LPD_Medium, - Candela_LPD_Small, - Candela_Large_Verification, - Candela_Medium_Verification, - Candela_Pits, - Candela_Pits_Verification, - Candela_SPE, - Candela_SPE_Verification, - Candela_Slip, - Candela_Small_Verification, - Candela_Spirals, - Candela_Spirals_Verification, - Candela_Total_Defects, - Candela_Total_PSL, - Candela__1_1um, - //Comment, - //Conductivity, - Contact_Symmetry, - //Cracking_verification, - //Crater_verification, - Date, - Denton_Crystal_Life, - Denton_Current_AVG, - Denton_Current_STDEV, - Denton_Deposition_Power_AVG, - Denton_Deposition_Power_STDEV, - Denton_Deposition_Rate_AVG, - Denton_Deposition_Rate_STDEV, - Denton_Gun_Pocket, - Denton_Pumpdown_Time, - Denton_Voltage_AVG, - Denton_Voltage_STDEV, - Employee, - Epi_Thickness_Mean, - Epi_Thickness_Mean_XY, - Epi_Thickness_Std_Dev_, - FWHM_006_WTAVG, - FWHM_006, - FWHM_105_WTAVG, - FWHM_105, - Hall_Rs, - Hall_Mobility_verif_sample, - Hall_Ns_verif_sample, - Hall_Rs_verif_sample, - Job, - LEI_RS_Average_value, - LEI_RS_Maximum_value, - LEI_RS_Minimum_value, - LEI_RS_STDEV, - LEI_RS_STDEV_, - //Large_Adder_Sum, - Lot, - //Medium_Adder_Sum, - Microscope_Center_50x, - Microscope_Center_5x, - Microscope_Edge_50x, - Microscope_Edge_5x, - Microscope_Middle_50x, - Microscope_Middle_5x, - Mobility_Verification, - Mobility, - Ns_Verification, - PL_Edge_Wavelength, - PL_Ratio, - PR_Barrier_Composition, - PR_Peak, - Part, - //Particles_verification, - //Pits_verification, - //Pocket, - //Post_Bin_1, - //Post_Bin_2, - //Post_Bin_3, - //Post_Bin_4, - //Post_Bin_5, - //Post_Bin_6, - //Post_Bin_9, - //Pre_Bin_1, - //Pre_Bin_2, - //Pre_Bin_3, - //Pre_Bin_4, - //Pre_Bin_5, - //Pre_Bin_6, - //Pre_Bin_9, - Process, - //RPM_verif_Thickness_1, - //RPM_verif_Thickness_2, - //RPM_verif_Thickness_3, - //RPM_verif_Thickness_Average, - //RTA_oxide_Thk_Change, - //RTA_oxide_post_anneal_Thk, - //RTA_oxide_pre_anneal_Thk, - Recipe, - //Resistivity_2_ohm_cm, - //Resistivity_600_ohm_cm, - Rs_verification, - Rs_verif_100kohm, - Rs_verif_10ohm, - Rs_verif_1kohm, - SID, - SL_Period_WTAVG, - SL_Period, - //SPE_verification, - //Sample_ID, - Sheet_Concentration, - //Size, - //Small_Adder_Sum, - //Spirals_verification, - Time, - Tool_ID, - //Total_LPD_Adder, - //Total_Verification, - Total_Warp_Calibration, - UV_Broken, - UV_Chipping, - UV_Cracking_0_3mm_, - UV_Cracking_3_7mm_, - UV_Cracking_7mm_, - UV_Crazing, - UV_Crazing_Acceptable, - UV_FULL_Characterization_Wafer, - UV_Haze_count_, - UV_LIGHT_Characterization_Wafer, - UV_Non_rotation, - UV_Other, - UV_Scratch_count_, - UV_Slip_count_, - UV_True_Haze, - UV_True_Haze_Acceptable, - UV_SPE_1mm_count, - UV_SPE_count_, - Verification_Contact_Symmetry, - Vp_Pinch_Off_Voltage, - Wafer_ID, - //Wafer_Pocket, - Wafer_Region, - Wafer_Scribe, - WaferPocket_Candela, - WaferPocket_Warp, - WaferPosition_CV, - WaferPosition_BV, - WaferPosition_Hall, - WaferPosition_PR, - Warp, - X_Coord, - XRD_2_Theta_Peak_002, - XRD_2_Theta_Peak_101, - XRD_2_Theta_Position, - XRD_2_Theta_Position_Si_1, - XRD_2_Theta_Position_Si_2, - XRD_2_Theta_Position_Si_3, - XRD_Peak_002_Intensity, - XRD_Peak_101_Intensity, - XRD_Weekly_AL_Center, - XRD_Weekly_Back_Barrier_Al_, - XRD_Weekly_Barrier_Al_, - XRD_Weekly_FWHM_002, - XRD_Weekly_FWHM_101, - XRD_Weekly_FWHM_105, - XRD_Weekly_Fringe_thick_0_0_, - XRD_Weekly_Fringe_thick_48_48_, - XRD_Weekly_Intensity, - XRD_Weekly_Super_Lattice_Al_, - XRD_Weekly_Super_Lattice_period, - XRD_Weekly_Super_Lattice_tks, - XRR_Thickness_nm_, - XRR_Thickness_nm_WTAVG, - Y_Coord, - YellowBand_Power_mW_, - YellowBand_V, - YellowBand_V_XY, - YellowBand_nm, - //pH, - Ag, - Al, - As, - Au, - B, - Ba, - Ca, - Ce, - Co, - Cr, - Cu, - Fe, - Ga, - Ge, - Hf, - K, - Li, - Mg, - Mn, - Mo, - Na, - Ni, - P, - Pb, - Sn, - Ta, - Ti, - W, - Y, - Zn + var results = column switch + { + //case Column._8in_Total_Warp_Verification: results = Description.Param.String; break; + //case Column.AFM_Monthly_Y: results = Description.Param.String; break; + //case Column.AFM_Monthly: results = Description.Param.String; break; + Column.AFM_Pit_Count => Description.Param.String, + Column.AFM_Roughness => Description.Param.String, + //case Column.Adder_Bin_1: results = Description.Param.String; break; + //case Column.Adder_Bin_2: results = Description.Param.String; break; + //case Column.Adder_Bin_3: results = Description.Param.String; break; + //case Column.Adder_Bin_4: results = Description.Param.String; break; + //case Column.Adder_Bin_5: results = Description.Param.String; break; + //case Column.Adder_Bin_6: results = Description.Param.String; break; + //case Column.Adder_Bin_9: results = Description.Param.String; break; + Column.Al_B_B_WTAVG => Description.Param.String, + Column.Al_B_B_ => Description.Param.String, + Column.Al_Barrier_WTAVG => Description.Param.String, + Column.Al_Barrier => Description.Param.String, + Column.Al_SLS_WTAVG => Description.Param.String, + Column.Al_SLS => Description.Param.String, + Column.Al_TL1_WTAVG => Description.Param.String, + Column.Al_TL1 => Description.Param.String, + Column.Al_TL2_WTAVG => Description.Param.String, + //case Column.BV_Resistance: results = Description.Param.String; break; + Column.BandEdge_V => Description.Param.String, + Column.BandEdge_V_XY => Description.Param.String, + Column.BandEdge_nm => Description.Param.String, + Column.Barrier_Composition_RPM_XY => Description.Param.String, + Column.Bow_Calibration => Description.Param.String, + Column.Bow_Range => Description.Param.String, + Column.Bow => Description.Param.String, + Column.BowCenter => Description.Param.String, + Column.BowX => Description.Param.String, + Column.BowY => Description.Param.String, + Column.Breakdown_Voltage_Edge => Description.Param.String, + Column.Breakdown_VoltageMiddle => Description.Param.String, + Column.Breakdown_Voltage => Description.Param.String, + Column.CV_C_at_10V => Description.Param.String, + Column.CV_Nd_Min => Description.Param.String, + //case Column.Candela_Large_LPD_Quarterly: results = Description.Param.String; break; + //case Column.Candela_Medium_LPD_Quarterly: results = Description.Param.String; break; + //case Column.Candela_Small_LPD_Quarterly: results = Description.Param.String; break; + //case Column.Candela_Total_Quarterly: results = Description.Param.String; break; + Column.Candela_102_83nm => Description.Param.String, + Column.Candela_1_1um => Description.Param.String, + Column.Candela_496nm => Description.Param.String, + Column.Candela_600nm => Description.Param.String, + Column.Candela_8620_Small => Description.Param.String, + Column.Candela_Crack_Verification => Description.Param.String, + Column.Candela_Cracking => Description.Param.String, + Column.Candela_Cracking_Acceptable => Description.Param.String, + Column.Candela_Crater => Description.Param.String, + Column.Candela_Crater_Verification => Description.Param.String, + Column.Candela_Haze => Description.Param.String, + Column.Candela_LPD_Large => Description.Param.String, + Column.Candela_LPD_Medium => Description.Param.String, + Column.Candela_LPD_Small => Description.Param.String, + Column.Candela_Large_Verification => Description.Param.String, + Column.Candela_Medium_Verification => Description.Param.String, + Column.Candela_Pits => Description.Param.String, + Column.Candela_Pits_Verification => Description.Param.String, + Column.Candela_SPE => Description.Param.String, + Column.Candela_SPE_Verification => Description.Param.String, + Column.Candela_Slip => Description.Param.String, + Column.Candela_Small_Verification => Description.Param.String, + Column.Candela_Spirals => Description.Param.String, + Column.Candela_Spirals_Verification => Description.Param.String, + Column.Candela_Total_Defects => Description.Param.String, + Column.Candela_Total_PSL => Description.Param.String, + Column.Candela__1_1um => Description.Param.String, + //case Column.Comment: results = Description.Param.String; break; + //case Column.Conductivity: results = Description.Param.String; break; + Column.Contact_Symmetry => Description.Param.String, + //case Column.Cracking_verification: results = Description.Param.String; break; + //case Column.Crater_verification: results = Description.Param.String; break; + Column.Date => Description.Param.String, + Column.Denton_Crystal_Life => Description.Param.String, + Column.Denton_Current_AVG => Description.Param.String, + Column.Denton_Current_STDEV => Description.Param.String, + Column.Denton_Deposition_Power_AVG => Description.Param.String, + Column.Denton_Deposition_Power_STDEV => Description.Param.String, + Column.Denton_Deposition_Rate_AVG => Description.Param.String, + Column.Denton_Deposition_Rate_STDEV => Description.Param.String, + Column.Denton_Gun_Pocket => Description.Param.String, + Column.Denton_Pumpdown_Time => Description.Param.String, + Column.Denton_Voltage_AVG => Description.Param.String, + Column.Denton_Voltage_STDEV => Description.Param.String, + Column.Employee => Description.Param.String, + Column.Epi_Thickness_Mean => Description.Param.String, + Column.Epi_Thickness_Mean_XY => Description.Param.String, + Column.Epi_Thickness_Std_Dev_ => Description.Param.String, + Column.FWHM_006_WTAVG => Description.Param.String, + Column.FWHM_006 => Description.Param.String, + Column.FWHM_105_WTAVG => Description.Param.String, + Column.FWHM_105 => Description.Param.String, + Column.Hall_Rs => Description.Param.String, + Column.Hall_Mobility_verif_sample => Description.Param.String, + Column.Hall_Ns_verif_sample => Description.Param.String, + Column.Hall_Rs_verif_sample => Description.Param.String, + Column.Job => Description.Param.String, + Column.LEI_RS_Average_value => Description.Param.String, + Column.LEI_RS_Maximum_value => Description.Param.String, + Column.LEI_RS_Minimum_value => Description.Param.String, + Column.LEI_RS_STDEV => Description.Param.String, + Column.LEI_RS_STDEV_ => Description.Param.String, + //case Column.Large_Adder_Sum: results = Description.Param.String; break; + Column.Lot => Description.Param.String, + //case Column.Medium_Adder_Sum: results = Description.Param.String; break; + Column.Microscope_Center_5x => Description.Param.String, + Column.Microscope_Center_50x => Description.Param.String, + Column.Microscope_Middle_5x => Description.Param.String, + Column.Microscope_Middle_50x => Description.Param.String, + Column.Microscope_Edge_5x => Description.Param.String, + Column.Microscope_Edge_50x => Description.Param.String, + Column.Mobility_Verification => Description.Param.String, + Column.Mobility => Description.Param.String, + Column.Ns_Verification => Description.Param.String, + Column.PL_Edge_Wavelength => Description.Param.String, + Column.PL_Ratio => Description.Param.String, + Column.PR_Barrier_Composition => Description.Param.String, + Column.PR_Peak => Description.Param.String, + Column.Part => Description.Param.String, + //case Column.Particles_verification: results = Description.Param.String; break; + //case Column.Pits_verification: results = Description.Param.String; break; + //case Column.Pocket: results = Description.Param.String; break; + //case Column.Post_Bin_1: results = Description.Param.String; break; + //case Column.Post_Bin_2: results = Description.Param.String; break; + //case Column.Post_Bin_3: results = Description.Param.String; break; + //case Column.Post_Bin_4: results = Description.Param.String; break; + //case Column.Post_Bin_5: results = Description.Param.String; break; + //case Column.Post_Bin_6: results = Description.Param.String; break; + //case Column.Post_Bin_9: results = Description.Param.String; break; + //case Column.Pre_Bin_1: results = Description.Param.String; break; + //case Column.Pre_Bin_2: results = Description.Param.String; break; + //case Column.Pre_Bin_3: results = Description.Param.String; break; + //case Column.Pre_Bin_4: results = Description.Param.String; break; + //case Column.Pre_Bin_5: results = Description.Param.String; break; + //case Column.Pre_Bin_6: results = Description.Param.String; break; + //case Column.Pre_Bin_9: results = Description.Param.String; break; + Column.Process => Description.Param.String, + //case Column.RPM_verif_Thickness_1: results = Description.Param.String; break; + //case Column.RPM_verif_Thickness_2: results = Description.Param.String; break; + //case Column.RPM_verif_Thickness_3: results = Description.Param.String; break; + //case Column.RPM_verif_Thickness_Average: results = Description.Param.String; break; + //case Column.RTA_oxide_Thk_Change: results = Description.Param.String; break; + //case Column.RTA_oxide_post_anneal_Thk: results = Description.Param.String; break; + //case Column.RTA_oxide_pre_anneal_Thk: results = Description.Param.String; break; + Column.Recipe => Description.Param.String, + //case Column.Resistivity_2_ohm_cm: results = Description.Param.String; break; + //case Column.Resistivity_600_ohm_cm: results = Description.Param.String; break; + Column.Rs_verification => Description.Param.String, + Column.Rs_verif_100kohm => Description.Param.String, + Column.Rs_verif_10ohm => Description.Param.String, + Column.Rs_verif_1kohm => Description.Param.String, + Column.SID => Description.Param.String, + Column.SL_Period_WTAVG => Description.Param.String, + Column.SL_Period => Description.Param.String, + //case Column.SPE_verification: results = Description.Param.String; break; + //case Column.Sample_ID: results = Description.Param.String; break; + Column.Sheet_Concentration => Description.Param.String, + //case Column.Size: results = Description.Param.String; break; + //case Column.Small_Adder_Sum: results = Description.Param.String; break; + //case Column.Spirals_verification: results = Description.Param.String; break; + Column.Time => Description.Param.String, + Column.Tool_ID => Description.Param.String, + //case Column.Total_LPD_Adder: results = Description.Param.String; break; + //case Column.Total_Verification: results = Description.Param.String; break; + Column.Total_Warp_Calibration => Description.Param.String, + Column.UV_Broken => Description.Param.String, + Column.UV_Chipping => Description.Param.String, + Column.UV_Cracking_0_3mm_ => Description.Param.String, + Column.UV_Cracking_3_7mm_ => Description.Param.String, + Column.UV_Cracking_7mm_ => Description.Param.String, + Column.UV_Crazing => Description.Param.String, + Column.UV_Crazing_Acceptable => Description.Param.String, + Column.UV_FULL_Characterization_Wafer => Description.Param.String, + Column.UV_Haze_count_ => Description.Param.String, + Column.UV_LIGHT_Characterization_Wafer => Description.Param.String, + Column.UV_Non_rotation => Description.Param.String, + Column.UV_Other => Description.Param.String, + Column.UV_Scratch_count_ => Description.Param.String, + Column.UV_Slip_count_ => Description.Param.String, + Column.UV_True_Haze => Description.Param.String, + Column.UV_True_Haze_Acceptable => Description.Param.String, + Column.UV_SPE_1mm_count => Description.Param.String, + Column.UV_SPE_count_ => Description.Param.String, + Column.Verification_Contact_Symmetry => Description.Param.String, + Column.Vp_Pinch_Off_Voltage => Description.Param.String, + Column.Wafer_ID => Description.Param.String, + //case Column.Wafer_Pocket: results = Description.Param.String; break; + Column.Wafer_Region => Description.Param.String, + Column.Wafer_Scribe => Description.Param.String, + Column.WaferPocket_Candela => Description.Param.String, + Column.WaferPocket_Warp => Description.Param.String, + Column.WaferPosition_CV => Description.Param.String, + Column.WaferPosition_BV => Description.Param.String, + Column.WaferPosition_Hall => Description.Param.String, + Column.WaferPosition_PR => Description.Param.String, + Column.Warp => Description.Param.String, + Column.X_Coord => Description.Param.String, + Column.XRD_2_Theta_Peak_002 => Description.Param.String, + Column.XRD_2_Theta_Peak_101 => Description.Param.String, + Column.XRD_2_Theta_Position => Description.Param.String, + Column.XRD_2_Theta_Position_Si_1 => Description.Param.String, + Column.XRD_2_Theta_Position_Si_2 => Description.Param.String, + Column.XRD_2_Theta_Position_Si_3 => Description.Param.String, + Column.XRD_Peak_002_Intensity => Description.Param.String, + Column.XRD_Peak_101_Intensity => Description.Param.String, + Column.XRD_Weekly_AL_Center => Description.Param.String, + Column.XRD_Weekly_Back_Barrier_Al_ => Description.Param.String, + Column.XRD_Weekly_Barrier_Al_ => Description.Param.String, + Column.XRD_Weekly_FWHM_002 => Description.Param.String, + Column.XRD_Weekly_FWHM_101 => Description.Param.String, + Column.XRD_Weekly_FWHM_105 => Description.Param.String, + Column.XRD_Weekly_Fringe_thick_0_0_ => Description.Param.String, + Column.XRD_Weekly_Fringe_thick_48_48_ => Description.Param.String, + Column.XRD_Weekly_Intensity => Description.Param.String, + Column.XRD_Weekly_Super_Lattice_Al_ => Description.Param.String, + Column.XRD_Weekly_Super_Lattice_period => Description.Param.String, + Column.XRD_Weekly_Super_Lattice_tks => Description.Param.String, + Column.XRR_Thickness_nm_WTAVG => Description.Param.String, + Column.XRR_Thickness_nm_ => Description.Param.String, + Column.Y_Coord => Description.Param.String, + Column.YellowBand_Power_mW_ => Description.Param.String, + Column.YellowBand_V => Description.Param.String, + Column.YellowBand_V_XY => Description.Param.String, + Column.YellowBand_nm => Description.Param.String, + //case Column.pH: results = Description.Param.String; break; + Column.Ag => Description.Param.String, + Column.Al => Description.Param.String, + Column.As => Description.Param.String, + Column.Au => Description.Param.String, + Column.B => Description.Param.String, + Column.Ba => Description.Param.String, + Column.Ca => Description.Param.String, + Column.Ce => Description.Param.String, + Column.Co => Description.Param.String, + Column.Cr => Description.Param.String, + Column.Cu => Description.Param.String, + Column.Fe => Description.Param.String, + Column.Ga => Description.Param.String, + Column.Ge => Description.Param.String, + Column.Hf => Description.Param.String, + Column.K => Description.Param.String, + Column.Li => Description.Param.String, + Column.Mg => Description.Param.String, + Column.Mn => Description.Param.String, + Column.Mo => Description.Param.String, + Column.Na => Description.Param.String, + Column.Ni => Description.Param.String, + Column.P => Description.Param.String, + Column.Pb => Description.Param.String, + Column.Sn => Description.Param.String, + Column.Ta => Description.Param.String, + Column.Ti => Description.Param.String, + Column.W => Description.Param.String, + Column.Y => Description.Param.String, + Column.Zn => Description.Param.String, + _ => throw new Exception(), + }; + return results; } -} \ No newline at end of file +} + +public enum Column +{ + //_8in_Total_Warp_Verification, + //AFM_Monthly_Y, + //AFM_Monthly, + AFM_Pit_Count, + AFM_Roughness, + //Adder_Bin_1, + //Adder_Bin_2, + //Adder_Bin_3, + //Adder_Bin_4, + //Adder_Bin_5, + //Adder_Bin_6, + //Adder_Bin_9, + Al_B_B_WTAVG, + Al_B_B_, + Al_Barrier_WTAVG, + Al_Barrier, + Al_SLS_WTAVG, + Al_SLS, + Al_TL1_WTAVG, + Al_TL1, + Al_TL2_WTAVG, + //BV_Resistance, + BandEdge_V, + BandEdge_V_XY, + BandEdge_nm, + Barrier_Composition_RPM_XY, + Bow_Calibration, + Bow_Range, + Bow, + BowCenter, + BowX, + BowY, + Breakdown_Voltage_Edge, + Breakdown_VoltageMiddle, + Breakdown_Voltage, + CV_C_at_10V, + CV_Nd_Min, + //Candela_Large_LPD_Quarterly, + //Candela_Medium_LPD_Quarterly, + //Candela_Small_LPD_Quarterly, + //Candela_Total_Quarterly, + Candela_102_83nm, + Candela_1_1um, + Candela_496nm, + Candela_600nm, + Candela_8620_Small, + Candela_Crack_Verification, + Candela_Cracking, + Candela_Cracking_Acceptable, + Candela_Crater, + Candela_Crater_Verification, + Candela_Haze, + Candela_LPD_Large, + Candela_LPD_Medium, + Candela_LPD_Small, + Candela_Large_Verification, + Candela_Medium_Verification, + Candela_Pits, + Candela_Pits_Verification, + Candela_SPE, + Candela_SPE_Verification, + Candela_Slip, + Candela_Small_Verification, + Candela_Spirals, + Candela_Spirals_Verification, + Candela_Total_Defects, + Candela_Total_PSL, + Candela__1_1um, + //Comment, + //Conductivity, + Contact_Symmetry, + //Cracking_verification, + //Crater_verification, + Date, + Denton_Crystal_Life, + Denton_Current_AVG, + Denton_Current_STDEV, + Denton_Deposition_Power_AVG, + Denton_Deposition_Power_STDEV, + Denton_Deposition_Rate_AVG, + Denton_Deposition_Rate_STDEV, + Denton_Gun_Pocket, + Denton_Pumpdown_Time, + Denton_Voltage_AVG, + Denton_Voltage_STDEV, + Employee, + Epi_Thickness_Mean, + Epi_Thickness_Mean_XY, + Epi_Thickness_Std_Dev_, + FWHM_006_WTAVG, + FWHM_006, + FWHM_105_WTAVG, + FWHM_105, + Hall_Rs, + Hall_Mobility_verif_sample, + Hall_Ns_verif_sample, + Hall_Rs_verif_sample, + Job, + LEI_RS_Average_value, + LEI_RS_Maximum_value, + LEI_RS_Minimum_value, + LEI_RS_STDEV, + LEI_RS_STDEV_, + //Large_Adder_Sum, + Lot, + //Medium_Adder_Sum, + Microscope_Center_50x, + Microscope_Center_5x, + Microscope_Edge_50x, + Microscope_Edge_5x, + Microscope_Middle_50x, + Microscope_Middle_5x, + Mobility_Verification, + Mobility, + Ns_Verification, + PL_Edge_Wavelength, + PL_Ratio, + PR_Barrier_Composition, + PR_Peak, + Part, + //Particles_verification, + //Pits_verification, + //Pocket, + //Post_Bin_1, + //Post_Bin_2, + //Post_Bin_3, + //Post_Bin_4, + //Post_Bin_5, + //Post_Bin_6, + //Post_Bin_9, + //Pre_Bin_1, + //Pre_Bin_2, + //Pre_Bin_3, + //Pre_Bin_4, + //Pre_Bin_5, + //Pre_Bin_6, + //Pre_Bin_9, + Process, + //RPM_verif_Thickness_1, + //RPM_verif_Thickness_2, + //RPM_verif_Thickness_3, + //RPM_verif_Thickness_Average, + //RTA_oxide_Thk_Change, + //RTA_oxide_post_anneal_Thk, + //RTA_oxide_pre_anneal_Thk, + Recipe, + //Resistivity_2_ohm_cm, + //Resistivity_600_ohm_cm, + Rs_verification, + Rs_verif_100kohm, + Rs_verif_10ohm, + Rs_verif_1kohm, + SID, + SL_Period_WTAVG, + SL_Period, + //SPE_verification, + //Sample_ID, + Sheet_Concentration, + //Size, + //Small_Adder_Sum, + //Spirals_verification, + Time, + Tool_ID, + //Total_LPD_Adder, + //Total_Verification, + Total_Warp_Calibration, + UV_Broken, + UV_Chipping, + UV_Cracking_0_3mm_, + UV_Cracking_3_7mm_, + UV_Cracking_7mm_, + UV_Crazing, + UV_Crazing_Acceptable, + UV_FULL_Characterization_Wafer, + UV_Haze_count_, + UV_LIGHT_Characterization_Wafer, + UV_Non_rotation, + UV_Other, + UV_Scratch_count_, + UV_Slip_count_, + UV_True_Haze, + UV_True_Haze_Acceptable, + UV_SPE_1mm_count, + UV_SPE_count_, + Verification_Contact_Symmetry, + Vp_Pinch_Off_Voltage, + Wafer_ID, + //Wafer_Pocket, + Wafer_Region, + Wafer_Scribe, + WaferPocket_Candela, + WaferPocket_Warp, + WaferPosition_CV, + WaferPosition_BV, + WaferPosition_Hall, + WaferPosition_PR, + Warp, + X_Coord, + XRD_2_Theta_Peak_002, + XRD_2_Theta_Peak_101, + XRD_2_Theta_Position, + XRD_2_Theta_Position_Si_1, + XRD_2_Theta_Position_Si_2, + XRD_2_Theta_Position_Si_3, + XRD_Peak_002_Intensity, + XRD_Peak_101_Intensity, + XRD_Weekly_AL_Center, + XRD_Weekly_Back_Barrier_Al_, + XRD_Weekly_Barrier_Al_, + XRD_Weekly_FWHM_002, + XRD_Weekly_FWHM_101, + XRD_Weekly_FWHM_105, + XRD_Weekly_Fringe_thick_0_0_, + XRD_Weekly_Fringe_thick_48_48_, + XRD_Weekly_Intensity, + XRD_Weekly_Super_Lattice_Al_, + XRD_Weekly_Super_Lattice_period, + XRD_Weekly_Super_Lattice_tks, + XRR_Thickness_nm_, + XRR_Thickness_nm_WTAVG, + Y_Coord, + YellowBand_Power_mW_, + YellowBand_V, + YellowBand_V_XY, + YellowBand_nm, + //pH, + Ag, + Al, + As, + Au, + B, + Ba, + Ca, + Ce, + Co, + Cr, + Cu, + Fe, + Ga, + Ge, + Hf, + K, + Li, + Mg, + Mn, + Mo, + Na, + Ni, + P, + Pb, + Sn, + Ta, + Ti, + W, + Y, + Zn +} diff --git a/APC Viewer/Shared/Metrology/ConfigDataBase.cs b/APC Viewer/Shared/Metrology/ConfigDataBase.cs index 69c2401..204e096 100644 --- a/APC Viewer/Shared/Metrology/ConfigDataBase.cs +++ b/APC Viewer/Shared/Metrology/ConfigDataBase.cs @@ -7,404 +7,380 @@ using System.Text; using System.Text.Json; using System.Text.Json.Serialization; -namespace Shared.Metrology +namespace Shared.Metrology; + +public class ConfigDataBase { - public class ConfigDataBase + public bool UseCyclicalForDescription { get; protected set; } + public Dictionary CellNames { get; protected set; } + public Dictionary MesEntities { get; protected set; } + public IProcessDataDescription ProcessDataDescription { get; protected set; } + + public bool IsEvent { get; private set; } + public EventName EventName => _EventName; + public bool EafHosted { get; private set; } + public string CellName { get; private set; } + public bool IsSourceTimer { get; private set; } + public EquipmentType EquipmentType => _EquipmentType; + public string EquipmentElementName { get; private set; } + public bool IsDatabaseExportToIPDSF { get; private set; } + public EquipmentType? EquipmentConnection => _EquipmentConnection; + public FileConnectorConfiguration FileConnectorConfiguration { get; private set; } + + protected readonly EventName _EventName; + protected readonly EquipmentType _EquipmentType; + protected readonly EquipmentType? _EquipmentConnection; + protected readonly Dictionary _Reactors; + + public ConfigDataBase(string cellName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, bool isEAFHosted) { - - public bool UseCyclicalForDescription { get; protected set; } - public Dictionary CellNames { get; protected set; } - public Dictionary MesEntities { get; protected set; } - public IProcessDataDescription ProcessDataDescription { get; protected set; } - - public bool IsEvent { get; private set; } - public EventName EventName => _EventName; - public bool EafHosted { get; private set; } - public string CellName { get; private set; } - public bool IsSourceTimer { get; private set; } - public EquipmentType EquipmentType => _EquipmentType; - public string EquipmentElementName { get; private set; } - public bool IsDatabaseExportToIPDSF { get; private set; } - public EquipmentType? EquipmentConnection => _EquipmentConnection; - public FileConnectorConfiguration FileConnectorConfiguration { get; private set; } - - protected readonly EventName _EventName; - protected readonly EquipmentType _EquipmentType; - protected readonly EquipmentType? _EquipmentConnection; - protected readonly Dictionary _Reactors; - - public ConfigDataBase(string cellName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, bool isEAFHosted) + CellName = cellName; + EafHosted = isEAFHosted; + EquipmentType equipmentTypeValue; + _Reactors = new Dictionary(); + CellNames = new Dictionary(); + MesEntities = new Dictionary(); + EquipmentElementName = cellInstanceConnectionName; + FileConnectorConfiguration = fileConnectorConfiguration; + string[] segments = parameterizedModelObjectDefinitionType.Split('.'); + IsSourceTimer = (fileConnectorConfiguration.SourceFileFilter.StartsWith("*Timer.txt")); + string cellInstanceConnectionNameBase = cellInstanceConnectionName.Replace("-", string.Empty); + IsDatabaseExportToIPDSF = (fileConnectorConfiguration.SourceFileLocation.Contains("DatabaseExport")); + if (!Enum.TryParse(segments[segments.Length - 1], out EventName eventNameValue)) + throw new Exception(cellInstanceConnectionName); + if (!Enum.TryParse(cellInstanceConnectionNameBase, out equipmentTypeValue)) + _EquipmentConnection = null; + else + _EquipmentConnection = equipmentTypeValue; + string suffix = eventNameValue switch { - CellName = cellName; - EafHosted = isEAFHosted; - EquipmentType equipmentTypeValue; - _Reactors = new Dictionary(); - CellNames = new Dictionary(); - MesEntities = new Dictionary(); - EquipmentElementName = cellInstanceConnectionName; - FileConnectorConfiguration = fileConnectorConfiguration; - string[] segments = parameterizedModelObjectDefinitionType.Split('.'); - IsSourceTimer = (fileConnectorConfiguration.SourceFileFilter.StartsWith("*Timer.txt")); - string cellInstanceConnectionNameBase = cellInstanceConnectionName.Replace("-", string.Empty); - IsDatabaseExportToIPDSF = (fileConnectorConfiguration.SourceFileLocation.Contains("DatabaseExport")); - if (!Enum.TryParse(segments[segments.Length - 1], out EventName eventNameValue)) - throw new Exception(cellInstanceConnectionName); - if (!Enum.TryParse(cellInstanceConnectionNameBase, out equipmentTypeValue)) - _EquipmentConnection = null; - else - _EquipmentConnection = equipmentTypeValue; - string suffix; - switch (eventNameValue) - { - case EventName.FileRead: - suffix = string.Empty; - break; - case EventName.FileReadDaily: - suffix = "_Daily"; - break; - case EventName.FileReadWeekly: - suffix = "_Weekly"; - break; - case EventName.FileReadMonthly: - suffix = "_Monthly"; - break; - case EventName.FileReadVerification: - suffix = "_Verification"; - break; - default: - throw new Exception(cellInstanceConnectionName); - } - string parameterizedModelObjectDefinitionTypeAppended = string.Concat(segments[0], suffix); - IsEvent = cellInstanceConnectionNameBase != parameterizedModelObjectDefinitionTypeAppended; - _EventName = eventNameValue; - if (!Enum.TryParse(parameterizedModelObjectDefinitionTypeAppended, out equipmentTypeValue)) - throw new Exception(cellInstanceConnectionName); - _EquipmentType = equipmentTypeValue; - if (!isEAFHosted && equipmentTypeName != parameterizedModelObjectDefinitionTypeAppended) - throw new Exception(cellInstanceConnectionName); - } - - public string GetEventName() - { - string result = EventName.ToString(); - return result; - } - - public string GetEquipmentType() - { - string result = EquipmentConnection.ToString(); - return result; - } - - public string GetEventDescription() - { - string result = ProcessDataDescription.GetEventDescription(); - return result; - } - - public IProcessDataDescription GetDefault(ILogic logic) - { - IProcessDataDescription result = ProcessDataDescription.GetDefault(logic, this); - return result; - } - - public IProcessDataDescription GetDisplayNames(ILogic logic) - { - IProcessDataDescription result = ProcessDataDescription.GetDisplayNames(logic, this); - return result; - } - - public List GetDetailNames(ILogic logic) - { - List results = ProcessDataDescription.GetDetailNames(logic, this); - return results; - } - - public List GetHeaderNames(ILogic logic) - { - List results = ProcessDataDescription.GetHeaderNames(logic, this); - return results; - } - - public List GetNames(ILogic logic) - { - List results = ProcessDataDescription.GetNames(logic, this); - return results; - } - - public List GetPairedParameterNames(ILogic logic) - { - List results = ProcessDataDescription.GetPairedParameterNames(logic, this); - return results; - } - - public List GetParameterNames(ILogic logic) - { - List results = ProcessDataDescription.GetParameterNames(logic, this); - return results; - } - - public List GetDescription(ILogic logic, List tests, IProcessData iProcessData) - { - List results = ProcessDataDescription.GetDescription(logic, this, tests, iProcessData); - return results; - } - - public string GetCurrentReactor(ILogic logic) - { - string result = string.Empty; - foreach (KeyValuePair keyValuePair in _Reactors) - { - foreach (string filePrefix in keyValuePair.Value.Split('|')) - { - if (logic.Logistics.MID.StartsWith(filePrefix) || (EventName != EventName.FileRead && MesEntities.ContainsKey(logic.Logistics.JobID) && keyValuePair.Value == MesEntities[logic.Logistics.JobID])) - { - result = keyValuePair.Key; - break; - } - } - } - if (string.IsNullOrEmpty(result) && _Reactors.Count == 1) - result = _Reactors.ElementAt(0).Key; - return result; - } - - protected JsonElement GetDefaultJsonElement(ILogic logic) - { - JsonElement result; - IProcessDataDescription processDataDescription = ProcessDataDescription.GetDefault(logic, this); - string json = JsonSerializer.Serialize(processDataDescription, processDataDescription.GetType()); - object @object = JsonSerializer.Deserialize(json); - result = (JsonElement)@object; - return result; - } - - public Dictionary>> GetParameterInfo(ILogic logic, bool allowNull) - { - Dictionary>> results = new Dictionary>>(); - string description; - Enum param; - Tuple tuple; - JsonElement defaultJsonElement = GetDefaultJsonElement(logic); - Dictionary keyValuePairs = GetDisplayNamesJsonElement(logic); - foreach (JsonProperty jsonProperty in defaultJsonElement.EnumerateObject()) - { - if (jsonProperty.Value.ValueKind == JsonValueKind.Null && !allowNull) - throw new Exception(); - if (jsonProperty.Value.ValueKind == JsonValueKind.Object || jsonProperty.Value.ValueKind == JsonValueKind.Array) - { - description = string.Empty; - param = Description.Param.StructuredType; - //jValue = jObject.Value("Item1"); - throw new NotImplementedException("Item1"); - } - else - { - switch (jsonProperty.Value.ValueKind) - { - case JsonValueKind.String: - param = Description.Param.String; - break; - case JsonValueKind.Number: - param = Description.Param.Double; - break; - case JsonValueKind.True: - case JsonValueKind.False: - param = Description.Param.Boolean; - break; - case JsonValueKind.Null: - param = Description.Param.String; - break; - default: - param = Description.Param.StructuredType; - break; - } - } - if (!keyValuePairs.ContainsKey(jsonProperty.Name)) - description = string.Empty; - else - description = keyValuePairs[jsonProperty.Name]; - tuple = new Tuple(param, jsonProperty.Name, description, jsonProperty.Value.ToString()); - if (!results.ContainsKey(jsonProperty.Name)) - results.Add(jsonProperty.Name, new List>()); - results[jsonProperty.Name].Add(tuple); - } - return results; - } - - protected void WriteExportAliases(ILogic logic, string cellName, string equipmentElementName) - { - int i = 0; - Enum param; - object value; - Enum[] @params; - string description; - StringBuilder stringBuilder = new StringBuilder(); - string shareRoot = @"\\messv02ecc1.ec.local\EC_EDA"; - string shareDirectory = string.Concat(shareRoot, @"\Staging\Pdsf\", cellName, @"\ExportAliases\", equipmentElementName); - Dictionary>> keyValuePairs; - if (!(logic is null)) - keyValuePairs = GetParameterInfo(logic, allowNull: false); - else - keyValuePairs = new Dictionary>>(); - stringBuilder.AppendLine("\"AliasName\";\"Condition\";\"EventId\";\"ExceptionId\";\"Formula\";\"HardwareId\";\"OrderId\";\"ParameterName\";\"Remark\";\"ReportName\";\"SourceId\";\"Use\""); - if (!Directory.Exists(shareRoot)) - return; - if (!Directory.Exists(shareDirectory)) - Directory.CreateDirectory(shareDirectory); - string shareFile = string.Concat(shareDirectory, @"\", DateTime.Now.Ticks, ".csv"); - foreach (KeyValuePair>> keyValuePair in keyValuePairs) - { - i += 1; - @params = (from l in keyValuePair.Value select l.Item1).Distinct().ToArray(); - if (@params.Length != 1) - throw new Exception(); - if (keyValuePair.Value[0].Item2 != keyValuePair.Key) - throw new Exception(); - param = @params[0]; - if (!(param is Description.Param.String)) - stringBuilder.AppendLine($"\"{keyValuePair.Key}\";\"\";\"\";\"\";\"\";\"\";\"{i}\";\"{cellName}/{EquipmentElementName}/{keyValuePair.Key}\";\"\";\"{cellName}/{EquipmentElementName}/{EventName}\";\"\";\"True\""); - else - { - description = keyValuePair.Value[0].Item3.Split('|')[0]; - if (string.IsNullOrEmpty(description)) - continue; - value = keyValuePair.Value[0].Item4; - stringBuilder.AppendLine($"\"'{description}'\";\"\";\"\";\"\";\"\";\"\";\"{i}\";\"{cellName}/{EquipmentElementName}/{value}\";\"\";\"{cellName}/{EquipmentElementName}/{EventName}\";\"\";\"True\""); - } - } - if (keyValuePairs.Any()) - File.WriteAllText(shareFile, stringBuilder.ToString()); - } - - public Dictionary GetDisplayNamesJsonElement(ILogic logic) - { - Dictionary results = new Dictionary(); - IProcessDataDescription processDataDescription = ProcessDataDescription.GetDisplayNames(logic, this); - string json = JsonSerializer.Serialize(processDataDescription, processDataDescription.GetType()); - JsonElement jsonElement = JsonSerializer.Deserialize(json); - foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) - { - if (!results.ContainsKey(jsonProperty.Name)) - results.Add(jsonProperty.Name, string.Empty); - if (jsonProperty.Value is JsonElement jsonPropertyValue) - results[jsonProperty.Name] = jsonPropertyValue.ToString(); - } - return results; - } - - public List GetIgnoreParameterNames(ILogic logic, Test test, bool includePairedParameterNames) - { - List results = ProcessDataDescription.GetIgnoreParameterNames(logic, this, test); - if (includePairedParameterNames) - { - string value; - List pairedParameterNames = ProcessDataDescription.GetPairedParameterNames(logic, this); - IProcessDataDescription processDataDescription = ProcessDataDescription.GetDisplayNames(logic, this); - string json = JsonSerializer.Serialize(processDataDescription, processDataDescription.GetType()); - object @object = JsonSerializer.Deserialize(json); - if (!(@object is JsonElement jsonElement)) - throw new Exception(); - foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) - { - if (jsonProperty.Value.ValueKind == JsonValueKind.Object || jsonProperty.Value.ValueKind == JsonValueKind.Array) - throw new Exception(); - value = jsonProperty.Value.ToString(); - if (!results.Contains(jsonProperty.Name) && pairedParameterNames.Contains(jsonProperty.Name) && (string.IsNullOrEmpty(value) || value[0] == '|')) - results.Add(jsonProperty.Name); - } - } - return results; - } - - public List GetProcessDataDescriptions(JsonElement jsonElement) - { - List results; - if (jsonElement.ValueKind != JsonValueKind.Array) - throw new Exception(); - JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString }; - results = JsonSerializer.Deserialize>(jsonElement.ToString(), jsonSerializerOptions); - return results; - } - - public Dictionary> GetKeyValuePairs(List processDataDescriptions) - { - Dictionary> results = new Dictionary>(); - Test testKey; - for (int i = 0; i < processDataDescriptions.Count; i++) - { - testKey = (Test)processDataDescriptions[i].Test; - if (!results.ContainsKey(testKey)) - results.Add(testKey, new List()); - results[testKey].Add(processDataDescriptions[i]); - } - return results; - } - - public Dictionary> GetKeyValuePairs(JsonElement jsonElement, List processDataDescriptions, Test test) - { - Dictionary> results = new Dictionary>(); - Test testKey; - if (jsonElement.ValueKind != JsonValueKind.Array) - throw new Exception(); - JsonElement[] jsonElements = jsonElement.EnumerateArray().ToArray(); - if (processDataDescriptions.Count != jsonElements.Length) - throw new Exception(); - for (int i = 0; i < processDataDescriptions.Count; i++) - { - testKey = (Test)processDataDescriptions[i].Test; - if (testKey != test) - continue; - foreach (JsonProperty jsonProperty in jsonElements[i].EnumerateObject()) - { - if (jsonProperty.Value.ValueKind == JsonValueKind.Object || jsonProperty.Value.ValueKind == JsonValueKind.Array) - throw new Exception(); - if (!results.ContainsKey(jsonProperty.Name)) - results.Add(jsonProperty.Name, new List()); - results[jsonProperty.Name].Add(jsonProperty.Value.ToString()); - } - } - return results; - } - - protected void VerifyProcessDataDescription(ILogic logic) - { - string description; - bool allowNull = false; - JsonElement defaultJsonElement = GetDefaultJsonElement(logic); - Dictionary keyValuePairs = GetDisplayNamesJsonElement(logic); - JsonProperty[] jsonProperties = defaultJsonElement.EnumerateObject().ToArray(); - foreach (JsonProperty jsonProperty in jsonProperties) - { - if (jsonProperty.Value.ValueKind == JsonValueKind.Null && !allowNull) - throw new Exception(); - if (!(jsonProperty.Value.ValueKind is JsonValueKind.String) || !keyValuePairs.ContainsKey(jsonProperty.Name)) - description = string.Empty; - else - description = keyValuePairs[jsonProperty.Name].Split('|')[0]; - } - } - - public List GetIProcessDataDescriptions(JsonElement jsonElement) - { - List results = new List(); - if (jsonElement.ValueKind != JsonValueKind.Array) - throw new Exception(); - object @object; - Type type = ProcessDataDescription.GetType(); - JsonElement[] jsonElements = jsonElement.EnumerateArray().ToArray(); - JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString }; - for (int i = 0; i < jsonElements.Length; i++) - { - @object = JsonSerializer.Deserialize(jsonElements[i].ToString(), type, jsonSerializerOptions); - if (!(@object is IProcessDataDescription processDataDescription)) - continue; - results.Add(processDataDescription); - } - return results; - } - + EventName.FileRead => string.Empty, + EventName.FileReadDaily => "_Daily", + EventName.FileReadWeekly => "_Weekly", + EventName.FileReadMonthly => "_Monthly", + EventName.FileReadVerification => "_Verification", + _ => throw new Exception(cellInstanceConnectionName), + }; + string parameterizedModelObjectDefinitionTypeAppended = string.Concat(segments[0], suffix); + IsEvent = cellInstanceConnectionNameBase != parameterizedModelObjectDefinitionTypeAppended; + _EventName = eventNameValue; + if (!Enum.TryParse(parameterizedModelObjectDefinitionTypeAppended, out equipmentTypeValue)) + throw new Exception(cellInstanceConnectionName); + _EquipmentType = equipmentTypeValue; + if (!isEAFHosted && equipmentTypeName != parameterizedModelObjectDefinitionTypeAppended) + throw new Exception(cellInstanceConnectionName); } -} \ No newline at end of file + public string GetEventName() + { + string result = EventName.ToString(); + return result; + } + + public string GetEquipmentType() + { + string result = EquipmentConnection.ToString(); + return result; + } + + public string GetEventDescription() + { + string result = ProcessDataDescription.GetEventDescription(); + return result; + } + + public IProcessDataDescription GetDefault(ILogic logic) + { + IProcessDataDescription result = ProcessDataDescription.GetDefault(logic, this); + return result; + } + + public IProcessDataDescription GetDisplayNames(ILogic logic) + { + IProcessDataDescription result = ProcessDataDescription.GetDisplayNames(logic, this); + return result; + } + + public List GetDetailNames(ILogic logic) + { + List results = ProcessDataDescription.GetDetailNames(logic, this); + return results; + } + + public List GetHeaderNames(ILogic logic) + { + List results = ProcessDataDescription.GetHeaderNames(logic, this); + return results; + } + + public List GetNames(ILogic logic) + { + List results = ProcessDataDescription.GetNames(logic, this); + return results; + } + + public List GetPairedParameterNames(ILogic logic) + { + List results = ProcessDataDescription.GetPairedParameterNames(logic, this); + return results; + } + + public List GetParameterNames(ILogic logic) + { + List results = ProcessDataDescription.GetParameterNames(logic, this); + return results; + } + + public List GetDescription(ILogic logic, List tests, IProcessData iProcessData) + { + List results = ProcessDataDescription.GetDescription(logic, this, tests, iProcessData); + return results; + } + + public string GetCurrentReactor(ILogic logic) + { + string result = string.Empty; + foreach (KeyValuePair keyValuePair in _Reactors) + { + foreach (string filePrefix in keyValuePair.Value.Split('|')) + { + if (logic.Logistics.MID.StartsWith(filePrefix) || (EventName != EventName.FileRead && MesEntities.ContainsKey(logic.Logistics.JobID) && keyValuePair.Value == MesEntities[logic.Logistics.JobID])) + { + result = keyValuePair.Key; + break; + } + } + } + if (string.IsNullOrEmpty(result) && _Reactors.Count == 1) + result = _Reactors.ElementAt(0).Key; + return result; + } + + protected JsonElement GetDefaultJsonElement(ILogic logic) + { + JsonElement result; + IProcessDataDescription processDataDescription = ProcessDataDescription.GetDefault(logic, this); + string json = JsonSerializer.Serialize(processDataDescription, processDataDescription.GetType()); + object @object = JsonSerializer.Deserialize(json); + result = (JsonElement)@object; + return result; + } + + public Dictionary>> GetParameterInfo(ILogic logic, bool allowNull) + { + Dictionary>> results = new(); + string description; + Enum param; + Tuple tuple; + JsonElement defaultJsonElement = GetDefaultJsonElement(logic); + Dictionary keyValuePairs = GetDisplayNamesJsonElement(logic); + foreach (JsonProperty jsonProperty in defaultJsonElement.EnumerateObject()) + { + if (jsonProperty.Value.ValueKind == JsonValueKind.Null && !allowNull) + throw new Exception(); + if (jsonProperty.Value.ValueKind is JsonValueKind.Object or JsonValueKind.Array) + { + description = string.Empty; + param = Description.Param.StructuredType; + //jValue = jObject.Value("Item1"); + throw new NotImplementedException("Item1"); + } + else + { + param = jsonProperty.Value.ValueKind switch + { + JsonValueKind.String => Description.Param.String, + JsonValueKind.Number => Description.Param.Double, + JsonValueKind.True or JsonValueKind.False => Description.Param.Boolean, + JsonValueKind.Null => Description.Param.String, + _ => Description.Param.StructuredType, + }; + } + if (!keyValuePairs.ContainsKey(jsonProperty.Name)) + description = string.Empty; + else + description = keyValuePairs[jsonProperty.Name]; + tuple = new Tuple(param, jsonProperty.Name, description, jsonProperty.Value.ToString()); + if (!results.ContainsKey(jsonProperty.Name)) + results.Add(jsonProperty.Name, new List>()); + results[jsonProperty.Name].Add(tuple); + } + return results; + } + + protected void WriteExportAliases(ILogic logic, string cellName, string equipmentElementName) + { + int i = 0; + Enum param; + object value; + Enum[] @params; + string description; + StringBuilder stringBuilder = new(); + string shareRoot = @"\\messv02ecc1.ec.local\EC_EDA"; + string shareDirectory = string.Concat(shareRoot, @"\Staging\Pdsf\", cellName, @"\ExportAliases\", equipmentElementName); + Dictionary>> keyValuePairs; + if (logic is not null) + keyValuePairs = GetParameterInfo(logic, allowNull: false); + else + keyValuePairs = new Dictionary>>(); + _ = stringBuilder.AppendLine("\"AliasName\";\"Condition\";\"EventId\";\"ExceptionId\";\"Formula\";\"HardwareId\";\"OrderId\";\"ParameterName\";\"Remark\";\"ReportName\";\"SourceId\";\"Use\""); + if (!Directory.Exists(shareRoot)) + return; + if (!Directory.Exists(shareDirectory)) + _ = Directory.CreateDirectory(shareDirectory); + string shareFile = string.Concat(shareDirectory, @"\", DateTime.Now.Ticks, ".csv"); + foreach (KeyValuePair>> keyValuePair in keyValuePairs) + { + i += 1; + @params = (from l in keyValuePair.Value select l.Item1).Distinct().ToArray(); + if (@params.Length != 1) + throw new Exception(); + if (keyValuePair.Value[0].Item2 != keyValuePair.Key) + throw new Exception(); + param = @params[0]; + if (param is not Description.Param.String) + _ = stringBuilder.AppendLine($"\"{keyValuePair.Key}\";\"\";\"\";\"\";\"\";\"\";\"{i}\";\"{cellName}/{EquipmentElementName}/{keyValuePair.Key}\";\"\";\"{cellName}/{EquipmentElementName}/{EventName}\";\"\";\"True\""); + else + { + description = keyValuePair.Value[0].Item3.Split('|')[0]; + if (string.IsNullOrEmpty(description)) + continue; + value = keyValuePair.Value[0].Item4; + _ = stringBuilder.AppendLine($"\"'{description}'\";\"\";\"\";\"\";\"\";\"\";\"{i}\";\"{cellName}/{EquipmentElementName}/{value}\";\"\";\"{cellName}/{EquipmentElementName}/{EventName}\";\"\";\"True\""); + } + } + if (keyValuePairs.Any()) + File.WriteAllText(shareFile, stringBuilder.ToString()); + } + + public Dictionary GetDisplayNamesJsonElement(ILogic logic) + { + Dictionary results = new(); + IProcessDataDescription processDataDescription = ProcessDataDescription.GetDisplayNames(logic, this); + string json = JsonSerializer.Serialize(processDataDescription, processDataDescription.GetType()); + JsonElement jsonElement = JsonSerializer.Deserialize(json); + foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) + { + if (!results.ContainsKey(jsonProperty.Name)) + results.Add(jsonProperty.Name, string.Empty); + if (jsonProperty.Value is JsonElement jsonPropertyValue) + results[jsonProperty.Name] = jsonPropertyValue.ToString(); + } + return results; + } + + public List GetIgnoreParameterNames(ILogic logic, Test test, bool includePairedParameterNames) + { + List results = ProcessDataDescription.GetIgnoreParameterNames(logic, this, test); + if (includePairedParameterNames) + { + string value; + List pairedParameterNames = ProcessDataDescription.GetPairedParameterNames(logic, this); + IProcessDataDescription processDataDescription = ProcessDataDescription.GetDisplayNames(logic, this); + string json = JsonSerializer.Serialize(processDataDescription, processDataDescription.GetType()); + object @object = JsonSerializer.Deserialize(json); + if (@object is not JsonElement jsonElement) + throw new Exception(); + foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) + { + if (jsonProperty.Value.ValueKind is JsonValueKind.Object or JsonValueKind.Array) + throw new Exception(); + value = jsonProperty.Value.ToString(); + if (!results.Contains(jsonProperty.Name) && pairedParameterNames.Contains(jsonProperty.Name) && (string.IsNullOrEmpty(value) || value[0] == '|')) + results.Add(jsonProperty.Name); + } + } + return results; + } + + public List GetProcessDataDescriptions(JsonElement jsonElement) + { + List results; + if (jsonElement.ValueKind != JsonValueKind.Array) + throw new Exception(); + JsonSerializerOptions jsonSerializerOptions = new() + { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString }; + results = JsonSerializer.Deserialize>(jsonElement.ToString(), jsonSerializerOptions); + return results; + } + + public Dictionary> GetKeyValuePairs(List processDataDescriptions) + { + Dictionary> results = new(); + Test testKey; + for (int i = 0; i < processDataDescriptions.Count; i++) + { + testKey = (Test)processDataDescriptions[i].Test; + if (!results.ContainsKey(testKey)) + results.Add(testKey, new List()); + results[testKey].Add(processDataDescriptions[i]); + } + return results; + } + + public Dictionary> GetKeyValuePairs(JsonElement jsonElement, List processDataDescriptions, Test test) + { + Dictionary> results = new(); + Test testKey; + if (jsonElement.ValueKind != JsonValueKind.Array) + throw new Exception(); + JsonElement[] jsonElements = jsonElement.EnumerateArray().ToArray(); + if (processDataDescriptions.Count != jsonElements.Length) + throw new Exception(); + for (int i = 0; i < processDataDescriptions.Count; i++) + { + testKey = (Test)processDataDescriptions[i].Test; + if (testKey != test) + continue; + foreach (JsonProperty jsonProperty in jsonElements[i].EnumerateObject()) + { + if (jsonProperty.Value.ValueKind is JsonValueKind.Object or JsonValueKind.Array) + throw new Exception(); + if (!results.ContainsKey(jsonProperty.Name)) + results.Add(jsonProperty.Name, new List()); + results[jsonProperty.Name].Add(jsonProperty.Value.ToString()); + } + } + return results; + } + + protected void VerifyProcessDataDescription(ILogic logic) + { + string description; + bool allowNull = false; + JsonElement defaultJsonElement = GetDefaultJsonElement(logic); + Dictionary keyValuePairs = GetDisplayNamesJsonElement(logic); + JsonProperty[] jsonProperties = defaultJsonElement.EnumerateObject().ToArray(); + foreach (JsonProperty jsonProperty in jsonProperties) + { + if (jsonProperty.Value.ValueKind == JsonValueKind.Null && !allowNull) + throw new Exception(); + if (jsonProperty.Value.ValueKind is not JsonValueKind.String || !keyValuePairs.ContainsKey(jsonProperty.Name)) + description = string.Empty; + else + description = keyValuePairs[jsonProperty.Name].Split('|')[0]; + } + } + + public List GetIProcessDataDescriptions(JsonElement jsonElement) + { + List results = new(); + if (jsonElement.ValueKind != JsonValueKind.Array) + throw new Exception(); + object @object; + Type type = ProcessDataDescription.GetType(); + JsonElement[] jsonElements = jsonElement.EnumerateArray().ToArray(); + JsonSerializerOptions jsonSerializerOptions = new() + { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString }; + for (int i = 0; i < jsonElements.Length; i++) + { + @object = JsonSerializer.Deserialize(jsonElements[i].ToString(), type, jsonSerializerOptions); + if (@object is not IProcessDataDescription processDataDescription) + continue; + results.Add(processDataDescription); + } + return results; + } + +} diff --git a/APC Viewer/Shared/Metrology/EventName.cs b/APC Viewer/Shared/Metrology/EventName.cs index 8c35605..192477f 100644 --- a/APC Viewer/Shared/Metrology/EventName.cs +++ b/APC Viewer/Shared/Metrology/EventName.cs @@ -1,13 +1,10 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public enum EventName { - - public enum EventName - { - FileRead, - FileReadDaily, - FileReadMonthly, - FileReadVerification, - FileReadWeekly - } - -} \ No newline at end of file + FileRead, + FileReadDaily, + FileReadMonthly, + FileReadVerification, + FileReadWeekly +} diff --git a/APC Viewer/Shared/Metrology/ILogic.cs b/APC Viewer/Shared/Metrology/ILogic.cs index 445a92c..4893b16 100644 --- a/APC Viewer/Shared/Metrology/ILogic.cs +++ b/APC Viewer/Shared/Metrology/ILogic.cs @@ -6,43 +6,40 @@ using System.Collections.Generic; using System.IO; using System.Text.Json; -namespace Shared.Metrology +namespace Shared.Metrology; + +public interface ILogic { - public interface ILogic - { + ILogic ShallowCopy(); + Logistics Logistics { get; } - ILogic ShallowCopy(); - Logistics Logistics { get; } + void ConfigurationRestore(); + void CreateSelfDescription(); + void CreateSelfDescription(IEquipmentControl equipment, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration configuration, IList modelObjectParameterDefinitions, EquipmentType? equipmentType, EventName? eventName); + bool Extract(string reportFullPath, string eventName); + string GetConfigurationErrorTargetFileLocation(); + string GetConfigurationSourceFileLocation(); + string GetConfigurationTarget2FileLocation(); + string GetConfigurationTargetFileLocation(); + string GetConfigurationTargetFileName(); + Tuple> GetExtractResult(string reportFullPath, string eventName); + object GetFilePathGeneratorInfo(string reportFullPath, bool isErrorFile); + string GetReportFullPath(Dictionary keyValuePairs); + string GetTarget2FileLocation(); + void Move(string reportFullPath, Tuple> extractResults, Exception? exception = null); + string ReExtract(string searchDirectory, string sourceFileFilter); + void ReflectionCreateSelfDescription(string equipmentElementName, int? input, string cellName, string debugConfig, string[] strings, bool[] booleans, long[] numbers, string[] enums); + ConfigDataBase ReflectionCreateSelfDescriptionV2(string json); + string ResolveErrorTargetPlaceHolders(string reportFullPath, bool createDirectory = true, string fileFoundPath = ""); + string ResolveSourcePlaceHolders(string reportFullPath, bool createDirectory = true); + string ResolveTarget2PlaceHolders(string reportFullPath, bool createDirectory = true, string fileFoundPath = ""); + string ResolveTargetPlaceHolders(string reportFullPath, bool createDirectory = true, string fileFoundPath = ""); + void SetFileParameter(string key, string value); + void SetFileParameterLotID(string value, bool includeLogisticsSequence = false); + void SetFileParameterLotIDToLogisticsMID(bool includeLogisticsSequence = true); + void SetFileParameterSystemDateTimeToLogisticsSequence(); + void SetPlaceHolder(string reportFullPath, string key, string value); + void SetTarget2FileLocation(string value); - void ConfigurationRestore(); - void CreateSelfDescription(); - void CreateSelfDescription(IEquipmentControl equipment, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration configuration, IList modelObjectParameterDefinitions, EquipmentType? equipmentType, EventName? eventName); - bool Extract(string reportFullPath, string eventName); - string GetConfigurationErrorTargetFileLocation(); - string GetConfigurationSourceFileLocation(); - string GetConfigurationTarget2FileLocation(); - string GetConfigurationTargetFileLocation(); - string GetConfigurationTargetFileName(); - Tuple> GetExtractResult(string reportFullPath, string eventName); - object GetFilePathGeneratorInfo(string reportFullPath, bool isErrorFile); - string GetReportFullPath(Dictionary keyValuePairs); - string GetTarget2FileLocation(); - void Move(string reportFullPath, Tuple> extractResults, Exception exception = null); - string ReExtract(string searchDirectory, string sourceFileFilter); - void ReflectionCreateSelfDescription(string equipmentElementName, int? input, string cellName, string debugConfig, string[] strings, bool[] booleans, long[] numbers, string[] enums); - ConfigDataBase ReflectionCreateSelfDescriptionV2(string json); - string ResolveErrorTargetPlaceHolders(string reportFullPath, bool createDirectory = true, string fileFoundPath = ""); - string ResolveSourcePlaceHolders(string reportFullPath, bool createDirectory = true); - string ResolveTarget2PlaceHolders(string reportFullPath, bool createDirectory = true, string fileFoundPath = ""); - string ResolveTargetPlaceHolders(string reportFullPath, bool createDirectory = true, string fileFoundPath = ""); - void SetFileParameter(string key, string value); - void SetFileParameterLotID(string value, bool includeLogisticsSequence = false); - void SetFileParameterLotIDToLogisticsMID(bool includeLogisticsSequence = true); - void SetFileParameterSystemDateTimeToLogisticsSequence(); - void SetPlaceHolder(string reportFullPath, string key, string value); - void SetTarget2FileLocation(string value); - - } - -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08AFMD3100.cs b/APC Viewer/Shared/Metrology/MET08AFMD3100.cs index 894f4dc..5b120b9 100644 --- a/APC Viewer/Shared/Metrology/MET08AFMD3100.cs +++ b/APC Viewer/Shared/Metrology/MET08AFMD3100.cs @@ -1,14 +1,11 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08AFMD3100 { - public class MET08AFMD3100 + public enum Test { - - public enum Test - { - AFMRoughness = Metrology.Test.AFMRoughness - } - + AFMRoughness = Metrology.Test.AFMRoughness } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08BVHGPROBE.cs b/APC Viewer/Shared/Metrology/MET08BVHGPROBE.cs index c2c58d6..2c8cc86 100644 --- a/APC Viewer/Shared/Metrology/MET08BVHGPROBE.cs +++ b/APC Viewer/Shared/Metrology/MET08BVHGPROBE.cs @@ -1,16 +1,13 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08BVHGPROBE { - public class MET08BVHGPROBE + public enum Test { - - public enum Test - { - BreakdownVoltageCenter = Metrology.Test.BreakdownVoltageCenter, - BreakdownVoltageEdge = Metrology.Test.BreakdownVoltageEdge, - BreakdownVoltageMiddle8in = Metrology.Test.BreakdownVoltageMiddle8in - } - + BreakdownVoltageCenter = Metrology.Test.BreakdownVoltageCenter, + BreakdownVoltageEdge = Metrology.Test.BreakdownVoltageEdge, + BreakdownVoltageMiddle8in = Metrology.Test.BreakdownVoltageMiddle8in } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08CVHGPROBE802B150.cs b/APC Viewer/Shared/Metrology/MET08CVHGPROBE802B150.cs index 1f1f923..1466f57 100644 --- a/APC Viewer/Shared/Metrology/MET08CVHGPROBE802B150.cs +++ b/APC Viewer/Shared/Metrology/MET08CVHGPROBE802B150.cs @@ -1,16 +1,13 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08CVHGPROBE802B150 { - public class MET08CVHGPROBE802B150 + public enum Test { - - public enum Test - { - CV = Metrology.Test.CV, - MonthlyCV = Metrology.Test.MonthlyCV, - WeeklyCV = Metrology.Test.WeeklyCV - } - + CV = Metrology.Test.CV, + MonthlyCV = Metrology.Test.MonthlyCV, + WeeklyCV = Metrology.Test.WeeklyCV } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08DDINCAN8620.cs b/APC Viewer/Shared/Metrology/MET08DDINCAN8620.cs index d08382c..8814a64 100644 --- a/APC Viewer/Shared/Metrology/MET08DDINCAN8620.cs +++ b/APC Viewer/Shared/Metrology/MET08DDINCAN8620.cs @@ -1,18 +1,15 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08DDINCAN8620 { - public class MET08DDINCAN8620 + public enum Test { - - public enum Test - { - CandelaKlarfDC = Metrology.Test.CandelaKlarfDC, - CandelaLaser = Metrology.Test.CandelaLaser, - CandelaVerify = Metrology.Test.CandelaVerify, - CandelaPSL = Metrology.Test.CandelaPSL, - CandelaProdU = Metrology.Test.CandelaProdU - } - + CandelaKlarfDC = Metrology.Test.CandelaKlarfDC, + CandelaLaser = Metrology.Test.CandelaLaser, + CandelaVerify = Metrology.Test.CandelaVerify, + CandelaPSL = Metrology.Test.CandelaPSL, + CandelaProdU = Metrology.Test.CandelaProdU } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08DDUPSFS6420.cs b/APC Viewer/Shared/Metrology/MET08DDUPSFS6420.cs index cbc2e74..67171b4 100644 --- a/APC Viewer/Shared/Metrology/MET08DDUPSFS6420.cs +++ b/APC Viewer/Shared/Metrology/MET08DDUPSFS6420.cs @@ -1,14 +1,11 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08DDUPSFS6420 { - public class MET08DDUPSFS6420 + public enum Test { - - public enum Test - { - Tencor = Metrology.Test.Tencor - } - + Tencor = Metrology.Test.Tencor } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08DDUPSP1TBI.cs b/APC Viewer/Shared/Metrology/MET08DDUPSP1TBI.cs index f60c7d1..6031aeb 100644 --- a/APC Viewer/Shared/Metrology/MET08DDUPSP1TBI.cs +++ b/APC Viewer/Shared/Metrology/MET08DDUPSP1TBI.cs @@ -1,14 +1,11 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08DDUPSP1TBI { - public class MET08DDUPSP1TBI + public enum Test { - - public enum Test - { - SP1 = Metrology.Test.SP1 - } - + SP1 = Metrology.Test.SP1 } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08EBEAMINTEGRITY26.cs b/APC Viewer/Shared/Metrology/MET08EBEAMINTEGRITY26.cs index ba016ca..a35b7e9 100644 --- a/APC Viewer/Shared/Metrology/MET08EBEAMINTEGRITY26.cs +++ b/APC Viewer/Shared/Metrology/MET08EBEAMINTEGRITY26.cs @@ -1,14 +1,11 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08EBEAMINTEGRITY26 { - public class MET08EBEAMINTEGRITY26 + public enum Test { - - public enum Test - { - Denton = Metrology.Test.Denton - } - + Denton = Metrology.Test.Denton } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08HALLHL5580.cs b/APC Viewer/Shared/Metrology/MET08HALLHL5580.cs index cc3231f..59d571c 100644 --- a/APC Viewer/Shared/Metrology/MET08HALLHL5580.cs +++ b/APC Viewer/Shared/Metrology/MET08HALLHL5580.cs @@ -1,16 +1,13 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08HALLHL5580 { - public class MET08HALLHL5580 + public enum Test { - - public enum Test - { - Hall = Metrology.Test.Hall, - MonthlyHall = Metrology.Test.MonthlyHall, - WeeklyHall = Metrology.Test.WeeklyHall - } - + Hall = Metrology.Test.Hall, + MonthlyHall = Metrology.Test.MonthlyHall, + WeeklyHall = Metrology.Test.WeeklyHall } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08MESMICROSCOPE.cs b/APC Viewer/Shared/Metrology/MET08MESMICROSCOPE.cs index 125c248..f4852ba 100644 --- a/APC Viewer/Shared/Metrology/MET08MESMICROSCOPE.cs +++ b/APC Viewer/Shared/Metrology/MET08MESMICROSCOPE.cs @@ -1,14 +1,11 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08MESMICROSCOPE { - public class MET08MESMICROSCOPE + public enum Test { - - public enum Test - { - Microscope = Metrology.Test.Microscope - } - + Microscope = Metrology.Test.Microscope } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08NDFRESIMAP151C.cs b/APC Viewer/Shared/Metrology/MET08NDFRESIMAP151C.cs index 6f0bc5a..9f2f50f 100644 --- a/APC Viewer/Shared/Metrology/MET08NDFRESIMAP151C.cs +++ b/APC Viewer/Shared/Metrology/MET08NDFRESIMAP151C.cs @@ -1,15 +1,12 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08NDFRESIMAP151C { - public class MET08NDFRESIMAP151C + public enum Test { - - public enum Test - { - Lehighton = Metrology.Test.Lehighton, - VerificationLehighton = Metrology.Test.VerificationLehighton - } - + Lehighton = Metrology.Test.Lehighton, + VerificationLehighton = Metrology.Test.VerificationLehighton } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08PLMAPRPM.cs b/APC Viewer/Shared/Metrology/MET08PLMAPRPM.cs index 4c1cdb8..75e06e5 100644 --- a/APC Viewer/Shared/Metrology/MET08PLMAPRPM.cs +++ b/APC Viewer/Shared/Metrology/MET08PLMAPRPM.cs @@ -1,20 +1,17 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08PLMAPRPM { - public class MET08PLMAPRPM + public enum Test { - - public enum Test - { - RPMXY = Metrology.Test.RPMXY, - RPMAverage = Metrology.Test.RPMAverage, - RPMPLRatio = Metrology.Test.RPMPLRatio, - DailyRPMXY = Metrology.Test.DailyRPMXY, - DailyRPMAverage = Metrology.Test.DailyRPMAverage, - DailyRPMPLRatio = Metrology.Test.DailyRPMPLRatio, - VerificationRPM = Metrology.Test.VerificationRPM - } - + RPMXY = Metrology.Test.RPMXY, + RPMAverage = Metrology.Test.RPMAverage, + RPMPLRatio = Metrology.Test.RPMPLRatio, + DailyRPMXY = Metrology.Test.DailyRPMXY, + DailyRPMAverage = Metrology.Test.DailyRPMAverage, + DailyRPMPLRatio = Metrology.Test.DailyRPMPLRatio, + VerificationRPM = Metrology.Test.VerificationRPM } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08PRFUSB4000.cs b/APC Viewer/Shared/Metrology/MET08PRFUSB4000.cs index 502f524..8b76e4f 100644 --- a/APC Viewer/Shared/Metrology/MET08PRFUSB4000.cs +++ b/APC Viewer/Shared/Metrology/MET08PRFUSB4000.cs @@ -1,14 +1,11 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08PRFUSB4000 { - public class MET08PRFUSB4000 + public enum Test { - - public enum Test - { - Photoreflectance = Metrology.Test.Photoreflectance - } - + Photoreflectance = Metrology.Test.Photoreflectance } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08RESIHGCV.cs b/APC Viewer/Shared/Metrology/MET08RESIHGCV.cs index 1146728..cbf24cf 100644 --- a/APC Viewer/Shared/Metrology/MET08RESIHGCV.cs +++ b/APC Viewer/Shared/Metrology/MET08RESIHGCV.cs @@ -1,14 +1,11 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08RESIHGCV { - public class MET08RESIHGCV + public enum Test { - - public enum Test - { - HgCV = Metrology.Test.HgCV - } - + HgCV = Metrology.Test.HgCV } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08RESIMAPCDE.cs b/APC Viewer/Shared/Metrology/MET08RESIMAPCDE.cs index 61dbeda..960dcca 100644 --- a/APC Viewer/Shared/Metrology/MET08RESIMAPCDE.cs +++ b/APC Viewer/Shared/Metrology/MET08RESIMAPCDE.cs @@ -1,14 +1,11 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08RESIMAPCDE { - public class MET08RESIMAPCDE + public enum Test { - - public enum Test - { - CDE = Metrology.Test.CDE - } - + CDE = Metrology.Test.CDE } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08THFTIRQS408M.cs b/APC Viewer/Shared/Metrology/MET08THFTIRQS408M.cs index b122e73..e8f5507 100644 --- a/APC Viewer/Shared/Metrology/MET08THFTIRQS408M.cs +++ b/APC Viewer/Shared/Metrology/MET08THFTIRQS408M.cs @@ -1,14 +1,11 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08THFTIRQS408M { - public class MET08THFTIRQS408M + public enum Test { - - public enum Test - { - BioRadQS408M = Metrology.Test.BioRadQS408M - } - + BioRadQS408M = Metrology.Test.BioRadQS408M } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08THFTIRSTRATUS.cs b/APC Viewer/Shared/Metrology/MET08THFTIRSTRATUS.cs index 64687ed..b7f6197 100644 --- a/APC Viewer/Shared/Metrology/MET08THFTIRSTRATUS.cs +++ b/APC Viewer/Shared/Metrology/MET08THFTIRSTRATUS.cs @@ -1,14 +1,11 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08THFTIRSTRATUS { - public class MET08THFTIRSTRATUS + public enum Test { - - public enum Test - { - BioRadStratus = Metrology.Test.BioRadStratus - } - + BioRadStratus = Metrology.Test.BioRadStratus } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08UVH44GS100M.cs b/APC Viewer/Shared/Metrology/MET08UVH44GS100M.cs index ce10493..e07e5cb 100644 --- a/APC Viewer/Shared/Metrology/MET08UVH44GS100M.cs +++ b/APC Viewer/Shared/Metrology/MET08UVH44GS100M.cs @@ -1,14 +1,11 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08UVH44GS100M { - public class MET08UVH44GS100M + public enum Test { - - public enum Test - { - UV = Metrology.Test.UV - } - + UV = Metrology.Test.UV } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08VPDSUBCON.cs b/APC Viewer/Shared/Metrology/MET08VPDSUBCON.cs index 3bcd0d6..da198a3 100644 --- a/APC Viewer/Shared/Metrology/MET08VPDSUBCON.cs +++ b/APC Viewer/Shared/Metrology/MET08VPDSUBCON.cs @@ -1,14 +1,11 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08VPDSUBCON { - public class MET08VPDSUBCON + public enum Test { - - public enum Test - { - VpdIcpmsAnalyte = Metrology.Test.VpdIcpmsAnalyte - } - + VpdIcpmsAnalyte = Metrology.Test.VpdIcpmsAnalyte } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08WGEOMX203641Q.cs b/APC Viewer/Shared/Metrology/MET08WGEOMX203641Q.cs index c85b973..692ea36 100644 --- a/APC Viewer/Shared/Metrology/MET08WGEOMX203641Q.cs +++ b/APC Viewer/Shared/Metrology/MET08WGEOMX203641Q.cs @@ -1,15 +1,12 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08WGEOMX203641Q { - public class MET08WGEOMX203641Q + public enum Test { - - public enum Test - { - WarpAndBow = Metrology.Test.WarpAndBow, - VerificationWarpAndBow = Metrology.Test.VerificationWarpAndBow - } - + WarpAndBow = Metrology.Test.WarpAndBow, + VerificationWarpAndBow = Metrology.Test.VerificationWarpAndBow } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/MET08XRDXPERTPROMRDXL.cs b/APC Viewer/Shared/Metrology/MET08XRDXPERTPROMRDXL.cs index b3a8def..4b14816 100644 --- a/APC Viewer/Shared/Metrology/MET08XRDXPERTPROMRDXL.cs +++ b/APC Viewer/Shared/Metrology/MET08XRDXPERTPROMRDXL.cs @@ -1,23 +1,20 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public class MET08XRDXPERTPROMRDXL { - public class MET08XRDXPERTPROMRDXL + public enum Test { - - public enum Test - { - XRDXY = Metrology.Test.XRDXY, - XRDWeightedAverage = Metrology.Test.XRDWeightedAverage, - MonthlyXRD = Metrology.Test.MonthlyXRD, - WeeklyXRD = Metrology.Test.WeeklyXRD, - WeeklyXRDAIcomp = Metrology.Test.WeeklyXRDAIcomp, - WeeklyXRDFWHM002 = Metrology.Test.WeeklyXRDFWHM002, - WeeklyXRDFWHM105 = Metrology.Test.WeeklyXRDFWHM105, - WeeklyXRDSLStks = Metrology.Test.WeeklyXRDSLStks, - WeeklyXRDXRR = Metrology.Test.WeeklyXRDXRR, - JVXRD = Metrology.Test.JVXRD - } - + XRDXY = Metrology.Test.XRDXY, + XRDWeightedAverage = Metrology.Test.XRDWeightedAverage, + MonthlyXRD = Metrology.Test.MonthlyXRD, + WeeklyXRD = Metrology.Test.WeeklyXRD, + WeeklyXRDAIcomp = Metrology.Test.WeeklyXRDAIcomp, + WeeklyXRDFWHM002 = Metrology.Test.WeeklyXRDFWHM002, + WeeklyXRDFWHM105 = Metrology.Test.WeeklyXRDFWHM105, + WeeklyXRDSLStks = Metrology.Test.WeeklyXRDSLStks, + WeeklyXRDXRR = Metrology.Test.WeeklyXRDXRR, + JVXRD = Metrology.Test.JVXRD } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/ProcessData.Duplicator.cs b/APC Viewer/Shared/Metrology/ProcessData.Duplicator.cs index 8d18507..17e100e 100644 --- a/APC Viewer/Shared/Metrology/ProcessData.Duplicator.cs +++ b/APC Viewer/Shared/Metrology/ProcessData.Duplicator.cs @@ -2,109 +2,106 @@ using System.Collections.Generic; using System.Text.Json; -namespace Shared.Metrology +namespace Shared.Metrology; + +public class Duplicator { - public class Duplicator + public class Description : IProcessDataDescription { - public class Description : IProcessDataDescription + public int Test { get; set; } + public int Count { get; set; } + public int Index { get; set; } + // + public string EventName { get; set; } + public string NullData { get; set; } + public string JobID { get; set; } + public string Sequence { get; set; } + public string MesEntity { get; set; } + public string ReportFullPath { get; set; } + public string ProcessJobID { get; set; } + public string MID { get; set; } + public string Date { get; set; } //2021-02-22 + + public string GetEventDescription() => "File Has been read and parsed"; + + public List GetHeaderNames(ILogic logic, ConfigDataBase configDataBase) { + List results = new(); + return results; + } - public int Test { get; set; } - public int Count { get; set; } - public int Index { get; set; } - // - public string EventName { get; set; } - public string NullData { get; set; } - public string JobID { get; set; } - public string Sequence { get; set; } - public string MesEntity { get; set; } - public string ReportFullPath { get; set; } - public string ProcessJobID { get; set; } - public string MID { get; set; } - public string Date { get; set; } //2021-02-22 + public List GetDetailNames(ILogic logic, ConfigDataBase configDataBase) + { + List results = new(); + return results; + } - public string GetEventDescription() { return "File Has been read and parsed"; } + public List GetParameterNames(ILogic logic, ConfigDataBase configDataBase) + { + List results = new(); + return results; + } - public List GetHeaderNames(ILogic logic, ConfigDataBase configDataBase) + public List GetPairedParameterNames(ILogic logic, ConfigDataBase configDataBase) + { + List results = new(); + return results; + } + + public List GetIgnoreParameterNames(ILogic logic, ConfigDataBase configDataBase, Test test) + { + List results = new(); + return results; + } + + public List GetNames(ILogic logic, ConfigDataBase configDataBase) + { + List results = new(); + IProcessDataDescription processDataDescription = GetDefault(logic, configDataBase); + string json = JsonSerializer.Serialize(processDataDescription, processDataDescription.GetType()); + object @object = JsonSerializer.Deserialize(json); + if (@object is not JsonElement jsonElement) + throw new Exception(); + foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) + results.Add(jsonProperty.Name); + return results; + } + + public IProcessDataDescription GetDisplayNames(ILogic logic, ConfigDataBase configDataBase) + { + Description result = new(); + return result; + } + + public IProcessDataDescription GetDefault(ILogic logic, ConfigDataBase configDataBase) + { + Description result = new() { - List results = new List(); - return results; - } - - public List GetDetailNames(ILogic logic, ConfigDataBase configDataBase) - { - List results = new List(); - return results; - } - - public List GetParameterNames(ILogic logic, ConfigDataBase configDataBase) - { - List results = new List(); - return results; - } - - public List GetPairedParameterNames(ILogic logic, ConfigDataBase configDataBase) - { - List results = new List(); - return results; - } - - public List GetIgnoreParameterNames(ILogic logic, ConfigDataBase configDataBase, Test test) - { - List results = new List(); - return results; - } - - public List GetNames(ILogic logic, ConfigDataBase configDataBase) - { - List results = new List(); - IProcessDataDescription processDataDescription = GetDefault(logic, configDataBase); - string json = JsonSerializer.Serialize(processDataDescription, processDataDescription.GetType()); - object @object = JsonSerializer.Deserialize(json); - if (!(@object is JsonElement jsonElement)) - throw new Exception(); - foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) - results.Add(jsonProperty.Name); - return results; - } - - public IProcessDataDescription GetDisplayNames(ILogic logic, ConfigDataBase configDataBase) - { - Description result = new Description(); - return result; - } - - public IProcessDataDescription GetDefault(ILogic logic, ConfigDataBase configDataBase) - { - Description result = new Description - { - Test = -1, - Count = 0, - Index = -1, - // - EventName = configDataBase.GetEventName(), - NullData = string.Empty, - JobID = logic.Logistics.JobID, - Sequence = logic.Logistics.Sequence.ToString(), - MesEntity = logic.Logistics.MesEntity, - ReportFullPath = logic.Logistics.ReportFullPath, - ProcessJobID = logic.Logistics.ProcessJobID, - MID = logic.Logistics.MID, - Date = logic.Logistics.DateTimeFromSequence.ToUniversalTime().ToString("MM/dd/yyyy HH:mm:ss"), - }; - return result; - } - - public List GetDescription(ILogic logic, ConfigDataBase configDataBase, List tests, IProcessData iProcessData) - { - List results = new List(); - return results; - } + Test = -1, + Count = 0, + Index = -1, + // + EventName = configDataBase.GetEventName(), + NullData = string.Empty, + JobID = logic.Logistics.JobID, + Sequence = logic.Logistics.Sequence.ToString(), + MesEntity = logic.Logistics.MesEntity, + ReportFullPath = logic.Logistics.ReportFullPath, + ProcessJobID = logic.Logistics.ProcessJobID, + MID = logic.Logistics.MID, + Date = logic.Logistics.DateTimeFromSequence.ToUniversalTime().ToString("MM/dd/yyyy HH:mm:ss"), + }; + return result; + } + public List GetDescription(ILogic logic, ConfigDataBase configDataBase, List tests, IProcessData iProcessData) + { + List results = new(); + return results; } } -} \ No newline at end of file +} diff --git a/APC Viewer/Shared/Metrology/ProcessDataStandardFormat.cs b/APC Viewer/Shared/Metrology/ProcessDataStandardFormat.cs index f43da21..b2d21d5 100644 --- a/APC Viewer/Shared/Metrology/ProcessDataStandardFormat.cs +++ b/APC Viewer/Shared/Metrology/ProcessDataStandardFormat.cs @@ -6,522 +6,507 @@ using System.Linq; using System.Text; using System.Text.Json; -namespace Shared.Metrology +namespace Shared.Metrology; + +public class ProcessDataStandardFormat { - public class ProcessDataStandardFormat + public const string RecordStart = "RECORD_START"; + + public enum SearchFor { - - public const string RecordStart = "RECORD_START"; - - public enum SearchFor - { - EquipmentIntegration = 1, - BusinessIntegration = 2, - SystemExport = 3, - Archive = 4 - } - - public static string GetPDSFText(ILogic logic, string eventName, string equipmentType, JsonElement jsonElement, string logisticsText) - { - string result; - if (jsonElement.ValueKind != JsonValueKind.Array) - result = string.Empty; - else - { - int columns = 0; - List lines; - string endOffset = "E#######T"; - string dataOffset = "D#######T"; - string headerOffset = "H#######T"; - string format = "MM/dd/yyyy HH:mm:ss"; - StringBuilder stringBuilder = new StringBuilder(); - lines = new string[] { "HEADER_TAG\tHEADER_VALUE", "FORMAT\t2.00", "NUMBER_PASSES\t0001", string.Concat("HEADER_OFFSET\t", headerOffset), string.Concat("DATA_OFFSET\t", dataOffset), string.Concat("END_OFFSET\t", endOffset) }.ToList(); - stringBuilder.Append("\"Time\"").Append('\t'); - stringBuilder.Append("\"A_LOGISTICS\"").Append('\t'); - stringBuilder.Append("\"B_LOGISTICS\"").Append('\t'); - JsonElement[] jsonElements = jsonElement.EnumerateArray().ToArray(); - for (int i = 0; i < jsonElements.Length;) - { - foreach (JsonProperty jsonProperty in jsonElements[0].EnumerateObject()) - { - columns += 1; - stringBuilder.Append("\"").Append(jsonProperty.Name).Append("\"").Append('\t'); - } - break; - } - stringBuilder.Remove(stringBuilder.Length - 1, 1); - lines.Add(stringBuilder.ToString()); - for (int i = 0; i < jsonElements.Length; i++) - { - stringBuilder.Clear(); - stringBuilder.Append("0.1").Append('\t'); - stringBuilder.Append("1").Append('\t'); - stringBuilder.Append("2").Append('\t'); - foreach (JsonProperty jsonProperty in jsonElements[i].EnumerateObject()) - stringBuilder.Append(jsonProperty.Value).Append('\t'); - stringBuilder.Remove(stringBuilder.Length - 1, 1); - lines.Add(stringBuilder.ToString()); - } - lines.Add(string.Concat("NUM_DATA_ROWS ", jsonElements.Length.ToString().PadLeft(9, '0'))); - lines.Add(string.Concat("NUM_DATA_COLUMNS ", (columns + 3).ToString().PadLeft(9, '0'))); - lines.Add("DELIMITER ;"); - lines.Add(string.Concat("START_TIME_FORMAT ", format)); - lines.Add(string.Concat("START_TIME ", logic.Logistics.DateTimeFromSequence.ToString(format))); //12/26/2019 15:22:44 - lines.Add(string.Concat("LOGISTICS_COLUMN", '\t', "A_LOGISTICS")); - lines.Add(string.Concat("LOGISTICS_COLUMN", '\t', "B_LOGISTICS")); - if (!string.IsNullOrEmpty(logisticsText)) - lines.Add(logisticsText); - else - { - lines.Add(string.Concat("LOGISTICS_1", '\t', "A_CHAMBER=;A_INFO=", eventName, ";A_INFO2=", equipmentType, ";A_JOBID=", logic.Logistics.JobID, ";A_MES_ENTITY=", logic.Logistics.MesEntity, ";A_MID=", logic.Logistics.MID, ";A_NULL_DATA=", logic.Logistics.NullData, ";A_PPID=NO_PPID;A_PROCESS_JOBID=", logic.Logistics.ProcessJobID, ";A_PRODUCT=;A_SEQUENCE=", logic.Logistics.Sequence, ";A_WAFER_ID=;")); - lines.Add(string.Concat("LOGISTICS_2", '\t', "B_CHAMBER=;B_INFO=", eventName, ";B_INFO2=", equipmentType, ";B_JOBID=", logic.Logistics.JobID, ";B_MES_ENTITY=", logic.Logistics.MesEntity, ";B_MID=", logic.Logistics.MID, ";B_NULL_DATA=", logic.Logistics.NullData, ";B_PPID=NO_PPID;B_PROCESS_JOBID=", logic.Logistics.ProcessJobID, ";B_PRODUCT=;B_SEQUENCE=", logic.Logistics.Sequence, ";B_WAFER_ID=;")); - lines.Add("END_HEADER"); - } - stringBuilder.Clear(); - foreach (string line in lines) - stringBuilder.AppendLine(line); - result = stringBuilder.ToString(); - result = result.Replace(headerOffset, result.IndexOf("NUM_DATA_ROWS").ToString().PadLeft(9, '0')). - Replace(dataOffset, result.IndexOf('"').ToString().PadLeft(9, '0')). - Replace(endOffset, result.Length.ToString().PadLeft(9, '0')); - } - return result; - } - - public static Tuple GetLogisticsColumnsAndBody(string reportFullPath, string[] lines = null) - { - string segment; - List body = new List(); - StringBuilder logistics = new StringBuilder(); - if (lines is null) - lines = File.ReadAllLines(reportFullPath); - string[] segments; - if (lines.Length < 7) - segments = new string[] { }; - else - segments = lines[6].Trim().Split('\t'); - List columns = new List(); - for (int c = 0; c < segments.Length; c++) - { - segment = segments[c].Substring(1, segments[c].Length - 2); - if (!columns.Contains(segment)) - columns.Add(segment); - else - { - for (short i = 1; i < short.MaxValue; i++) - { - segment = string.Concat(segment, "_", i); - if (!columns.Contains(segment)) - { - columns.Add(segment); - break; - } - } - } - } - bool lookForLogistics = false; - for (int r = 7; r < lines.Count(); r++) - { - if (lines[r].StartsWith("NUM_DATA_ROWS")) - lookForLogistics = true; - if (!lookForLogistics) - { - body.Add(lines[r]); - continue; - } - if (lines[r].StartsWith("LOGISTICS_1")) - { - for (int i = r; i < lines.Count(); i++) - { - if (lines[r].StartsWith("END_HEADER")) - break; - logistics.AppendLine(lines[i]); - } - break; - } - } - return new Tuple(logistics.ToString(), columns.ToArray(), body.ToArray()); - } - - public static JsonElement GetArray(Tuple pdsf, bool lookForNumbers = false) - { - JsonElement result; - string logistics = pdsf.Item1; - string[] columns = pdsf.Item2; - string[] bodyLines = pdsf.Item3; - if (!bodyLines.Any() || !bodyLines[0].Contains('\t')) - result = JsonSerializer.Deserialize("[]"); - else - { - string value; - string[] segments; - StringBuilder stringBuilder = new StringBuilder(); - foreach (string bodyLine in bodyLines) - { - stringBuilder.Append('{'); - segments = bodyLine.Trim().Split('\t'); - if (!lookForNumbers) - { - for (int c = 1; c < segments.Length; c++) - { - value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\"); - stringBuilder.Append('"').Append(columns[c]).Append("\":\"").Append(value).Append("\","); - } - } - else - { - for (int c = 1; c < segments.Length; c++) - { - value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\"); - if (string.IsNullOrEmpty(value)) - stringBuilder.Append('"').Append(columns[c]).Append("\":").Append(value).Append("null,"); - else if (value.All(char.IsDigit)) - stringBuilder.Append('"').Append(columns[c]).Append("\":").Append(value).Append(","); - else - stringBuilder.Append('"').Append(columns[c]).Append("\":\"").Append(value).Append("\","); - } - } - stringBuilder.Remove(stringBuilder.Length - 1, 1); - stringBuilder.AppendLine("},"); - } - stringBuilder.Remove(stringBuilder.Length - 3, 3); - result = JsonSerializer.Deserialize(string.Concat("[", stringBuilder, "]")); - } - return result; - } - - public static Dictionary> GetDictionary(Tuple pdsf) - { - Dictionary> results = new Dictionary>(); - string[] segments; - string[] columns = pdsf.Item2; - string[] bodyLines = pdsf.Item3; - foreach (string column in columns) - results.Add(column, new List()); - foreach (string bodyLine in bodyLines) - { - segments = bodyLine.Split('\t'); - for (int c = 1; c < segments.Length; c++) - { - if (c >= columns.Length) - continue; - results[columns[c]].Add(segments[c]); - } - } - return results; - } - - public static Tuple>>> GetTestDictionary(Tuple pdsf) - { - Dictionary>> results = new Dictionary>>(); - string testColumn = Description.RowColumn.Test.ToString(); - Dictionary> keyValuePairs = GetDictionary(pdsf); - if (!keyValuePairs.ContainsKey(testColumn)) - throw new Exception(); - int min; - int max; - Test testKey; - List vs; - string columnKey; - Dictionary> tests = new Dictionary>(); - for (int i = 0; i < keyValuePairs[testColumn].Count; i++) - { - if (Enum.TryParse(keyValuePairs[testColumn][i], out Test test)) - { - if (!results.ContainsKey(test)) - { - tests.Add(test, new List()); - results.Add(test, new Dictionary>()); - } - tests[test].Add(i); - } - } - foreach (KeyValuePair> testKeyValuePair in tests) - { - testKey = testKeyValuePair.Key; - min = testKeyValuePair.Value.Min(); - max = testKeyValuePair.Value.Max() + 1; - foreach (KeyValuePair> keyValuePair in keyValuePairs) - results[testKey].Add(keyValuePair.Key, new List()); - foreach (KeyValuePair> keyValuePair in keyValuePairs) - { - vs = keyValuePair.Value; - columnKey = keyValuePair.Key; - for (int i = min; i < max; i++) - { - if (vs.Count > i) - results[testKey][columnKey].Add(vs[i]); - else - results[testKey][columnKey].Add(string.Empty); - } - } - } - return new Tuple>>>(pdsf.Item1, results); - } - - private static string GetString(SearchFor searchFor, bool addSpaces, char separator = ' ') - { - if (!addSpaces) - return string.Concat(((int)searchFor).ToString().PadLeft(2, '0'), searchFor); - else - return string.Concat(((int)searchFor).ToString().PadLeft(2, '0'), separator, searchFor.ToString().Replace("In", string.Concat(separator, "In")).Replace("Ex", string.Concat(separator, "Ex"))); - } - - public static string EquipmentIntegration(bool addSpaces = true, char separator = ' ') - { - return GetString(SearchFor.EquipmentIntegration, addSpaces, separator); - } - - public static string BusinessIntegration(bool addSpaces = true, char separator = ' ') - { - return GetString(SearchFor.BusinessIntegration, addSpaces, separator); - } - - public static string SystemExport(bool addSpaces = true, char separator = ' ') - { - return GetString(SearchFor.SystemExport, addSpaces, separator); - } - - public static string Archive(bool addSpaces = true, char separator = ' ') - { - return GetString(SearchFor.Archive, addSpaces, separator); - } - - public static string GetLines(Logistics logistics, IScopeInfo scopeInfo, Dictionary> keyValuePairs, Enum[] enumColumns, string dateFormat, string timeFormat, Column[] pairedColumns, bool useDateTimeFromSequence = true, string format = "", Dictionary alternateDisplayName = null, Enum[] ignoreColumns = null) - { - StringBuilder result = new StringBuilder(); - if (useDateTimeFromSequence && !string.IsNullOrEmpty(format)) - throw new Exception(); - else if (!useDateTimeFromSequence && string.IsNullOrEmpty(format)) - throw new Exception(); - int start; - string ckey; - string pKey; - int pairedColumnsCount; - string firstDuplicate = "_1"; - if (ignoreColumns is null) - ignoreColumns = new Enum[] { }; - if (alternateDisplayName is null) - alternateDisplayName = new Dictionary(); - string columnDate = Column.Date.ToString(); - string columnTime = Column.Time.ToString(); - List columnKeys = new List(); - foreach (Enum item in enumColumns) - { - if (ignoreColumns.Contains(item)) - continue; - columnKeys.Add(item.ToString()); - } - result.AppendLine(scopeInfo.Header); - StringBuilder line = new StringBuilder(); - int count = keyValuePairs[Description.RowColumn.Count.ToString()].Count(); - string nullData; - if (logistics.NullData is null) - nullData = string.Empty; - else - nullData = logistics.NullData.ToString(); - if (pairedColumns is null) - { - start = -1; - pairedColumnsCount = 0; - } - else - { - start = 0; - pairedColumnsCount = pairedColumns.Length; - } - for (int r = 0; r < count; r++) - { - for (int p = start; p < pairedColumnsCount; p++) - { - if (pairedColumnsCount == 0) - pKey = string.Empty; - else if (!(ignoreColumns is null) && ignoreColumns.Contains(pairedColumns[p])) - continue; - else - { - pKey = pairedColumns[p].ToString(); - if (!keyValuePairs.ContainsKey(pKey)) - continue; - else if (keyValuePairs[pKey][r] == nullData) - continue; - } - if (pairedColumnsCount == 0 || !string.IsNullOrEmpty(pKey)) - { - line.Clear(); - line.Append("!"); - for (int i = 0; i < columnKeys.Count; i++) - { - ckey = columnKeys[i]; - if (!keyValuePairs.ContainsKey(ckey)) - line.Append(string.Empty); - else - { - if (useDateTimeFromSequence && ckey == columnDate) - line.Append(logistics.DateTimeFromSequence.ToString(dateFormat)); - else if (useDateTimeFromSequence && ckey == columnTime) - line.Append(logistics.DateTimeFromSequence.ToString(timeFormat)); - else if (!useDateTimeFromSequence && ckey == columnDate && keyValuePairs[ckey][r].Length == format.Length) - line.Append(DateTime.ParseExact(keyValuePairs[ckey][r], format, CultureInfo.InvariantCulture).ToString(dateFormat)); - else if (!useDateTimeFromSequence && ckey == columnTime && keyValuePairs.ContainsKey(string.Concat(ckey, firstDuplicate)) && keyValuePairs[string.Concat(ckey, firstDuplicate)][r].Length == format.Length) - line.Append(DateTime.ParseExact(keyValuePairs[string.Concat(ckey, firstDuplicate)][r], format, CultureInfo.InvariantCulture).ToString(timeFormat)); - else - line.Append(keyValuePairs[ckey][r]); - } - line.Append(';'); - } - if (pairedColumnsCount > 0) - { - if (!alternateDisplayName.ContainsKey(pairedColumns[p])) - line.Append(pairedColumns[p].GetDiplayName()); - else - line.Append(alternateDisplayName[pairedColumns[p]]); - line.Append(';'); - line.Append(keyValuePairs[pKey][r]); - line.Append(';'); - } - line.Remove(line.Length - 1, 1); - result.AppendLine(line.ToString()); - } - } - } - return result.ToString(); - } - - public static string GetLines(Logistics logistics, IScopeInfo scopeInfo, List names, Dictionary> keyValuePairs, string dateFormat, string timeFormat, List pairedParameterNames, bool useDateTimeFromSequence = true, string format = "", List ignoreParameterNames = null) - { - StringBuilder result = new StringBuilder(); - if (ignoreParameterNames is null) - ignoreParameterNames = new List(); - if (useDateTimeFromSequence && !string.IsNullOrEmpty(format)) - throw new Exception(); - else if (!useDateTimeFromSequence && string.IsNullOrEmpty(format)) - throw new Exception(); - string nullData; - const string columnDate = "Date"; - const string columnTime = "Time"; - const string firstDuplicate = "_1"; - result.AppendLine(scopeInfo.Header); - StringBuilder line = new StringBuilder(); - if (logistics.NullData is null) - nullData = string.Empty; - else - nullData = logistics.NullData.ToString(); - int count = (from l in keyValuePairs select l.Value.Count).Min(); - for (int r = 0; r < count; r++) - { - line.Clear(); - line.Append("!"); - foreach (KeyValuePair> keyValuePair in keyValuePairs) - { - if (!names.Contains(keyValuePair.Key)) - continue; - if (ignoreParameterNames.Contains(keyValuePair.Key)) - continue; - if (pairedParameterNames.Contains(keyValuePair.Key)) - { - if (string.IsNullOrEmpty(keyValuePair.Value[r]) || keyValuePair.Value[r] == nullData) - continue; - else - result.Append(line).Append(keyValuePair.Key).Append(';').AppendLine(keyValuePair.Value[r]); - } - else - { - if (useDateTimeFromSequence && keyValuePair.Key == columnDate) - line.Append(logistics.DateTimeFromSequence.ToString(dateFormat)); - else if (useDateTimeFromSequence && keyValuePair.Key == columnTime) - line.Append(logistics.DateTimeFromSequence.ToString(timeFormat)); - else if (!useDateTimeFromSequence && keyValuePair.Key == columnDate && keyValuePair.Value[r].Length == format.Length) - line.Append(DateTime.ParseExact(keyValuePair.Value[r], format, CultureInfo.InvariantCulture).ToString(dateFormat)); - else if (!useDateTimeFromSequence && keyValuePair.Key == columnTime && keyValuePairs.ContainsKey(string.Concat(keyValuePair.Key, firstDuplicate)) && keyValuePairs[string.Concat(keyValuePair.Key, firstDuplicate)][r].Length == format.Length) - line.Append(DateTime.ParseExact(keyValuePairs[string.Concat(keyValuePair.Key, firstDuplicate)][r], format, CultureInfo.InvariantCulture).ToString(timeFormat)); - else if (string.IsNullOrEmpty(keyValuePair.Value[r]) || keyValuePair.Value[r] == nullData) - line.Append(nullData); - else - line.Append(keyValuePair.Value[r]); - line.Append(';'); - } - } - if (!pairedParameterNames.Any()) - { - line.Remove(line.Length - 1, 1); - result.AppendLine(line.ToString()); - } - } - return result.ToString(); - } - - public static List PDSFToFixedWidth(string reportFullPath) - { - List results = new List(); - if (!File.Exists(reportFullPath)) - throw new Exception(); - int[] group; - string line; - int startsAt = 0; - string[] segments; - int? currentGroup = null; - char inputSeperator = '\t'; - char outputSeperator = '\t'; - List vs = new List(); - List groups = new List(); - string[] lines = File.ReadAllLines(reportFullPath); - StringBuilder stringBuilder = new StringBuilder(); - for (int i = 0; i < lines.Length; i++) - { - if (string.IsNullOrEmpty(lines[i])) - continue; - segments = lines[i].Split(inputSeperator); - if (currentGroup is null) - currentGroup = segments.Length; - if (segments.Length != currentGroup) - { - currentGroup = segments.Length; - groups.Add(new int[] { startsAt, i - 1 }); - startsAt = i; - } - } - if (startsAt == lines.Length - 1 && lines[0].Split(inputSeperator).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); - 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); - for (int s = 0; s < segments.Length; s++) - { - if (vs[s] < segments[s].Length) - vs[s] = segments[s].Length; - } - } - stringBuilder.Clear(); - for (int s = 0; s < segments.Length; s++) - stringBuilder.Append((s + 1).ToString().PadLeft(vs[s], ' ')).Append(outputSeperator); - 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); - for (int s = 0; s < segments.Length; s++) - stringBuilder.Append(segments[s].PadLeft(vs[s], ' ')).Append(outputSeperator); - stringBuilder.Remove(stringBuilder.Length - 1, 1); - results.Add(stringBuilder.ToString()); - } - results.Add(string.Empty); - } - return results; - } - + EquipmentIntegration = 1, + BusinessIntegration = 2, + SystemExport = 3, + Archive = 4 } -} \ No newline at end of file + public static string GetPDSFText(ILogic logic, string eventName, string equipmentType, JsonElement jsonElement, string logisticsText) + { + string result; + if (jsonElement.ValueKind != JsonValueKind.Array) + result = string.Empty; + else + { + int columns = 0; + List lines; + string endOffset = "E#######T"; + string dataOffset = "D#######T"; + string headerOffset = "H#######T"; + string format = "MM/dd/yyyy HH:mm:ss"; + StringBuilder stringBuilder = new(); + lines = new string[] { "HEADER_TAG\tHEADER_VALUE", "FORMAT\t2.00", "NUMBER_PASSES\t0001", string.Concat("HEADER_OFFSET\t", headerOffset), string.Concat("DATA_OFFSET\t", dataOffset), string.Concat("END_OFFSET\t", endOffset) }.ToList(); + _ = stringBuilder.Append("\"Time\"").Append('\t'); + _ = stringBuilder.Append("\"A_LOGISTICS\"").Append('\t'); + _ = stringBuilder.Append("\"B_LOGISTICS\"").Append('\t'); + JsonElement[] jsonElements = jsonElement.EnumerateArray().ToArray(); + for (int i = 0; i < jsonElements.Length;) + { + foreach (JsonProperty jsonProperty in jsonElements[0].EnumerateObject()) + { + columns += 1; + _ = stringBuilder.Append("\"").Append(jsonProperty.Name).Append("\"").Append('\t'); + } + break; + } + _ = stringBuilder.Remove(stringBuilder.Length - 1, 1); + lines.Add(stringBuilder.ToString()); + for (int i = 0; i < jsonElements.Length; i++) + { + _ = stringBuilder.Clear(); + _ = stringBuilder.Append("0.1").Append('\t'); + _ = stringBuilder.Append("1").Append('\t'); + _ = stringBuilder.Append("2").Append('\t'); + foreach (JsonProperty jsonProperty in jsonElements[i].EnumerateObject()) + _ = stringBuilder.Append(jsonProperty.Value).Append('\t'); + _ = stringBuilder.Remove(stringBuilder.Length - 1, 1); + lines.Add(stringBuilder.ToString()); + } + lines.Add(string.Concat("NUM_DATA_ROWS ", jsonElements.Length.ToString().PadLeft(9, '0'))); + lines.Add(string.Concat("NUM_DATA_COLUMNS ", (columns + 3).ToString().PadLeft(9, '0'))); + lines.Add("DELIMITER ;"); + lines.Add(string.Concat("START_TIME_FORMAT ", format)); + lines.Add(string.Concat("START_TIME ", logic.Logistics.DateTimeFromSequence.ToString(format))); //12/26/2019 15:22:44 + lines.Add(string.Concat("LOGISTICS_COLUMN", '\t', "A_LOGISTICS")); + lines.Add(string.Concat("LOGISTICS_COLUMN", '\t', "B_LOGISTICS")); + if (!string.IsNullOrEmpty(logisticsText)) + lines.Add(logisticsText); + else + { + lines.Add(string.Concat("LOGISTICS_1", '\t', "A_CHAMBER=;A_INFO=", eventName, ";A_INFO2=", equipmentType, ";A_JOBID=", logic.Logistics.JobID, ";A_MES_ENTITY=", logic.Logistics.MesEntity, ";A_MID=", logic.Logistics.MID, ";A_NULL_DATA=", logic.Logistics.NullData, ";A_PPID=NO_PPID;A_PROCESS_JOBID=", logic.Logistics.ProcessJobID, ";A_PRODUCT=;A_SEQUENCE=", logic.Logistics.Sequence, ";A_WAFER_ID=;")); + lines.Add(string.Concat("LOGISTICS_2", '\t', "B_CHAMBER=;B_INFO=", eventName, ";B_INFO2=", equipmentType, ";B_JOBID=", logic.Logistics.JobID, ";B_MES_ENTITY=", logic.Logistics.MesEntity, ";B_MID=", logic.Logistics.MID, ";B_NULL_DATA=", logic.Logistics.NullData, ";B_PPID=NO_PPID;B_PROCESS_JOBID=", logic.Logistics.ProcessJobID, ";B_PRODUCT=;B_SEQUENCE=", logic.Logistics.Sequence, ";B_WAFER_ID=;")); + lines.Add("END_HEADER"); + } + _ = stringBuilder.Clear(); + foreach (string line in lines) + _ = stringBuilder.AppendLine(line); + result = stringBuilder.ToString(); + result = result.Replace(headerOffset, result.IndexOf("NUM_DATA_ROWS").ToString().PadLeft(9, '0')). + Replace(dataOffset, result.IndexOf('"').ToString().PadLeft(9, '0')). + Replace(endOffset, result.Length.ToString().PadLeft(9, '0')); + } + return result; + } + + public static Tuple GetLogisticsColumnsAndBody(string reportFullPath, string[]? lines = null) + { + string segment; + List body = new(); + StringBuilder logistics = new(); + if (lines is null) + lines = File.ReadAllLines(reportFullPath); + string[] segments; + if (lines.Length < 7) + segments = new string[] { }; + else + segments = lines[6].Trim().Split('\t'); + List columns = new(); + for (int c = 0; c < segments.Length; c++) + { + segment = segments[c].Substring(1, segments[c].Length - 2); + if (!columns.Contains(segment)) + columns.Add(segment); + else + { + for (short i = 1; i < short.MaxValue; i++) + { + segment = string.Concat(segment, "_", i); + if (!columns.Contains(segment)) + { + columns.Add(segment); + break; + } + } + } + } + bool lookForLogistics = false; + for (int r = 7; r < lines.Count(); r++) + { + if (lines[r].StartsWith("NUM_DATA_ROWS")) + lookForLogistics = true; + if (!lookForLogistics) + { + body.Add(lines[r]); + continue; + } + if (lines[r].StartsWith("LOGISTICS_1")) + { + for (int i = r; i < lines.Count(); i++) + { + if (lines[r].StartsWith("END_HEADER")) + break; + _ = logistics.AppendLine(lines[i]); + } + break; + } + } + return new Tuple(logistics.ToString(), columns.ToArray(), body.ToArray()); + } + + public static JsonElement GetArray(Tuple pdsf, bool lookForNumbers = false) + { + JsonElement result; + string logistics = pdsf.Item1; + string[] columns = pdsf.Item2; + string[] bodyLines = pdsf.Item3; + if (!bodyLines.Any() || !bodyLines[0].Contains('\t')) + result = JsonSerializer.Deserialize("[]"); + else + { + string value; + string[] segments; + StringBuilder stringBuilder = new(); + foreach (string bodyLine in bodyLines) + { + _ = stringBuilder.Append('{'); + segments = bodyLine.Trim().Split('\t'); + if (!lookForNumbers) + { + for (int c = 1; c < segments.Length; c++) + { + value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\"); + _ = stringBuilder.Append('"').Append(columns[c]).Append("\":\"").Append(value).Append("\","); + } + } + else + { + for (int c = 1; c < segments.Length; c++) + { + value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\"); + if (string.IsNullOrEmpty(value)) + _ = stringBuilder.Append('"').Append(columns[c]).Append("\":").Append(value).Append("null,"); + else if (value.All(char.IsDigit)) + _ = stringBuilder.Append('"').Append(columns[c]).Append("\":").Append(value).Append(","); + else + _ = stringBuilder.Append('"').Append(columns[c]).Append("\":\"").Append(value).Append("\","); + } + } + _ = stringBuilder.Remove(stringBuilder.Length - 1, 1); + _ = stringBuilder.AppendLine("},"); + } + _ = stringBuilder.Remove(stringBuilder.Length - 3, 3); + result = JsonSerializer.Deserialize(string.Concat("[", stringBuilder, "]")); + } + return result; + } + + public static Dictionary> GetDictionary(Tuple pdsf) + { + Dictionary> results = new(); + string[] segments; + string[] columns = pdsf.Item2; + string[] bodyLines = pdsf.Item3; + foreach (string column in columns) + results.Add(column, new List()); + foreach (string bodyLine in bodyLines) + { + segments = bodyLine.Split('\t'); + for (int c = 1; c < segments.Length; c++) + { + if (c >= columns.Length) + continue; + results[columns[c]].Add(segments[c]); + } + } + return results; + } + + public static Tuple>>> GetTestDictionary(Tuple pdsf) + { + Dictionary>> results = new(); + string testColumn = Description.RowColumn.Test.ToString(); + Dictionary> keyValuePairs = GetDictionary(pdsf); + if (!keyValuePairs.ContainsKey(testColumn)) + throw new Exception(); + int min; + int max; + Test testKey; + List vs; + string columnKey; + Dictionary> tests = new(); + for (int i = 0; i < keyValuePairs[testColumn].Count; i++) + { + if (Enum.TryParse(keyValuePairs[testColumn][i], out Test test)) + { + if (!results.ContainsKey(test)) + { + tests.Add(test, new List()); + results.Add(test, new Dictionary>()); + } + tests[test].Add(i); + } + } + foreach (KeyValuePair> testKeyValuePair in tests) + { + testKey = testKeyValuePair.Key; + min = testKeyValuePair.Value.Min(); + max = testKeyValuePair.Value.Max() + 1; + foreach (KeyValuePair> keyValuePair in keyValuePairs) + results[testKey].Add(keyValuePair.Key, new List()); + foreach (KeyValuePair> keyValuePair in keyValuePairs) + { + vs = keyValuePair.Value; + columnKey = keyValuePair.Key; + for (int i = min; i < max; i++) + { + if (vs.Count > i) + results[testKey][columnKey].Add(vs[i]); + else + results[testKey][columnKey].Add(string.Empty); + } + } + } + return new Tuple>>>(pdsf.Item1, results); + } + + private static string GetString(SearchFor searchFor, bool addSpaces, char separator = ' ') + { + if (!addSpaces) + return string.Concat(((int)searchFor).ToString().PadLeft(2, '0'), searchFor); + else + return string.Concat(((int)searchFor).ToString().PadLeft(2, '0'), separator, searchFor.ToString().Replace("In", string.Concat(separator, "In")).Replace("Ex", string.Concat(separator, "Ex"))); + } + + public static string EquipmentIntegration(bool addSpaces = true, char separator = ' ') => GetString(SearchFor.EquipmentIntegration, addSpaces, separator); + + public static string BusinessIntegration(bool addSpaces = true, char separator = ' ') => GetString(SearchFor.BusinessIntegration, addSpaces, separator); + + public static string SystemExport(bool addSpaces = true, char separator = ' ') => GetString(SearchFor.SystemExport, addSpaces, separator); + + public static string Archive(bool addSpaces = true, char separator = ' ') => GetString(SearchFor.Archive, addSpaces, separator); + + public static string GetLines(Logistics logistics, IScopeInfo scopeInfo, Dictionary> keyValuePairs, Enum[] enumColumns, string dateFormat, string timeFormat, Column[] pairedColumns, bool useDateTimeFromSequence = true, string format = "", Dictionary? alternateDisplayName = null, Enum[]? ignoreColumns = null) + { + StringBuilder result = new(); + if (useDateTimeFromSequence && !string.IsNullOrEmpty(format)) + throw new Exception(); + else if (!useDateTimeFromSequence && string.IsNullOrEmpty(format)) + throw new Exception(); + int start; + string ckey; + string pKey; + int pairedColumnsCount; + string firstDuplicate = "_1"; + if (ignoreColumns is null) + ignoreColumns = new Enum[] { }; + if (alternateDisplayName is null) + alternateDisplayName = new Dictionary(); + string columnDate = Column.Date.ToString(); + string columnTime = Column.Time.ToString(); + List columnKeys = new(); + foreach (Enum item in enumColumns) + { + if (ignoreColumns.Contains(item)) + continue; + columnKeys.Add(item.ToString()); + } + _ = result.AppendLine(scopeInfo.Header); + StringBuilder line = new(); + int count = keyValuePairs[Description.RowColumn.Count.ToString()].Count(); + string nullData; + if (logistics.NullData is null) + nullData = string.Empty; + else + nullData = logistics.NullData.ToString(); + if (pairedColumns is null) + { + start = -1; + pairedColumnsCount = 0; + } + else + { + start = 0; + pairedColumnsCount = pairedColumns.Length; + } + for (int r = 0; r < count; r++) + { + for (int p = start; p < pairedColumnsCount; p++) + { + if (pairedColumnsCount == 0) + pKey = string.Empty; + else if (ignoreColumns is not null && ignoreColumns.Contains(pairedColumns[p])) + continue; + else + { + pKey = pairedColumns[p].ToString(); + if (!keyValuePairs.ContainsKey(pKey)) + continue; + else if (keyValuePairs[pKey][r] == nullData) + continue; + } + if (pairedColumnsCount == 0 || !string.IsNullOrEmpty(pKey)) + { + _ = line.Clear(); + _ = line.Append("!"); + for (int i = 0; i < columnKeys.Count; i++) + { + ckey = columnKeys[i]; + if (!keyValuePairs.ContainsKey(ckey)) + _ = line.Append(string.Empty); + else + { + if (useDateTimeFromSequence && ckey == columnDate) + _ = line.Append(logistics.DateTimeFromSequence.ToString(dateFormat)); + else if (useDateTimeFromSequence && ckey == columnTime) + _ = line.Append(logistics.DateTimeFromSequence.ToString(timeFormat)); + else if (!useDateTimeFromSequence && ckey == columnDate && keyValuePairs[ckey][r].Length == format.Length) + _ = line.Append(DateTime.ParseExact(keyValuePairs[ckey][r], format, CultureInfo.InvariantCulture).ToString(dateFormat)); + else if (!useDateTimeFromSequence && ckey == columnTime && keyValuePairs.ContainsKey(string.Concat(ckey, firstDuplicate)) && keyValuePairs[string.Concat(ckey, firstDuplicate)][r].Length == format.Length) + _ = line.Append(DateTime.ParseExact(keyValuePairs[string.Concat(ckey, firstDuplicate)][r], format, CultureInfo.InvariantCulture).ToString(timeFormat)); + else + _ = line.Append(keyValuePairs[ckey][r]); + } + _ = line.Append(';'); + } + if (pairedColumnsCount > 0) + { + if (!alternateDisplayName.ContainsKey(pairedColumns[p])) + _ = line.Append(pairedColumns[p].GetDiplayName()); + else + _ = line.Append(alternateDisplayName[pairedColumns[p]]); + _ = line.Append(';'); + _ = line.Append(keyValuePairs[pKey][r]); + _ = line.Append(';'); + } + _ = line.Remove(line.Length - 1, 1); + _ = result.AppendLine(line.ToString()); + } + } + } + return result.ToString(); + } + + public static string GetLines(Logistics logistics, IScopeInfo scopeInfo, List names, Dictionary> keyValuePairs, string dateFormat, string timeFormat, List pairedParameterNames, bool useDateTimeFromSequence = true, string format = "", List? ignoreParameterNames = null) + { + StringBuilder result = new(); + if (ignoreParameterNames is null) + ignoreParameterNames = new List(); + if (useDateTimeFromSequence && !string.IsNullOrEmpty(format)) + throw new Exception(); + else if (!useDateTimeFromSequence && string.IsNullOrEmpty(format)) + throw new Exception(); + string nullData; + const string columnDate = "Date"; + const string columnTime = "Time"; + const string firstDuplicate = "_1"; + _ = result.AppendLine(scopeInfo.Header); + StringBuilder line = new(); + if (logistics.NullData is null) + nullData = string.Empty; + else + nullData = logistics.NullData.ToString(); + int count = (from l in keyValuePairs select l.Value.Count).Min(); + for (int r = 0; r < count; r++) + { + _ = line.Clear(); + _ = line.Append("!"); + foreach (KeyValuePair> keyValuePair in keyValuePairs) + { + if (!names.Contains(keyValuePair.Key)) + continue; + if (ignoreParameterNames.Contains(keyValuePair.Key)) + continue; + if (pairedParameterNames.Contains(keyValuePair.Key)) + { + if (string.IsNullOrEmpty(keyValuePair.Value[r]) || keyValuePair.Value[r] == nullData) + continue; + else + _ = result.Append(line).Append(keyValuePair.Key).Append(';').AppendLine(keyValuePair.Value[r]); + } + else + { + if (useDateTimeFromSequence && keyValuePair.Key == columnDate) + _ = line.Append(logistics.DateTimeFromSequence.ToString(dateFormat)); + else if (useDateTimeFromSequence && keyValuePair.Key == columnTime) + _ = line.Append(logistics.DateTimeFromSequence.ToString(timeFormat)); + else if (!useDateTimeFromSequence && keyValuePair.Key == columnDate && keyValuePair.Value[r].Length == format.Length) + _ = line.Append(DateTime.ParseExact(keyValuePair.Value[r], format, CultureInfo.InvariantCulture).ToString(dateFormat)); + else if (!useDateTimeFromSequence && keyValuePair.Key == columnTime && keyValuePairs.ContainsKey(string.Concat(keyValuePair.Key, firstDuplicate)) && keyValuePairs[string.Concat(keyValuePair.Key, firstDuplicate)][r].Length == format.Length) + _ = line.Append(DateTime.ParseExact(keyValuePairs[string.Concat(keyValuePair.Key, firstDuplicate)][r], format, CultureInfo.InvariantCulture).ToString(timeFormat)); + else if (string.IsNullOrEmpty(keyValuePair.Value[r]) || keyValuePair.Value[r] == nullData) + _ = line.Append(nullData); + else + _ = line.Append(keyValuePair.Value[r]); + _ = line.Append(';'); + } + } + if (!pairedParameterNames.Any()) + { + _ = line.Remove(line.Length - 1, 1); + _ = result.AppendLine(line.ToString()); + } + } + return result.ToString(); + } + + public static List PDSFToFixedWidth(string reportFullPath) + { + List results = new(); + if (!File.Exists(reportFullPath)) + throw new Exception(); + int[] group; + string line; + int startsAt = 0; + string[] segments; + int? currentGroup = null; + char inputSeperator = '\t'; + char outputSeperator = '\t'; + List vs = new(); + List groups = new(); + string[] lines = File.ReadAllLines(reportFullPath); + StringBuilder stringBuilder = new(); + for (int i = 0; i < lines.Length; i++) + { + if (string.IsNullOrEmpty(lines[i])) + continue; + segments = lines[i].Split(inputSeperator); + if (currentGroup is null) + currentGroup = segments.Length; + if (segments.Length != currentGroup) + { + currentGroup = segments.Length; + groups.Add(new int[] { startsAt, i - 1 }); + startsAt = i; + } + } + if (startsAt == lines.Length - 1 && lines[0].Split(inputSeperator).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); + 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); + for (int s = 0; s < segments.Length; s++) + { + if (vs[s] < segments[s].Length) + vs[s] = segments[s].Length; + } + } + _ = stringBuilder.Clear(); + for (int s = 0; s < segments.Length; s++) + _ = stringBuilder.Append((s + 1).ToString().PadLeft(vs[s], ' ')).Append(outputSeperator); + _ = 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); + for (int s = 0; s < segments.Length; s++) + _ = stringBuilder.Append(segments[s].PadLeft(vs[s], ' ')).Append(outputSeperator); + _ = stringBuilder.Remove(stringBuilder.Length - 1, 1); + results.Add(stringBuilder.ToString()); + } + results.Add(string.Empty); + } + return results; + } + +} diff --git a/APC Viewer/Shared/Metrology/Test.cs b/APC Viewer/Shared/Metrology/Test.cs index a24ac29..08b6199 100644 --- a/APC Viewer/Shared/Metrology/Test.cs +++ b/APC Viewer/Shared/Metrology/Test.cs @@ -1,57 +1,54 @@ -namespace Shared.Metrology +namespace Shared.Metrology; + +public enum Test { - - public enum Test - { - AFMRoughness = 34, - BioRadQS408M = 25, - BioRadStratus = 26, - BreakdownVoltageCenter = 0, - BreakdownVoltageEdge = 1, - BreakdownVoltageMiddle8in = 2, - CandelaKlarfDC = 6, - CandelaLaser = 36, - CandelaProdU = 39, - CandelaPSL = 38, - CandelaVerify = 37, - CDE = 24, - CV = 3, - DailyRPMAverage = 19, - DailyRPMPLRatio = 20, - DailyRPMXY = 18, - Denton = 9, - DiffusionLength = 45, - Hall = 10, - HgCV = 23, - Lehighton = 13, - Microscope = 46, - MonthlyCV = 4, - MonthlyHall = 11, - MonthlyXRD = 32, - Photoreflectance = 22, - PlatoA = 48, //Largest - RPMAverage = 16, - RPMPLRatio = 17, - RPMXY = 15, - SP1 = 8, - Tencor = 7, - UV = 35, - VerificationLehighton = 14, - VerificationRPM = 21, - VerificationWarpAndBow = 29, - VpdIcpmsAnalyte = 27, - WarpAndBow = 28, - WeeklyCV = 5, - WeeklyHall = 12, - WeeklyXRD = 33, - WeeklyXRDAIcomp = 40, - WeeklyXRDFWHM002 = 41, - WeeklyXRDFWHM105 = 42, - WeeklyXRDSLStks = 43, - WeeklyXRDXRR = 44, - XRDWeightedAverage = 31, - JVXRD = 47, - XRDXY = 30 - } - -} \ No newline at end of file + AFMRoughness = 34, + BioRadQS408M = 25, + BioRadStratus = 26, + BreakdownVoltageCenter = 0, + BreakdownVoltageEdge = 1, + BreakdownVoltageMiddle8in = 2, + CandelaKlarfDC = 6, + CandelaLaser = 36, + CandelaProdU = 39, + CandelaPSL = 38, + CandelaVerify = 37, + CDE = 24, + CV = 3, + DailyRPMAverage = 19, + DailyRPMPLRatio = 20, + DailyRPMXY = 18, + Denton = 9, + DiffusionLength = 45, + Hall = 10, + HgCV = 23, + Lehighton = 13, + Microscope = 46, + MonthlyCV = 4, + MonthlyHall = 11, + MonthlyXRD = 32, + Photoreflectance = 22, + PlatoA = 48, //Largest + RPMAverage = 16, + RPMPLRatio = 17, + RPMXY = 15, + SP1 = 8, + Tencor = 7, + UV = 35, + VerificationLehighton = 14, + VerificationRPM = 21, + VerificationWarpAndBow = 29, + VpdIcpmsAnalyte = 27, + WarpAndBow = 28, + WeeklyCV = 5, + WeeklyHall = 12, + WeeklyXRD = 33, + WeeklyXRDAIcomp = 40, + WeeklyXRDFWHM002 = 41, + WeeklyXRDFWHM105 = 42, + WeeklyXRDSLStks = 43, + WeeklyXRDXRR = 44, + XRDWeightedAverage = 31, + JVXRD = 47, + XRDXY = 30 +} diff --git a/APC Viewer/Singleton/Background.cs b/APC Viewer/Singleton/Background.cs index daf7e9b..a91b0b4 100644 --- a/APC Viewer/Singleton/Background.cs +++ b/APC Viewer/Singleton/Background.cs @@ -1,355 +1,296 @@ using APCViewer.Models; -using Infineon.Monitoring.MonA; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging; +using APCViewer.Models.Methods; +using IFX.Shared; using Shared; using Shared.Metrology; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Net; using System.Runtime.InteropServices; using System.Text; -using System.Threading; +using System.Text.Json; -namespace APCViewer.Singleton +namespace APCViewer.Singleton; + +public class Background : Models.Properties.IBackground, IBackground { - public class Background : IBackground + protected readonly List _Exceptions; + protected readonly string _WorkingDirectory; + protected string _Message; + public List Exceptions => _Exceptions; + public string Message => _Message; + public string WorkingDirectory => _WorkingDirectory; + + private bool _Stop; + private readonly object? _Lock; + private readonly Serilog.ILogger _Log; + private DateTime _PrimaryInstanceSetAt; + private readonly AppSettings _AppSettings; + private readonly IFX.Shared.IsEnvironment _IsEnvironment; + + private readonly string[] _SiEquipmentTypes; + private readonly string[] _GaNEquipmentTypes; + + private readonly Dictionary _GaNPDSFFiles; + private readonly Dictionary _SiPDSFFiles; + private readonly Dictionary _GaNIPDSFFiles; + private readonly Dictionary _SiIPDSFFiles; + private readonly Dictionary _GaNAPCLogistics; + private readonly Dictionary _SiAPCLogistics; + private readonly Dictionary _GaNEDALogistics; + private readonly Dictionary _SiEDALogistics; + private readonly Dictionary _GaNEAFLogLogistics; + private readonly Dictionary _SiEAFLogLogistics; + + public Background(IFX.Shared.IsEnvironment isEnvironment, AppSettings appSettings, string workingDirectory) { + _Stop = false; + _Lock = new object(); + if (_Lock is null) + { } + _AppSettings = appSettings; + _Message = string.Empty; + _IsEnvironment = isEnvironment; + _Exceptions = new List(); + _WorkingDirectory = workingDirectory; + _PrimaryInstanceSetAt = DateTime.MinValue; + _Log = Serilog.Log.ForContext(); + _GaNPDSFFiles = new Dictionary(); + _SiPDSFFiles = new Dictionary(); + _GaNIPDSFFiles = new Dictionary(); + _SiIPDSFFiles = new Dictionary(); + _GaNAPCLogistics = new Dictionary(); + _SiAPCLogistics = new Dictionary(); + _GaNEDALogistics = new Dictionary(); + _SiEDALogistics = new Dictionary(); + _GaNEAFLogLogistics = new Dictionary(); + _SiEAFLogLogistics = new Dictionary(); + _GaNEquipmentTypes = GetEquipmentTypes(isGaN: true, isSi: false); + _SiEquipmentTypes = GetEquipmentTypes(isGaN: false, isSi: true); + } - public List Timers => _Timers; - public string Message { get; private set; } - public AppSettings AppSettings => _AppSettings; - public WebClient WebClient { get; private set; } - public string WorkingDirectory { get; private set; } - public IsEnvironment IsEnvironment => _IsEnvironment; - public List Exceptions { get; private set; } + void IBackground.Catch(Exception exception) + { + _Exceptions.Add(exception); + _Log.Error(exception, "Error:"); + } - private bool _ShuttingDown; - private readonly object _Lock; - private readonly List _Timers; - private readonly AppSettings _AppSettings; - private readonly string[] _SiEquipmentTypes; - private readonly string[] _GaNEquipmentTypes; - private readonly IsEnvironment _IsEnvironment; + void IBackground.Stop(bool immediate) + { + if (!_Stop) + _Stop = true; + } - private const string _Site = "sjc"; - - private Log _Log; - private DateTime _PrimaryInstanceSetAt; - private readonly Dictionary _GaNPDSFFiles; - private readonly Dictionary _SiPDSFFiles; - private readonly Dictionary _GaNIPDSFFiles; - private readonly Dictionary _SiIPDSFFiles; - private readonly Dictionary _GaNAPCLogistics; - private readonly Dictionary _SiAPCLogistics; - private readonly Dictionary _GaNEDALogistics; - private readonly Dictionary _SiEDALogistics; - private readonly Dictionary _GaNEAFLogLogistics; - private readonly Dictionary _SiEAFLogLogistics; - - public Background(IsEnvironment isEnvironment, IConfiguration configuration, string workingDirectory) - { - _Log = null; - _Lock = new object(); - _ShuttingDown = false; - if (_Lock is null) - { } - Message = string.Empty; - AppSettings appSettings = new AppSettings(); - configuration.Bind(appSettings); - if (!isEnvironment.Production) - appSettings.Server = appSettings.Server.Replace('.', '_'); - _AppSettings = appSettings; - _Timers = new List(); - _IsEnvironment = isEnvironment; - Exceptions = new List(); - WorkingDirectory = workingDirectory; - _PrimaryInstanceSetAt = DateTime.MinValue; - _GaNPDSFFiles = new Dictionary(); - _SiPDSFFiles = new Dictionary(); - _GaNIPDSFFiles = new Dictionary(); - _SiIPDSFFiles = new Dictionary(); - _GaNAPCLogistics = new Dictionary(); - _SiAPCLogistics = new Dictionary(); - _GaNEDALogistics = new Dictionary(); - _SiEDALogistics = new Dictionary(); - _GaNEAFLogLogistics = new Dictionary(); - _SiEAFLogLogistics = new Dictionary(); - _GaNEquipmentTypes = GetEquipmentTypes(isGaN: true, isSi: false); - _SiEquipmentTypes = GetEquipmentTypes(isGaN: false, isSi: true); - } - - public void Dispose() - { - foreach (Timer timer in _Timers) - timer.Dispose(); - } - - void IBackground.Update(ILogger logger, WebClient webClient) - { - Update(logger, webClient); - } - - internal void Update(ILogger logger, WebClient webClient) - { - WebClient = webClient; - _Log = new Log(logger); - //https://blog.magnusmontin.net/2018/11/05/platform-conditional-compilation-in-net-core/ - if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - _Log.Debug("Running on Linux!"); - else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - _Log.Debug("Running on macOS!"); - else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - _Log.Debug("Running on Windows!"); + void IBackground.Update() + { + // https://blog.magnusmontin.net/2018/11/05/platform-conditional-compilation-in-net-core/ + if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + _Log.Debug("Running on Linux!"); + else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + _Log.Debug("Running on macOS!"); + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + _Log.Debug("Running on Windows!"); #if Linux - _Log.Debug("Built on Linux!"); + _Log.Debug("Built on Linux!"); #elif OSX - _Log.Debug("Built on macOS!"); + _Log.Debug("Built on macOS!"); #elif Windows - _Log.Debug("Built in Windows!"); + _Log.Debug("Built in Windows!"); #else - ()("Built in unkown!"); + ()("Built in Unknown!"); #endif - if (string.IsNullOrEmpty(_AppSettings.URLs) && !_IsEnvironment.Development) - throw new Exception("Invalid Application Settings URLs!"); - } - - internal void Catch(Exception exception) + if (string.IsNullOrEmpty(_AppSettings.URLs) && !_IsEnvironment.Development) + throw new Exception("Invalid Application Settings URLs!"); + if (_IsEnvironment.Development) { - Exceptions.Add(exception); - _Log.Error(exception); - if (!string.IsNullOrEmpty(_AppSettings.MonARessource)) - { - MonIn monIn = MonIn.GetInstance(); - monIn.SendStatus(_Site, _AppSettings.MonARessource, "Heartbeat", State.Warning); - } } - - public void SendStatusOk() + else if (_IsEnvironment.Staging) { - if (!string.IsNullOrEmpty(_AppSettings.MonARessource)) - { - MonIn monIn = MonIn.GetInstance(); - monIn.SendStatus(_Site, _AppSettings.MonARessource, "Heartbeat", State.Ok); - } } - - public string GetCountDirectory(string verb) + else if (_IsEnvironment.Production) { - DateTime dateTime = DateTime.Now; - CultureInfo cultureInfo = new("en-US"); - Calendar calendar = cultureInfo.Calendar; - string weekOfYear = calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); - //string nameSpace = System.Reflection.Assembly.GetExecutingAssembly().EntryPoint.DeclaringType.Namespace; - string nameSpace = GetType().Namespace.Split('.')[0]; - if (!string.IsNullOrEmpty(_AppSettings.MonARessource)) - { - MonIn monIn = MonIn.GetInstance(); - monIn.SendStatus(_Site, _AppSettings.MonARessource, "Heartbeat", State.Up); - } - return string.Concat(@"\\", _AppSettings.Server, @"\EC_APC\Counts\", dateTime.ToString("yyyy"), @"\", "Week_", weekOfYear, @"\", dateTime.ToString("yyyy - MM - dd"), @"\", "Application", @"\", nameSpace, @"\", verb, @"\", dateTime.Ticks); } + else + throw new Exception(); + } - public void Stop(bool immediate) + List IBackground.DoBackup() + { + List results = new(); + DoBackup(); + return results; + } + + void IBackground.ClearMessage() => _Message = string.Empty; + + void IBackground.SetIsPrimaryInstance() => _PrimaryInstanceSetAt = DateTime.Now; + + void IBackground.ClearIsPrimaryInstance() => _PrimaryInstanceSetAt = DateTime.MinValue; + + bool IBackground.IsPrimaryInstance() + { + bool result; + DateTime dateTime = DateTime.Now.AddDays(-1); + result = _PrimaryInstanceSetAt > dateTime; + return result; + } + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); + return result; + } + + private void DoBackup() + { + string encrypt = RijndaelEncryption.Encrypt("4hink", _AppSettings.Company); + _ = RijndaelEncryption.Decrypt(encrypt, _AppSettings.Company); + } + + public void APCDataCallback() + { + Data(_AppSettings.Server, _SiEquipmentTypes, _SiAPCLogistics, _SiPDSFFiles, isAPC: true); + Data(_AppSettings.Server, _GaNEquipmentTypes, _GaNAPCLogistics, _GaNPDSFFiles, isAPC: true); + } + + public void EDADataCallback() + { + Data(_AppSettings.Server, _SiEquipmentTypes, _SiEDALogistics, _SiPDSFFiles, isEDA: true); + Data(_AppSettings.Server, _GaNEquipmentTypes, _GaNEDALogistics, _GaNPDSFFiles, isEDA: true); + } + + public void EAFLogDataCallback() + { + Data(_AppSettings.Server, _SiEquipmentTypes, _SiEAFLogLogistics, _SiIPDSFFiles, isEAFLog: true); + Data(_AppSettings.Server, _GaNEquipmentTypes, _GaNEAFLogLogistics, _GaNIPDSFFiles, isEAFLog: true); + } + + public string GetPDSF(long Sequence) + { + string result = string.Empty; + if (string.IsNullOrEmpty(result)) { - _ShuttingDown = true; - foreach (Timer timer in _Timers) - timer.Change(Timeout.Infinite, 0); - if (!_IsEnvironment.Development) + foreach (KeyValuePair element in _GaNEDALogistics) { - if (!string.IsNullOrEmpty(_AppSettings.MonARessource)) + if (((Logistics)element.Value).Sequence == Sequence) { - MonIn monIn = MonIn.GetInstance(); - monIn.SendStatus(_Site, _AppSettings.MonARessource, "Heartbeat", State.Down); - } - string countDirectory = GetCountDirectory("Stop"); - Directory.CreateDirectory(countDirectory); - } - } - - public void ClearMessage() - { - Message = string.Empty; - } - - public void SetIsPrimaryInstance() - { - _PrimaryInstanceSetAt = DateTime.Now; - } - - public void ClearIsPrimaryInstance() - { - _PrimaryInstanceSetAt = DateTime.MinValue; - } - - public bool IsPrimaryInstance() - { - bool result; - DateTime dateTime = DateTime.Now.AddDays(-1); - result = _PrimaryInstanceSetAt > dateTime; - return result; - } - - public void LogisticsClear() - { - _GaNAPCLogistics.Clear(); - _SiAPCLogistics.Clear(); - _GaNEDALogistics.Clear(); - _SiEDALogistics.Clear(); - _GaNEAFLogLogistics.Clear(); - _SiEAFLogLogistics.Clear(); - } - - public void APCDataCallback() - { - Data(_AppSettings.Server, _SiEquipmentTypes, _SiAPCLogistics, _SiPDSFFiles, isAPC: true); - Data(_AppSettings.Server, _GaNEquipmentTypes, _GaNAPCLogistics, _GaNPDSFFiles, isAPC: true); - } - - public void EDADataCallback() - { - Data(_AppSettings.Server, _SiEquipmentTypes, _SiEDALogistics, _SiPDSFFiles, isEDA: true); - Data(_AppSettings.Server, _GaNEquipmentTypes, _GaNEDALogistics, _GaNPDSFFiles, isEDA: true); - } - - public void EAFLogDataCallback() - { - Data(_AppSettings.Server, _SiEquipmentTypes, _SiEAFLogLogistics, _SiIPDSFFiles, isEAFLog: true); - Data(_AppSettings.Server, _GaNEquipmentTypes, _GaNEAFLogLogistics, _GaNIPDSFFiles, isEAFLog: true); - } - - public string GetPDSF(long Sequence) - { - string result = string.Empty; - if (string.IsNullOrEmpty(result)) - { - foreach (KeyValuePair element in _GaNEDALogistics) - { - if (((Logistics)element.Value).Sequence == Sequence) - { - result = element.Key; - break; - } + result = element.Key; + break; } } - if (string.IsNullOrEmpty(result)) - { - foreach (KeyValuePair element in _SiEDALogistics) - { - if (((Logistics)element.Value).Sequence == Sequence) - { - result = element.Key; - break; - } - } - } - if (string.IsNullOrEmpty(result)) - { - foreach (KeyValuePair element in _GaNAPCLogistics) - { - if (((Logistics)element.Value).Sequence == Sequence) - { - result = element.Key; - break; - } - } - } - if (string.IsNullOrEmpty(result)) - { - foreach (KeyValuePair element in _SiAPCLogistics) - { - if (((Logistics)element.Value).Sequence == Sequence) - { - result = element.Key; - break; - } - } - } - return result; } - - public string GetIPDSF(long Sequence) + if (string.IsNullOrEmpty(result)) { - string result = string.Empty; - if (string.IsNullOrEmpty(result)) + foreach (KeyValuePair element in _SiEDALogistics) { - foreach (KeyValuePair element in _GaNEAFLogLogistics) + if (((Logistics)element.Value).Sequence == Sequence) { - if (((Logistics)element.Value).Sequence == Sequence) - { - result = element.Key; - break; - } + result = element.Key; + break; } } - if (string.IsNullOrEmpty(result)) + } + if (string.IsNullOrEmpty(result)) + { + foreach (KeyValuePair element in _GaNAPCLogistics) { - foreach (KeyValuePair element in _SiEAFLogLogistics) + if (((Logistics)element.Value).Sequence == Sequence) { - if (((Logistics)element.Value).Sequence == Sequence) - { - result = element.Key; - break; - } + result = element.Key; + break; } } - return result; } - - public Tuple SetViewBag(string directory, string filter, bool isGaN = false, bool isSi = false, bool forPDSF = false, bool forIPDSF = false) + if (string.IsNullOrEmpty(result)) { - Tuple result; - if (isGaN && isSi) - throw new Exception(); - else if (!isGaN && !isSi) - isGaN = true; - if (isGaN) - result = SetViewBag(_GaNAPCLogistics, _GaNEDALogistics, _GaNEAFLogLogistics, directory, filter, forPDSF, forIPDSF); - else if (isSi) - result = SetViewBag(_SiAPCLogistics, _SiEDALogistics, _SiEAFLogLogistics, directory, filter, forPDSF, forIPDSF); - else - throw new Exception(); - return result; - } - - public Tuple, List> GetTimePivot(bool isGaN = false, bool isSi = false) - { - List forPDSF; - List forIPDSF; - if (isGaN && isSi) - throw new Exception(); - else if (!isGaN && !isSi) - isGaN = true; - if (isGaN) + foreach (KeyValuePair element in _SiAPCLogistics) { - forIPDSF = GetTimePivot(_GaNEquipmentTypes, _GaNAPCLogistics, _GaNEDALogistics, _GaNEAFLogLogistics, forPDSF: false, forIPDSF: true); - forPDSF = GetTimePivot(_GaNEquipmentTypes, _GaNAPCLogistics, _GaNEDALogistics, _GaNEAFLogLogistics, forPDSF: true, forIPDSF: false); - } - else if (isSi) - { - forIPDSF = GetTimePivot(_SiEquipmentTypes, _SiAPCLogistics, _SiEDALogistics, _SiEAFLogLogistics, forPDSF: false, forIPDSF: true); - forPDSF = GetTimePivot(_SiEquipmentTypes, _SiAPCLogistics, _SiEDALogistics, _SiEAFLogLogistics, forPDSF: true, forIPDSF: false); - } - else - throw new Exception(); - return new Tuple, List>(forIPDSF, forPDSF); - } - - public static string[] GetEquipmentTypes(bool isGaN = false, bool isSi = false) - { - string[] results; - if (isGaN && isSi) - throw new Exception(); - else if (!isGaN && !isSi) - isGaN = true; - if (isSi) - { - results = new string[] + if (((Logistics)element.Value).Sequence == Sequence) { + result = element.Key; + break; + } + } + } + return result; + } + + public string GetIPDSF(long Sequence) + { + string result = string.Empty; + if (string.IsNullOrEmpty(result)) + { + foreach (KeyValuePair element in _GaNEAFLogLogistics) + { + if (((Logistics)element.Value).Sequence == Sequence) + { + result = element.Key; + break; + } + } + } + if (string.IsNullOrEmpty(result)) + { + foreach (KeyValuePair element in _SiEAFLogLogistics) + { + if (((Logistics)element.Value).Sequence == Sequence) + { + result = element.Key; + break; + } + } + } + return result; + } + + public Tuple SetViewBag(string? directory, string? filter, bool isGaN = false, bool isSi = false, bool forPDSF = false, bool forIPDSF = false) + { + Tuple result; + if (isGaN && isSi) + throw new Exception(); + else if (!isGaN && !isSi) + isGaN = true; + if (isGaN) + result = SetViewBag(_GaNAPCLogistics, _GaNEDALogistics, _GaNEAFLogLogistics, directory, filter, forPDSF, forIPDSF); + else if (isSi) + result = SetViewBag(_SiAPCLogistics, _SiEDALogistics, _SiEAFLogLogistics, directory, filter, forPDSF, forIPDSF); + else + throw new Exception(); + return result; + } + + public Tuple, List> GetTimePivot(bool isGaN = false, bool isSi = false) + { + List forPDSF; + List forIPDSF; + if (isGaN && isSi) + throw new Exception(); + else if (!isGaN && !isSi) + isGaN = true; + if (isGaN) + { + forIPDSF = GetTimePivot(_GaNEquipmentTypes, _GaNAPCLogistics, _GaNEDALogistics, _GaNEAFLogLogistics, forPDSF: false, forIPDSF: true); + forPDSF = GetTimePivot(_GaNEquipmentTypes, _GaNAPCLogistics, _GaNEDALogistics, _GaNEAFLogLogistics, forPDSF: true, forIPDSF: false); + } + else if (isSi) + { + forIPDSF = GetTimePivot(_SiEquipmentTypes, _SiAPCLogistics, _SiEDALogistics, _SiEAFLogLogistics, forPDSF: false, forIPDSF: true); + forPDSF = GetTimePivot(_SiEquipmentTypes, _SiAPCLogistics, _SiEDALogistics, _SiEAFLogLogistics, forPDSF: true, forIPDSF: false); + } + else + throw new Exception(); + return new Tuple, List>(forIPDSF, forPDSF); + } + + public static string[] GetEquipmentTypes(bool isGaN = false, bool isSi = false) + { + string[] results; + if (isGaN && isSi) + throw new Exception(); + else if (!isGaN && !isSi) + isGaN = true; + if (isSi) + { + results = new string[] + { Shared.EquipmentType.MET08ANLYSDIFAAST230_Semi.ToString(), Shared.EquipmentType.MET08DDUPSFS6420.ToString(), Shared.EquipmentType.MET08DDUPSP1TBI.ToString(), @@ -357,12 +298,12 @@ namespace APCViewer.Singleton Shared.EquipmentType.MET08RESIMAPCDE.ToString(), Shared.EquipmentType.MET08THFTIRQS408M.ToString(), Shared.EquipmentType.MET08THFTIRSTRATUS.ToString() - }; - } - else if (isGaN) + }; + } + else if (isGaN) + { + results = new string[] { - results = new string[] - { Shared.EquipmentType.DEP08EGANAIXG5.ToString(), Shared.EquipmentType.MET08AFMD3100.ToString(), Shared.EquipmentType.MET08BVHGPROBE.ToString(), @@ -391,630 +332,634 @@ namespace APCViewer.Singleton Shared.EquipmentType.MET08XRDXPERTPROMRDXL.ToString(), Shared.EquipmentType.MET08XRDXPERTPROMRDXL_Monthly.ToString(), Shared.EquipmentType.MET08XRDXPERTPROMRDXL_Weekly.ToString() - }; - } - else - throw new Exception(); - return results; + }; } + else + throw new Exception(); + return results; + } - public Tuple SetViewBag(Dictionary apcLogistics, Dictionary edaLogistics, Dictionary eafLogLogistics, string directory = null, string filter = null, bool forPDSF = false, bool forIPDSF = false) + public Tuple SetViewBag(Dictionary apcLogistics, Dictionary edaLogistics, Dictionary eafLogLogistics, string? directory = null, string? filter = null, bool forPDSF = false, bool forIPDSF = false) + { + Tuple result; + int files = 0; + string eaf = "EAF"; + string eda = "EDA"; + string apc = "APC"; + string[] technologies = new string[] { eaf, eda, apc }; + string root = "Root"; + string staging = "Staging"; + string production = "Production"; + string development = "Development"; + string[] environments = new string[] { root, staging, production, development }; + string error = "Error !!!"; + List> sorted = new(); + Dictionary logisticsCollection = new(); + Dictionary> pairs = new(); + Dictionary>> grouped = new(); + foreach (string t in technologies) { - Tuple result; - int files = 0; - string eaf = "EAF"; - string eda = "EDA"; - string apc = "APC"; - string[] technologies = new string[] { eaf, eda, apc }; - string root = "Root"; - string staging = "Staging"; - string production = "Production"; - string development = "Development"; - string[] enviroments = new string[] { root, staging, production, development }; - string error = "Error !!!"; - List> sorted = new List>(); - Dictionary logisticsCollection = new Dictionary(); - Dictionary> pairs = new Dictionary>(); - Dictionary>> grouped = new Dictionary>>(); - foreach (string t in technologies) + if (_Stop) + break; + foreach (string e in environments) { - if (_ShuttingDown) + if (_Stop) break; - foreach (string e in enviroments) - { - if (_ShuttingDown) - break; - grouped.Add(string.Concat(t, " - ", e), new Dictionary>()); - grouped.Add(string.Concat(t, " - ", e, " ", error), new Dictionary>()); - } + grouped.Add(string.Concat(t, " - ", e), new Dictionary>()); + grouped.Add(string.Concat(t, " - ", e, " ", error), new Dictionary>()); } - string searchPattern; - if (forPDSF && forIPDSF) - throw new Exception(); - else if (!forPDSF && !forIPDSF) - throw new Exception(); - else if (forPDSF) - searchPattern = "*.pdsf"; - else if (forIPDSF) - searchPattern = "*.ipdsf"; - else - throw new Exception(); - if (!string.IsNullOrEmpty(directory) && Directory.Exists(directory)) - { - Logistics logistics; - Tuple pdsf; - string[] pdsfFiles = Directory.GetFiles(directory, searchPattern, SearchOption.AllDirectories); - foreach (string pdsfFile in pdsfFiles) - { - if (_ShuttingDown) - break; - pdsf = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(pdsfFile); - logistics = new Logistics(pdsfFile, pdsf.Item1); - if (!logistics.Logistics2.Any()) - logistics.Logistics2.Add(new Logistics2(string.Empty)); - logisticsCollection.Add(pdsfFile, logistics); - } - } - else if (forIPDSF) - { - if (!(eafLogLogistics is null)) - { - foreach (KeyValuePair element in eafLogLogistics) - logisticsCollection.Add(element.Key, (Logistics)element.Value); - } - } - else if (forPDSF) - { - if (!(edaLogistics is null)) - { - foreach (KeyValuePair element in edaLogistics) - logisticsCollection.Add(element.Key, (Logistics)element.Value); - } - if (!(apcLogistics is null)) - { - foreach (KeyValuePair element in apcLogistics) - logisticsCollection.Add(element.Key, (Logistics)element.Value); - } - } - if (logisticsCollection.Any()) - { - string key; - string technology; - string environment; - string equipmentType; - List sequences = new List(); - foreach (KeyValuePair element in logisticsCollection) - { - if (_ShuttingDown) - break; - if (element.Key.Contains(@"\EC_EAFLog\")) - technology = eaf; - else if (element.Key.Contains(@"\EC_EDA\")) - technology = eda; - else if (element.Key.Contains(@"\EC_APC\")) - technology = apc; - else - technology = eaf; - if (element.Key.Contains(@"\Production\")) - environment = production; - else if (element.Key.Contains(@"\Staging\")) - environment = staging; - else if (element.Key.Contains(@"\DEV\")) - environment = development; - else - environment = root; - equipmentType = Path.GetFileNameWithoutExtension(Path.GetDirectoryName(Path.GetDirectoryName(element.Key))); - if (equipmentType == "ViewerPath") - equipmentType = Path.GetFileNameWithoutExtension(Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(element.Key)))); - if (string.IsNullOrEmpty(filter) || technology == filter || environment == filter || equipmentType == filter) - { - files += 1; - if (!element.Key.Contains(@"\Error\") && !element.Key.Contains(@"\BadPath\")) - key = string.Concat(technology, " - ", environment); - else - key = string.Concat(technology, " - ", environment, " ", error); - if (!grouped[key].ContainsKey(equipmentType)) - grouped[key].Add(equipmentType, new List()); - grouped[key][equipmentType].Add(element.Value); - if (!sequences.Contains(element.Value.Sequence)) - { - sequences.Add(element.Value.Sequence); - pairs.Add(element.Value.Sequence, new Tuple(new string[] { key, equipmentType }, element.Value)); - } - else - { - for (short i = 1; i < short.MaxValue; i++) - { - if (_ShuttingDown) - break; - if (sequences.Contains(element.Value.Sequence + i)) - continue; - else - { - sequences.Add(element.Value.Sequence + i); - pairs.Add(element.Value.Sequence + i, new Tuple(new string[] { string.Concat("*", key), equipmentType }, element.Value)); - break; - } - } - } - } - } - sequences = (from l in sequences orderby l descending select l).ToList(); - foreach (long sequence in sequences) - sorted.Add(pairs[sequence]); - } - result = new Tuple(files, grouped, sorted, directory); - return result; } - - public List GetTimePivot(string[] equipmentTypes, Dictionary apcLogistics, Dictionary edaLogistics, Dictionary eafLogLogistics, bool forPDSF = false, bool forIPDSF = false) + string searchPattern; + if (forPDSF && forIPDSF) + throw new Exception(); + else if (!forPDSF && !forIPDSF) + throw new Exception(); + else if (forPDSF) + searchPattern = "*.pdsf"; + else if (forIPDSF) + searchPattern = "*.ipdsf"; + else + throw new Exception(); + if (!string.IsNullOrEmpty(directory) && Directory.Exists(directory)) { - List results = new List(); - Dictionary logisticsCollection = new Dictionary(); - if (forPDSF && forIPDSF) - throw new Exception(); - else if (!forPDSF && !forIPDSF) - throw new Exception(); - else if (forIPDSF) - { - if (!(eafLogLogistics is null)) - { - foreach (KeyValuePair element in eafLogLogistics) - logisticsCollection.Add(element.Key, (Logistics)element.Value); - } - } - else if (forPDSF) - { - if (!(edaLogistics is null)) - { - foreach (KeyValuePair element in edaLogistics) - logisticsCollection.Add(element.Key, (Logistics)element.Value); - } - if (!(apcLogistics is null)) - { - foreach (KeyValuePair element in apcLogistics) - logisticsCollection.Add(element.Key, (Logistics)element.Value); - } - } - if (logisticsCollection.Any()) - { - int eT = 0; - int jID = 1; - int pJID = 2; - int pN = 3; - int k = 4; - string key; - string partNumber; - string equipmentConnection; - DateTime dateTime = DateTime.Now; - List segments = new List(); - StringBuilder stringBuilder = new StringBuilder(); - long minutes15 = dateTime.AddMinutes(-15).Ticks; - long minutes30 = dateTime.AddMinutes(-30).Ticks; - long hours1 = dateTime.AddHours(-1).Ticks; - long hours3 = dateTime.AddHours(-3).Ticks; - long days1 = dateTime.AddDays(-1).Ticks; - long days2 = dateTime.AddDays(-2).Ticks; - long days4 = dateTime.AddDays(-4).Ticks; - long days7 = dateTime.AddDays(-7).Ticks; - List keys = new List(); - List keySegments = new List(); - List equipmentConnections = new List(); - foreach (string item in equipmentTypes) - equipmentConnections.Add(item.ToString()); - Dictionary> m15 = new Dictionary>(); - Dictionary> m30 = new Dictionary>(); - Dictionary> h1 = new Dictionary>(); - Dictionary> h3 = new Dictionary>(); - Dictionary> d1 = new Dictionary>(); - Dictionary> d2 = new Dictionary>(); - Dictionary> d4 = new Dictionary>(); - Dictionary> d7 = new Dictionary>(); - Dictionary> more = new Dictionary>(); - string[] si = new string[] { EquipmentType.MET08DDUPSFS6420.ToString(), EquipmentType.MET08DDUPSP1TBI.ToString(), EquipmentType.MET08RESIHGCV.ToString(), EquipmentType.MET08RESIMAPCDE.ToString(), EquipmentType.MET08THFTIRQS408M.ToString(), EquipmentType.MET08THFTIRSTRATUS.ToString() }; - foreach (KeyValuePair element in logisticsCollection) - { - if (_ShuttingDown) - break; - equipmentConnection = Path.GetFileNameWithoutExtension(Path.GetDirectoryName(Path.GetDirectoryName(element.Key))); - if (equipmentConnections.Contains(equipmentConnection)) - equipmentConnections.Remove(equipmentConnection); - if (!element.Value.Logistics2.Any()) - partNumber = string.Empty; - else - partNumber = element.Value.Logistics2[0].PartNumber; - if (string.IsNullOrEmpty(partNumber) && element.Value.Logistics1.Any()) - { - key = "PRODUCT="; - if (element.Value.Logistics1[0].Contains(key)) - { - segments = element.Value.Logistics1[0].Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries).ToList(); - partNumber = segments[1].Split(';')[0]; - } - } - if (string.IsNullOrEmpty(partNumber)) - partNumber = " "; - segments.Clear(); - segments.Add(equipmentConnection); - segments.Add(element.Value.JobID); - if (si.Contains(equipmentConnection)) - segments.Add("Si"); - else - segments.Add(element.Value.ProcessJobID); - segments.Add(partNumber); - stringBuilder.Clear(); - foreach (string segment in segments) - stringBuilder.Append(segment).Append('|'); - key = stringBuilder.ToString(); - segments.Add(key); - if (element.Value.Sequence > minutes15) - { - if (!keys.Contains(key)) - { - keys.Add(key); - keySegments.Add(segments.ToArray()); - m15.Add(key, new List()); - m30.Add(key, new List()); - h1.Add(key, new List()); - h3.Add(key, new List()); - d1.Add(key, new List()); - d2.Add(key, new List()); - d4.Add(key, new List()); - d7.Add(key, new List()); - more.Add(key, new List()); - } - m15[key].Add(element.Value); - } - else if (element.Value.Sequence > minutes30) - { - if (!keys.Contains(key)) - { - keys.Add(key); - keySegments.Add(segments.ToArray()); - m15.Add(key, new List()); - m30.Add(key, new List()); - h1.Add(key, new List()); - h3.Add(key, new List()); - d1.Add(key, new List()); - d2.Add(key, new List()); - d4.Add(key, new List()); - d7.Add(key, new List()); - more.Add(key, new List()); - } - m30[key].Add(element.Value); - } - else if (element.Value.Sequence > hours1) - { - if (!keys.Contains(key)) - { - keys.Add(key); - keySegments.Add(segments.ToArray()); - m15.Add(key, new List()); - m30.Add(key, new List()); - h1.Add(key, new List()); - h3.Add(key, new List()); - d1.Add(key, new List()); - d2.Add(key, new List()); - d4.Add(key, new List()); - d7.Add(key, new List()); - more.Add(key, new List()); - } - h1[key].Add(element.Value); - } - else if (element.Value.Sequence > hours3) - { - if (!keys.Contains(key)) - { - keys.Add(key); - keySegments.Add(segments.ToArray()); - m15.Add(key, new List()); - m30.Add(key, new List()); - h1.Add(key, new List()); - h3.Add(key, new List()); - d1.Add(key, new List()); - d2.Add(key, new List()); - d4.Add(key, new List()); - d7.Add(key, new List()); - more.Add(key, new List()); - } - h3[key].Add(element.Value); - } - else if (element.Value.Sequence > days1) - { - if (!keys.Contains(key)) - { - keys.Add(key); - keySegments.Add(segments.ToArray()); - m15.Add(key, new List()); - m30.Add(key, new List()); - h1.Add(key, new List()); - h3.Add(key, new List()); - d1.Add(key, new List()); - d2.Add(key, new List()); - d4.Add(key, new List()); - d7.Add(key, new List()); - more.Add(key, new List()); - } - d1[key].Add(element.Value); - } - else if (element.Value.Sequence > days2) - { - if (!keys.Contains(key)) - { - keys.Add(key); - keySegments.Add(segments.ToArray()); - m15.Add(key, new List()); - m30.Add(key, new List()); - h1.Add(key, new List()); - h3.Add(key, new List()); - d1.Add(key, new List()); - d2.Add(key, new List()); - d4.Add(key, new List()); - d7.Add(key, new List()); - more.Add(key, new List()); - } - d2[key].Add(element.Value); - } - else if (element.Value.Sequence > days4) - { - if (!keys.Contains(key)) - { - keys.Add(key); - keySegments.Add(segments.ToArray()); - m15.Add(key, new List()); - m30.Add(key, new List()); - h1.Add(key, new List()); - h3.Add(key, new List()); - d1.Add(key, new List()); - d2.Add(key, new List()); - d4.Add(key, new List()); - d7.Add(key, new List()); - more.Add(key, new List()); - } - d4[key].Add(element.Value); - } - else if (element.Value.Sequence > days7) - { - if (!keys.Contains(key)) - { - keys.Add(key); - keySegments.Add(segments.ToArray()); - m15.Add(key, new List()); - m30.Add(key, new List()); - h1.Add(key, new List()); - h3.Add(key, new List()); - d1.Add(key, new List()); - d2.Add(key, new List()); - d4.Add(key, new List()); - d7.Add(key, new List()); - more.Add(key, new List()); - } - d7[key].Add(element.Value); - } - else - { - if (!keys.Contains(key)) - { - keys.Add(key); - keySegments.Add(segments.ToArray()); - m15.Add(key, new List()); - m30.Add(key, new List()); - h1.Add(key, new List()); - h3.Add(key, new List()); - d1.Add(key, new List()); - d2.Add(key, new List()); - d4.Add(key, new List()); - d7.Add(key, new List()); - more.Add(key, new List()); - } - more[key].Add(element.Value); - } - } - int count; - List row; - results.Add(new string[] { "ET", nameof(Logistics.JobID), nameof(Logistics.ProcessJobID), nameof(Logistics2.PartNumber), "m15", "m30", "h1", "h3", "d1", "d2", "d4", "d7", "more" }); - for (int i = 0; i < equipmentConnections.Count; i++) - results.Add(new string[] { equipmentConnections[i], " ", " ", " ", "0", "0", "0", "0", "0", "0", "0", "0", "0" }); - keySegments = (from l in keySegments orderby l[eT], l[jID], l[pJID], l[pN] select l).ToList(); - foreach (string[] keySegment in keySegments) - { - if (_ShuttingDown) - break; - count = 0; - key = keySegment[k]; - row = new List(new string[] { keySegment[eT], keySegment[pJID], keySegment[jID], keySegment[pN] }); - count += m15[key].Count; - row.Add(count.ToString()); - count += m30[key].Count; - row.Add(count.ToString()); - count += h1[key].Count; - row.Add(count.ToString()); - count += h3[key].Count; - row.Add(count.ToString()); - count += d1[key].Count; - row.Add(count.ToString()); - count += d2[key].Count; - row.Add(count.ToString()); - count += d4[key].Count; - row.Add(count.ToString()); - count += d7[key].Count; - row.Add(count.ToString()); - count += more[key].Count; - row.Add(count.ToString()); - results.Add(row.ToArray()); - } - } - return results; - } - - public void Data(string server, string[] equipmentTypes, Dictionary inputLogistics, Dictionary inputPDSFFiles, bool isEAFLog = false, bool isEDA = false, bool isAPC = false) - { - DateTime dateTime; - string[] pdsfFiles; - string checkDirectory; - DateTime creationTime; - DateTime lastWriteTime; - string[] cellInstanceDirectories; - string[] equipmentTypeDirectories; - long ticks = DateTime.Now.AddDays(-5).Ticks; - List pdsfFileCollection = new List(); - long pollPathTicks = DateTime.Now.AddMinutes(-5).Ticks; + Logistics logistics; Tuple pdsf; - if (inputLogistics is null) - inputLogistics = new Dictionary(); - if (inputPDSFFiles is null) - inputPDSFFiles = new Dictionary(); - if (inputLogistics.Any()) + string[] pdsfFiles = Directory.GetFiles(directory, searchPattern, SearchOption.AllDirectories); + foreach (string pdsfFile in pdsfFiles) { - string[] fileKeys = inputLogistics.Keys.ToArray(); - foreach (string fileKey in fileKeys) + if (_Stop) + break; + pdsf = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(pdsfFile); + logistics = new Logistics(pdsfFile, pdsf.Item1); + if (!logistics.Logistics2.Any()) + logistics.Logistics2.Add(new Logistics2(string.Empty)); + logisticsCollection.Add(pdsfFile, logistics); + } + } + else if (forIPDSF) + { + if (eafLogLogistics is not null) + { + foreach (KeyValuePair element in eafLogLogistics) + logisticsCollection.Add(element.Key, (Logistics)element.Value); + } + } + else if (forPDSF) + { + if (edaLogistics is not null) + { + foreach (KeyValuePair element in edaLogistics) + logisticsCollection.Add(element.Key, (Logistics)element.Value); + } + if (apcLogistics is not null) + { + foreach (KeyValuePair element in apcLogistics) + logisticsCollection.Add(element.Key, (Logistics)element.Value); + } + } + if (logisticsCollection.Any()) + { + string key; + string technology; + string environment; + string? equipmentType; + List sequences = new(); + foreach (KeyValuePair element in logisticsCollection) + { + if (_Stop) + break; + if (element.Key.Contains(@"\EC_EAFLog\")) + technology = eaf; + else if (element.Key.Contains(@"\EC_EDA\")) + technology = eda; + else if (element.Key.Contains(@"\EC_APC\")) + technology = apc; + else + technology = eaf; + if (element.Key.Contains(@"\Production\")) + environment = production; + else if (element.Key.Contains(@"\Staging\")) + environment = staging; + else if (element.Key.Contains(@"\DEV\")) + environment = development; + else + environment = root; + equipmentType = Path.GetFileNameWithoutExtension(Path.GetDirectoryName(Path.GetDirectoryName(element.Key))); + if (string.IsNullOrEmpty(equipmentType)) + continue; + if (equipmentType == "ViewerPath") + equipmentType = Path.GetFileNameWithoutExtension(Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(element.Key)))); + if (string.IsNullOrEmpty(filter) || technology == filter || environment == filter || equipmentType == filter) { - if (_ShuttingDown) - break; - if (!File.Exists(fileKey)) - continue; - creationTime = new FileInfo(fileKey).CreationTime; - lastWriteTime = new FileInfo(fileKey).LastWriteTime; - if (creationTime < lastWriteTime) - dateTime = creationTime; + files += 1; + if (!element.Key.Contains(@"\Error\") && !element.Key.Contains(@"\BadPath\")) + key = string.Concat(technology, " - ", environment); else - dateTime = lastWriteTime; - if (dateTime.Ticks < ticks) - { - if (inputLogistics.ContainsKey(fileKey)) - inputLogistics.Remove(fileKey); + key = string.Concat(technology, " - ", environment, " ", error); + if (string.IsNullOrEmpty(equipmentType)) continue; + if (!grouped[key].ContainsKey(equipmentType)) + grouped[key].Add(equipmentType, new List()); + grouped[key][equipmentType].Add(element.Value); + if (!sequences.Contains(element.Value.Sequence)) + { + sequences.Add(element.Value.Sequence); + pairs.Add(element.Value.Sequence, new Tuple(new string[] { key, equipmentType }, element.Value)); + } + else + { + for (short i = 1; i < short.MaxValue; i++) + { + if (_Stop) + break; + if (sequences.Contains(element.Value.Sequence + i)) + continue; + else + { + sequences.Add(element.Value.Sequence + i); + pairs.Add(element.Value.Sequence + i, new Tuple(new string[] { string.Concat("*", key), equipmentType }, element.Value)); + break; + } + } } } } + sequences = (from l in sequences orderby l descending select l).ToList(); + foreach (long sequence in sequences) + sorted.Add(pairs[sequence]); + } + result = new Tuple(files, grouped, sorted, directory); + return result; + } + + public List GetTimePivot(string[] equipmentTypes, Dictionary apcLogistics, Dictionary edaLogistics, Dictionary eafLogLogistics, bool forPDSF = false, bool forIPDSF = false) + { + List results = new(); + Dictionary logisticsCollection = new(); + if (forPDSF && forIPDSF) + throw new Exception(); + else if (!forPDSF && !forIPDSF) + throw new Exception(); + else if (forIPDSF) + { + if (eafLogLogistics is not null) + { + foreach (KeyValuePair element in eafLogLogistics) + logisticsCollection.Add(element.Key, (Logistics)element.Value); + } + } + else if (forPDSF) + { + if (edaLogistics is not null) + { + foreach (KeyValuePair element in edaLogistics) + logisticsCollection.Add(element.Key, (Logistics)element.Value); + } + if (apcLogistics is not null) + { + foreach (KeyValuePair element in apcLogistics) + logisticsCollection.Add(element.Key, (Logistics)element.Value); + } + } + if (logisticsCollection.Any()) + { + int eT = 0; + int jID = 1; + int pJID = 2; + int pN = 3; + int k = 4; string key; - int loopEnd; - int loopStart; - string searchPattern; - string equipmentType; - string rootDirectoryPath; - bool isDuplicatorDirectory; - if (isEAFLog && isEDA && isAPC) - throw new Exception(); - else if (!isEAFLog && !isEDA && !isAPC) - throw new Exception(); - else if (isEAFLog) + string partNumber; + string? equipmentConnection; + DateTime dateTime = DateTime.Now; + List segments = new(); + StringBuilder stringBuilder = new(); + long minutes15 = dateTime.AddMinutes(-15).Ticks; + long minutes30 = dateTime.AddMinutes(-30).Ticks; + long hours1 = dateTime.AddHours(-1).Ticks; + long hours3 = dateTime.AddHours(-3).Ticks; + long days1 = dateTime.AddDays(-1).Ticks; + long days2 = dateTime.AddDays(-2).Ticks; + long days4 = dateTime.AddDays(-4).Ticks; + long days7 = dateTime.AddDays(-7).Ticks; + List keys = new(); + List keySegments = new(); + List equipmentConnections = new(); + foreach (string item in equipmentTypes) + equipmentConnections.Add(item.ToString()); + Dictionary> m15 = new(); + Dictionary> m30 = new(); + Dictionary> h1 = new(); + Dictionary> h3 = new(); + Dictionary> d1 = new(); + Dictionary> d2 = new(); + Dictionary> d4 = new(); + Dictionary> d7 = new(); + Dictionary> more = new(); + string[] si = new string[] { EquipmentType.MET08DDUPSFS6420.ToString(), EquipmentType.MET08DDUPSP1TBI.ToString(), EquipmentType.MET08RESIHGCV.ToString(), EquipmentType.MET08RESIMAPCDE.ToString(), EquipmentType.MET08THFTIRQS408M.ToString(), EquipmentType.MET08THFTIRSTRATUS.ToString() }; + foreach (KeyValuePair element in logisticsCollection) { - loopEnd = 4; - loopStart = 1; - searchPattern = "*.ipdsf"; - rootDirectoryPath = string.Concat(@"\\", server, @"\EC_EAFLog"); - } - else if (isEDA) - { - loopEnd = 6; - loopStart = 2; - searchPattern = "*.pdsf"; - rootDirectoryPath = string.Concat(@"\\", server, @"\EC_EDA"); - } - else if (isAPC) - { - loopEnd = 7; - loopStart = 6; - searchPattern = "*.pdsf"; - rootDirectoryPath = string.Concat(@"\\", server, @"\EC_APC"); - } - else - throw new Exception(); - string[] rootDirectories = Directory.GetDirectories(rootDirectoryPath, "*", SearchOption.TopDirectoryOnly); - foreach (string rootDirectory in rootDirectories) - { - if (_ShuttingDown) + if (_Stop) break; - if (rootDirectory.Contains(@"\DEV")) + equipmentConnection = Path.GetFileNameWithoutExtension(Path.GetDirectoryName(Path.GetDirectoryName(element.Key))); + if (string.IsNullOrEmpty(equipmentConnection)) continue; - checkDirectory = string.Concat(rootDirectory, @"\Traces"); - if (!Directory.Exists(checkDirectory)) - continue; - equipmentTypeDirectories = Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly); - foreach (string equipmentTypeDirectory in equipmentTypeDirectories) + if (equipmentConnections.Contains(equipmentConnection)) + _ = equipmentConnections.Remove(equipmentConnection); + if (!element.Value.Logistics2.Any()) + partNumber = string.Empty; + else + partNumber = element.Value.Logistics2[0].PartNumber; + if (string.IsNullOrEmpty(partNumber) && element.Value.Logistics1.Any()) { - if (_ShuttingDown) - break; - equipmentType = Path.GetFileName(equipmentTypeDirectory); - if (!equipmentTypes.Contains(equipmentType)) - continue; - for (int i = loopStart; i < loopEnd; i++) + key = "PRODUCT="; + if (element.Value.Logistics1[0].Contains(key)) { - if (_ShuttingDown) + segments = element.Value.Logistics1[0].Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries).ToList(); + partNumber = segments[1].Split(';')[0]; + } + } + if (string.IsNullOrEmpty(partNumber)) + partNumber = " "; + segments.Clear(); + segments.Add(equipmentConnection); + segments.Add(element.Value.JobID); + if (si.Contains(equipmentConnection)) + segments.Add("Si"); + else + segments.Add(element.Value.ProcessJobID); + segments.Add(partNumber); + _ = stringBuilder.Clear(); + foreach (string segment in segments) + _ = stringBuilder.Append(segment).Append('|'); + key = stringBuilder.ToString(); + segments.Add(key); + if (element.Value.Sequence > minutes15) + { + if (!keys.Contains(key)) + { + keys.Add(key); + keySegments.Add(segments.ToArray()); + m15.Add(key, new List()); + m30.Add(key, new List()); + h1.Add(key, new List()); + h3.Add(key, new List()); + d1.Add(key, new List()); + d2.Add(key, new List()); + d4.Add(key, new List()); + d7.Add(key, new List()); + more.Add(key, new List()); + } + m15[key].Add(element.Value); + } + else if (element.Value.Sequence > minutes30) + { + if (!keys.Contains(key)) + { + keys.Add(key); + keySegments.Add(segments.ToArray()); + m15.Add(key, new List()); + m30.Add(key, new List()); + h1.Add(key, new List()); + h3.Add(key, new List()); + d1.Add(key, new List()); + d2.Add(key, new List()); + d4.Add(key, new List()); + d7.Add(key, new List()); + more.Add(key, new List()); + } + m30[key].Add(element.Value); + } + else if (element.Value.Sequence > hours1) + { + if (!keys.Contains(key)) + { + keys.Add(key); + keySegments.Add(segments.ToArray()); + m15.Add(key, new List()); + m30.Add(key, new List()); + h1.Add(key, new List()); + h3.Add(key, new List()); + d1.Add(key, new List()); + d2.Add(key, new List()); + d4.Add(key, new List()); + d7.Add(key, new List()); + more.Add(key, new List()); + } + h1[key].Add(element.Value); + } + else if (element.Value.Sequence > hours3) + { + if (!keys.Contains(key)) + { + keys.Add(key); + keySegments.Add(segments.ToArray()); + m15.Add(key, new List()); + m30.Add(key, new List()); + h1.Add(key, new List()); + h3.Add(key, new List()); + d1.Add(key, new List()); + d2.Add(key, new List()); + d4.Add(key, new List()); + d7.Add(key, new List()); + more.Add(key, new List()); + } + h3[key].Add(element.Value); + } + else if (element.Value.Sequence > days1) + { + if (!keys.Contains(key)) + { + keys.Add(key); + keySegments.Add(segments.ToArray()); + m15.Add(key, new List()); + m30.Add(key, new List()); + h1.Add(key, new List()); + h3.Add(key, new List()); + d1.Add(key, new List()); + d2.Add(key, new List()); + d4.Add(key, new List()); + d7.Add(key, new List()); + more.Add(key, new List()); + } + d1[key].Add(element.Value); + } + else if (element.Value.Sequence > days2) + { + if (!keys.Contains(key)) + { + keys.Add(key); + keySegments.Add(segments.ToArray()); + m15.Add(key, new List()); + m30.Add(key, new List()); + h1.Add(key, new List()); + h3.Add(key, new List()); + d1.Add(key, new List()); + d2.Add(key, new List()); + d4.Add(key, new List()); + d7.Add(key, new List()); + more.Add(key, new List()); + } + d2[key].Add(element.Value); + } + else if (element.Value.Sequence > days4) + { + if (!keys.Contains(key)) + { + keys.Add(key); + keySegments.Add(segments.ToArray()); + m15.Add(key, new List()); + m30.Add(key, new List()); + h1.Add(key, new List()); + h3.Add(key, new List()); + d1.Add(key, new List()); + d2.Add(key, new List()); + d4.Add(key, new List()); + d7.Add(key, new List()); + more.Add(key, new List()); + } + d4[key].Add(element.Value); + } + else if (element.Value.Sequence > days7) + { + if (!keys.Contains(key)) + { + keys.Add(key); + keySegments.Add(segments.ToArray()); + m15.Add(key, new List()); + m30.Add(key, new List()); + h1.Add(key, new List()); + h3.Add(key, new List()); + d1.Add(key, new List()); + d2.Add(key, new List()); + d4.Add(key, new List()); + d7.Add(key, new List()); + more.Add(key, new List()); + } + d7[key].Add(element.Value); + } + else + { + if (!keys.Contains(key)) + { + keys.Add(key); + keySegments.Add(segments.ToArray()); + m15.Add(key, new List()); + m30.Add(key, new List()); + h1.Add(key, new List()); + h3.Add(key, new List()); + d1.Add(key, new List()); + d2.Add(key, new List()); + d4.Add(key, new List()); + d7.Add(key, new List()); + more.Add(key, new List()); + } + more[key].Add(element.Value); + } + } + int count; + List row; + results.Add(new string[] { "ET", nameof(Logistics.JobID), nameof(Logistics.ProcessJobID), nameof(Logistics2.PartNumber), "m15", "m30", "h1", "h3", "d1", "d2", "d4", "d7", "more" }); + for (int i = 0; i < equipmentConnections.Count; i++) + results.Add(new string[] { equipmentConnections[i], " ", " ", " ", "0", "0", "0", "0", "0", "0", "0", "0", "0" }); + keySegments = (from l in keySegments orderby l[eT], l[jID], l[pJID], l[pN] select l).ToList(); + foreach (string[] keySegment in keySegments) + { + if (_Stop) + break; + count = 0; + key = keySegment[k]; + row = new List(new string[] { keySegment[eT], keySegment[pJID], keySegment[jID], keySegment[pN] }); + count += m15[key].Count; + row.Add(count.ToString()); + count += m30[key].Count; + row.Add(count.ToString()); + count += h1[key].Count; + row.Add(count.ToString()); + count += h3[key].Count; + row.Add(count.ToString()); + count += d1[key].Count; + row.Add(count.ToString()); + count += d2[key].Count; + row.Add(count.ToString()); + count += d4[key].Count; + row.Add(count.ToString()); + count += d7[key].Count; + row.Add(count.ToString()); + count += more[key].Count; + row.Add(count.ToString()); + results.Add(row.ToArray()); + } + } + return results; + } + + public void Data(string server, string[] equipmentTypes, Dictionary inputLogistics, Dictionary inputPDSFFiles, bool isEAFLog = false, bool isEDA = false, bool isAPC = false) + { + DateTime dateTime; + string[] pdsfFiles; + string checkDirectory; + DateTime creationTime; + DateTime lastWriteTime; + string[] cellInstanceDirectories; + string[] equipmentTypeDirectories; + long ticks = DateTime.Now.AddDays(-5).Ticks; + List pdsfFileCollection = new(); + long pollPathTicks = DateTime.Now.AddMinutes(-5).Ticks; + Tuple pdsf; + if (inputLogistics is null) + inputLogistics = new Dictionary(); + if (inputPDSFFiles is null) + inputPDSFFiles = new Dictionary(); + if (inputLogistics.Any()) + { + string[] fileKeys = inputLogistics.Keys.ToArray(); + foreach (string fileKey in fileKeys) + { + if (_Stop) + break; + if (!File.Exists(fileKey)) + continue; + creationTime = new FileInfo(fileKey).CreationTime; + lastWriteTime = new FileInfo(fileKey).LastWriteTime; + if (creationTime < lastWriteTime) + dateTime = creationTime; + else + dateTime = lastWriteTime; + if (dateTime.Ticks < ticks) + { + if (inputLogistics.ContainsKey(fileKey)) + _ = inputLogistics.Remove(fileKey); + continue; + } + } + } + string key; + int loopEnd; + int loopStart; + string searchPattern; + string equipmentType; + string rootDirectoryPath; + bool isDuplicatorDirectory; + if (isEAFLog && isEDA && isAPC) + throw new Exception(); + else if (!isEAFLog && !isEDA && !isAPC) + throw new Exception(); + else if (isEAFLog) + { + loopEnd = 4; + loopStart = 1; + searchPattern = "*.ipdsf"; + rootDirectoryPath = string.Concat(@"\\", server, @"\EC_EAFLog"); + } + else if (isEDA) + { + loopEnd = 6; + loopStart = 2; + searchPattern = "*.pdsf"; + rootDirectoryPath = string.Concat(@"\\", server, @"\EC_EDA"); + } + else if (isAPC) + { + loopEnd = 7; + loopStart = 6; + searchPattern = "*.pdsf"; + rootDirectoryPath = string.Concat(@"\\", server, @"\EC_APC"); + } + else + throw new Exception(); + string[] rootDirectories = Directory.GetDirectories(rootDirectoryPath, "*", SearchOption.TopDirectoryOnly); + foreach (string rootDirectory in rootDirectories) + { + if (_Stop) + break; + if (rootDirectory.Contains(@"\DEV")) + continue; + checkDirectory = string.Concat(rootDirectory, @"\Traces"); + if (!Directory.Exists(checkDirectory)) + continue; + equipmentTypeDirectories = Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly); + foreach (string equipmentTypeDirectory in equipmentTypeDirectories) + { + if (_Stop) + break; + equipmentType = Path.GetFileName(equipmentTypeDirectory); + if (!equipmentTypes.Contains(equipmentType)) + continue; + for (int i = loopStart; i < loopEnd; i++) + { + if (_Stop) + break; + checkDirectory = i switch + { + 1 => string.Concat(equipmentTypeDirectory, @"\Source"), + 2 => string.Concat(equipmentTypeDirectory, @"\Error"), + 3 => string.Concat(equipmentTypeDirectory, @"\Target"), + 4 => string.Concat(equipmentTypeDirectory, @"\BadPath"), + 5 => string.Concat(equipmentTypeDirectory, @"\PollPath"), + 6 => string.Concat(equipmentTypeDirectory, @"\ViewerPath"), + _ => throw new Exception(), + }; + if (!Directory.Exists(checkDirectory)) + continue; + pdsfFiles = Directory.GetFiles(checkDirectory, searchPattern, SearchOption.AllDirectories); + if (isAPC && !pdsfFiles.Any() && i == 6) + { + pdsfFileCollection.Clear(); + cellInstanceDirectories = Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly); + foreach (string cellInstanceDirectory in cellInstanceDirectories) + pdsfFileCollection.AddRange(Directory.GetFiles(cellInstanceDirectory, searchPattern, SearchOption.TopDirectoryOnly)); + pdsfFiles = pdsfFileCollection.ToArray(); + } + foreach (string pdsfFile in pdsfFiles) + { + if (_Stop) break; - checkDirectory = i switch + creationTime = new FileInfo(pdsfFile).CreationTime; + lastWriteTime = new FileInfo(pdsfFile).LastWriteTime; + isDuplicatorDirectory = Path.GetDirectoryName(pdsfFile) != checkDirectory && Path.GetFileName(Path.GetDirectoryName(Path.GetDirectoryName(pdsfFile))) == equipmentType; + if (creationTime < lastWriteTime) + dateTime = creationTime; + else + dateTime = lastWriteTime; + if (dateTime.Ticks < ticks) { - 1 => string.Concat(equipmentTypeDirectory, @"\Source"), - 2 => string.Concat(equipmentTypeDirectory, @"\Error"), - 3 => string.Concat(equipmentTypeDirectory, @"\Target"), - 4 => string.Concat(equipmentTypeDirectory, @"\BadPath"), - 5 => string.Concat(equipmentTypeDirectory, @"\PollPath"), - 6 => string.Concat(equipmentTypeDirectory, @"\ViewerPath"), - _ => throw new Exception(), - }; - if (!Directory.Exists(checkDirectory)) - continue; - pdsfFiles = Directory.GetFiles(checkDirectory, searchPattern, SearchOption.AllDirectories); - if (isAPC && !pdsfFiles.Any() && i == 6) - { - pdsfFileCollection.Clear(); - cellInstanceDirectories = Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly); - foreach (string cellInstanceDirectory in cellInstanceDirectories) - pdsfFileCollection.AddRange(Directory.GetFiles(cellInstanceDirectory, searchPattern, SearchOption.TopDirectoryOnly)); - pdsfFiles = pdsfFileCollection.ToArray(); - } - foreach (string pdsfFile in pdsfFiles) - { - if (_ShuttingDown) - break; - creationTime = new FileInfo(pdsfFile).CreationTime; - lastWriteTime = new FileInfo(pdsfFile).LastWriteTime; - isDuplicatorDirectory = Path.GetDirectoryName(pdsfFile) != checkDirectory && Path.GetFileName(Path.GetDirectoryName(Path.GetDirectoryName(pdsfFile))) == equipmentType; - if (creationTime < lastWriteTime) - dateTime = creationTime; - else - dateTime = lastWriteTime; - if (dateTime.Ticks < ticks) + if (inputLogistics.ContainsKey(pdsfFile)) { - if (inputLogistics.ContainsKey(pdsfFile)) - { - inputLogistics.Remove(pdsfFile); - continue; - } + _ = inputLogistics.Remove(pdsfFile); + continue; } - else if (isDuplicatorDirectory) - continue; - else if (checkDirectory.Contains("PollPath") && dateTime.Ticks > pollPathTicks) - continue; - else if (!inputLogistics.ContainsKey(pdsfFile)) + } + else if (isDuplicatorDirectory) + continue; + else if (checkDirectory.Contains("PollPath") && dateTime.Ticks > pollPathTicks) + continue; + else if (!inputLogistics.ContainsKey(pdsfFile)) + { + pdsf = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(pdsfFile); + Logistics logistics = new(pdsfFile, pdsf.Item1); + if (!logistics.Logistics2.Any()) + logistics.Logistics2.Add(new Logistics2(string.Empty)); + key = Path.GetFileName(pdsfFile); + if (!inputPDSFFiles.ContainsKey(key)) + inputPDSFFiles.Add(key, pdsfFile); + else { - pdsf = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(pdsfFile); - Logistics logistics = new Logistics(pdsfFile, pdsf.Item1); - if (!logistics.Logistics2.Any()) - logistics.Logistics2.Add(new Logistics2(string.Empty)); - key = Path.GetFileName(pdsfFile); - if (!inputPDSFFiles.ContainsKey(key)) - inputPDSFFiles.Add(key, pdsfFile); - else + foreach (KeyValuePair element in inputLogistics) { - foreach (KeyValuePair element in inputLogistics) + if (Path.GetFileName(element.Key) == key) { - if (Path.GetFileName(element.Key) == key) - { - if (!File.Exists(element.Key)) - inputLogistics.Remove(element.Key); - } + if (!File.Exists(element.Key)) + _ = inputLogistics.Remove(element.Key); } } - inputLogistics.Add(pdsfFile, logistics); } + inputLogistics.Add(pdsfFile, logistics); } } } } } - } } \ No newline at end of file diff --git a/APC Viewer/Singleton/IBackground.cs b/APC Viewer/Singleton/IBackground.cs deleted file mode 100644 index 683e234..0000000 --- a/APC Viewer/Singleton/IBackground.cs +++ /dev/null @@ -1,35 +0,0 @@ -using APCViewer.Models; -using Microsoft.Extensions.Logging; -using Shared; -using System; -using System.Collections.Generic; -using System.Net; - -namespace APCViewer.Singleton -{ - - public interface IBackground : Models.IBackground, IDisposable - { - - void ClearMessage(); - void SendStatusOk(); - void LogisticsClear(); - string Message { get; } - IsEnvironment IsEnvironment { get; } - bool IsPrimaryInstance(); - void SetIsPrimaryInstance(); - WebClient WebClient { get; } - void ClearIsPrimaryInstance(); - AppSettings AppSettings { get; } - string GetPDSF(long Sequence); - string GetIPDSF(long Sequence); - string WorkingDirectory { get; } - List Exceptions { get; } - string GetCountDirectory(string verb); - void Update(ILogger logger, WebClient webClient); - Tuple, List> GetTimePivot(bool isGaN = false, bool isSi = false); - Tuple SetViewBag(string directory, string filter, bool isGaN = false, bool isSi = false, bool forPDSF = false, bool forIPDSF = false); - - } - -} \ No newline at end of file diff --git a/APC Viewer/Startup.cs b/APC Viewer/Startup.cs deleted file mode 100644 index 55ea4e9..0000000 --- a/APC Viewer/Startup.cs +++ /dev/null @@ -1,166 +0,0 @@ -using APCViewer.HostedService; -using APCViewer.Models; -using APCViewer.Singleton; -using Helper.Log; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Configuration.Json; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.FileProviders; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; -using Microsoft.OpenApi.Models; -using Shared; -using System; -using System.IO; -using System.Net; -using System.Reflection; - -namespace APCViewer -{ - - public class Startup - { - - private Background _Background; - private readonly IsEnvironment _IsEnvironment; - private readonly IConfiguration _Configuration; - private readonly IWebHostEnvironment _WebHostEnvironment; - - public Startup(IConfiguration configuration, IWebHostEnvironment webHostEnvironment) - { - _Configuration = configuration; - _WebHostEnvironment = webHostEnvironment; - if (!(configuration is ConfigurationRoot configurationRoot)) - _IsEnvironment = new IsEnvironment(webHostEnvironment.IsDevelopment(), webHostEnvironment.IsStaging(), webHostEnvironment.IsProduction()); - else - { - foreach (IConfigurationProvider provider in configurationRoot.Providers) - { - if (!(provider is JsonConfigurationProvider jsonConfigurationProvider)) - continue; - if (jsonConfigurationProvider.Source.Optional) - continue; - _IsEnvironment = new IsEnvironment(jsonConfigurationProvider.Source.Path); - } - } - } - - // This method gets called by the runtime. Use this method to add services to the container. - public void ConfigureServices(IServiceCollection services) - { - LogLevel defaultLogLevel; - LogLevel log4netLogLevel; - IConfigurationSection configurationSection; - configurationSection = _Configuration.GetSection("Logging:LogLevel:Default"); - if (configurationSection is null || configurationSection.Value is null) - defaultLogLevel = LogLevel.Debug; - else if (!Enum.TryParse(configurationSection.Value, out defaultLogLevel)) - defaultLogLevel = LogLevel.Debug; - configurationSection = _Configuration.GetSection("Logging:LogLevel:Log4netProvider"); - if (configurationSection is null || configurationSection.Value is null) - log4netLogLevel = defaultLogLevel; - else if (!Enum.TryParse(configurationSection.Value, out log4netLogLevel)) - log4netLogLevel = defaultLogLevel; - Assembly assembly = Assembly.GetExecutingAssembly(); - string workingDirectory = Log.GetWorkingDirectory(assembly.GetName().Name, "IFXApps"); - services.AddLogging(logging => - { - logging.AddProvider(new DebugProvider(defaultLogLevel)); - logging.AddProvider(new ConsoleProvider(defaultLogLevel)); - logging.AddProvider(new Log4netProvider(typeof(Startup), log4netLogLevel, workingDirectory)); - }); - - services.AddDirectoryBrowser(); - services.AddControllersWithViews().AddRazorRuntimeCompilation(); - services.AddServerSideBlazor(); - - services.AddSingleton(); - services.AddSingleton(); - - _Background = new Background(_IsEnvironment, _Configuration, workingDirectory); - services.AddSingleton(b => _Background); - services.AddHostedService(t => new TimedHostedService(_Background, _Configuration, t.GetRequiredService())); - - services.AddSwaggerGen(c => - { - c.SwaggerDoc("v1", new OpenApiInfo { Title = "APCViewer", Version = "v1" }); - }); - } - - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime) - { - if (env.IsDevelopment()) - { - if (string.IsNullOrEmpty(_Background.Storage.UrlRoot)) - { - Environment.ExitCode = -1; - lifetime.StopApplication(); - } - - app.UseDeveloperExceptionPage(); - - app.UseSwagger(c => - { - c.SerializeAsV2 = true; - }); - - app.UseSwaggerUI(c => - { - c.SwaggerEndpoint("/swagger/v1/swagger.json", "APC Viewer API V1"); - c.RoutePrefix = string.Empty; - }); - } - else - { - app.UseExceptionHandler("/Home/Error"); - // The default HSTS value is 30 days. - // You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. - app.UseHsts(); - - app.UseSwagger(c => - { - c.SerializeAsV2 = true; - }); - - app.UseSwaggerUI(c => - { - c.SwaggerEndpoint("/APCViewer/swagger/v1/swagger.json", "APC Viewer API V1"); - c.RoutePrefix = string.Empty; - }); - } - - // app.UseDirectoryBrowser(new DirectoryBrowserOptions - // { - // FileProvider = new PhysicalFileProvider(Path.Combine(env.WebRootPath, "images")), - // RequestPath = "/MyImages" - // }); - - app.UseHttpsRedirection(); - app.UseStaticFiles(); - - app.UseRouting(); - - app.UseAuthorization(); - - app.UseEndpoints(endpoints => - { - //endpoints.MapBlazorHub(); - endpoints.MapControllerRoute( - name: "default", - pattern: "{controller=Home}/{action=Index}/{id?}"); - }); - - app.UseDirectoryBrowser(new DirectoryBrowserOptions - { - FileProvider = new PhysicalFileProvider(Path.Combine(env.WebRootPath, "images")), - RequestPath = "/MyImages" - }); - } - - } - -} \ No newline at end of file diff --git a/APC Viewer/Views/Background/Index.cshtml b/APC Viewer/Views/Background/Index.cshtml new file mode 100644 index 0000000..008290e --- /dev/null +++ b/APC Viewer/Views/Background/Index.cshtml @@ -0,0 +1,46 @@ +@using APCViewer.Controllers +@{ + ViewBag.Title = "Background"; + int i = 0; + string backgroundController = nameof(BackgroundController).Replace("Controller", string.Empty); +} + +
+

YODA - @(ViewBag.IsPrimaryInstance) - @(ViewBag.Profile) - @(ViewBag.URLs) - 013

+

@(ViewBag.WorkingDirectory)

+

@(ViewBag.Message)

+

@(ViewBag.ExceptionsCount)

+
+ +

 

+
+
+
+ @foreach (Exception exception in ViewBag.Exceptions) + { +

+ @Html.Raw(string.Concat("")); +

+

+ @Html.Raw(string.Concat("")); +

+
+ @(i += 1); + } +
+
+@section scripts { + +} \ No newline at end of file diff --git a/APC Viewer/Views/Home/Background.cshtml b/APC Viewer/Views/Home/Background.cshtml deleted file mode 100644 index eeb033a..0000000 --- a/APC Viewer/Views/Home/Background.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@using APCViewer.Controllers -@{ - ViewBag.Title = "Background"; - int i = 0; - string homeController = nameof(HomeController).Replace("Controller", string.Empty); -} - -
-

APC - @(ViewBag.IsPrimaryInstance) - @(ViewBag.Profile) - @(ViewBag.URLs) - 013

-

@(ViewBag.WorkingDirectory)

-

@(ViewBag.Message)

-

@(ViewBag.ExceptionsCount)

-
- -

 

-
-
-
- @foreach (Exception exception in ViewBag.Exceptions) - { -

- @Html.Raw(string.Concat("")); -

-

- @Html.Raw(string.Concat("")); -

-
- @(i += 1); - } -
-
-@section scripts { - -} diff --git a/APC Viewer/Views/Shared/_Layout.cshtml b/APC Viewer/Views/Shared/_Layout.cshtml index 2ed79bc..34715cb 100644 --- a/APC Viewer/Views/Shared/_Layout.cshtml +++ b/APC Viewer/Views/Shared/_Layout.cshtml @@ -5,7 +5,7 @@ string ipdsf = nameof(HomeController.IPDSF); string privacy = nameof(HomeController.Privacy); string timePivot = nameof(HomeController.TimePivot); - string background = nameof(HomeController.Background); + string background = nameof(BackgroundController.Index); string homeController = nameof(HomeController).Replace("Controller", string.Empty); string schemeHostURL = string.Concat(Context.Request.Scheme, "://", Context.Request.Host); } diff --git a/APC Viewer/appsettings.Development.json b/APC Viewer/appsettings.Development.json new file mode 100644 index 0000000..bbbef3d --- /dev/null +++ b/APC Viewer/appsettings.Development.json @@ -0,0 +1,145 @@ +{ + "Company": "Infineon Technologies Americas Corp.", + "Drives": [ + { + "Use": false, + "Letter": "a", + "Share": "Floppy Disk", + "User": "", + "Password": "" + }, + { + "Use": false, + "Letter": "c", + "Share": "SYSTEM", + "User": "", + "Password": "" + }, + { + "Use": false, + "Letter": "d", + "Share": "DATA", + "User": "", + "Password": "" + }, + { + "Use": true, + "Letter": "g", + "Share": "\\\\10.95.154.12\\testdata", + "User": "10.95.154.12\\Manager", + "Password": "D6QDJ5g6vjqnNyyRbfbj+g==" + }, + { + "Use": false, + "Letter": "h", + "Share": "\\\\10.95.154.13\\COM 5", + "User": "10.95.154.13\\user", + "Password": "tVyC7uPHtScZR8NLInSaxQ==" + }, + { + "Use": true, + "Letter": "i", + "Share": "\\\\messdv002.na.infineon.com\\Candela", + "User": "INFINEON\\MESGaNEAF", + "Password": "tLIPgqM6R9hVQOteRnTHwPqIg3Zxv8CohTjFkjkFz8k=" + }, + { + "Use": false, + "Letter": "j", + "Share": "\\\\messdv002.na.infineon.com\\Characterization", + "User": "INFINEON\\MESGaNEAF", + "Password": "tLIPgqM6R9hVQOteRnTHwPqIg3Zxv8CohTjFkjkFz8k=" + }, + { + "Use": true, + "Letter": "k", + "Share": "\\\\messdv002.na.infineon.com\\GaN_NEC\\Characterization", + "User": "INFINEON\\MESGaNEAF", + "Password": "tLIPgqM6R9hVQOteRnTHwPqIg3Zxv8CohTjFkjkFz8k=" + }, + { + "Use": false, + "Letter": "l", + "Share": "TFS", + "User": "", + "Password": "" + }, + { + "Use": false, + "Letter": "m", + "Share": "\\\\messdv002.na.infineon.com\\MOCVD", + "User": "EC\\ECMESEAF", + "Password": "CUGygiPwahy4U3j+6KqqoMZ08STyVDR1rKm6MwPpt00=" + }, + { + "Use": true, + "Letter": "n", + "Share": "\\\\10.95.154.22\\C", + "User": "10.95.154.22\\Aixtron", + "Password": "DYVBOr2HJdB7KOhd/IFhLA==" + }, + { + "Use": true, + "Letter": "o", + "Share": "\\\\10.95.154.16\\Aixtron", + "User": "10.95.154.16\\Aixtron", + "Password": "DYVBOr2HJdB7KOhd/IFhLA==" + }, + { + "Use": true, + "Letter": "p", + "Share": "\\\\10.95.154.15\\Aixtron", + "User": "10.95.154.15\\Aixtron", + "Password": "DYVBOr2HJdB7KOhd/IFhLA==" + }, + { + "Use": true, + "Letter": "q", + "Share": "\\\\10.95.154.21\\Data", + "User": "10.95.154.21\\XRD04Admin", + "Password": "v1NOsEOCvbnhzKabspPcCQ==" + }, + { + "Use": true, + "Letter": "r", + "Share": "\\\\10.95.154.23\\Data", + "User": "\"10.95.154.23\\infineon us\"", + "Password": "rzXkXdHKetDfsukhZKW0yA==" + }, + { + "Use": true, + "Letter": "s", + "Share": "\\\\messv02ecc1.ec.local\\EC_EAFRepository", + "User": "EC\\ECMESEAF", + "Password": "CUGygiPwahy4U3j+6KqqoMZ08STyVDR1rKm6MwPpt00=" + }, + { + "Use": true, + "Letter": "t", + "Share": "\\\\messv02ecc1.ec.local\\EC_EDA", + "User": "EC\\ECEDASvc", + "Password": "IKsJmRVUH3xlv+RRELRbwoXYKwLvF4Re7k1Rigzpwf4=" + }, + { + "Use": false, + "Letter": "z", + "Share": "DVD Drive", + "User": "", + "Password": "" + } + ], + "EncryptedPassword": "VwpEjlgytp9jkZQjEeCEUbxffBLE7CQeI5db/P6KGmQ=", + "Logging": { + "LogLevel": { + "Default": "Debug", + "Microsoft": "Warning", + "Log4netProvider": "Debug", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "MonARessource": "YODA_Viewer_IFX", + "Server": "messv02ecc1_ec_local", + "ServiceUser": "mesyodasvc", + "URLs": "http://localhost:5000;", + "WorkingDirectoryName": "IFXApps" +} \ No newline at end of file diff --git a/APC Viewer/appsettings.Staging.json b/APC Viewer/appsettings.Staging.json new file mode 100644 index 0000000..f6218f7 --- /dev/null +++ b/APC Viewer/appsettings.Staging.json @@ -0,0 +1,145 @@ +{ + "Company": "Infineon Technologies Americas Corp.", + "Drives": [ + { + "Use": false, + "Letter": "a", + "Share": "Floppy Disk", + "User": "", + "Password": "" + }, + { + "Use": false, + "Letter": "c", + "Share": "SYSTEM", + "User": "", + "Password": "" + }, + { + "Use": false, + "Letter": "d", + "Share": "DATA", + "User": "", + "Password": "" + }, + { + "Use": true, + "Letter": "g", + "Share": "\\\\10.95.154.12\\testdata", + "User": "10.95.154.12\\Manager", + "Password": "D6QDJ5g6vjqnNyyRbfbj+g==" + }, + { + "Use": false, + "Letter": "h", + "Share": "\\\\10.95.154.13\\COM 5", + "User": "10.95.154.13\\user", + "Password": "tVyC7uPHtScZR8NLInSaxQ==" + }, + { + "Use": true, + "Letter": "i", + "Share": "\\\\messdv002.na.infineon.com\\Candela", + "User": "INFINEON\\MESGaNEAF", + "Password": "tLIPgqM6R9hVQOteRnTHwPqIg3Zxv8CohTjFkjkFz8k=" + }, + { + "Use": false, + "Letter": "j", + "Share": "\\\\messdv002.na.infineon.com\\Characterization", + "User": "INFINEON\\MESGaNEAF", + "Password": "tLIPgqM6R9hVQOteRnTHwPqIg3Zxv8CohTjFkjkFz8k=" + }, + { + "Use": true, + "Letter": "k", + "Share": "\\\\messdv002.na.infineon.com\\GaN_NEC\\Characterization", + "User": "INFINEON\\MESGaNEAF", + "Password": "tLIPgqM6R9hVQOteRnTHwPqIg3Zxv8CohTjFkjkFz8k=" + }, + { + "Use": false, + "Letter": "l", + "Share": "TFS", + "User": "", + "Password": "" + }, + { + "Use": false, + "Letter": "m", + "Share": "\\\\messdv002.na.infineon.com\\MOCVD", + "User": "EC\\ECMESEAF", + "Password": "CUGygiPwahy4U3j+6KqqoMZ08STyVDR1rKm6MwPpt00=" + }, + { + "Use": true, + "Letter": "n", + "Share": "\\\\10.95.154.22\\C", + "User": "10.95.154.22\\Aixtron", + "Password": "DYVBOr2HJdB7KOhd/IFhLA==" + }, + { + "Use": true, + "Letter": "o", + "Share": "\\\\10.95.154.16\\Aixtron", + "User": "10.95.154.16\\Aixtron", + "Password": "DYVBOr2HJdB7KOhd/IFhLA==" + }, + { + "Use": true, + "Letter": "p", + "Share": "\\\\10.95.154.15\\Aixtron", + "User": "10.95.154.15\\Aixtron", + "Password": "DYVBOr2HJdB7KOhd/IFhLA==" + }, + { + "Use": true, + "Letter": "q", + "Share": "\\\\10.95.154.21\\Data", + "User": "10.95.154.21\\XRD04Admin", + "Password": "v1NOsEOCvbnhzKabspPcCQ==" + }, + { + "Use": true, + "Letter": "r", + "Share": "\\\\10.95.154.23\\Data", + "User": "\"10.95.154.23\\infineon us\"", + "Password": "rzXkXdHKetDfsukhZKW0yA==" + }, + { + "Use": true, + "Letter": "s", + "Share": "\\\\messv02ecc1.ec.local\\EC_EAFRepository", + "User": "EC\\ECMESEAF", + "Password": "CUGygiPwahy4U3j+6KqqoMZ08STyVDR1rKm6MwPpt00=" + }, + { + "Use": true, + "Letter": "t", + "Share": "\\\\messv02ecc1.ec.local\\EC_EDA", + "User": "EC\\ECEDASvc", + "Password": "IKsJmRVUH3xlv+RRELRbwoXYKwLvF4Re7k1Rigzpwf4=" + }, + { + "Use": false, + "Letter": "z", + "Share": "DVD Drive", + "User": "", + "Password": "" + } + ], + "EncryptedPassword": "CUGygiPwahy4U3j+6KqqoMZ08STyVDR1rKm6MwPpt00=", + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Log4netProvider": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "MonARessource": "YODA_Viewer_EC", + "Server": "messv02ecc1.ec.local", + "ServiceUser": "ECMESEAF", + "URLs": "http://localhost:5002;", + "WorkingDirectoryName": "IFXApps" +} \ No newline at end of file diff --git a/APC Viewer/appsettings.json b/APC Viewer/appsettings.json new file mode 100644 index 0000000..ca3867d --- /dev/null +++ b/APC Viewer/appsettings.json @@ -0,0 +1,145 @@ +{ + "Company": "Infineon Technologies Americas Corp.", + "Drives": [ + { + "Use": false, + "Letter": "a", + "Share": "Floppy Disk", + "User": "", + "Password": "" + }, + { + "Use": false, + "Letter": "c", + "Share": "SYSTEM", + "User": "", + "Password": "" + }, + { + "Use": false, + "Letter": "d", + "Share": "DATA", + "User": "", + "Password": "" + }, + { + "Use": true, + "Letter": "g", + "Share": "\\\\10.95.154.12\\testdata", + "User": "10.95.154.12\\Manager", + "Password": "D6QDJ5g6vjqnNyyRbfbj+g==" + }, + { + "Use": false, + "Letter": "h", + "Share": "\\\\10.95.154.13\\COM 5", + "User": "10.95.154.13\\user", + "Password": "tVyC7uPHtScZR8NLInSaxQ==" + }, + { + "Use": true, + "Letter": "i", + "Share": "\\\\messdv002.na.infineon.com\\Candela", + "User": "INFINEON\\MESGaNEAF", + "Password": "tLIPgqM6R9hVQOteRnTHwPqIg3Zxv8CohTjFkjkFz8k=" + }, + { + "Use": false, + "Letter": "j", + "Share": "\\\\messdv002.na.infineon.com\\Characterization", + "User": "INFINEON\\MESGaNEAF", + "Password": "tLIPgqM6R9hVQOteRnTHwPqIg3Zxv8CohTjFkjkFz8k=" + }, + { + "Use": true, + "Letter": "k", + "Share": "\\\\messdv002.na.infineon.com\\GaN_NEC\\Characterization", + "User": "INFINEON\\MESGaNEAF", + "Password": "tLIPgqM6R9hVQOteRnTHwPqIg3Zxv8CohTjFkjkFz8k=" + }, + { + "Use": false, + "Letter": "l", + "Share": "TFS", + "User": "", + "Password": "" + }, + { + "Use": false, + "Letter": "m", + "Share": "\\\\messdv002.na.infineon.com\\MOCVD", + "User": "EC\\ECMESEAF", + "Password": "CUGygiPwahy4U3j+6KqqoMZ08STyVDR1rKm6MwPpt00=" + }, + { + "Use": true, + "Letter": "n", + "Share": "\\\\10.95.154.22\\C", + "User": "10.95.154.22\\Aixtron", + "Password": "DYVBOr2HJdB7KOhd/IFhLA==" + }, + { + "Use": true, + "Letter": "o", + "Share": "\\\\10.95.154.16\\Aixtron", + "User": "10.95.154.16\\Aixtron", + "Password": "DYVBOr2HJdB7KOhd/IFhLA==" + }, + { + "Use": true, + "Letter": "p", + "Share": "\\\\10.95.154.15\\Aixtron", + "User": "10.95.154.15\\Aixtron", + "Password": "DYVBOr2HJdB7KOhd/IFhLA==" + }, + { + "Use": true, + "Letter": "q", + "Share": "\\\\10.95.154.21\\Data", + "User": "10.95.154.21\\XRD04Admin", + "Password": "v1NOsEOCvbnhzKabspPcCQ==" + }, + { + "Use": true, + "Letter": "r", + "Share": "\\\\10.95.154.23\\Data", + "User": "\"10.95.154.23\\infineon us\"", + "Password": "rzXkXdHKetDfsukhZKW0yA==" + }, + { + "Use": true, + "Letter": "s", + "Share": "\\\\messv02ecc1.ec.local\\EC_EAFRepository", + "User": "EC\\ECMESEAF", + "Password": "CUGygiPwahy4U3j+6KqqoMZ08STyVDR1rKm6MwPpt00=" + }, + { + "Use": true, + "Letter": "t", + "Share": "\\\\messv02ecc1.ec.local\\EC_EDA", + "User": "EC\\ECEDASvc", + "Password": "IKsJmRVUH3xlv+RRELRbwoXYKwLvF4Re7k1Rigzpwf4=" + }, + { + "Use": false, + "Letter": "z", + "Share": "DVD Drive", + "User": "", + "Password": "" + } + ], + "EncryptedPassword": "IU4P8iQhoKt1BAkKONlZinuLPrwJvWRLxp/7i5HrtiY=", + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Log4netProvider": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "MonARessource": "YODA_Viewer_EC", + "Server": "messv02ecc1.ec.local", + "ServiceUser": "ECYODASVC", + "URLs": "http://localhost:5002;", + "WorkingDirectoryName": "IFXApps" +} \ No newline at end of file