Compare commits
	
		
			13 Commits
		
	
	
		
			0ed6d17774
			...
			10-17-a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ea0c145d4a | |||
| 72cc064f56 | |||
| ec90b4fbbd | |||
| ddf12e5ec0 | |||
| 5c2a3c97e9 | |||
| e6533e152f | |||
| 19b54a7cc8 | |||
| 43024c6c30 | |||
| e3910d700f | |||
| e651c2804c | |||
| 823a31e48a | |||
| 552f0137df | |||
| 538bd194ae | 
@ -110,7 +110,7 @@ dotnet_diagnostic.CA2254.severity = none # CA2254: The logging message template
 | 
			
		||||
dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name
 | 
			
		||||
dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2");
 | 
			
		||||
dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant.
 | 
			
		||||
dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary
 | 
			
		||||
dotnet_diagnostic.IDE0005.severity = none # Using directive is unnecessary
 | 
			
		||||
dotnet_diagnostic.IDE0028.severity = none # IDE0028: Collection initialization can be simplified
 | 
			
		||||
dotnet_diagnostic.IDE0031.severity = warning # Use null propagation (IDE0031)
 | 
			
		||||
dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed
 | 
			
		||||
@ -122,6 +122,7 @@ dotnet_diagnostic.IDE0290.severity = none # Use primary constructor [Distance]cs
 | 
			
		||||
dotnet_diagnostic.IDE0300.severity = none # IDE0300: Collection initialization can be simplified
 | 
			
		||||
dotnet_diagnostic.IDE0301.severity = none #IDE0301: Collection initialization can be simplified
 | 
			
		||||
dotnet_diagnostic.IDE0305.severity = none # IDE0305: Collection initialization can be simplified
 | 
			
		||||
dotnet_diagnostic.MSTEST0015.severity = none # MSTEST0015: Test method {method} should not be ignored
 | 
			
		||||
dotnet_diagnostic.MSTEST0037.severity = error # MSTEST0037: Use proper 'Assert' methods
 | 
			
		||||
dotnet_diagnostic.SYSLIB1045.severity = none # SYSLIB1045: diagnostics for regex source generation
 | 
			
		||||
dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										37
									
								
								Adaptation/.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										37
									
								
								Adaptation/.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							@ -1,10 +1,43 @@
 | 
			
		||||
{
 | 
			
		||||
  "configurations": [
 | 
			
		||||
    {
 | 
			
		||||
      "mode": "debug",
 | 
			
		||||
      "name": "Go launch file",
 | 
			
		||||
      "program": "${file}",
 | 
			
		||||
      "request": "launch",
 | 
			
		||||
      "type": "go"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "name": "node Launch Current Opened File",
 | 
			
		||||
      "program": "${file}",
 | 
			
		||||
      "request": "launch",
 | 
			
		||||
      "type": "node"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "cwd": "${workspaceFolder}",
 | 
			
		||||
      "internalConsoleOptions": "neverOpen",
 | 
			
		||||
      "name": "Debug File",
 | 
			
		||||
      "program": "${file}",
 | 
			
		||||
      "request": "launch",
 | 
			
		||||
      "stopOnEntry": false,
 | 
			
		||||
      "type": "bun",
 | 
			
		||||
      "watchMode": false
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "cwd": "${workspaceFolder}",
 | 
			
		||||
      "internalConsoleOptions": "neverOpen",
 | 
			
		||||
      "name": "Run File",
 | 
			
		||||
      "noDebug": true,
 | 
			
		||||
      "program": "${file}",
 | 
			
		||||
      "request": "launch",
 | 
			
		||||
      "type": "bun",
 | 
			
		||||
      "watchMode": false
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "name": ".NET Core Attach",
 | 
			
		||||
      "type": "coreclr",
 | 
			
		||||
      "processId": 32760,
 | 
			
		||||
      "request": "attach",
 | 
			
		||||
      "processId": 8912
 | 
			
		||||
      "type": "coreclr"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3
									
								
								Adaptation/.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								Adaptation/.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							@ -7,6 +7,7 @@
 | 
			
		||||
        "CASS",
 | 
			
		||||
        "CEPIEPSILON",
 | 
			
		||||
        "CUST",
 | 
			
		||||
        "DDUPSFS",
 | 
			
		||||
        "DDUPSP",
 | 
			
		||||
        "EQPT",
 | 
			
		||||
        "GETJOBS",
 | 
			
		||||
@ -31,6 +32,8 @@
 | 
			
		||||
        "substr",
 | 
			
		||||
        "SUSCEPTOR",
 | 
			
		||||
        "targ",
 | 
			
		||||
        "TENCOR",
 | 
			
		||||
        "THFTIRQS",
 | 
			
		||||
        "TIBCO",
 | 
			
		||||
        "Wafr"
 | 
			
		||||
    ],
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										133
									
								
								Adaptation/.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										133
									
								
								Adaptation/.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							@ -1,19 +1,134 @@
 | 
			
		||||
{
 | 
			
		||||
    "version": "2.0.0",
 | 
			
		||||
    "inputs": [
 | 
			
		||||
        {
 | 
			
		||||
            "default": "Development",
 | 
			
		||||
            "description": "Which ASP Net Core Environment?",
 | 
			
		||||
            "id": "ASPNETCORE_ENVIRONMENT",
 | 
			
		||||
            "options": [
 | 
			
		||||
                "Development",
 | 
			
		||||
                "Production"
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "pickString"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "default": "{AssemblyTitle}",
 | 
			
		||||
            "description": "What Assembly Title?",
 | 
			
		||||
            "id": "AssemblyTitle",
 | 
			
		||||
            "type": "promptString"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "default": "{Build.BuildId}",
 | 
			
		||||
            "description": "Which Build BuildId?",
 | 
			
		||||
            "id": "Build.BuildId",
 | 
			
		||||
            "type": "promptString"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "default": "{Build.Reason}",
 | 
			
		||||
            "description": "Which Build Reason?",
 | 
			
		||||
            "id": "Build.Reason",
 | 
			
		||||
            "type": "promptString"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "default": "{Build.Repository.Id}",
 | 
			
		||||
            "description": "Which Build Repository Id?",
 | 
			
		||||
            "id": "Build.Repository.Id",
 | 
			
		||||
            "type": "promptString"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "default": "{Build.Repository.Name}",
 | 
			
		||||
            "description": "Which Build Repository Name?",
 | 
			
		||||
            "id": "Build.Repository.Name",
 | 
			
		||||
            "type": "promptString"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "default": "{Build.SourceVersion}",
 | 
			
		||||
            "description": "Which Build Source Version?",
 | 
			
		||||
            "id": "Build.SourceVersion",
 | 
			
		||||
            "type": "promptString"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "default": "Debug",
 | 
			
		||||
            "description": "Which Configuration?",
 | 
			
		||||
            "id": "Configuration",
 | 
			
		||||
            "options": [
 | 
			
		||||
                "Debug",
 | 
			
		||||
                "Release"
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "pickString"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "default": "net8.0",
 | 
			
		||||
            "description": "Which Core Version?",
 | 
			
		||||
            "id": "CoreVersion",
 | 
			
		||||
            "options": [
 | 
			
		||||
                "net8.0"
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "pickString"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "default": "C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin/MSBuild.exe",
 | 
			
		||||
            "description": "Which MS Build?",
 | 
			
		||||
            "id": "MSBuild",
 | 
			
		||||
            "type": "promptString"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "default": "https://artifactory.intra.infineon.com/artifactory/api/nuget/ngt-fi-package-main-vir/",
 | 
			
		||||
            "description": "Which Nuget Source?",
 | 
			
		||||
            "id": "NugetSource",
 | 
			
		||||
            "type": "promptString"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "default": "win-x64",
 | 
			
		||||
            "description": "Which Runtime?",
 | 
			
		||||
            "id": "Runtime",
 | 
			
		||||
            "options": [
 | 
			
		||||
                "win-x64",
 | 
			
		||||
                "win-x32",
 | 
			
		||||
                "linux-x64",
 | 
			
		||||
                "linux-x32"
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "pickString"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "default": "L:/",
 | 
			
		||||
            "description": "Which System DefaultWorkingDirectory?",
 | 
			
		||||
            "id": "System.DefaultWorkingDirectory",
 | 
			
		||||
            "options": [
 | 
			
		||||
                "L:/",
 | 
			
		||||
                "D:/",
 | 
			
		||||
                "C:/"
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "pickString"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "default": "v4.8",
 | 
			
		||||
            "description": "Which Core Target Framework Version?",
 | 
			
		||||
            "id": "TargetFrameworkVersion",
 | 
			
		||||
            "options": [
 | 
			
		||||
                "v4.8"
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "pickString"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "default": "{UserSecretsId}",
 | 
			
		||||
            "description": "Which Core User Secrets Id?",
 | 
			
		||||
            "id": "UserSecretsId",
 | 
			
		||||
            "type": "promptString"
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "tasks": [
 | 
			
		||||
        {
 | 
			
		||||
            "label": "Build",
 | 
			
		||||
            "command": "dotnet",
 | 
			
		||||
            "type": "process",
 | 
			
		||||
            "args": [
 | 
			
		||||
                "build",
 | 
			
		||||
                "/property:GenerateFullPaths=true",
 | 
			
		||||
                "/consoleloggerparameters:NoSummary"
 | 
			
		||||
                "build"
 | 
			
		||||
            ],
 | 
			
		||||
            "problemMatcher": "$msCompile"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "label": "Test-Debug",
 | 
			
		||||
            "label": "Test Debug",
 | 
			
		||||
            "command": "dotnet",
 | 
			
		||||
            "type": "process",
 | 
			
		||||
            "args": [
 | 
			
		||||
@ -24,7 +139,7 @@
 | 
			
		||||
            "problemMatcher": "$msCompile"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "label": "Test-Release",
 | 
			
		||||
            "label": "Test Release",
 | 
			
		||||
            "command": "dotnet",
 | 
			
		||||
            "type": "process",
 | 
			
		||||
            "args": [
 | 
			
		||||
@ -50,7 +165,7 @@
 | 
			
		||||
            "problemMatcher": "$msCompile"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "label": "Format-Whitespaces",
 | 
			
		||||
            "label": "Format Whitespaces",
 | 
			
		||||
            "command": "dotnet",
 | 
			
		||||
            "type": "process",
 | 
			
		||||
            "args": [
 | 
			
		||||
@ -87,13 +202,13 @@
 | 
			
		||||
            "problemMatcher": "$msCompile"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "label": "Project",
 | 
			
		||||
            "label": "Code Project",
 | 
			
		||||
            "type": "shell",
 | 
			
		||||
            "command": "code ../MET08DDUPSP1TBI.csproj",
 | 
			
		||||
            "problemMatcher": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "label": "Readme",
 | 
			
		||||
            "label": "Code Read Me",
 | 
			
		||||
            "type": "shell",
 | 
			
		||||
            "command": "code ../README.md",
 | 
			
		||||
            "problemMatcher": []
 | 
			
		||||
@ -113,7 +228,7 @@
 | 
			
		||||
            "problemMatcher": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "label": "Git Config",
 | 
			
		||||
            "label": "Code Git Config",
 | 
			
		||||
            "type": "shell",
 | 
			
		||||
            "command": "code ../.git/config",
 | 
			
		||||
            "problemMatcher": []
 | 
			
		||||
 | 
			
		||||
@ -128,7 +128,7 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
 | 
			
		||||
        if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
 | 
			
		||||
            FileCopy(reportFullPath, dateTime, descriptions);
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -153,7 +153,7 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
 | 
			
		||||
        if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
 | 
			
		||||
            MoveArchive(reportFullPath, dateTime);
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -8,6 +8,7 @@ using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Text.Json;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation.FileHandlers.IQSSi;
 | 
			
		||||
@ -109,6 +110,59 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static Tuple<string, string> GetLines(Logistics logistics, List<txt.Description> descriptions)
 | 
			
		||||
    {
 | 
			
		||||
        StringBuilder result = new();
 | 
			
		||||
        char del = '\t';
 | 
			
		||||
        txt.Description x = descriptions[0];
 | 
			
		||||
        _ = result.Append(x.DcnLpdMin).Append(del).    // 001 - 
 | 
			
		||||
            Append(x.DcnLpdMax).Append(del).       // 002 - 
 | 
			
		||||
            Append(x.DcnLpdMean).Append(del).      // 003 - DCN LPD
 | 
			
		||||
            Append(x.DcnAreaCountMin).Append(del). // 004 - 
 | 
			
		||||
            Append(x.DcnAreaCountMax).Append(del). // 005 - 
 | 
			
		||||
            Append(x.DcnAreaCountMean).Append(del).// 006 - DCN Area
 | 
			
		||||
            Append(x.DcnAreaMin).Append(del).      // 007 - 
 | 
			
		||||
            Append(x.DcnAreaMax).Append(del).      // 008 - 
 | 
			
		||||
            Append(x.Date).Append(del).            // 009 - 
 | 
			
		||||
            Append(x.DcnHazeAvgMean).Append(del).  // 010 - Haze Average
 | 
			
		||||
            Append(string.Empty).Append(del).              // 011 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 012 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 013 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 014 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 015 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 016 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 017 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 018 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 019 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 020 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 021 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 022 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 023 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 024 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 025 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 026 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 027 - 
 | 
			
		||||
            Append(x.RDS).Append(del).             // 028 - Lot
 | 
			
		||||
            Append(x.Reactor).Append(del).         // 029 - Process
 | 
			
		||||
            Append(x.Recipe).Append(del).          // 030 - Part
 | 
			
		||||
            Append(x.DcnScrMean).Append(del).      // 031 - Scratch Count
 | 
			
		||||
            Append(string.Empty).Append(del).              // 032 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 033 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 034 - 
 | 
			
		||||
            Append(x.DcnMicroScrMean).Append(del). // 035 - Scratch Length
 | 
			
		||||
            Append(string.Empty).Append(del).              // 036 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 037 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 038 - 
 | 
			
		||||
            Append(x.DcnAllMean).Append(del).      // 039 - Average Sum of Defects
 | 
			
		||||
            Append(x.DcnAllMax).Append(del).       // 040 - Max Sum of defects
 | 
			
		||||
            Append(x.DcnAllMin).Append(del).       // 041 - Min Sum of Defects
 | 
			
		||||
            Append(string.Empty).Append(del).              // 042 - 
 | 
			
		||||
            Append(logistics.MesEntity).Append(del).                 // 043 - 
 | 
			
		||||
            Append(x.DcnAreaMean).Append(del).     // 044 - DCN MM2
 | 
			
		||||
            AppendLine();
 | 
			
		||||
        return new Tuple<string, string>(result.ToString(), x.Date);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void SaveIQSFile(string reportFullPath, DateTime dateTime, List<txt.Description> descriptions, Test[] tests)
 | 
			
		||||
    {
 | 
			
		||||
        if (tests.Length == 0)
 | 
			
		||||
@ -116,7 +170,7 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            bool isDummyRun = false;
 | 
			
		||||
            Tuple<string, string> lines = OpenInsight.FileRead.GetLines(_Logistics, descriptions);
 | 
			
		||||
            Tuple<string, string> lines = GetLines(_Logistics, descriptions);
 | 
			
		||||
            string check = lines.Item1.Replace(lines.Item2, "$Date$");
 | 
			
		||||
            ScopeInfo scopeInfo = new(tests[0], _IQSFile);
 | 
			
		||||
            List<(Shared.Properties.IScopeInfo, string)> collection = new();
 | 
			
		||||
@ -132,7 +186,7 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void FileCopy<T>(string reportFullPath, DateTime dateTime, List<T> descriptions) where T : Shared.Properties.IDescription
 | 
			
		||||
    private void WriteFile<T>(string reportFullPath, DateTime dateTime, List<T> descriptions) where T : Shared.Properties.IDescription
 | 
			
		||||
    {
 | 
			
		||||
        bool isDummyRun = false;
 | 
			
		||||
        string successDirectory = string.Empty;
 | 
			
		||||
@ -140,25 +194,27 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        string duplicateDirectory = Path.Combine(_FileConnectorConfiguration.SourceFileLocation, _CellInstanceName);
 | 
			
		||||
        if (!Directory.Exists(duplicateDirectory))
 | 
			
		||||
            _ = Directory.CreateDirectory(duplicateDirectory);
 | 
			
		||||
        string duplicateFile = Path.Combine(duplicateDirectory, Path.GetFileName(reportFullPath));
 | 
			
		||||
        File.Copy(reportFullPath, duplicateFile, overwrite: true);
 | 
			
		||||
        string duplicateFile = Path.Combine(duplicateDirectory, $"{Path.GetFileName(reportFullPath)}.xml");
 | 
			
		||||
        string xml = ProcessDataStandardFormat.GetXml(reportFullPath);
 | 
			
		||||
        File.WriteAllText(duplicateFile, xml);
 | 
			
		||||
        WaitForFileConsumption(dateTime, descriptions, isDummyRun, successDirectory, duplicateDirectory, collection, duplicateFile);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
 | 
			
		||||
    {
 | 
			
		||||
        Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
 | 
			
		||||
        ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath);
 | 
			
		||||
        string[] lines = File.ReadAllLines(reportFullPath);
 | 
			
		||||
        ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines);
 | 
			
		||||
        _Logistics = new Logistics(reportFullPath, processDataStandardFormat);
 | 
			
		||||
        SetFileParameterLotIDToLogisticsMID();
 | 
			
		||||
        JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat);
 | 
			
		||||
        JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat);
 | 
			
		||||
        List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements);
 | 
			
		||||
        Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
 | 
			
		||||
        if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
 | 
			
		||||
            SaveIQSFile(reportFullPath, dateTime, descriptions, tests);
 | 
			
		||||
        if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
 | 
			
		||||
            FileCopy(reportFullPath, dateTime, descriptions);
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
            WriteFile(reportFullPath, dateTime, descriptions);
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -22,17 +22,21 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
    internal class PreWith
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        internal string MatchingFile { get; private set; }
 | 
			
		||||
        internal string CheckFile { get; private set; }
 | 
			
		||||
        internal string ErrFile { get; private set; }
 | 
			
		||||
        internal string CheckFile { get; private set; }
 | 
			
		||||
        internal string MatchingFile { get; private set; }
 | 
			
		||||
        internal string CheckDirectory { get; private set; }
 | 
			
		||||
        internal string NoWaitDirectory { get; private set; }
 | 
			
		||||
 | 
			
		||||
        internal PreWith(string matchingFile, string checkFile, string errFile, string checkDirectory, string noWaitDirectory)
 | 
			
		||||
        internal PreWith(string checkDirectory,
 | 
			
		||||
                         string checkFile,
 | 
			
		||||
                         string errFile,
 | 
			
		||||
                         string matchingFile,
 | 
			
		||||
                         string noWaitDirectory)
 | 
			
		||||
        {
 | 
			
		||||
            MatchingFile = matchingFile;
 | 
			
		||||
            CheckFile = checkFile;
 | 
			
		||||
            ErrFile = errFile;
 | 
			
		||||
            CheckFile = checkFile;
 | 
			
		||||
            MatchingFile = matchingFile;
 | 
			
		||||
            CheckDirectory = checkDirectory;
 | 
			
		||||
            NoWaitDirectory = noWaitDirectory;
 | 
			
		||||
        }
 | 
			
		||||
@ -84,9 +88,9 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        string processDataStandardFormatMappingOldColumnNames = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Old.Column.Names");
 | 
			
		||||
        string processDataStandardFormatMappingNewColumnNames = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.New.Column.Names");
 | 
			
		||||
        string processDataStandardFormatMappingColumnIndices = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Column.Indices");
 | 
			
		||||
        _ProcessDataStandardFormatMapping = GetProcessDataStandardFormatMapping(processDataStandardFormatMappingOldColumnNames,
 | 
			
		||||
                                                                                processDataStandardFormatMappingNewColumnNames,
 | 
			
		||||
                                                                                processDataStandardFormatMappingColumnIndices);
 | 
			
		||||
        _ProcessDataStandardFormatMapping = ProcessDataStandardFormatMapping.Get(processDataStandardFormatMappingOldColumnNames,
 | 
			
		||||
                                                                                 processDataStandardFormatMappingNewColumnNames,
 | 
			
		||||
                                                                                 processDataStandardFormatMappingColumnIndices);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception)
 | 
			
		||||
@ -165,46 +169,6 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static ProcessDataStandardFormatMapping GetProcessDataStandardFormatMapping(string processDataStandardFormatMappingOldColumnNames, string processDataStandardFormatMappingNewColumnNames, string processDataStandardFormatMappingColumnIndices)
 | 
			
		||||
    {
 | 
			
		||||
        ProcessDataStandardFormatMapping result;
 | 
			
		||||
        string[] segmentsB;
 | 
			
		||||
        List<string> distinct = new();
 | 
			
		||||
        Dictionary<string, string> keyValuePairs = new();
 | 
			
		||||
        string args4 = "Time,HeaderUniqueId,UniqueId,Date,SP101";
 | 
			
		||||
        string args5 = ",SP101";
 | 
			
		||||
        string args6 = ",SP101";
 | 
			
		||||
        string args7 = "Test|EventId,Recipe|Session,|SP101";
 | 
			
		||||
        // string args8 = "Time,A_LOGISTICS,B_LOGISTICS,Test,Count,Index,MesEntity,Date,Employee,Lot,PSN,Reactor,Recipe,Grade,HeaderUniqueId,RDS,Session,Side,SrcDest,UniqueId,WaferID,DcnAllMax,DcnAllMean,DcnAllMin,DcnAllStdDev,DcnAreaCountMax,DcnAreaCountMean,DcnAreaCountMin,DcnAreaCountStdDev,DcnAreaMax,DcnAreaMean,DcnAreaMin,DcnAreaStdDev,DcnBin1Max,DcnBin1Mean,DcnBin1Min,DcnBin1StdDev,DcnBin2Max,DcnBin2Mean,DcnBin2Min,DcnBin2StdDev,DcnBin3Max,DcnBin3Mean,DcnBin3Min,DcnBin3StdDev,DcnBin4Max,DcnBin4Mean,DcnBin4Min,DcnBin4StdDev,DcnBin5Max,DcnBin5Mean,DcnBin5Min,DcnBin5StdDev,DcnBin6Max,DcnBin6Mean,DcnBin6Min,DcnBin6StdDev,DcnBin7Max,DcnBin7Mean,DcnBin7Min,DcnBin7StdDev,DcnBin8Max,DcnBin8Mean,DcnBin8Min,DcnBin8StdDev,DcnHazeAvgMax,DcnHazeAvgMean,DcnHazeAvgMin,DcnHazeAvgStdDev,DcnHazeMedianMax,DcnHazeMedianMean,DcnHazeMedianMin,DcnHazeMedianStdDev,DcnHazeStdDevMax,DcnHazeStdDevMean,DcnHazeStdDevMin,DcnHazeStdDevStdDev,DcnLpdESMax,DcnLpdESMean,DcnLpdESMin,DcnLpdESStdDev,DcnLpdMax,DcnLpdMean,DcnLpdMin,DcnLpdNMax,DcnLpdNMean,DcnLpdNMin,DcnLpdNStdDev,DcnLpdStdDev,DcnMicroScrMax,DcnMicroScrMean,DcnMicroScrMin,DcnMicroScrStdDev,DcnScrMax,DcnScrMean,DcnScrMin,DcnScrStdDev,DcnSlipMax,DcnSlipMean,DcnSlipMin,DcnSlipStdDev,DnnAllMax,DnnAllMean,DnnAllMin,DnnAllStdDev,DnnAreaCountMax,DnnAreaCountMean,DnnAreaCountMin,DnnAreaCountStdDev,DnnAreaMax,DnnAreaMean,DnnAreaMin,DnnAreaStdDev,DnnBin1Max,DnnBin1Mean,DnnBin1Min,DnnBin1StdDev,DnnBin2Max,DnnBin2Mean,DnnBin2Min,DnnBin2StdDev,DnnBin3Max,DnnBin3Mean,DnnBin3Min,DnnBin3StdDev,DnnBin4Max,DnnBin4Mean,DnnBin4Min,DnnBin4StdDev,DnnBin5Max,DnnBin5Mean,DnnBin5Min,DnnBin5StdDev,DnnBin6Max,DnnBin6Mean,DnnBin6Min,DnnBin6StdDev,DnnBin7Max,DnnBin7Mean,DnnBin7Min,DnnBin7StdDev,DnnBin8Max,DnnBin8Mean,DnnBin8Min,DnnBin8StdDev,DnnHazeAvgMax,DnnHazeAvgMean,DnnHazeAvgMin,DnnHazeAvgStdDev,DnnHazeMedianMax,DnnHazeMedianMean,DnnHazeMedianMin,DnnHazeMedianStdDev,DnnHazeStdDevMax,DnnHazeStdDevMean,DnnHazeStdDevMin,DnnHazeStdDevStdDev,DnnLpdESMax,DnnLpdESMean,DnnLpdESMin,DnnLpdESStdDev,DnnLpdMax,DnnLpdMean,DnnLpdMin,DnnLpdNMax,DnnLpdNMean,DnnLpdNMin,DnnLpdNStdDev,DnnLpdStdDev,DnnMicroScrMax,DnnMicroScrMean,DnnMicroScrMin,DnnMicroScrStdDev,DnnScrMax,DnnScrMean,DnnScrMin,DnnScrStdDev,DnnSlipMax,DnnSlipMean,DnnSlipMin,DnnSlipStdDev,DwnAllMax,DwnAllMean,DwnAllMin,DwnAllStdDev,DwnAreaCountMax,DwnAreaCountMean,DwnAreaCountMin,DwnAreaCountStdDev,DwnAreaMax,DwnAreaMean,DwnAreaMin,DwnAreaStdDev,DwnBin1Max,DwnBin1Mean,DwnBin1Min,DwnBin1StdDev,DwnBin2Max,DwnBin2Mean,DwnBin2Min,DwnBin2StdDev,DwnBin3Max,DwnBin3Mean,DwnBin3Min,DwnBin3StdDev,DwnBin4Max,DwnBin4Mean,DwnBin4Min,DwnBin4StdDev,DwnBin5Max,DwnBin5Mean,DwnBin5Min,DwnBin5StdDev,DwnBin6Max,DwnBin6Mean,DwnBin6Min,DwnBin6StdDev,DwnBin7Max,DwnBin7Mean,DwnBin7Min,DwnBin7StdDev,DwnBin8Max,DwnBin8Mean,DwnBin8Min,DwnBin8StdDev,DwnHazeAvgMax,DwnHazeAvgMean,DwnHazeAvgMin,DwnHazeAvgStdDev,DwnHazeMedianMax,DwnHazeMedianMean,DwnHazeMedianMin,DwnHazeMedianStdDev,DwnHazeStdDevMax,DwnHazeStdDevMean,DwnHazeStdDevMin,DwnHazeStdDevStdDev,DwnLpdESMax,DwnLpdESMean,DwnLpdESMin,DwnLpdESStdDev,DwnLpdMax,DwnLpdMean,DwnLpdMin,DwnLpdNMax,DwnLpdNMean,DwnLpdNMin,DwnLpdNStdDev,DwnLpdStdDev,DwnMicroScrMax,DwnMicroScrMean,DwnMicroScrMin,DwnMicroScrStdDev,DwnScrMax,DwnScrMean,DwnScrMin,DwnScrStdDev,DwnSlipMax,DwnSlipMean,DwnSlipMin,DwnSlipStdDev,DcnAll,DcnArea,DcnAreaCount,DcnBin1,DcnBin2,DcnBin3,DcnBin4,DcnBin5,DcnBin6,DcnBin7,DcnBin8,DcnHazeAvg,DcnHazeMedian,DcnHazeStdDev,DcnLpd,DcnLpdES,DcnLpdN,DcnMicroScr,DcnScr,DcnSlip,DnnAll,DnnArea,DnnAreaCount,DnnBin1,DnnBin2,DnnBin3,DnnBin4,DnnBin5,DnnBin6,DnnBin7,DnnBin8,DnnHazeAvg,DnnHazeMedian,DnnHazeStdDev,DnnLpd,DnnLpdES,DnnLpdN,DnnMicroScr,DnnScr,DnnSlip,DwnAll,DwnArea,DwnAreaCount,DwnBin1,DwnBin2,DwnBin3,DwnBin4,DwnBin5,DwnBin6,DwnBin7,DwnBin8,DwnHazeAvg,DwnHazeMedian,DwnHazeStdDev,DwnLpd,DwnLpdES,DwnLpdN,DwnMicroScr,DwnScr,DwnSlip";
 | 
			
		||||
        // string args9 = "Time,A_LOGISTICS,B_LOGISTICS,Count,Sequence,MesEntity,Index,Lot,Session,DcnAllMin,DcnLpdMin,DcnLpdNMin,DcnLpdESMin,DcnMicroScrMin,DcnScrMin,DcnSlipMin,DcnAreaCountMin,DcnAreaMin,DcnHazeAvgMin,DcnHazeMedianMin,DcnHazeStdDevMin,DcnBin1Min,DcnBin2Min,DcnBin3Min,DcnBin4Min,DcnBin5Min,DcnBin6Min,DcnBin7Min,DcnBin8Min,DcnAllMax,DcnLpdMax,DcnLpdNMax,DcnLpdESMax,DcnMicroScrMax,DcnScrMax,DcnSlipMax,DcnAreaCountMax,DcnAreaMax,DcnHazeAvgMax,DcnHazeMedianMax,DcnHazeStdDevMax,DcnBin1Max,DcnBin2Max,DcnBin3Max,DcnBin4Max,DcnBin5Max,DcnBin6Max,DcnBin7Max,DcnBin8Max,DcnAllMean,DcnLpdMean,DcnLpdNMean,DcnLpdESMean,DcnMicroScrMean,DcnScrMean,DcnSlipMean,DcnAreaCountMean,DcnAreaMean,DcnHazeAvgMean,DcnHazeMedianMean,DcnHazeStdDevMean,DcnBin1Mean,DcnBin2Mean,DcnBin3Mean,DcnBin4Mean,DcnBin5Mean,DcnBin6Mean,DcnBin7Mean,DcnBin8Mean,DcnAllStdDev,DcnLpdStdDev,DcnLpdNStdDev,DcnLpdESStdDev,DcnMicroScrStdDev,DcnScrStdDev,DcnSlipStdDev,DcnAreaCountStdDev,DcnAreaStdDev,DcnHazeAvgStdDev,DcnHazeMedianStdDev,DcnHazeStdDevStdDev,DcnBin1StdDev,DcnBin2StdDev,DcnBin3StdDev,DcnBin4StdDev,DcnBin5StdDev,DcnBin6StdDev,DcnBin7StdDev,DcnBin8StdDev,DwnAllMin,DwnLpdMin,DwnLpdNMin,DwnLpdESMin,DwnMicroScrMin,DwnScrMin,DwnSlipMin,DwnAreaCountMin,DwnAreaMin,DwnHazeAvgMin,DwnHazeMedianMin,DwnHazeStdDevMin,DwnBin1Min,DwnBin2Min,DwnBin3Min,DwnBin4Min,DwnBin5Min,DwnBin6Min,DwnBin7Min,DwnBin8Min,DwnAllMax,DwnLpdMax,DwnLpdNMax,DwnLpdESMax,DwnMicroScrMax,DwnScrMax,DwnSlipMax,DwnAreaCountMax,DwnAreaMax,DwnHazeAvgMax,DwnHazeMedianMax,DwnHazeStdDevMax,DwnBin1Max,DwnBin2Max,DwnBin3Max,DwnBin4Max,DwnBin5Max,DwnBin6Max,DwnBin7Max,DwnBin8Max,DwnAllMean,DwnLpdMean,DwnLpdNMean,DwnLpdESMean,DwnMicroScrMean,DwnScrMean,DwnSlipMean,DwnAreaCountMean,DwnAreaMean,DwnHazeAvgMean,DwnHazeMedianMean,DwnHazeStdDevMean,DwnBin1Mean,DwnBin2Mean,DwnBin3Mean,DwnBin4Mean,DwnBin5Mean,DwnBin6Mean,DwnBin7Mean,DwnBin8Mean,DwnAllStdDev,DwnLpdStdDev,DwnLpdNStdDev,DwnLpdESStdDev,DwnMicroScrStdDev,DwnScrStdDev,DwnSlipStdDev,DwnAreaCountStdDev,DwnAreaStdDev,DwnHazeAvgStdDev,DwnHazeMedianStdDev,DwnHazeStdDevStdDev,DwnBin1StdDev,DwnBin2StdDev,DwnBin3StdDev,DwnBin4StdDev,DwnBin5StdDev,DwnBin6StdDev,DwnBin7StdDev,DwnBin8StdDev,DnnAllMin,DnnLpdMin,DnnLpdNMin,DnnLpdESMin,DnnMicroScrMin,DnnScrMin,DnnSlipMin,DnnAreaCountMin,DnnAreaMin,DnnHazeAvgMin,DnnHazeMedianMin,DnnHazeStdDevMin,DnnBin1Min,DnnBin2Min,DnnBin3Min,DnnBin4Min,DnnBin5Min,DnnBin6Min,DnnBin7Min,DnnBin8Min,DnnAllMax,DnnLpdMax,DnnLpdNMax,DnnLpdESMax,DnnMicroScrMax,DnnScrMax,DnnSlipMax,DnnAreaCountMax,DnnAreaMax,DnnHazeAvgMax,DnnHazeMedianMax,DnnHazeStdDevMax,DnnBin1Max,DnnBin2Max,DnnBin3Max,DnnBin4Max,DnnBin5Max,DnnBin6Max,DnnBin7Max,DnnBin8Max,DnnAllMean,DnnLpdMean,DnnLpdNMean,DnnLpdESMean,DnnMicroScrMean,DnnScrMean,DnnSlipMean,DnnAreaCountMean,DnnAreaMean,DnnHazeAvgMean,DnnHazeMedianMean,DnnHazeStdDevMean,DnnBin1Mean,DnnBin2Mean,DnnBin3Mean,DnnBin4Mean,DnnBin5Mean,DnnBin6Mean,DnnBin7Mean,DnnBin8Mean,DnnAllStdDev,DnnLpdStdDev,DnnLpdNStdDev,DnnLpdESStdDev,DnnMicroScrStdDev,DnnScrStdDev,DnnSlipStdDev,DnnAreaCountStdDev,DnnAreaStdDev,DnnHazeAvgStdDev,DnnHazeMedianStdDev,DnnHazeStdDevStdDev,DnnBin1StdDev,DnnBin2StdDev,DnnBin3StdDev,DnnBin4StdDev,DnnBin5StdDev,DnnBin6StdDev,DnnBin7StdDev,DnnBin8StdDev,Side,WaferID,Grade,SrcDest,DcnAll,DcnLpd,DcnLpdN,DcnLpdES,DcnMicroScr,DcnScr,DcnSlip,DcnAreaCount,DcnArea,DcnHazeAvg,DcnHazeMedian,DcnHazeStdDev,DcnBin1,DcnBin2,DcnBin3,DcnBin4,DcnBin5,DcnBin6,DcnBin7,DcnBin8,DwnAll,DwnLpd,DwnLpdN,DwnLpdES,DwnMicroScr,DwnScr,DwnSlip,DwnAreaCount,DwnArea,DwnHazeAvg,DwnHazeMedian,DwnHazeStdDev,DwnBin1,DwnBin2,DwnBin3,DwnBin4,DwnBin5,DwnBin6,DwnBin7,DwnBin8,DnnAll,DnnLpd,DnnLpdN,DnnLpdES,DnnMicroScr,DnnScr,DnnSlip,DnnAreaCount,DnnArea,DnnHazeAvg,DnnHazeMedian,DnnHazeStdDev,DnnBin1,DnnBin2,DnnBin3,DnnBin4,DnnBin5,DnnBin6,DnnBin7,DnnBin8,RDS,PSN,Reactor,Layer,Zone,Employee,InferredLot,Date,EventId";
 | 
			
		||||
        // string args10 = "0,1,2,319,3,6,5,320,318,7,314,315,8,251,-1,313,8,249,252,-1,250,29,49,9,69,36,56,16,76,37,57,17,77,41,61,21,81,42,62,22,82,43,63,23,83,44,64,24,84,45,65,25,85,46,66,26,86,47,67,27,87,48,68,28,88,38,58,18,78,39,59,19,79,40,60,20,80,32,52,12,72,30,50,10,31,51,11,71,70,33,53,13,73,34,54,14,74,35,55,15,75,189,209,169,229,196,216,176,236,197,217,177,237,201,221,181,241,202,222,182,242,203,223,183,243,204,224,184,244,205,225,185,245,206,226,186,246,207,227,187,247,208,228,188,248,198,218,178,238,199,219,179,239,200,220,180,240,192,212,172,232,190,210,170,191,211,171,231,230,193,213,173,233,194,214,174,234,195,215,175,235,109,129,89,149,116,136,96,156,117,137,97,157,121,141,101,161,122,142,102,162,123,143,103,163,124,144,104,164,125,145,105,165,126,146,106,166,127,147,107,167,128,148,108,168,118,138,98,158,119,139,99,159,120,140,100,160,112,132,92,152,110,130,90,111,131,91,151,150,113,133,93,153,114,134,94,154,115,135,95,155,253,261,260,265,266,267,268,269,270,271,272,262,263,264,254,256,255,257,258,259,293,301,300,305,306,307,308,309,310,311,312,302,303,304,294,296,295,297,298,299,273,281,280,285,286,287,288,289,290,291,292,282,283,284,274,276,275,277,278,279";
 | 
			
		||||
        string[] segments = args7.Split(',');
 | 
			
		||||
        ReadOnlyCollection<string> ignoreColumns = new(args4.Split(','));
 | 
			
		||||
        ReadOnlyCollection<string> backfillColumns = new(args5.Split(','));
 | 
			
		||||
        ReadOnlyCollection<string> indexOnlyColumns = new(args6.Split(','));
 | 
			
		||||
        ReadOnlyCollection<string> newColumnNames = new(processDataStandardFormatMappingNewColumnNames.Split(','));
 | 
			
		||||
        ReadOnlyCollection<string> oldColumnNames = new(processDataStandardFormatMappingOldColumnNames.Split(','));
 | 
			
		||||
        ReadOnlyCollection<int> columnIndices = new(processDataStandardFormatMappingColumnIndices.Split(',').Select(int.Parse).ToArray());
 | 
			
		||||
        foreach (string segment in segments)
 | 
			
		||||
        {
 | 
			
		||||
            segmentsB = segment.Split('|');
 | 
			
		||||
            if (segmentsB.Length != 2)
 | 
			
		||||
                continue;
 | 
			
		||||
            if (distinct.Contains(segmentsB[0]))
 | 
			
		||||
                continue;
 | 
			
		||||
            distinct.Add(segmentsB[0]);
 | 
			
		||||
            keyValuePairs.Add(segmentsB[0], segmentsB[1]);
 | 
			
		||||
        }
 | 
			
		||||
        result = new(backfillColumns: backfillColumns,
 | 
			
		||||
                     columnIndices: columnIndices,
 | 
			
		||||
                     newColumnNames: newColumnNames,
 | 
			
		||||
                     ignoreColumns: ignoreColumns,
 | 
			
		||||
                     indexOnlyColumns: indexOnlyColumns,
 | 
			
		||||
                     keyValuePairs: new(keyValuePairs),
 | 
			
		||||
                     oldColumnNames: oldColumnNames);
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static ReadOnlyCollection<PreWith> GetPreWithCollection(ReadOnlyCollection<Pre> preCollection)
 | 
			
		||||
    {
 | 
			
		||||
        List<PreWith> results = new();
 | 
			
		||||
@ -221,7 +185,11 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
            if (!Directory.Exists(checkDirectory))
 | 
			
		||||
                _ = Directory.CreateDirectory(checkDirectory);
 | 
			
		||||
            noWaitDirectory = Path.Combine(checkDirectory, "NoWaitDirectory");
 | 
			
		||||
            preWith = new(pre.MatchingFile, pre.CheckFile, errFile, checkDirectory, noWaitDirectory);
 | 
			
		||||
            preWith = new(checkDirectory: checkDirectory,
 | 
			
		||||
                          checkFile: pre.CheckFile,
 | 
			
		||||
                          errFile: errFile,
 | 
			
		||||
                          matchingFile: pre.MatchingFile,
 | 
			
		||||
                          noWaitDirectory: noWaitDirectory);
 | 
			
		||||
            results.Add(preWith);
 | 
			
		||||
        }
 | 
			
		||||
        return results.AsReadOnly();
 | 
			
		||||
@ -275,7 +243,7 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        return results.AsReadOnly();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void MoveCollection(DateTime dateTime, ProcessDataStandardFormat? processDataStandardFormat, ReadOnlyCollection<PreWith> preWithCollection)
 | 
			
		||||
    private void MoveCollection(DateTime dateTime, ProcessDataStandardFormat processDataStandardFormat, ReadOnlyCollection<PreWith> preWithCollection)
 | 
			
		||||
    {
 | 
			
		||||
        ReadOnlyCollection<Post> postCollection = GetPostCollection(dateTime, processDataStandardFormat, preWithCollection);
 | 
			
		||||
        if (postCollection.Count != 0)
 | 
			
		||||
@ -294,7 +262,7 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private ReadOnlyCollection<Post> GetPostCollection(DateTime dateTime, ProcessDataStandardFormat? processDataStandardFormat, ReadOnlyCollection<PreWith> preWithCollection)
 | 
			
		||||
    private ReadOnlyCollection<Post> GetPostCollection(DateTime dateTime, ProcessDataStandardFormat processDataStandardFormat, ReadOnlyCollection<PreWith> preWithCollection)
 | 
			
		||||
    {
 | 
			
		||||
        List<Post> results = new();
 | 
			
		||||
        Post post;
 | 
			
		||||
@ -303,12 +271,12 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        {
 | 
			
		||||
            if (!_IsEAFHosted)
 | 
			
		||||
                continue;
 | 
			
		||||
            if (processDataStandardFormat is null)
 | 
			
		||||
            if (!_StaticRuns.TryGetValue(_Logistics.Sequence, out List<Shared.Metrology.WS.Results>? wsResults))
 | 
			
		||||
                wsResults = null;
 | 
			
		||||
            if (processDataStandardFormat.InputPDSF is null)
 | 
			
		||||
                File.Move(preWith.MatchingFile, preWith.CheckFile);
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                if (!_StaticRuns.TryGetValue(_Logistics.Sequence, out List<Shared.Metrology.WS.Results>? wsResults))
 | 
			
		||||
                    wsResults = null;
 | 
			
		||||
                ProcessDataStandardFormat.Write(preWith.CheckFile, processDataStandardFormat, wsResults);
 | 
			
		||||
                File.Delete(preWith.MatchingFile);
 | 
			
		||||
            }
 | 
			
		||||
@ -345,17 +313,10 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
    private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
 | 
			
		||||
    {
 | 
			
		||||
        Tuple<string, Test[], JsonElement[], List<FileInfo>> results = new(string.Empty, Array.Empty<Test>(), Array.Empty<JsonElement>(), new List<FileInfo>());
 | 
			
		||||
        ProcessDataStandardFormat? processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, _ProcessDataStandardFormatMapping);
 | 
			
		||||
        if (processDataStandardFormat is not null)
 | 
			
		||||
            _Logistics = new Logistics(reportFullPath, processDataStandardFormat);
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath);
 | 
			
		||||
            _Logistics = new Logistics(reportFullPath, processDataStandardFormat);
 | 
			
		||||
            processDataStandardFormat = null;
 | 
			
		||||
        }
 | 
			
		||||
        if (!_IsEAFHosted && processDataStandardFormat is not null)
 | 
			
		||||
            ProcessDataStandardFormat.Write(".pdsf", processDataStandardFormat, wsResults: null);
 | 
			
		||||
        ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, _ProcessDataStandardFormatMapping);
 | 
			
		||||
        _Logistics = new Logistics(reportFullPath, processDataStandardFormat);
 | 
			
		||||
        if (!_IsEAFHosted)
 | 
			
		||||
            ProcessDataStandardFormat.Write("../../.pdsf", processDataStandardFormat, wsResults: null);
 | 
			
		||||
        SetFileParameterLotIDToLogisticsMID();
 | 
			
		||||
        int numberLength = 2;
 | 
			
		||||
        long ticks = dateTime.Ticks;
 | 
			
		||||
@ -364,9 +325,12 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        ReadOnlyCollection<string> matchingFiles = GetMatchingFiles(ticks, reportFullPath, searchDirectories);
 | 
			
		||||
        if (matchingFiles.Count != searchDirectories.Count)
 | 
			
		||||
            throw new Exception($"Didn't find all files after {_BreakAfterSeconds} second(s)!");
 | 
			
		||||
        try
 | 
			
		||||
        { CreatePointerFile(numberLength, parentParentDirectory, matchingFiles); }
 | 
			
		||||
        catch (Exception) { }
 | 
			
		||||
        if (_IsEAFHosted)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            { CreatePointerFile(numberLength, parentParentDirectory, matchingFiles); }
 | 
			
		||||
            catch (Exception) { }
 | 
			
		||||
        }
 | 
			
		||||
        ReadOnlyCollection<Pre> preCollection = GetPreCollection(numberLength, parentParentDirectory, matchingFiles);
 | 
			
		||||
        ReadOnlyCollection<PreWith> preWithCollection = GetPreWithCollection(preCollection);
 | 
			
		||||
        MoveCollection(dateTime, processDataStandardFormat, preWithCollection);
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,6 @@ using System.Collections.Generic;
 | 
			
		||||
using System.Globalization;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Text.Json;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation.FileHandlers.OpenInsight;
 | 
			
		||||
@ -17,9 +16,7 @@ namespace Adaptation.FileHandlers.OpenInsight;
 | 
			
		||||
public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    private string _LastLines;
 | 
			
		||||
    private readonly string _IqsConnectionString;
 | 
			
		||||
    private readonly string _OpenInsightFilePattern;
 | 
			
		||||
    private readonly string _OpenInsightApiECDirectory;
 | 
			
		||||
 | 
			
		||||
    public FileRead(ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, Dictionary<long, List<WS.Results>> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) :
 | 
			
		||||
@ -34,10 +31,8 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
            throw new Exception(cellInstanceConnectionName);
 | 
			
		||||
        if (!_IsDuplicator)
 | 
			
		||||
            throw new Exception(cellInstanceConnectionName);
 | 
			
		||||
        _LastLines = string.Empty;
 | 
			
		||||
        _IqsConnectionString = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "IQS.ConnectionString");
 | 
			
		||||
        _OpenInsightApiECDirectory = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "API.EC.Directory");
 | 
			
		||||
        _OpenInsightFilePattern = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "OpenInsight.FilePattern");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception)
 | 
			
		||||
@ -115,120 +110,61 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal static Tuple<string, string> GetLines(Logistics logistics, List<txt.Description> descriptions)
 | 
			
		||||
    {
 | 
			
		||||
        StringBuilder result = new();
 | 
			
		||||
        char del = '\t';
 | 
			
		||||
        txt.Description x = descriptions[0];
 | 
			
		||||
        _ = result.Append(x.DcnLpdMin).Append(del).    // 001 - 
 | 
			
		||||
            Append(x.DcnLpdMax).Append(del).       // 002 - 
 | 
			
		||||
            Append(x.DcnLpdMean).Append(del).      // 003 - DCN LPD
 | 
			
		||||
            Append(x.DcnAreaCountMin).Append(del). // 004 - 
 | 
			
		||||
            Append(x.DcnAreaCountMax).Append(del). // 005 - 
 | 
			
		||||
            Append(x.DcnAreaCountMean).Append(del).// 006 - DCN Area
 | 
			
		||||
            Append(x.DcnAreaMin).Append(del).      // 007 - 
 | 
			
		||||
            Append(x.DcnAreaMax).Append(del).      // 008 - 
 | 
			
		||||
            Append(x.Date).Append(del).            // 009 - 
 | 
			
		||||
            Append(x.DcnHazeAvgMean).Append(del).  // 010 - Haze Average
 | 
			
		||||
            Append(string.Empty).Append(del).              // 011 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 012 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 013 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 014 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 015 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 016 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 017 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 018 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 019 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 020 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 021 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 022 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 023 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 024 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 025 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 026 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 027 - 
 | 
			
		||||
            Append(x.RDS).Append(del).             // 028 - Lot
 | 
			
		||||
            Append(x.Reactor).Append(del).         // 029 - Process
 | 
			
		||||
            Append(x.Recipe).Append(del).          // 030 - Part
 | 
			
		||||
            Append(x.DcnScrMean).Append(del).      // 031 - Scratch Count
 | 
			
		||||
            Append(string.Empty).Append(del).              // 032 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 033 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 034 - 
 | 
			
		||||
            Append(x.DcnMicroScrMean).Append(del). // 035 - Scratch Length
 | 
			
		||||
            Append(string.Empty).Append(del).              // 036 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 037 - 
 | 
			
		||||
            Append(string.Empty).Append(del).              // 038 - 
 | 
			
		||||
            Append(x.DcnAllMean).Append(del).      // 039 - Average Sum of Defects
 | 
			
		||||
            Append(x.DcnAllMax).Append(del).       // 040 - Max Sum of defects
 | 
			
		||||
            Append(x.DcnAllMin).Append(del).       // 041 - Min Sum of Defects
 | 
			
		||||
            Append(string.Empty).Append(del).              // 042 - 
 | 
			
		||||
            Append(logistics.MesEntity).Append(del).                 // 043 - 
 | 
			
		||||
            Append(x.DcnAreaMean).Append(del).     // 044 - DCN MM2
 | 
			
		||||
            AppendLine();
 | 
			
		||||
        return new Tuple<string, string>(result.ToString(), x.Date);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void SaveOpenInsightFile(string reportFullPath, DateTime dateTime, ProcessDataStandardFormat processDataStandardFormat, List<txt.Description> descriptions, Test[] tests)
 | 
			
		||||
    private void SaveOpenInsightFile(string reportFullPath, DateTime dateTime, List<txt.Description> descriptions, Test[] tests)
 | 
			
		||||
    {
 | 
			
		||||
        string duplicateFile;
 | 
			
		||||
        bool isDummyRun = false;
 | 
			
		||||
        List<(Shared.Properties.IScopeInfo, string)> collection = new();
 | 
			
		||||
        string duplicateDirectory = Path.Combine(_FileConnectorConfiguration.SourceFileLocation, _CellInstanceName);
 | 
			
		||||
        if (!Directory.Exists(duplicateDirectory))
 | 
			
		||||
            _ = Directory.CreateDirectory(duplicateDirectory);
 | 
			
		||||
        string successDirectory = _FileConnectorConfiguration.AlternateTargetFolder;
 | 
			
		||||
        if (!Directory.Exists(Path.Combine(duplicateDirectory, "1")))
 | 
			
		||||
        {
 | 
			
		||||
            string parentParent = GetParentParent(_FileConnectorConfiguration.SourceFileLocation);
 | 
			
		||||
            if (parentParent.Contains(_CellInstanceName))
 | 
			
		||||
                parentParent = Path.GetDirectoryName(parentParent);
 | 
			
		||||
            duplicateDirectory = Path.Combine(parentParent, "Data");
 | 
			
		||||
            if (!Directory.Exists(duplicateDirectory))
 | 
			
		||||
                _ = Directory.CreateDirectory(duplicateDirectory);
 | 
			
		||||
        }
 | 
			
		||||
        string duplicateFile = Path.Combine(duplicateDirectory, Path.GetFileName(reportFullPath));
 | 
			
		||||
        if (descriptions.Count == 0 || tests.Length == 0)
 | 
			
		||||
            _LastLines = string.Empty;
 | 
			
		||||
            duplicateFile = Path.Combine(duplicateDirectory, Path.GetFileName(reportFullPath));
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            Tuple<string, string> lines = GetLines(_Logistics, descriptions);
 | 
			
		||||
            string check = lines.Item1.Replace(lines.Item2, "$Date$");
 | 
			
		||||
            bool save = string.IsNullOrEmpty(_LastLines) || check != _LastLines;
 | 
			
		||||
            if (save && !string.IsNullOrEmpty(check))
 | 
			
		||||
            long? subgroupId;
 | 
			
		||||
            string fileName = Path.GetFileName(reportFullPath);
 | 
			
		||||
            long breakAfter = dateTime.AddSeconds(_BreakAfterSeconds).Ticks;
 | 
			
		||||
            long preWait = _FileConnectorConfiguration?.FileHandleWaitTime is null ? dateTime.AddMilliseconds(1234).Ticks : dateTime.AddMilliseconds(_FileConnectorConfiguration.FileHandleWaitTime.Value).Ticks;
 | 
			
		||||
            if (string.IsNullOrEmpty(descriptions[0].Reactor) || string.IsNullOrEmpty(descriptions[0].PSN))
 | 
			
		||||
                subgroupId = null;
 | 
			
		||||
            else
 | 
			
		||||
                (subgroupId, int? _, string _) = FromIQS.GetCommandText(_IqsConnectionString, _Logistics, descriptions[0], breakAfter, preWait);
 | 
			
		||||
            if (_StaticRuns.TryGetValue(_Logistics.Sequence, out List<WS.Results> wsResults))
 | 
			
		||||
            {
 | 
			
		||||
                long? subgroupId;
 | 
			
		||||
                _LastLines = check;
 | 
			
		||||
                long breakAfter = dateTime.AddSeconds(_BreakAfterSeconds).Ticks;
 | 
			
		||||
                long preWait = _FileConnectorConfiguration?.FileHandleWaitTime is null ? dateTime.AddMilliseconds(1234).Ticks : dateTime.AddMilliseconds(_FileConnectorConfiguration.FileHandleWaitTime.Value).Ticks;
 | 
			
		||||
                if (string.IsNullOrEmpty(descriptions[0].Reactor) || string.IsNullOrEmpty(descriptions[0].PSN))
 | 
			
		||||
                    subgroupId = null;
 | 
			
		||||
                else
 | 
			
		||||
                    (subgroupId, int? _, string _) = FromIQS.GetCommandText(_IqsConnectionString, _Logistics, descriptions[0], breakAfter, preWait);
 | 
			
		||||
                if (subgroupId is null)
 | 
			
		||||
                    collection.Add(new(new ScopeInfo(tests[0], _OpenInsightFilePattern), lines.Item1));
 | 
			
		||||
                else
 | 
			
		||||
                    collection.Add(new(new ScopeInfo(tests[0], $"{subgroupId.Value} {_OpenInsightFilePattern}"), lines.Item1));
 | 
			
		||||
                string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
 | 
			
		||||
                FromIQS.Save(_OpenInsightApiECDirectory, _Logistics, reportFullPath, processDataStandardFormat, descriptions.First(), lines.Item1, subgroupId, weekOfYear);
 | 
			
		||||
                if (wsResults is null || wsResults.Count != 1)
 | 
			
		||||
                    throw new NullReferenceException($"{nameof(wsResults)} {wsResults?.Count} != 1 {_Logistics.Sequence}!");
 | 
			
		||||
                lock (_StaticRuns)
 | 
			
		||||
                    wsResults[0] = WS.Results.Get(wsResults[0], subgroupId);
 | 
			
		||||
            }
 | 
			
		||||
            if (!Directory.Exists(duplicateDirectory))
 | 
			
		||||
                _ = Directory.CreateDirectory(duplicateDirectory);
 | 
			
		||||
            if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
 | 
			
		||||
                WaitForFileConsumption(dateTime, descriptions, isDummyRun, successDirectory, duplicateDirectory, collection, duplicateFile);
 | 
			
		||||
            if (!fileName.StartsWith("Viewer"))
 | 
			
		||||
                duplicateFile = Path.Combine(duplicateDirectory, $"{subgroupId} {fileName}".TrimStart());
 | 
			
		||||
            else
 | 
			
		||||
                duplicateFile = Path.Combine(duplicateDirectory, $"{$"Viewer {subgroupId}".TrimEnd()} {fileName.Replace("Viewer", string.Empty)}");
 | 
			
		||||
            string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
 | 
			
		||||
            FromIQS.Save(_OpenInsightApiECDirectory, _Logistics, reportFullPath, descriptions.First(), subgroupId, weekOfYear);
 | 
			
		||||
        }
 | 
			
		||||
        if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
 | 
			
		||||
        {
 | 
			
		||||
            File.Copy(reportFullPath, duplicateFile, overwrite: true);
 | 
			
		||||
            WaitForFileConsumption(dateTime, descriptions, isDummyRun, successDirectory, duplicateDirectory, collection, duplicateFile);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
 | 
			
		||||
    {
 | 
			
		||||
        Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
 | 
			
		||||
        ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath);
 | 
			
		||||
        string[] lines = File.ReadAllLines(reportFullPath);
 | 
			
		||||
        ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines);
 | 
			
		||||
        _Logistics = new Logistics(reportFullPath, processDataStandardFormat);
 | 
			
		||||
        SetFileParameterLotIDToLogisticsMID();
 | 
			
		||||
        JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat);
 | 
			
		||||
        JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat);
 | 
			
		||||
        List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements);
 | 
			
		||||
        Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
 | 
			
		||||
        if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
 | 
			
		||||
            SaveOpenInsightFile(reportFullPath, dateTime, processDataStandardFormat, descriptions, tests);
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
            SaveOpenInsightFile(reportFullPath, dateTime, descriptions, tests);
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -325,80 +325,18 @@ public class FromIQS
 | 
			
		||||
        return new(result, count, commandText);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static string GetJson(Logistics logistics, ProcessDataStandardFormat processDataStandardFormat, txt.Description description)
 | 
			
		||||
    internal static void Save(string openInsightApiECDirectory, Logistics logistics, string reportFullPath, txt.Description description, long? subGroupId, string weekOfYear)
 | 
			
		||||
    {
 | 
			
		||||
        string result;
 | 
			
		||||
        StringBuilder stringBuilder = new();
 | 
			
		||||
        var @object = new
 | 
			
		||||
        {
 | 
			
		||||
            description.MesEntity,
 | 
			
		||||
            description.Employee,
 | 
			
		||||
            // description.Layer,
 | 
			
		||||
            description.PSN,
 | 
			
		||||
            description.RDS,
 | 
			
		||||
            description.Reactor,
 | 
			
		||||
            description.Recipe,
 | 
			
		||||
            // description.Zone,
 | 
			
		||||
            logistics.DateTimeFromSequence.Ticks
 | 
			
		||||
        };
 | 
			
		||||
        string[] pair;
 | 
			
		||||
        string safeValue;
 | 
			
		||||
        string[] segments;
 | 
			
		||||
        string serializerValue;
 | 
			
		||||
        foreach (string line in processDataStandardFormat.Logistics)
 | 
			
		||||
        {
 | 
			
		||||
            segments = line.Split('\t');
 | 
			
		||||
            if (segments.Length < 2)
 | 
			
		||||
                continue;
 | 
			
		||||
            segments = segments[1].Split(';');
 | 
			
		||||
            _ = stringBuilder.Append('{');
 | 
			
		||||
            foreach (string segment in segments)
 | 
			
		||||
            {
 | 
			
		||||
                pair = segment.Split('=');
 | 
			
		||||
                if (pair.Length != 2 || pair[0].Length < 3)
 | 
			
		||||
                    continue;
 | 
			
		||||
                serializerValue = JsonSerializer.Serialize(pair[1]);
 | 
			
		||||
                safeValue = serializerValue.Substring(1, serializerValue.Length - 2);
 | 
			
		||||
                _ = stringBuilder.Append('"').Append(pair[0].Substring(2)).Append('"').Append(':').Append('"').Append(safeValue).Append('"').Append(',');
 | 
			
		||||
            }
 | 
			
		||||
            if (stringBuilder.Length > 0)
 | 
			
		||||
                _ = stringBuilder.Remove(stringBuilder.Length - 1, 1);
 | 
			
		||||
            _ = stringBuilder.Append('}').Append(',');
 | 
			
		||||
        }
 | 
			
		||||
        if (stringBuilder.Length > 0)
 | 
			
		||||
            _ = stringBuilder.Remove(stringBuilder.Length - 1, 1);
 | 
			
		||||
        _ = stringBuilder.Append(']').Append('}');
 | 
			
		||||
        _ = stringBuilder.Insert(0, ",\"Logistics\":[");
 | 
			
		||||
        string json = JsonSerializer.Serialize(@object);
 | 
			
		||||
        _ = stringBuilder.Insert(0, json.Substring(0, json.Length - 1));
 | 
			
		||||
        JsonElement? jsonElement = JsonSerializer.Deserialize<JsonElement>(stringBuilder.ToString());
 | 
			
		||||
        result = jsonElement is null ? "{}" : JsonSerializer.Serialize(jsonElement, new JsonSerializerOptions { WriteIndented = true });
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal static void Save(string openInsightApiECDirectory, Logistics logistics, string reportFullPath, ProcessDataStandardFormat processDataStandardFormat, txt.Description description, string lines, long? subGroupId, string weekOfYear)
 | 
			
		||||
    {
 | 
			
		||||
        string checkFile;
 | 
			
		||||
        string fileName = Path.GetFileName(reportFullPath);
 | 
			
		||||
        string json = GetJson(logistics, processDataStandardFormat, description);
 | 
			
		||||
        string? ecPathRoot = Path.GetPathRoot(openInsightApiECDirectory);
 | 
			
		||||
        bool ecExists = ecPathRoot is not null && Directory.Exists(ecPathRoot);
 | 
			
		||||
        string weekYear = $"{logistics.DateTimeFromSequence:yyyy}_Week_{weekOfYear}";
 | 
			
		||||
        string ecDirectory = Path.Combine(openInsightApiECDirectory, weekYear, $"-{description.PSN}", $"-{description.Reactor}", $"-{description.RDS}", $"-{subGroupId}");
 | 
			
		||||
        if (ecExists && !Directory.Exists(ecDirectory))
 | 
			
		||||
            _ = Directory.CreateDirectory(ecDirectory);
 | 
			
		||||
        checkFile = Path.Combine(ecDirectory, fileName);
 | 
			
		||||
        string checkFile = Path.Combine(ecDirectory, fileName);
 | 
			
		||||
        if (ecExists && !File.Exists(checkFile))
 | 
			
		||||
            File.Copy(reportFullPath, checkFile);
 | 
			
		||||
        checkFile = Path.Combine(ecDirectory, $"{logistics.DateTimeFromSequence.Ticks}.txt");
 | 
			
		||||
        if (ecExists && !File.Exists(checkFile))
 | 
			
		||||
            File.WriteAllText(checkFile, lines);
 | 
			
		||||
        checkFile = Path.Combine(ecDirectory, $"{logistics.DateTimeFromSequence.Ticks}.json");
 | 
			
		||||
        if (ecExists && !File.Exists(checkFile))
 | 
			
		||||
            File.WriteAllText(checkFile, json);
 | 
			
		||||
        checkFile = Path.Combine(ecDirectory, $"{logistics.DateTimeFromSequence.Ticks}.lbl");
 | 
			
		||||
        if (ecExists && !File.Exists(checkFile))
 | 
			
		||||
            File.WriteAllText(checkFile, processDataStandardFormat.Body[processDataStandardFormat.Body.Count - 1]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static string GetCommandText(string[] iqsCopyValues)
 | 
			
		||||
 | 
			
		||||
@ -110,10 +110,10 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void SendData(string reportFullPath, DateTime dateTime, List<txt.Description> descriptions)
 | 
			
		||||
    private void SendData(string reportFullPath, DateTime dateTime, JsonElement[] jsonElements, List<txt.Description> descriptions)
 | 
			
		||||
    {
 | 
			
		||||
        string checkDirectory;
 | 
			
		||||
        WSRequest wsRequest = new(this, _Logistics, descriptions);
 | 
			
		||||
        WSRequest wsRequest = new(this, _Logistics, jsonElements, descriptions);
 | 
			
		||||
        int weekOfYear = _Calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
 | 
			
		||||
        string directory = Path.Combine(_OpenInsightMetrologyViewerFileShare, dateTime.Year.ToString(), $"WW{weekOfYear:00}");
 | 
			
		||||
        checkDirectory = Path.Combine(directory, _Logistics.Sequence.ToString());
 | 
			
		||||
@ -139,15 +139,16 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
    private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
 | 
			
		||||
    {
 | 
			
		||||
        Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
 | 
			
		||||
        ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath);
 | 
			
		||||
        string[] lines = File.ReadAllLines(reportFullPath);
 | 
			
		||||
        ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines);
 | 
			
		||||
        _Logistics = new Logistics(reportFullPath, processDataStandardFormat);
 | 
			
		||||
        SetFileParameterLotIDToLogisticsMID();
 | 
			
		||||
        JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat);
 | 
			
		||||
        JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat);
 | 
			
		||||
        List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements);
 | 
			
		||||
        Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
 | 
			
		||||
        if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
 | 
			
		||||
            SendData(reportFullPath, dateTime, descriptions);
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
            SendData(reportFullPath, dateTime, jsonElements, descriptions);
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@ using System.Collections.Generic;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text.Json;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation.FileHandlers.OpenInsightMetrologyViewer;
 | 
			
		||||
 | 
			
		||||
@ -16,8 +17,17 @@ public class WSRequest
 | 
			
		||||
    //
 | 
			
		||||
 | 
			
		||||
    public int Id { get; set; }
 | 
			
		||||
    public string AttemptCounter { get; set; }
 | 
			
		||||
    public string CellName { get; set; }
 | 
			
		||||
    public string Date { get; set; }
 | 
			
		||||
    public string DcnAllMax { get; set; }
 | 
			
		||||
    public string DcnAllMean { get; set; }
 | 
			
		||||
    public string DcnAllMin { get; set; }
 | 
			
		||||
    public string DcnAllStDev { get; set; }
 | 
			
		||||
    public string DcnAreaCntMax { get; set; }
 | 
			
		||||
    public string DcnAreaCntMean { get; set; }
 | 
			
		||||
    public string DcnAreaCntMin { get; set; }
 | 
			
		||||
    public string IndexOf { get; set; }
 | 
			
		||||
    public string LotID { get; set; }
 | 
			
		||||
    public string Operator { get; set; }
 | 
			
		||||
    public string PSN { get; set; }
 | 
			
		||||
@ -26,13 +36,6 @@ public class WSRequest
 | 
			
		||||
    public string Recipe { get; set; }
 | 
			
		||||
    public string Session { get; set; }
 | 
			
		||||
    public string UniqueID { get; set; }
 | 
			
		||||
    public string DcnAllMax { get; set; }
 | 
			
		||||
    public string DcnAllMean { get; set; }
 | 
			
		||||
    public string DcnAllMin { get; set; }
 | 
			
		||||
    public string DcnAllStDev { get; set; }
 | 
			
		||||
    public string DcnAreaCntMax { get; set; }
 | 
			
		||||
    public string DcnAreaCntMean { get; set; }
 | 
			
		||||
    public string DcnAreaCntMin { get; set; }
 | 
			
		||||
    public string DcnAreaCntStDev { get; set; }
 | 
			
		||||
    public string DcnAreaMax { get; set; }
 | 
			
		||||
    public string DcnAreaMean { get; set; }
 | 
			
		||||
@ -271,7 +274,7 @@ public class WSRequest
 | 
			
		||||
    [Obsolete("For json")] public WSRequest() { }
 | 
			
		||||
 | 
			
		||||
#pragma warning disable IDE0060
 | 
			
		||||
    internal WSRequest(IFileRead fileRead, Logistics logistics, List<txt.Description> descriptions, string processDataStandardFormat = null)
 | 
			
		||||
    internal WSRequest(IFileRead fileRead, Logistics logistics, JsonElement[] jsonElements, List<txt.Description> descriptions, string processDataStandardFormat = null)
 | 
			
		||||
#pragma warning restore IDE0060
 | 
			
		||||
    {
 | 
			
		||||
        Id = -1;
 | 
			
		||||
@ -283,252 +286,254 @@ public class WSRequest
 | 
			
		||||
            UniqueID = x.UniqueId;
 | 
			
		||||
            Date = x.Date;
 | 
			
		||||
            Reactor = x.Reactor;
 | 
			
		||||
            LotID = x.Lot;
 | 
			
		||||
            LotID = x.Lot; // different name
 | 
			
		||||
            Session = x.Session;
 | 
			
		||||
            AttemptCounter = x.AttemptCounter;
 | 
			
		||||
            IndexOf = x.IndexOf;
 | 
			
		||||
            DcnAllMin = x.DcnAllMin;
 | 
			
		||||
            DcnAllMax = x.DcnAllMax;
 | 
			
		||||
            DcnAllMean = x.DcnAllMean;
 | 
			
		||||
            DcnAllStDev = x.DcnAllStdDev;
 | 
			
		||||
            DcnAllStDev = x.DcnAllStdDev; // different name
 | 
			
		||||
            DcnLpdMin = x.DcnLpdMin;
 | 
			
		||||
            DcnLpdMax = x.DcnLpdMax;
 | 
			
		||||
            DcnLpdMean = x.DcnLpdMean;
 | 
			
		||||
            DcnLpdStDev = x.DcnLpdStdDev;
 | 
			
		||||
            DcnLpdStDev = x.DcnLpdStdDev; // different name
 | 
			
		||||
            DcnLpdNMin = x.DcnLpdNMin;
 | 
			
		||||
            DcnLpdNMax = x.DcnLpdNMax;
 | 
			
		||||
            DcnLpdNMean = x.DcnLpdNMean;
 | 
			
		||||
            DcnLpdNStDev = x.DcnLpdNStdDev;
 | 
			
		||||
            DcnLpdNStDev = x.DcnLpdNStdDev;  // different name
 | 
			
		||||
            DcnLpdESMin = x.DcnLpdESMin;
 | 
			
		||||
            DcnLpdESMax = x.DcnLpdESMax;
 | 
			
		||||
            DcnLpdESMean = x.DcnLpdESMean;
 | 
			
		||||
            DcnLpdESStDev = x.DcnLpdESStdDev;
 | 
			
		||||
            DcnLpdESStDev = x.DcnLpdESStdDev; // different name
 | 
			
		||||
            DcnMicroScrMin = x.DcnMicroScrMin;
 | 
			
		||||
            DcnMicroScrMax = x.DcnMicroScrMax;
 | 
			
		||||
            DcnMicroScrMean = x.DcnMicroScrMean;
 | 
			
		||||
            DcnMicroScrStDev = x.DcnMicroScrStdDev;
 | 
			
		||||
            DcnMicroScrStDev = x.DcnMicroScrStdDev; // different name
 | 
			
		||||
            DcnScrMin = x.DcnScrMin;
 | 
			
		||||
            DcnScrMax = x.DcnScrMax;
 | 
			
		||||
            DcnScrMean = x.DcnScrMean;
 | 
			
		||||
            DcnScrStDev = x.DcnScrStdDev;
 | 
			
		||||
            DcnScrStDev = x.DcnScrStdDev; // different name
 | 
			
		||||
            DcnSlipMin = x.DcnSlipMin;
 | 
			
		||||
            DcnSlipMax = x.DcnSlipMax;
 | 
			
		||||
            DcnSlipMean = x.DcnSlipMean;
 | 
			
		||||
            DcnSlipStDev = x.DcnSlipStdDev;
 | 
			
		||||
            DcnAreaCntMin = x.DcnAreaCountMin;
 | 
			
		||||
            DcnAreaCntMax = x.DcnAreaCountMax;
 | 
			
		||||
            DcnAreaCntMean = x.DcnAreaCountMean;
 | 
			
		||||
            DcnAreaCntStDev = x.DcnAreaCountStdDev;
 | 
			
		||||
            DcnSlipStDev = x.DcnSlipStdDev; // different name
 | 
			
		||||
            DcnAreaCntMin = x.DcnAreaCountMin; // different name
 | 
			
		||||
            DcnAreaCntMax = x.DcnAreaCountMax; // different name
 | 
			
		||||
            DcnAreaCntMean = x.DcnAreaCountMean; // different name
 | 
			
		||||
            DcnAreaCntStDev = x.DcnAreaCountStdDev;  // different name
 | 
			
		||||
            DcnAreaMin = x.DcnAreaMin;
 | 
			
		||||
            DcnAreaMax = x.DcnAreaMax;
 | 
			
		||||
            DcnAreaMean = x.DcnAreaMean;
 | 
			
		||||
            DcnAreaStDev = x.DcnAreaStdDev;
 | 
			
		||||
            DcnAreaStDev = x.DcnAreaStdDev; // different name
 | 
			
		||||
            DcnHazeAvgMin = x.DcnHazeAvgMin;
 | 
			
		||||
            DcnHazeAvgMax = x.DcnHazeAvgMax;
 | 
			
		||||
            DcnHazeAvgMean = x.DcnHazeAvgMean;
 | 
			
		||||
            DcnHazeAvgStDev = x.DcnHazeAvgStdDev;
 | 
			
		||||
            DcnHazeMedMin = x.DcnHazeMedianMin;
 | 
			
		||||
            DcnHazeMedMax = x.DcnHazeMedianMax;
 | 
			
		||||
            DcnHazeMedMean = x.DcnHazeMedianMean;
 | 
			
		||||
            DcnHazeMedStDev = x.DcnHazeMedianStdDev;
 | 
			
		||||
            DcnHazeStDevMin = x.DcnHazeStdDevMin;
 | 
			
		||||
            DcnHazeStDevMax = x.DcnHazeStdDevMax;
 | 
			
		||||
            DcnHazeStDevMean = x.DcnHazeStdDevMean;
 | 
			
		||||
            DcnHazeStDevStDev = x.DcnHazeStdDevStdDev;
 | 
			
		||||
            DcnHazeAvgStDev = x.DcnHazeAvgStdDev; // different name
 | 
			
		||||
            DcnHazeMedMin = x.DcnHazeMedianMin; // different name
 | 
			
		||||
            DcnHazeMedMax = x.DcnHazeMedianMax; // different name
 | 
			
		||||
            DcnHazeMedMean = x.DcnHazeMedianMean; // different name
 | 
			
		||||
            DcnHazeMedStDev = x.DcnHazeMedianStdDev; // different name
 | 
			
		||||
            DcnHazeStDevMin = x.DcnHazeStdDevMin; // different name
 | 
			
		||||
            DcnHazeStDevMax = x.DcnHazeStdDevMax; // different name
 | 
			
		||||
            DcnHazeStDevMean = x.DcnHazeStdDevMean; // different name
 | 
			
		||||
            DcnHazeStDevStDev = x.DcnHazeStdDevStdDev; // different name
 | 
			
		||||
            DcnBin1Min = x.DcnBin1Min;
 | 
			
		||||
            DcnBin1Max = x.DcnBin1Max;
 | 
			
		||||
            DcnBin1Mean = x.DcnBin1Mean;
 | 
			
		||||
            DcnBin1StDev = x.DcnBin1StdDev;
 | 
			
		||||
            DcnBin1StDev = x.DcnBin1StdDev; // different name
 | 
			
		||||
            DcnBin2Min = x.DcnBin2Min;
 | 
			
		||||
            DcnBin2Max = x.DcnBin2Max;
 | 
			
		||||
            DcnBin2Mean = x.DcnBin2Mean;
 | 
			
		||||
            DcnBin2StDev = x.DcnBin2StdDev;
 | 
			
		||||
            DcnBin2StDev = x.DcnBin2StdDev; // different name
 | 
			
		||||
            DcnBin3Min = x.DcnBin3Min;
 | 
			
		||||
            DcnBin3Max = x.DcnBin3Max;
 | 
			
		||||
            DcnBin3Mean = x.DcnBin3Mean;
 | 
			
		||||
            DcnBin3StDev = x.DcnBin3StdDev;
 | 
			
		||||
            DcnBin3StDev = x.DcnBin3StdDev; // different name
 | 
			
		||||
            DcnBin4Min = x.DcnBin4Min;
 | 
			
		||||
            DcnBin4Max = x.DcnBin4Max;
 | 
			
		||||
            DcnBin4Mean = x.DcnBin4Mean;
 | 
			
		||||
            DcnBin4StDev = x.DcnBin4StdDev;
 | 
			
		||||
            DcnBin4StDev = x.DcnBin4StdDev; // different name
 | 
			
		||||
            DcnBin5Min = x.DcnBin5Min;
 | 
			
		||||
            DcnBin5Max = x.DcnBin5Max;
 | 
			
		||||
            DcnBin5Mean = x.DcnBin5Mean;
 | 
			
		||||
            DcnBin5StDev = x.DcnBin5StdDev;
 | 
			
		||||
            DcnBin5StDev = x.DcnBin5StdDev; // different name
 | 
			
		||||
            DcnBin6Min = x.DcnBin6Min;
 | 
			
		||||
            DcnBin6Max = x.DcnBin6Max;
 | 
			
		||||
            DcnBin6Mean = x.DcnBin6Mean;
 | 
			
		||||
            DcnBin6StDev = x.DcnBin6StdDev;
 | 
			
		||||
            DcnBin6StDev = x.DcnBin6StdDev; // different name
 | 
			
		||||
            DcnBin7Min = x.DcnBin7Min;
 | 
			
		||||
            DcnBin7Max = x.DcnBin7Max;
 | 
			
		||||
            DcnBin7Mean = x.DcnBin7Mean;
 | 
			
		||||
            DcnBin7StDev = x.DcnBin7StdDev;
 | 
			
		||||
            DcnBin7StDev = x.DcnBin7StdDev; // different name
 | 
			
		||||
            DcnBin8Min = x.DcnBin8Min;
 | 
			
		||||
            DcnBin8Max = x.DcnBin8Max;
 | 
			
		||||
            DcnBin8Mean = x.DcnBin8Mean;
 | 
			
		||||
            DcnBin8StDev = x.DcnBin8StdDev;
 | 
			
		||||
            DcnBin8StDev = x.DcnBin8StdDev; // different name
 | 
			
		||||
            DwnAllMin = x.DwnAllMin;
 | 
			
		||||
            DwnAllMax = x.DwnAllMax;
 | 
			
		||||
            DwnAllMean = x.DwnAllMean;
 | 
			
		||||
            DwnAllStDev = x.DwnAllStdDev;
 | 
			
		||||
            DwnAllStDev = x.DwnAllStdDev; // different name
 | 
			
		||||
            DwnLpdMin = x.DwnLpdMin;
 | 
			
		||||
            DwnLpdMax = x.DwnLpdMax;
 | 
			
		||||
            DwnLpdMean = x.DwnLpdMean;
 | 
			
		||||
            DwnLpdStDev = x.DwnLpdStdDev;
 | 
			
		||||
            DwnLpdStDev = x.DwnLpdStdDev; // different name
 | 
			
		||||
            DwnLpdNMin = x.DwnLpdNMin;
 | 
			
		||||
            DwnLpdNMax = x.DwnLpdNMax;
 | 
			
		||||
            DwnLpdNMean = x.DwnLpdNMean;
 | 
			
		||||
            DwnLpdNStDev = x.DwnLpdNStdDev;
 | 
			
		||||
            DwnLpdNStDev = x.DwnLpdNStdDev; // different name
 | 
			
		||||
            DwnLpdESMin = x.DwnLpdESMin;
 | 
			
		||||
            DwnLpdESMax = x.DwnLpdESMax;
 | 
			
		||||
            DwnLpdESMean = x.DwnLpdESMean;
 | 
			
		||||
            DwnLpdESStDev = x.DwnLpdESStdDev;
 | 
			
		||||
            DwnLpdESStDev = x.DwnLpdESStdDev; // different name
 | 
			
		||||
            DwnMicroScrMin = x.DwnMicroScrMin;
 | 
			
		||||
            DwnMicroScrMax = x.DwnMicroScrMax;
 | 
			
		||||
            DwnMicroScrMean = x.DwnMicroScrMean;
 | 
			
		||||
            DwnMicroScrStDev = x.DwnMicroScrStdDev;
 | 
			
		||||
            DwnMicroScrStDev = x.DwnMicroScrStdDev; // different name
 | 
			
		||||
            DwnScrMin = x.DwnScrMin;
 | 
			
		||||
            DwnScrMax = x.DwnScrMax;
 | 
			
		||||
            DwnScrMean = x.DwnScrMean;
 | 
			
		||||
            DwnScrStDev = x.DwnScrStdDev;
 | 
			
		||||
            DwnScrStDev = x.DwnScrStdDev; // different name
 | 
			
		||||
            DwnSlipMin = x.DwnSlipMin;
 | 
			
		||||
            DwnSlipMax = x.DwnSlipMax;
 | 
			
		||||
            DwnSlipMean = x.DwnSlipMean;
 | 
			
		||||
            DwnSlipStDev = x.DwnSlipStdDev;
 | 
			
		||||
            DwnAreaCntMin = x.DwnAreaCountMin;
 | 
			
		||||
            DwnAreaCntMax = x.DwnAreaCountMax;
 | 
			
		||||
            DwnAreaCntMean = x.DwnAreaCountMean;
 | 
			
		||||
            DwnAreaCntStDev = x.DwnAreaCountStdDev;
 | 
			
		||||
            DwnSlipStDev = x.DwnSlipStdDev; // different name
 | 
			
		||||
            DwnAreaCntMin = x.DwnAreaCountMin; // different name
 | 
			
		||||
            DwnAreaCntMax = x.DwnAreaCountMax; // different name
 | 
			
		||||
            DwnAreaCntMean = x.DwnAreaCountMean; // different name
 | 
			
		||||
            DwnAreaCntStDev = x.DwnAreaCountStdDev;  // different name
 | 
			
		||||
            DwnAreaMin = x.DwnAreaMin;
 | 
			
		||||
            DwnAreaMax = x.DwnAreaMax;
 | 
			
		||||
            DwnAreaMean = x.DwnAreaMean;
 | 
			
		||||
            DwnAreaStDev = x.DwnAreaStdDev;
 | 
			
		||||
            DwnAreaStDev = x.DwnAreaStdDev; // different name
 | 
			
		||||
            DwnHazeAvgMin = x.DwnHazeAvgMin;
 | 
			
		||||
            DwnHazeAvgMax = x.DwnHazeAvgMax;
 | 
			
		||||
            DwnHazeAvgMean = x.DwnHazeAvgMean;
 | 
			
		||||
            DwnHazeAvgStDev = x.DwnHazeAvgStdDev;
 | 
			
		||||
            DwnHazeMedMin = x.DwnHazeMedianMin;
 | 
			
		||||
            DwnHazeMedMax = x.DwnHazeMedianMax;
 | 
			
		||||
            DwnHazeMedMean = x.DwnHazeMedianMean;
 | 
			
		||||
            DwnHazeMedStDev = x.DwnHazeMedianStdDev;
 | 
			
		||||
            DwnHazeStDevMin = x.DwnHazeStdDevMin;
 | 
			
		||||
            DwnHazeStDevMax = x.DwnHazeStdDevMax;
 | 
			
		||||
            DwnHazeStDevMean = x.DwnHazeStdDevMean;
 | 
			
		||||
            DwnHazeStDevStDev = x.DwnHazeStdDevStdDev;
 | 
			
		||||
            DwnHazeAvgStDev = x.DwnHazeAvgStdDev; // different name
 | 
			
		||||
            DwnHazeMedMin = x.DwnHazeMedianMin; // different name
 | 
			
		||||
            DwnHazeMedMax = x.DwnHazeMedianMax; // different name
 | 
			
		||||
            DwnHazeMedMean = x.DwnHazeMedianMean; // different name
 | 
			
		||||
            DwnHazeMedStDev = x.DwnHazeMedianStdDev; // different name
 | 
			
		||||
            DwnHazeStDevMin = x.DwnHazeStdDevMin; // different name
 | 
			
		||||
            DwnHazeStDevMax = x.DwnHazeStdDevMax; // different name
 | 
			
		||||
            DwnHazeStDevMean = x.DwnHazeStdDevMean; // different name
 | 
			
		||||
            DwnHazeStDevStDev = x.DwnHazeStdDevStdDev; // different name
 | 
			
		||||
            DwnBin1Min = x.DwnBin1Min;
 | 
			
		||||
            DwnBin1Max = x.DwnBin1Max;
 | 
			
		||||
            DwnBin1Mean = x.DwnBin1Mean;
 | 
			
		||||
            DwnBin1StDev = x.DwnBin1StdDev;
 | 
			
		||||
            DwnBin1StDev = x.DwnBin1StdDev; // different name
 | 
			
		||||
            DwnBin2Min = x.DwnBin2Min;
 | 
			
		||||
            DwnBin2Max = x.DwnBin2Max;
 | 
			
		||||
            DwnBin2Mean = x.DwnBin2Mean;
 | 
			
		||||
            DwnBin2StDev = x.DwnBin2StdDev;
 | 
			
		||||
            DwnBin2StDev = x.DwnBin2StdDev; // different name
 | 
			
		||||
            DwnBin3Min = x.DwnBin3Min;
 | 
			
		||||
            DwnBin3Max = x.DwnBin3Max;
 | 
			
		||||
            DwnBin3Mean = x.DwnBin3Mean;
 | 
			
		||||
            DwnBin3StDev = x.DwnBin3StdDev;
 | 
			
		||||
            DwnBin3StDev = x.DwnBin3StdDev; // different name
 | 
			
		||||
            DwnBin4Min = x.DwnBin4Min;
 | 
			
		||||
            DwnBin4Max = x.DwnBin4Max;
 | 
			
		||||
            DwnBin4Mean = x.DwnBin4Mean;
 | 
			
		||||
            DwnBin4StDev = x.DwnBin4StdDev;
 | 
			
		||||
            DwnBin4StDev = x.DwnBin4StdDev; // different name
 | 
			
		||||
            DwnBin5Min = x.DwnBin5Min;
 | 
			
		||||
            DwnBin5Max = x.DwnBin5Max;
 | 
			
		||||
            DwnBin5Mean = x.DwnBin5Mean;
 | 
			
		||||
            DwnBin5StDev = x.DwnBin5StdDev;
 | 
			
		||||
            DwnBin5StDev = x.DwnBin5StdDev; // different name
 | 
			
		||||
            DwnBin6Min = x.DwnBin6Min;
 | 
			
		||||
            DwnBin6Max = x.DwnBin6Max;
 | 
			
		||||
            DwnBin6Mean = x.DwnBin6Mean;
 | 
			
		||||
            DwnBin6StDev = x.DwnBin6StdDev;
 | 
			
		||||
            DwnBin6StDev = x.DwnBin6StdDev; // different name
 | 
			
		||||
            DwnBin7Min = x.DwnBin7Min;
 | 
			
		||||
            DwnBin7Max = x.DwnBin7Max;
 | 
			
		||||
            DwnBin7Mean = x.DwnBin7Mean;
 | 
			
		||||
            DwnBin7StDev = x.DwnBin7StdDev;
 | 
			
		||||
            DwnBin7StDev = x.DwnBin7StdDev; // different name
 | 
			
		||||
            DwnBin8Min = x.DwnBin8Min;
 | 
			
		||||
            DwnBin8Max = x.DwnBin8Max;
 | 
			
		||||
            DwnBin8Mean = x.DwnBin8Mean;
 | 
			
		||||
            DwnBin8StDev = x.DwnBin8StdDev;
 | 
			
		||||
            DwnBin8StDev = x.DwnBin8StdDev; // different name
 | 
			
		||||
            DnnAllMin = x.DnnAllMin;
 | 
			
		||||
            DnnAllMax = x.DnnAllMax;
 | 
			
		||||
            DnnAllMean = x.DnnAllMean;
 | 
			
		||||
            DnnAllStDev = x.DnnAllStdDev;
 | 
			
		||||
            DnnAllStDev = x.DnnAllStdDev; // different name
 | 
			
		||||
            DnnLpdMin = x.DnnLpdMin;
 | 
			
		||||
            DnnLpdMax = x.DnnLpdMax;
 | 
			
		||||
            DnnLpdMean = x.DnnLpdMean;
 | 
			
		||||
            DnnLpdStDev = x.DnnLpdStdDev;
 | 
			
		||||
            DnnLpdStDev = x.DnnLpdStdDev; // different name
 | 
			
		||||
            DnnLpdNMin = x.DnnLpdNMin;
 | 
			
		||||
            DnnLpdNMax = x.DnnLpdNMax;
 | 
			
		||||
            DnnLpdNMean = x.DnnLpdNMean;
 | 
			
		||||
            DnnLpdNStDev = x.DnnLpdNStdDev;
 | 
			
		||||
            DnnLpdNStDev = x.DnnLpdNStdDev; // different name
 | 
			
		||||
            DnnLpdESMin = x.DnnLpdESMin;
 | 
			
		||||
            DnnLpdESMax = x.DnnLpdESMax;
 | 
			
		||||
            DnnLpdESMean = x.DnnLpdESMean;
 | 
			
		||||
            DnnLpdESStDev = x.DnnLpdESStdDev;
 | 
			
		||||
            DnnLpdESStDev = x.DnnLpdESStdDev; // different name
 | 
			
		||||
            DnnMicroScrMin = x.DnnMicroScrMin;
 | 
			
		||||
            DnnMicroScrMax = x.DnnMicroScrMax;
 | 
			
		||||
            DnnMicroScrMean = x.DnnMicroScrMean;
 | 
			
		||||
            DnnMicroScrStDev = x.DnnMicroScrStdDev;
 | 
			
		||||
            DnnMicroScrStDev = x.DnnMicroScrStdDev; // different name
 | 
			
		||||
            DnnScrMin = x.DnnScrMin;
 | 
			
		||||
            DnnScrMax = x.DnnScrMax;
 | 
			
		||||
            DnnScrMean = x.DnnScrMean;
 | 
			
		||||
            DnnScrStDev = x.DnnScrStdDev;
 | 
			
		||||
            DnnScrStDev = x.DnnScrStdDev; // different name
 | 
			
		||||
            DnnSlipMin = x.DnnSlipMin;
 | 
			
		||||
            DnnSlipMax = x.DnnSlipMax;
 | 
			
		||||
            DnnSlipMean = x.DnnSlipMean;
 | 
			
		||||
            DnnSlipStDev = x.DnnSlipStdDev;
 | 
			
		||||
            DnnAreaCntMin = x.DnnAreaCountMin;
 | 
			
		||||
            DnnAreaCntMax = x.DnnAreaCountMax;
 | 
			
		||||
            DnnAreaCntMean = x.DnnAreaCountMean;
 | 
			
		||||
            DnnAreaCntStDev = x.DnnAreaCountStdDev;
 | 
			
		||||
            DnnSlipStDev = x.DnnSlipStdDev; // different name
 | 
			
		||||
            DnnAreaCntMin = x.DnnAreaCountMin; // different name
 | 
			
		||||
            DnnAreaCntMax = x.DnnAreaCountMax; // different name
 | 
			
		||||
            DnnAreaCntMean = x.DnnAreaCountMean; // different name
 | 
			
		||||
            DnnAreaCntStDev = x.DnnAreaCountStdDev;  // different name
 | 
			
		||||
            DnnAreaMin = x.DnnAreaMin;
 | 
			
		||||
            DnnAreaMax = x.DnnAreaMax;
 | 
			
		||||
            DnnAreaMean = x.DnnAreaMean;
 | 
			
		||||
            DnnAreaStDev = x.DnnAreaStdDev;
 | 
			
		||||
            DnnAreaStDev = x.DnnAreaStdDev; // different name
 | 
			
		||||
            DnnHazeAvgMin = x.DnnHazeAvgMin;
 | 
			
		||||
            DnnHazeAvgMax = x.DnnHazeAvgMax;
 | 
			
		||||
            DnnHazeAvgMean = x.DnnHazeAvgMean;
 | 
			
		||||
            DnnHazeAvgStDev = x.DnnHazeAvgStdDev;
 | 
			
		||||
            DnnHazeMedMin = x.DnnHazeMedianMin;
 | 
			
		||||
            DnnHazeMedMax = x.DnnHazeMedianMax;
 | 
			
		||||
            DnnHazeMedMean = x.DnnHazeMedianMean;
 | 
			
		||||
            DnnHazeMedStDev = x.DnnHazeMedianStdDev;
 | 
			
		||||
            DnnHazeStDevMin = x.DnnHazeStdDevMin;
 | 
			
		||||
            DnnHazeStDevMax = x.DnnHazeStdDevMax;
 | 
			
		||||
            DnnHazeStDevMean = x.DnnHazeStdDevMean;
 | 
			
		||||
            DnnHazeStDevStDev = x.DnnHazeStdDevStdDev;
 | 
			
		||||
            DnnHazeAvgStDev = x.DnnHazeAvgStdDev; // different name
 | 
			
		||||
            DnnHazeMedMin = x.DnnHazeMedianMin; // different name
 | 
			
		||||
            DnnHazeMedMax = x.DnnHazeMedianMax; // different name
 | 
			
		||||
            DnnHazeMedMean = x.DnnHazeMedianMean; // different name
 | 
			
		||||
            DnnHazeMedStDev = x.DnnHazeMedianStdDev; // different name
 | 
			
		||||
            DnnHazeStDevMin = x.DnnHazeStdDevMin; // different name
 | 
			
		||||
            DnnHazeStDevMax = x.DnnHazeStdDevMax; // different name
 | 
			
		||||
            DnnHazeStDevMean = x.DnnHazeStdDevMean; // different name
 | 
			
		||||
            DnnHazeStDevStDev = x.DnnHazeStdDevStdDev; // different name
 | 
			
		||||
            DnnBin1Min = x.DnnBin1Min;
 | 
			
		||||
            DnnBin1Max = x.DnnBin1Max;
 | 
			
		||||
            DnnBin1Mean = x.DnnBin1Mean;
 | 
			
		||||
            DnnBin1StDev = x.DnnBin1StdDev;
 | 
			
		||||
            DnnBin1StDev = x.DnnBin1StdDev; // different name
 | 
			
		||||
            DnnBin2Min = x.DnnBin2Min;
 | 
			
		||||
            DnnBin2Max = x.DnnBin2Max;
 | 
			
		||||
            DnnBin2Mean = x.DnnBin2Mean;
 | 
			
		||||
            DnnBin2StDev = x.DnnBin2StdDev;
 | 
			
		||||
            DnnBin2StDev = x.DnnBin2StdDev; // different name
 | 
			
		||||
            DnnBin3Min = x.DnnBin3Min;
 | 
			
		||||
            DnnBin3Max = x.DnnBin3Max;
 | 
			
		||||
            DnnBin3Mean = x.DnnBin3Mean;
 | 
			
		||||
            DnnBin3StDev = x.DnnBin3StdDev;
 | 
			
		||||
            DnnBin3StDev = x.DnnBin3StdDev; // different name
 | 
			
		||||
            DnnBin4Min = x.DnnBin4Min;
 | 
			
		||||
            DnnBin4Max = x.DnnBin4Max;
 | 
			
		||||
            DnnBin4Mean = x.DnnBin4Mean;
 | 
			
		||||
            DnnBin4StDev = x.DnnBin4StdDev;
 | 
			
		||||
            DnnBin4StDev = x.DnnBin4StdDev; // different name
 | 
			
		||||
            DnnBin5Min = x.DnnBin5Min;
 | 
			
		||||
            DnnBin5Max = x.DnnBin5Max;
 | 
			
		||||
            DnnBin5Mean = x.DnnBin5Mean;
 | 
			
		||||
            DnnBin5StDev = x.DnnBin5StdDev;
 | 
			
		||||
            DnnBin5StDev = x.DnnBin5StdDev; // different name
 | 
			
		||||
            DnnBin6Min = x.DnnBin6Min;
 | 
			
		||||
            DnnBin6Max = x.DnnBin6Max;
 | 
			
		||||
            DnnBin6Mean = x.DnnBin6Mean;
 | 
			
		||||
            DnnBin6StDev = x.DnnBin6StdDev;
 | 
			
		||||
            DnnBin6StDev = x.DnnBin6StdDev; // different name
 | 
			
		||||
            DnnBin7Min = x.DnnBin7Min;
 | 
			
		||||
            DnnBin7Max = x.DnnBin7Max;
 | 
			
		||||
            DnnBin7Mean = x.DnnBin7Mean;
 | 
			
		||||
            DnnBin7StDev = x.DnnBin7StdDev;
 | 
			
		||||
            DnnBin7StDev = x.DnnBin7StdDev; // different name
 | 
			
		||||
            DnnBin8Min = x.DnnBin8Min;
 | 
			
		||||
            DnnBin8Max = x.DnnBin8Max;
 | 
			
		||||
            DnnBin8Mean = x.DnnBin8Mean;
 | 
			
		||||
            DnnBin8StDev = x.DnnBin8StdDev;
 | 
			
		||||
            DnnBin8StDev = x.DnnBin8StdDev; // different name
 | 
			
		||||
            RDS = x.RDS;
 | 
			
		||||
            PSN = x.PSN;
 | 
			
		||||
            Recipe = x.Recipe;
 | 
			
		||||
            Operator = x.Employee;
 | 
			
		||||
            Operator = x.Employee; // different name
 | 
			
		||||
        }
 | 
			
		||||
        txt.Detail detail;
 | 
			
		||||
        foreach (txt.Description description in descriptions)
 | 
			
		||||
@ -635,14 +640,14 @@ public class WSRequest
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal static long GetHeaderId(IFileRead fileRead, Logistics logistics, string openInsightMetrologyViewerAPI, string openInsightMetrologyViewerFileShare, int weekOfYear, WS.Results results, List<txt.Description> descriptions)
 | 
			
		||||
    internal static long GetHeaderId(IFileRead fileRead, Logistics logistics, string openInsightMetrologyViewerAPI, string openInsightMetrologyViewerFileShare, int weekOfYear, WS.Results results, JsonElement[] jsonElements, List<txt.Description> descriptions)
 | 
			
		||||
    {
 | 
			
		||||
        long result;
 | 
			
		||||
        if (results is not null && results.HeaderId is not null)
 | 
			
		||||
            result = results.HeaderId.Value;
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            WSRequest wsRequest = new(fileRead, logistics, descriptions);
 | 
			
		||||
            WSRequest wsRequest = new(fileRead, logistics, jsonElements, descriptions);
 | 
			
		||||
            string directory = Path.Combine(openInsightMetrologyViewerFileShare, logistics.DateTimeFromSequence.Year.ToString(), $"WW{weekOfYear:00}");
 | 
			
		||||
            (_, WS.Results wsResults) = WS.SendData(openInsightMetrologyViewerAPI, logistics.Sequence, directory, wsRequest);
 | 
			
		||||
            if (wsResults.Success is null || !wsResults.Success.Value)
 | 
			
		||||
 | 
			
		||||
@ -139,7 +139,7 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void PostOpenInsightMetrologyViewerAttachments(List<txt.Description> descriptions)
 | 
			
		||||
    private void PostOpenInsightMetrologyViewerAttachments(JsonElement[] jsonElements, List<txt.Description> descriptions)
 | 
			
		||||
    {
 | 
			
		||||
        Shared.Metrology.WS.Results? results;
 | 
			
		||||
        string jobIdDirectory = Path.Combine(Path.GetDirectoryName(_FileConnectorConfiguration.AlternateTargetFolder) ?? throw new Exception(), _Logistics.JobID);
 | 
			
		||||
@ -155,7 +155,7 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
            results = wsResults[0];
 | 
			
		||||
        }
 | 
			
		||||
        int weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
 | 
			
		||||
        long headerId = !_IsEAFHosted ? -1 : OpenInsightMetrologyViewer.WSRequest.GetHeaderId(this, _Logistics, _OpenInsightMetrologyViewerAPI, _OpenInsightMetrologyViewerFileShare, weekOfYear, results, descriptions);
 | 
			
		||||
        long headerId = !_IsEAFHosted ? -1 : OpenInsightMetrologyViewer.WSRequest.GetHeaderId(this, _Logistics, _OpenInsightMetrologyViewerAPI, _OpenInsightMetrologyViewerFileShare, weekOfYear, results, jsonElements, descriptions);
 | 
			
		||||
        string? headerIdDirectory = GetHeaderIdDirectory(headerId);
 | 
			
		||||
        if (string.IsNullOrEmpty(headerIdDirectory))
 | 
			
		||||
            throw new Exception($"Didn't find header id directory <{headerId}>");
 | 
			
		||||
@ -167,15 +167,16 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        if (dateTime == DateTime.MinValue)
 | 
			
		||||
            throw new ArgumentNullException(nameof(dateTime));
 | 
			
		||||
        Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
 | 
			
		||||
        ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath);
 | 
			
		||||
        string[] lines = File.ReadAllLines(reportFullPath);
 | 
			
		||||
        ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines);
 | 
			
		||||
        _Logistics = new Logistics(reportFullPath, processDataStandardFormat);
 | 
			
		||||
        SetFileParameterLotIDToLogisticsMID();
 | 
			
		||||
        JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat);
 | 
			
		||||
        JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat);
 | 
			
		||||
        List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements);
 | 
			
		||||
        Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
 | 
			
		||||
        if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
 | 
			
		||||
            PostOpenInsightMetrologyViewerAttachments(descriptions);
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
            PostOpenInsightMetrologyViewerAttachments(jsonElements, descriptions);
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -108,7 +108,7 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void DirectoryMove(string reportFullPath, DateTime dateTime, List<txt.Description> descriptions)
 | 
			
		||||
    private void DirectoryMove(string reportFullPath, DateTime dateTime, JsonElement[] jsonElements, List<txt.Description> descriptions)
 | 
			
		||||
    {
 | 
			
		||||
        if (dateTime == DateTime.MinValue)
 | 
			
		||||
            throw new ArgumentNullException(nameof(dateTime));
 | 
			
		||||
@ -122,7 +122,7 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
            throw new Exception("Didn't find directory by logistics sequence");
 | 
			
		||||
        if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime)
 | 
			
		||||
            File.SetLastWriteTime(reportFullPath, fileInfo.CreationTime);
 | 
			
		||||
        OpenInsightMetrologyViewer.WSRequest wsRequest = new(this, _Logistics, descriptions);
 | 
			
		||||
        OpenInsightMetrologyViewer.WSRequest wsRequest = new(this, _Logistics, jsonElements, descriptions);
 | 
			
		||||
        JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true };
 | 
			
		||||
        string json = JsonSerializer.Serialize(wsRequest, wsRequest.GetType(), jsonSerializerOptions);
 | 
			
		||||
        string directoryName = $"{Path.GetFileName(matchDirectories[0]).Split(new string[] { logisticsSequence }, StringSplitOptions.None)[0]}{_Logistics.DateTimeFromSequence:yyyy-MM-dd_hh;mm_tt_}{DateTime.Now.Ticks - _Logistics.Sequence}";
 | 
			
		||||
@ -166,23 +166,24 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
    private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
 | 
			
		||||
    {
 | 
			
		||||
        Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
 | 
			
		||||
        ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath);
 | 
			
		||||
        string[] lines = File.ReadAllLines(reportFullPath);
 | 
			
		||||
        ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines);
 | 
			
		||||
        _Logistics = new Logistics(reportFullPath, processDataStandardFormat);
 | 
			
		||||
        SetFileParameterLotIDToLogisticsMID();
 | 
			
		||||
        JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat);
 | 
			
		||||
        JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat);
 | 
			
		||||
        List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements);
 | 
			
		||||
        Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
        if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
 | 
			
		||||
            DirectoryMove(reportFullPath, dateTime, descriptions);
 | 
			
		||||
            DirectoryMove(reportFullPath, dateTime, jsonElements, descriptions);
 | 
			
		||||
        else if (!_IsEAFHosted)
 | 
			
		||||
        {
 | 
			
		||||
            OpenInsightMetrologyViewer.WSRequest wsRequest = new(this, _Logistics, descriptions);
 | 
			
		||||
            OpenInsightMetrologyViewer.WSRequest wsRequest = new(this, _Logistics, jsonElements, descriptions);
 | 
			
		||||
            JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true };
 | 
			
		||||
            string json = JsonSerializer.Serialize(wsRequest, wsRequest.GetType(), jsonSerializerOptions);
 | 
			
		||||
            string check = JsonSerializer.Serialize(wsRequest, wsRequest.GetType(), jsonSerializerOptions);
 | 
			
		||||
            string jsonFileName = Path.ChangeExtension(reportFullPath, ".json");
 | 
			
		||||
            string historicalText = File.ReadAllText(jsonFileName);
 | 
			
		||||
            if (json != historicalText)
 | 
			
		||||
            if (check != historicalText)
 | 
			
		||||
                throw new Exception("File doesn't match historical!");
 | 
			
		||||
        }
 | 
			
		||||
        return results;
 | 
			
		||||
 | 
			
		||||
@ -125,7 +125,7 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
 | 
			
		||||
        if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
 | 
			
		||||
            FileCopy(reportFullPath, dateTime, descriptions);
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
        results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>());
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -19,6 +19,7 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
    public const string BarcodeHostFileShare = @"\\mesfs.infineon.com\EC_Metrology_Si\BarcodeHost\API";
 | 
			
		||||
    public const string MetrologyFileShare = @"\\mesfs.infineon.com\EC_Metrology_Si\WorkMaterialOut\API";
 | 
			
		||||
    public const string OpenInsightApplicationProgrammingInterface = @"http://oi-metrology-viewer-api.mes.infineon.com:8080/api/oiWizard";
 | 
			
		||||
    public const string IQSConnectionString = @"Data Source=messqlec1.infineon.com\PROD1,53959;Initial Catalog=IRMNSPC;Integrated Security=True";
 | 
			
		||||
    public const string LSL2SQLConnectionString = @"Data Source=messqlec1.infineon.com\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;";
 | 
			
		||||
 | 
			
		||||
    private long? _TickOffset;
 | 
			
		||||
@ -38,6 +39,9 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        string barcodeHostFileShare = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Barcode.Host.FileShare");
 | 
			
		||||
        if (barcodeHostFileShare != BarcodeHostFileShare)
 | 
			
		||||
            throw new NotSupportedException($"Update configuration for [{nameof(BarcodeHostFileShare)}]");
 | 
			
		||||
        string iqsConnectionString = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "IQS.ConnectionString");
 | 
			
		||||
        if (iqsConnectionString != IQSConnectionString)
 | 
			
		||||
            throw new NotSupportedException($"Update configuration for [{nameof(IQSConnectionString)}]");
 | 
			
		||||
        string lsl2SQLConnectionString = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ConnectionString.LSL2SQL");
 | 
			
		||||
        if (lsl2SQLConnectionString != LSL2SQLConnectionString)
 | 
			
		||||
            throw new NotSupportedException($"Update configuration for [{nameof(LSL2SQLConnectionString)}]");
 | 
			
		||||
@ -53,14 +57,14 @@ public class FileRead : Shared.FileRead, IFileRead
 | 
			
		||||
        string tibcoParameterSubjectPrefix = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_SUBJECT_PREFIX");
 | 
			
		||||
        string tibcoParameterConfigurationLocation = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_CONFIGURATION_LOCATION");
 | 
			
		||||
        string tibcoParameterConfigurationLocationCopy = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_CONFIGURATION_LOCATION_LOCAL_COPY");
 | 
			
		||||
        if (!Directory.Exists(MetrologyFileShare))
 | 
			
		||||
        if (!Directory.Exists(metrologyFileShare))
 | 
			
		||||
            throw new Exception($"Unable to access file-share <{MetrologyFileShare}>");
 | 
			
		||||
        if (!Directory.Exists(BarcodeHostFileShare))
 | 
			
		||||
        if (!Directory.Exists(barcodeHostFileShare))
 | 
			
		||||
            throw new Exception($"Unable to access file-share <{BarcodeHostFileShare}>");
 | 
			
		||||
        if (_IsEAFHosted)
 | 
			
		||||
        {
 | 
			
		||||
            HttpClient httpClient = new() { BaseAddress = new(OpenInsightApplicationProgrammingInterface) };
 | 
			
		||||
            Transport.Main.Initialize(smtp, cellInstanceName, fileConnectorConfiguration, LSL2SQLConnectionString, MetrologyFileShare, BarcodeHostFileShare, httpClient);
 | 
			
		||||
            HttpClient httpClient = new() { BaseAddress = new(openInsightApplicationProgrammingInterface) };
 | 
			
		||||
            Transport.Main.Initialize(smtp, cellInstanceName, fileConnectorConfiguration, iqsConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient);
 | 
			
		||||
            if (!string.IsNullOrEmpty(fileConnectorConfiguration.SourceFileLocation))
 | 
			
		||||
                _ = Transport.Main.Setup(useSleep: true, setIfxTransport: true, tibcoParameterChannel, tibcoParameterSubjectPrefix, tibcoParameterConfigurationLocation, tibcoParameterConfigurationLocationCopy, tibcoParameterSubject);
 | 
			
		||||
            else
 | 
			
		||||
 | 
			
		||||
@ -11,13 +11,17 @@ public class Common
 | 
			
		||||
    public int? ReactorNumber { get; }
 | 
			
		||||
    public string? Zone { get; }
 | 
			
		||||
    public string? Employee { get; }
 | 
			
		||||
    public RunDataSheetRoot? RunDataSheetRoot { get; }
 | 
			
		||||
    public WorkOrder? WorkOrder { get; }
 | 
			
		||||
 | 
			
		||||
    public Common(string? layer,
 | 
			
		||||
                  string? psn,
 | 
			
		||||
                  int? rdsNumber,
 | 
			
		||||
                  int? reactor,
 | 
			
		||||
                  string? zone,
 | 
			
		||||
                  string? employee)
 | 
			
		||||
                  string? employee,
 | 
			
		||||
                  RunDataSheetRoot? runDataSheetRoot,
 | 
			
		||||
                  WorkOrder? workOrder)
 | 
			
		||||
    {
 | 
			
		||||
        Layer = layer;
 | 
			
		||||
        PSN = psn;
 | 
			
		||||
@ -25,6 +29,8 @@ public class Common
 | 
			
		||||
        ReactorNumber = reactor;
 | 
			
		||||
        Zone = zone;
 | 
			
		||||
        Employee = employee;
 | 
			
		||||
        RunDataSheetRoot = runDataSheetRoot;
 | 
			
		||||
        WorkOrder = workOrder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -1,18 +1,22 @@
 | 
			
		||||
namespace Adaptation.FileHandlers.TIBCO.Transport;
 | 
			
		||||
 | 
			
		||||
#nullable enable
 | 
			
		||||
 | 
			
		||||
public class CommonB
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public string Comment { get; }
 | 
			
		||||
    public string Layer { get; }
 | 
			
		||||
    public string? Layer { get; }
 | 
			
		||||
    public int? RDSNumber { get; }
 | 
			
		||||
    public string PSN { get; }
 | 
			
		||||
    public string? PSN { get; }
 | 
			
		||||
    public int? ReactorNumber { get; }
 | 
			
		||||
    public string Zone { get; }
 | 
			
		||||
    public string? Zone { get; }
 | 
			
		||||
 | 
			
		||||
    public CommonB(string comment, string layer, int? rdsNumber, string psn, int? reactorNumber, string zone)
 | 
			
		||||
    public CommonB(string? layer,
 | 
			
		||||
                   int? rdsNumber,
 | 
			
		||||
                   string? psn,
 | 
			
		||||
                   int? reactorNumber,
 | 
			
		||||
                   string? zone)
 | 
			
		||||
    {
 | 
			
		||||
        Comment = comment;
 | 
			
		||||
        Layer = layer;
 | 
			
		||||
        RDSNumber = rdsNumber;
 | 
			
		||||
        PSN = psn;
 | 
			
		||||
@ -20,4 +24,51 @@ public class CommonB
 | 
			
		||||
        Zone = zone;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal static CommonB Get(Common common, RunDataSheetRoot? runDataSheetRoot, Run[]? runs)
 | 
			
		||||
    {
 | 
			
		||||
        CommonB result;
 | 
			
		||||
        string? psn;
 | 
			
		||||
        string? zone;
 | 
			
		||||
        string? layer;
 | 
			
		||||
        int? reactorNumber;
 | 
			
		||||
        if (runs is null || runs.Length == 0)
 | 
			
		||||
        {
 | 
			
		||||
            zone = common.Zone;
 | 
			
		||||
            layer = common.Layer;
 | 
			
		||||
            if (runDataSheetRoot?.RunDataSheet is null)
 | 
			
		||||
            {
 | 
			
		||||
                psn = common.PSN;
 | 
			
		||||
                reactorNumber = common.ReactorNumber;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                psn = runDataSheetRoot?.RunDataSheet.PSN.ToString();
 | 
			
		||||
                reactorNumber = runDataSheetRoot?.RunDataSheet.Reactor;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            const int zero = 0;
 | 
			
		||||
            Run run = runs[zero];
 | 
			
		||||
            if (runDataSheetRoot?.RunDataSheet is not null)
 | 
			
		||||
            {
 | 
			
		||||
                psn = runDataSheetRoot?.RunDataSheet.PSN.ToString();
 | 
			
		||||
                reactorNumber = runDataSheetRoot?.RunDataSheet.Reactor;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                psn = string.IsNullOrEmpty(common.PSN) ? run.PSN : common.PSN;
 | 
			
		||||
                reactorNumber = common.ReactorNumber is null ? run.Reactor : common.ReactorNumber;
 | 
			
		||||
            }
 | 
			
		||||
            zone = string.IsNullOrEmpty(common.Zone) ? run.Zone : common.Zone;
 | 
			
		||||
            layer = string.IsNullOrEmpty(common.Layer) ? run.EpiLayer : common.Layer;
 | 
			
		||||
        }
 | 
			
		||||
        result = new(layer: layer,
 | 
			
		||||
                     rdsNumber: common.RDSNumber,
 | 
			
		||||
                     psn: psn,
 | 
			
		||||
                     reactorNumber: reactorNumber,
 | 
			
		||||
                     zone: zone);
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -7,15 +7,17 @@ public class Input
 | 
			
		||||
 | 
			
		||||
    public string? Area { get; }
 | 
			
		||||
    public string? EquipmentType { get; }
 | 
			
		||||
    public string? MID { get; }
 | 
			
		||||
    public string? Slot { get; }
 | 
			
		||||
    public string? LoadLock { get; }
 | 
			
		||||
    public string? MesEntity { get; }
 | 
			
		||||
    public string? MID { get; }
 | 
			
		||||
    public string? Recipe { get; }
 | 
			
		||||
    public string? Sequence { get; }
 | 
			
		||||
    public string? Slot { get; }
 | 
			
		||||
 | 
			
		||||
    [System.Text.Json.Serialization.JsonConstructor]
 | 
			
		||||
    public Input(string? area,
 | 
			
		||||
                 string? equipmentType,
 | 
			
		||||
                 string? loadLock,
 | 
			
		||||
                 string? mid,
 | 
			
		||||
                 string? slot,
 | 
			
		||||
                 string? mesEntity,
 | 
			
		||||
@ -25,6 +27,7 @@ public class Input
 | 
			
		||||
 | 
			
		||||
        Area = area;
 | 
			
		||||
        EquipmentType = equipmentType;
 | 
			
		||||
        LoadLock = loadLock;
 | 
			
		||||
        MID = mid;
 | 
			
		||||
        Slot = slot;
 | 
			
		||||
        MesEntity = mesEntity;
 | 
			
		||||
@ -36,6 +39,7 @@ public class Input
 | 
			
		||||
    {
 | 
			
		||||
        Area = input.Area;
 | 
			
		||||
        EquipmentType = input.EquipmentType;
 | 
			
		||||
        LoadLock = input.LoadLock;
 | 
			
		||||
        MID = mid;
 | 
			
		||||
        Slot = input.Slot;
 | 
			
		||||
        MesEntity = input.MesEntity;
 | 
			
		||||
 | 
			
		||||
@ -41,7 +41,7 @@ public partial class Job
 | 
			
		||||
    public DateTime DateTime { get; }
 | 
			
		||||
    public List<Item> Items { get; }
 | 
			
		||||
 | 
			
		||||
    public Job(string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient, string mid)
 | 
			
		||||
    public Job(string iqsSQLConnectionString, string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient, string mid, DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter)
 | 
			
		||||
    {
 | 
			
		||||
        const int zero = 0;
 | 
			
		||||
        Items = new List<Item>();
 | 
			
		||||
@ -49,13 +49,15 @@ public partial class Job
 | 
			
		||||
            IsAreaSi = false;
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            Run[]? runs;
 | 
			
		||||
            Common common;
 | 
			
		||||
            CommonB commonB;
 | 
			
		||||
            string? basicType;
 | 
			
		||||
            int? reactorNumber;
 | 
			
		||||
            WorkOrder workOrder;
 | 
			
		||||
            const string hyphen = "-";
 | 
			
		||||
            const string bioRad2 = "BIORAD2";
 | 
			
		||||
            const string bioRad3 = "BIORAD3";
 | 
			
		||||
            RunDataSheetRoot? runDataSheetRoot;
 | 
			
		||||
            const string twoAlphaPattern = "^[a-zA-z]{2,3}";
 | 
			
		||||
            const string reactorNumberPattern = @"^[0-9]{2}--";
 | 
			
		||||
            Input input = JsonSerializer.Deserialize<Input>(mid) ?? throw new Exception();
 | 
			
		||||
@ -63,48 +65,68 @@ public partial class Job
 | 
			
		||||
                DateTime = DateTime.Now;
 | 
			
		||||
            else
 | 
			
		||||
                DateTime = new DateTime(sequence);
 | 
			
		||||
            string? jobNames = GetJobNames(input);
 | 
			
		||||
            const string dep08CEPIEPSILON = "DEP08CEPIEPSILON";
 | 
			
		||||
            if (input.EquipmentType == dep08CEPIEPSILON)
 | 
			
		||||
                (common, workOrder) = Get(input, httpClient);
 | 
			
		||||
                common = ReactorGet(input, httpClient);
 | 
			
		||||
            else if (!string.IsNullOrEmpty(input.MID) && !string.IsNullOrEmpty(input.MesEntity) && Regex.IsMatch(input.MID, reactorNumberPattern) && input.MesEntity is bioRad2 or bioRad3)
 | 
			
		||||
                (common, workOrder) = Get(input, barcodeHostFileShare);
 | 
			
		||||
                common = Get(input, barcodeHostFileShare, httpClient);
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                workOrder = GetWorkOrder(input);
 | 
			
		||||
                reactorNumber = GetReactorNumber(input);
 | 
			
		||||
                WorkOrder workOrder = GetWorkOrder(input);
 | 
			
		||||
                if (workOrder.IsWorkOrder || reactorNumber.HasValue)
 | 
			
		||||
                    common = new(layer: null,
 | 
			
		||||
                                 psn: null,
 | 
			
		||||
                                 rdsNumber: null,
 | 
			
		||||
                                 reactor: null,
 | 
			
		||||
                                 zone: null,
 | 
			
		||||
                                 employee: null);
 | 
			
		||||
                                 employee: null,
 | 
			
		||||
                                 runDataSheetRoot: null,
 | 
			
		||||
                                 workOrder: workOrder);
 | 
			
		||||
                else if (!string.IsNullOrEmpty(input.MID) && input.MID.Length is 2 or 3 && Regex.IsMatch(input.MID, twoAlphaPattern))
 | 
			
		||||
                    common = GetTwoAlphaPattern(metrologyFileShare, input);
 | 
			
		||||
                else
 | 
			
		||||
                    common = Get(input);
 | 
			
		||||
                    common = Get(input, httpClient);
 | 
			
		||||
            }
 | 
			
		||||
            bool isValid = IsValid(common.RDSNumber);
 | 
			
		||||
            if (isValid)
 | 
			
		||||
                commonB = GetWithValidRDS(lsl2SQLConnectionString, common.Layer, common.PSN, common.RDSNumber, common.ReactorNumber, common.Zone);
 | 
			
		||||
            else if (workOrder.IsWorkOrder || common.RDSNumber.HasValue)
 | 
			
		||||
                commonB = Get(lsl2SQLConnectionString, common.Layer, common.PSN, common.ReactorNumber, workOrder.SlotNumber, workOrder.WorkOrderNumber, workOrder.WorkOrderCassette, common.Zone);
 | 
			
		||||
            if (common.RDSNumber is null || !isValid)
 | 
			
		||||
                runDataSheetRoot = common.RunDataSheetRoot;
 | 
			
		||||
            else
 | 
			
		||||
                commonB = new(comment: hyphen,
 | 
			
		||||
                              layer: hyphen,
 | 
			
		||||
                              rdsNumber: common.RDSNumber,
 | 
			
		||||
                              psn: common.PSN,
 | 
			
		||||
                              reactorNumber: common.ReactorNumber,
 | 
			
		||||
                              zone: hyphen);
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                { runDataSheetRoot = GetRunDataSheetRoot(httpClient, common.RDSNumber.Value); }
 | 
			
		||||
                catch (Exception)
 | 
			
		||||
                { runDataSheetRoot = null; }
 | 
			
		||||
            }
 | 
			
		||||
            if (isValid)
 | 
			
		||||
                runs = GetWithValidRDS(lsl2SQLConnectionString, enteredDateTimeFilter, loadSignatureDateTimeFilter, common);
 | 
			
		||||
            else if (common.WorkOrder is null || common.WorkOrder.IsWorkOrder || common.RDSNumber.HasValue)
 | 
			
		||||
                runs = Get(lsl2SQLConnectionString, enteredDateTimeFilter, loadSignatureDateTimeFilter, common);
 | 
			
		||||
            else
 | 
			
		||||
                runs = null;
 | 
			
		||||
            commonB = CommonB.Get(common, runDataSheetRoot, runs);
 | 
			
		||||
            if (string.IsNullOrEmpty(jobNames) || commonB.RDSNumber is null || commonB.ReactorNumber is null || string.IsNullOrEmpty(commonB.PSN))
 | 
			
		||||
                basicType = hyphen;
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                int? runCount;
 | 
			
		||||
                string commandText = GetCommandText(commonB, jobNames);
 | 
			
		||||
                try
 | 
			
		||||
                { runCount = GetScalar(iqsSQLConnectionString, commandText); }
 | 
			
		||||
                catch (Exception)
 | 
			
		||||
                { runCount = null; }
 | 
			
		||||
                basicType = runCount is null ? hyphen : runCount.ToString();
 | 
			
		||||
            }
 | 
			
		||||
            Qty = "1";
 | 
			
		||||
            Status = hyphen; // INFO
 | 
			
		||||
            CreationUser = hyphen; // ?
 | 
			
		||||
            LotState = hyphen; // LAYER2
 | 
			
		||||
            LastUpdateUser = hyphen; // ?
 | 
			
		||||
            Equipment = input.MesEntity; // ?
 | 
			
		||||
            PackageName = hyphen; // WAFER_ID
 | 
			
		||||
            Qty2 = input.Sequence; // SEQUENCE
 | 
			
		||||
            RecipeName = input.Recipe; // PPID
 | 
			
		||||
            BasicType = basicType; // BASIC_TYPE
 | 
			
		||||
            IsAreaSi = input.Area == "Si"; // N/A
 | 
			
		||||
            StateModel = input.EquipmentType; // ?
 | 
			
		||||
            JobName = DateTime.Ticks.ToString(); // ?
 | 
			
		||||
@ -112,8 +134,8 @@ public partial class Job
 | 
			
		||||
            SpecName = !string.IsNullOrEmpty(commonB.Layer) ? commonB.Layer : hyphen; // LAYER
 | 
			
		||||
            ProductName = !string.IsNullOrEmpty(commonB.PSN) ? commonB.PSN : hyphen; // PRODUCT
 | 
			
		||||
            ProcessSpecName = !string.IsNullOrEmpty(commonB.Zone) ? commonB.Zone : hyphen; // WAFER_POS
 | 
			
		||||
            BasicType = !string.IsNullOrEmpty(commonB.Comment) ? commonB.Comment : hyphen; // BASIC_TYPE
 | 
			
		||||
            LotName = commonB.RDSNumber is not null ? commonB.RDSNumber.Value.ToString() : input.MID; // MID
 | 
			
		||||
            LastUpdateUser = string.IsNullOrEmpty(runDataSheetRoot?.Json) ? "{}" : runDataSheetRoot.Json; // NULL_DATA
 | 
			
		||||
            ProcessType = commonB.ReactorNumber is not null ? commonB.ReactorNumber.Value.ToString() : hyphen; // PROCESS_JOBID
 | 
			
		||||
            Items.Add(new Item { Name = "0", Type = "NA", Number = (0 + 1).ToString(), Qty = "1", CarrierName = hyphen });
 | 
			
		||||
        }
 | 
			
		||||
@ -239,8 +261,9 @@ public partial class Job
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static Common Get(Input input)
 | 
			
		||||
    private static Common Get(Input input, HttpClient httpClient)
 | 
			
		||||
    {
 | 
			
		||||
        Common result;
 | 
			
		||||
        string? psn;
 | 
			
		||||
        string? rds;
 | 
			
		||||
        int rdsCheck;
 | 
			
		||||
@ -250,6 +273,7 @@ public partial class Job
 | 
			
		||||
        string? reactor;
 | 
			
		||||
        string? employee;
 | 
			
		||||
        int? reactorNumber;
 | 
			
		||||
        RunDataSheetRoot? runDataSheetRoot;
 | 
			
		||||
        string mid = string.IsNullOrEmpty(input.MID) ? string.Empty : input.MID;
 | 
			
		||||
        if (mid.Length > 2 && mid[0] == '1' && (mid[1] == 'T' || mid[1] == 't'))
 | 
			
		||||
            mid = mid.Substring(2);
 | 
			
		||||
@ -259,13 +283,14 @@ public partial class Job
 | 
			
		||||
        (reactor, rds) = GetReactorAndRDS(input.MID, mid, segments);
 | 
			
		||||
        rdsNumber = string.IsNullOrEmpty(rds) || !int.TryParse(rds, out rdsCheck) ? null : rdsCheck;
 | 
			
		||||
        bool isInvalid = IsInvalid(rdsNumber);
 | 
			
		||||
        if (isInvalid || !int.TryParse(reactor, out int reactorCheck))
 | 
			
		||||
        if (rdsNumber is null || isInvalid || !int.TryParse(reactor, out int reactorCheck))
 | 
			
		||||
        {
 | 
			
		||||
            psn = null;
 | 
			
		||||
            zone = null;
 | 
			
		||||
            layer = null;
 | 
			
		||||
            employee = null;
 | 
			
		||||
            reactorNumber = null;
 | 
			
		||||
            runDataSheetRoot = null;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
@ -273,13 +298,17 @@ public partial class Job
 | 
			
		||||
            reactorNumber = reactorCheck;
 | 
			
		||||
            (layer, psn) = GetLayerAndPSN(segments);
 | 
			
		||||
            employee = segments.Length <= 4 ? null : segments[4];
 | 
			
		||||
            runDataSheetRoot = GetRunDataSheetRoot(httpClient, rdsNumber.Value);
 | 
			
		||||
        }
 | 
			
		||||
        return new(layer: layer,
 | 
			
		||||
                   psn: psn,
 | 
			
		||||
                   rdsNumber: rdsNumber,
 | 
			
		||||
                   reactor: reactorNumber,
 | 
			
		||||
                   zone: zone,
 | 
			
		||||
                   employee: employee);
 | 
			
		||||
        result = new(layer: layer,
 | 
			
		||||
                     psn: psn,
 | 
			
		||||
                     rdsNumber: rdsNumber,
 | 
			
		||||
                     reactor: reactorNumber,
 | 
			
		||||
                     zone: zone,
 | 
			
		||||
                     employee: employee,
 | 
			
		||||
                     runDataSheetRoot: runDataSheetRoot,
 | 
			
		||||
                     workOrder: null);
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static string[] GetDirectories(string fileShare)
 | 
			
		||||
@ -298,6 +327,7 @@ public partial class Job
 | 
			
		||||
 | 
			
		||||
    private static Common GetTwoAlphaPattern(string metrologyFileShare, Input input)
 | 
			
		||||
    {
 | 
			
		||||
        Common result;
 | 
			
		||||
        string lines;
 | 
			
		||||
        const int zero = 0;
 | 
			
		||||
        string? psn = null;
 | 
			
		||||
@ -337,12 +367,15 @@ public partial class Job
 | 
			
		||||
                zone = workMaterialOut.Zone;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        return new(layer: layer,
 | 
			
		||||
                   psn: psn,
 | 
			
		||||
                   rdsNumber: rdsNumber,
 | 
			
		||||
                   reactor: reactor,
 | 
			
		||||
                   zone: zone,
 | 
			
		||||
                   employee: null);
 | 
			
		||||
        result = new(layer: layer,
 | 
			
		||||
                     psn: psn,
 | 
			
		||||
                     rdsNumber: rdsNumber,
 | 
			
		||||
                     reactor: reactor,
 | 
			
		||||
                     zone: zone,
 | 
			
		||||
                     employee: null,
 | 
			
		||||
                     runDataSheetRoot: null,
 | 
			
		||||
                     workOrder: null);
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static List<string> GetFiles(Input input, string barcodeHostFileShare)
 | 
			
		||||
@ -381,84 +414,107 @@ public partial class Job
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static (Common common, WorkOrder workOrder) Get(Input input, HttpClient httpClient)
 | 
			
		||||
    private static Common ReactorGet(Input input, HttpClient httpClient)
 | 
			
		||||
    {
 | 
			
		||||
        int? rds;
 | 
			
		||||
        string psn;
 | 
			
		||||
        Common common;
 | 
			
		||||
        WorkOrder workOrder;
 | 
			
		||||
        Task<Stream> streamTask;
 | 
			
		||||
        Task<HttpResponseMessage> httpResponseMessageTask;
 | 
			
		||||
        string? psn;
 | 
			
		||||
        Common result;
 | 
			
		||||
        string mid = string.IsNullOrEmpty(input.MID) ? string.Empty : input.MID;
 | 
			
		||||
        JsonSerializerOptions jsonSerializerOptions = new() { PropertyNameCaseInsensitive = true };
 | 
			
		||||
        int? reactor = mid.Length < 2 || !int.TryParse(mid.Substring(0, 2), out int reactorNumber) ? null : reactorNumber;
 | 
			
		||||
        httpResponseMessageTask = httpClient.GetAsync($"{httpClient.BaseAddress}/reactors/{reactor}");
 | 
			
		||||
        httpResponseMessageTask.Wait();
 | 
			
		||||
        if (httpResponseMessageTask.Result.StatusCode != System.Net.HttpStatusCode.OK)
 | 
			
		||||
            throw new Exception($"Unable to OI <{httpResponseMessageTask.Result.StatusCode}>");
 | 
			
		||||
        streamTask = httpResponseMessageTask.Result.Content.ReadAsStreamAsync();
 | 
			
		||||
        streamTask.Wait();
 | 
			
		||||
        if (!streamTask.Result.CanRead)
 | 
			
		||||
            throw new NullReferenceException(nameof(streamTask));
 | 
			
		||||
        ReactorRoot? reactorRoot = JsonSerializer.Deserialize<ReactorRoot>(streamTask.Result, jsonSerializerOptions);
 | 
			
		||||
        streamTask.Result.Dispose();
 | 
			
		||||
        if (reactorRoot is null || reactor != reactorRoot.Reactor.ReactorNo || reactorRoot.Reactor.LoadedRDS is null || reactorRoot.Reactor.LoadedRDS.Length < 1)
 | 
			
		||||
        char? loadLockSide = string.IsNullOrEmpty(input.LoadLock) || input.LoadLock[0] is not 'L' and not 'R' ? null : input.LoadLock[0];
 | 
			
		||||
        ReactorRoot? reactorRoot = reactor is null || loadLockSide is null ? null : GetReactorRoot(httpClient, jsonSerializerOptions, reactor);
 | 
			
		||||
        rds = loadLockSide is null ? null : loadLockSide == 'L' ? reactorRoot?.Reactor?.LoadLockLeftRDS : loadLockSide == 'R' ? reactorRoot?.Reactor?.LoadLockRightRDS : null;
 | 
			
		||||
        if (reactorRoot?.Reactor is null || reactor != reactorRoot.Reactor.ReactorNo || rds is null)
 | 
			
		||||
        {
 | 
			
		||||
            rds = null;
 | 
			
		||||
            psn = string.Empty;
 | 
			
		||||
            workOrder = new(null, null, null, null, false);
 | 
			
		||||
            common = new(layer: null,
 | 
			
		||||
            psn = null;
 | 
			
		||||
            result = new(layer: null,
 | 
			
		||||
                         psn: psn,
 | 
			
		||||
                         rdsNumber: rds,
 | 
			
		||||
                         reactor: reactor,
 | 
			
		||||
                         zone: null,
 | 
			
		||||
                         employee: null);
 | 
			
		||||
                         employee: null,
 | 
			
		||||
                         runDataSheetRoot: null,
 | 
			
		||||
                         workOrder: null);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            rds = reactorRoot.Reactor.LoadedRDS[0];
 | 
			
		||||
            workOrder = new(null, null, null, null, false);
 | 
			
		||||
            httpResponseMessageTask = httpClient.GetAsync($"{httpClient.BaseAddress}/materials/rds/{rds}");
 | 
			
		||||
            httpResponseMessageTask.Wait();
 | 
			
		||||
            if (httpResponseMessageTask.Result.StatusCode != System.Net.HttpStatusCode.OK)
 | 
			
		||||
                throw new Exception($"Unable to OI <{httpResponseMessageTask.Result.StatusCode}>");
 | 
			
		||||
            streamTask = httpResponseMessageTask.Result.Content.ReadAsStreamAsync();
 | 
			
		||||
            streamTask.Wait();
 | 
			
		||||
            if (!streamTask.Result.CanRead)
 | 
			
		||||
                throw new NullReferenceException(nameof(streamTask));
 | 
			
		||||
            RunDataSheetRoot? runDataSheetRoot = JsonSerializer.Deserialize<RunDataSheetRoot>(streamTask.Result, jsonSerializerOptions);
 | 
			
		||||
            streamTask.Result.Dispose();
 | 
			
		||||
            if (runDataSheetRoot is null || reactor != runDataSheetRoot.RunDataSheet.Reactor)
 | 
			
		||||
            RunDataSheetRoot? runDataSheetRoot = GetRunDataSheetRoot(httpClient, rds.Value);
 | 
			
		||||
            if (runDataSheetRoot?.RunDataSheet is null || reactor != runDataSheetRoot.RunDataSheet.Reactor)
 | 
			
		||||
            {
 | 
			
		||||
                psn = string.Empty;
 | 
			
		||||
                common = new(layer: null,
 | 
			
		||||
                psn = null;
 | 
			
		||||
                result = new(layer: null,
 | 
			
		||||
                             psn: psn,
 | 
			
		||||
                             rdsNumber: rds,
 | 
			
		||||
                             reactor: reactor,
 | 
			
		||||
                             zone: null,
 | 
			
		||||
                             employee: null);
 | 
			
		||||
                             employee: null,
 | 
			
		||||
                             runDataSheetRoot: runDataSheetRoot,
 | 
			
		||||
                             workOrder: null);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                psn = runDataSheetRoot.RunDataSheet.PSN.ToString();
 | 
			
		||||
                common = new(layer: null,
 | 
			
		||||
                result = new(layer: null,
 | 
			
		||||
                             psn: psn,
 | 
			
		||||
                             rdsNumber: rds,
 | 
			
		||||
                             reactor: reactor,
 | 
			
		||||
                             zone: null,
 | 
			
		||||
                             employee: null);
 | 
			
		||||
                             employee: null,
 | 
			
		||||
                             runDataSheetRoot: runDataSheetRoot,
 | 
			
		||||
                             workOrder: null);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return new(common, workOrder);
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static (Common common, WorkOrder workOrder) Get(Input input, string barcodeHostFileShare)
 | 
			
		||||
    private static ReactorRoot? GetReactorRoot(HttpClient httpClient, JsonSerializerOptions jsonSerializerOptions, int? reactor)
 | 
			
		||||
    {
 | 
			
		||||
        ReactorRoot? result;
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            Task<HttpResponseMessage> httpResponseMessageTask = httpClient.GetAsync($"{httpClient.BaseAddress}/reactors/{reactor}");
 | 
			
		||||
            httpResponseMessageTask.Wait();
 | 
			
		||||
            if (httpResponseMessageTask.Result.StatusCode != System.Net.HttpStatusCode.OK)
 | 
			
		||||
                throw new Exception($"Unable to OI <{httpResponseMessageTask.Result.StatusCode}>");
 | 
			
		||||
            using Task<Stream> streamTask = httpResponseMessageTask.Result.Content.ReadAsStreamAsync();
 | 
			
		||||
            streamTask.Wait();
 | 
			
		||||
            result = !streamTask.Result.CanRead ? null : JsonSerializer.Deserialize<ReactorRoot>(streamTask.Result, jsonSerializerOptions);
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception) { result = null; }
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static RunDataSheetRoot? GetRunDataSheetRoot(HttpClient httpClient, int rds)
 | 
			
		||||
    {
 | 
			
		||||
        RunDataSheetRoot? result;
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            JsonSerializerOptions jsonSerializerOptions = new() { PropertyNameCaseInsensitive = true };
 | 
			
		||||
            using Task<HttpResponseMessage> httpResponseMessageTask = httpClient.GetAsync($"{httpClient.BaseAddress}/materials/rds/{rds}");
 | 
			
		||||
            httpResponseMessageTask.Wait();
 | 
			
		||||
            if (httpResponseMessageTask.Result.StatusCode != System.Net.HttpStatusCode.OK)
 | 
			
		||||
                throw new Exception($"Unable to OI <{httpResponseMessageTask.Result.StatusCode}>");
 | 
			
		||||
            Task<string> json = httpResponseMessageTask.Result.Content.ReadAsStringAsync();
 | 
			
		||||
            json.Wait();
 | 
			
		||||
            result = JsonSerializer.Deserialize<RunDataSheetRoot>(json.Result, jsonSerializerOptions);
 | 
			
		||||
            result ??= new RunDataSheetRoot(null);
 | 
			
		||||
            result.Json = json.Result;
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception) { result = null; }
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static Common Get(Input input, string barcodeHostFileShare, HttpClient httpClient)
 | 
			
		||||
    {
 | 
			
		||||
        Common result;
 | 
			
		||||
        if (string.IsNullOrEmpty(barcodeHostFileShare) || !Directory.Exists(barcodeHostFileShare))
 | 
			
		||||
            throw new Exception($"Unable to access file-share <{barcodeHostFileShare}>");
 | 
			
		||||
        int? rds;
 | 
			
		||||
        long sequence = 0;
 | 
			
		||||
        WorkOrder workOrder;
 | 
			
		||||
        WorkOrder? workOrder;
 | 
			
		||||
        RunDataSheetRoot? runDataSheetRoot;
 | 
			
		||||
        string mid = string.IsNullOrEmpty(input.MID) ? string.Empty : input.MID;
 | 
			
		||||
        int? reactor = mid.Length < 2 || !int.TryParse(mid.Substring(0, 2), out int reactorNumber) ? null : reactorNumber;
 | 
			
		||||
        bool parsed = !string.IsNullOrEmpty(input.Sequence) && long.TryParse(input.Sequence, out sequence);
 | 
			
		||||
@ -471,35 +527,38 @@ public partial class Job
 | 
			
		||||
        if (text is null || text.Length < 3)
 | 
			
		||||
        {
 | 
			
		||||
            rds = null;
 | 
			
		||||
            workOrder = new(null, null, null, null, false);
 | 
			
		||||
            workOrder = null;
 | 
			
		||||
            runDataSheetRoot = null;
 | 
			
		||||
        }
 | 
			
		||||
        else if (!text.Contains('.'))
 | 
			
		||||
        {
 | 
			
		||||
            rds = !int.TryParse(text.Substring(2), out int rdsNumber) ? null : rdsNumber;
 | 
			
		||||
            workOrder = new(null, null, null, null, false);
 | 
			
		||||
            workOrder = null;
 | 
			
		||||
            rds = !int.TryParse(text.Substring(2), out int rdsNumber) || IsInvalid(rdsNumber) ? null : rdsNumber;
 | 
			
		||||
            runDataSheetRoot = rds is null ? null : GetRunDataSheetRoot(httpClient, rds.Value);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            rds = null;
 | 
			
		||||
            runDataSheetRoot = null;
 | 
			
		||||
            workOrder = GetWorkOrder(new(input, text.Substring(2)));
 | 
			
		||||
        }
 | 
			
		||||
        Common common = new(layer: null,
 | 
			
		||||
                            psn: null,
 | 
			
		||||
                            rdsNumber: rds,
 | 
			
		||||
                            reactor: reactor,
 | 
			
		||||
                            zone: null,
 | 
			
		||||
                            employee: null);
 | 
			
		||||
        return new(common, workOrder);
 | 
			
		||||
        result = new(layer: null,
 | 
			
		||||
                     psn: null,
 | 
			
		||||
                     rdsNumber: rds,
 | 
			
		||||
                     reactor: reactor,
 | 
			
		||||
                     zone: null,
 | 
			
		||||
                     employee: null,
 | 
			
		||||
                     runDataSheetRoot: runDataSheetRoot,
 | 
			
		||||
                     workOrder: workOrder);
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#nullable disable
 | 
			
		||||
 | 
			
		||||
    private static string GetRunJson(string lsl2SQLConnectionString, string commandText)
 | 
			
		||||
    private static string GetRunJson(string connectionString, string commandText)
 | 
			
		||||
    {
 | 
			
		||||
        StringBuilder result = new();
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            using SqlConnection sqlConnection = new(lsl2SQLConnectionString);
 | 
			
		||||
            using SqlConnection sqlConnection = new(connectionString);
 | 
			
		||||
            sqlConnection.Open();
 | 
			
		||||
            using SqlCommand sqlCommand = new(commandText, sqlConnection);
 | 
			
		||||
            SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(CommandBehavior.SequentialAccess);
 | 
			
		||||
@ -513,7 +572,7 @@ public partial class Job
 | 
			
		||||
        return result.ToString();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static string GetCommandText(int? rds, int? workOrderNumber, int? workOrderCassette, int? slot, int? reactor)
 | 
			
		||||
    private static string GetCommandText(DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter, int? rds, int? workOrderNumber, int? workOrderCassette, int? slot, int? reactor)
 | 
			
		||||
    { // cSpell:disable
 | 
			
		||||
        List<string> results = new();
 | 
			
		||||
        int rdsValue = rds is null ? -1 : rds.Value;
 | 
			
		||||
@ -540,6 +599,7 @@ public partial class Job
 | 
			
		||||
        results.Add("       ) zone ");
 | 
			
		||||
        results.Add(" from lsl2sql.dbo.react_run rr ");
 | 
			
		||||
        results.Add($" where rr.rds_no = {rdsValue}");
 | 
			
		||||
        results.Add($"   and rr.enter_dtm > '{enteredDateTimeFilter:yyyy-MM-dd} 00:00:00.000' ");
 | 
			
		||||
        results.Add(" union all ");
 | 
			
		||||
        results.Add(" select ");
 | 
			
		||||
        results.Add("         rr.rds_no ");
 | 
			
		||||
@ -589,127 +649,115 @@ public partial class Job
 | 
			
		||||
        results.Add("   select max(qa.rds_no) ");
 | 
			
		||||
        results.Add("   from lsl2sql.dbo.react_run qa ");
 | 
			
		||||
        results.Add("   where qa.load_sig != '' ");
 | 
			
		||||
        results.Add("       and qa.load_sig_dtm > '2023-05-01 00:00:00.000' ");
 | 
			
		||||
        results.Add($"       and qa.load_sig_dtm > '{loadSignatureDateTimeFilter:yyyy-MM-dd} 00:00:00.000' ");
 | 
			
		||||
        results.Add($"       and qa.reactor = {reactorValue}");
 | 
			
		||||
        results.Add(" ) ");
 | 
			
		||||
        results.Add(" for json path ");
 | 
			
		||||
        return string.Join(Environment.NewLine, results);
 | 
			
		||||
    } // cSpell:restore
 | 
			
		||||
 | 
			
		||||
    private static CommonB Get(string lsl2SQLConnectionString, string layer, string psn, int? reactorNumber, int? slotNumber, int? workOrderNumber, int? workOrderCassette, string zone)
 | 
			
		||||
    private static Run[]? Get(string lsl2SQLConnectionString, DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter, Common common)
 | 
			
		||||
    {
 | 
			
		||||
        int? rdsNumber;
 | 
			
		||||
        string comment;
 | 
			
		||||
        const int zero = 0;
 | 
			
		||||
        const string hyphen = "-";
 | 
			
		||||
        string commandText = GetCommandText(rds: null,
 | 
			
		||||
                                            workOrderNumber: workOrderNumber,
 | 
			
		||||
                                            workOrderCassette: workOrderCassette,
 | 
			
		||||
                                            slot: slotNumber,
 | 
			
		||||
                                            reactor: reactorNumber);
 | 
			
		||||
        Run[]? results;
 | 
			
		||||
        string commandText = GetCommandText(enteredDateTimeFilter,
 | 
			
		||||
                                            loadSignatureDateTimeFilter,
 | 
			
		||||
                                            rds: null,
 | 
			
		||||
                                            workOrderNumber: common.WorkOrder?.WorkOrderNumber,
 | 
			
		||||
                                            workOrderCassette: common.WorkOrder?.WorkOrderCassette,
 | 
			
		||||
                                            slot: common.WorkOrder?.SlotNumber,
 | 
			
		||||
                                            reactor: common.ReactorNumber);
 | 
			
		||||
        string json = GetRunJson(lsl2SQLConnectionString, commandText);
 | 
			
		||||
        if (string.IsNullOrEmpty(json))
 | 
			
		||||
        {
 | 
			
		||||
            rdsNumber = null;
 | 
			
		||||
            comment = hyphen;
 | 
			
		||||
            psn = string.Empty;
 | 
			
		||||
            zone = string.Empty;
 | 
			
		||||
        }
 | 
			
		||||
            results = null;
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            Run[] runs;
 | 
			
		||||
            try
 | 
			
		||||
            { runs = JsonSerializer.Deserialize<Run[]>(json); }
 | 
			
		||||
            { results = JsonSerializer.Deserialize<Run[]>(json); }
 | 
			
		||||
            catch (Exception)
 | 
			
		||||
            { runs = Array.Empty<Run>(); }
 | 
			
		||||
            if (runs.Length == 0)
 | 
			
		||||
            {
 | 
			
		||||
                rdsNumber = null;
 | 
			
		||||
                comment = hyphen;
 | 
			
		||||
                psn = string.Empty;
 | 
			
		||||
                zone = string.Empty;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                rdsNumber = runs[zero].RdsNo;
 | 
			
		||||
                if (string.IsNullOrEmpty(psn))
 | 
			
		||||
                    psn = runs[zero].PSN;
 | 
			
		||||
                if (string.IsNullOrEmpty(zone))
 | 
			
		||||
                    zone = runs[zero].Zone;
 | 
			
		||||
                if (string.IsNullOrEmpty(layer))
 | 
			
		||||
                    layer = runs[zero].EpiLayer;
 | 
			
		||||
                reactorNumber = runs[zero].Reactor;
 | 
			
		||||
                string loadLockSide = runs[zero].LoadLockSide;
 | 
			
		||||
                string loadLockSideFull = loadLockSide switch
 | 
			
		||||
                {
 | 
			
		||||
                    "L" => "Left",
 | 
			
		||||
                    "R" => "Right",
 | 
			
		||||
                    _ => loadLockSide,
 | 
			
		||||
                };
 | 
			
		||||
                comment = $"{loadLockSideFull} - {runs[zero].ReactorType}";
 | 
			
		||||
            }
 | 
			
		||||
            { results = Array.Empty<Run>(); }
 | 
			
		||||
        }
 | 
			
		||||
        return new(comment: comment,
 | 
			
		||||
                   layer: layer,
 | 
			
		||||
                   rdsNumber: rdsNumber,
 | 
			
		||||
                   psn: psn,
 | 
			
		||||
                   reactorNumber: reactorNumber,
 | 
			
		||||
                   zone: zone);
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static CommonB GetWithValidRDS(string lsl2SQLConnectionString, string layer, string psn, int? rdsNumber, int? reactorNumber, string zone)
 | 
			
		||||
    private static Run[]? GetWithValidRDS(string lsl2SQLConnectionString, DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter, Common common)
 | 
			
		||||
    {
 | 
			
		||||
        string comment;
 | 
			
		||||
        const int zero = 0;
 | 
			
		||||
        const string hyphen = "-";
 | 
			
		||||
        string commandText = GetCommandText(rds: rdsNumber,
 | 
			
		||||
        Run[]? results;
 | 
			
		||||
        string commandText = GetCommandText(enteredDateTimeFilter,
 | 
			
		||||
                                            loadSignatureDateTimeFilter,
 | 
			
		||||
                                            rds: common.RDSNumber,
 | 
			
		||||
                                            workOrderNumber: null,
 | 
			
		||||
                                            workOrderCassette: null,
 | 
			
		||||
                                            slot: null,
 | 
			
		||||
                                            reactor: null);
 | 
			
		||||
        string json = GetRunJson(lsl2SQLConnectionString, commandText);
 | 
			
		||||
        if (string.IsNullOrEmpty(json))
 | 
			
		||||
        {
 | 
			
		||||
            comment = hyphen;
 | 
			
		||||
            zone = string.Empty;
 | 
			
		||||
        }
 | 
			
		||||
            results = null;
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            Run[] runs;
 | 
			
		||||
            try
 | 
			
		||||
            { runs = JsonSerializer.Deserialize<Run[]>(json); }
 | 
			
		||||
            { results = JsonSerializer.Deserialize<Run[]>(json); }
 | 
			
		||||
            catch (Exception)
 | 
			
		||||
            { runs = Array.Empty<Run>(); }
 | 
			
		||||
            if (runs.Length == 0)
 | 
			
		||||
            {
 | 
			
		||||
                comment = hyphen;
 | 
			
		||||
                zone = string.Empty;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                if (string.IsNullOrEmpty(psn))
 | 
			
		||||
                    psn = runs[zero].PSN;
 | 
			
		||||
                if (string.IsNullOrEmpty(zone))
 | 
			
		||||
                    zone = runs[zero].Zone;
 | 
			
		||||
                if (string.IsNullOrEmpty(layer))
 | 
			
		||||
                    layer = runs[zero].EpiLayer;
 | 
			
		||||
                reactorNumber = runs[zero].Reactor is null ? reactorNumber : runs[zero].Reactor.Value;
 | 
			
		||||
                string loadLockSide = runs[zero].LoadLockSide;
 | 
			
		||||
                string loadLockSideFull = loadLockSide switch
 | 
			
		||||
                {
 | 
			
		||||
                    "L" => "Left",
 | 
			
		||||
                    "R" => "Right",
 | 
			
		||||
                    _ => loadLockSide,
 | 
			
		||||
                };
 | 
			
		||||
                comment = $"{loadLockSideFull} - {runs[zero].ReactorType}";
 | 
			
		||||
            }
 | 
			
		||||
            { results = Array.Empty<Run>(); }
 | 
			
		||||
        }
 | 
			
		||||
        return new(comment: comment,
 | 
			
		||||
                   layer: layer,
 | 
			
		||||
                   rdsNumber: rdsNumber,
 | 
			
		||||
                   psn: psn,
 | 
			
		||||
                   reactorNumber: reactorNumber,
 | 
			
		||||
                   zone: zone);
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static string? GetJobNames(Input input) =>
 | 
			
		||||
        input.EquipmentType switch
 | 
			
		||||
        {
 | 
			
		||||
            "MET08ANLYSDIFAAST230" => "'SPV01'",
 | 
			
		||||
            "MET08DDUPSFS6420" => "'TENCOR1','TENCOR2','TENCOR3'",
 | 
			
		||||
            "MET08DDUPSP1TBI" => "'SP101'",
 | 
			
		||||
            "MET08RESIHGCV" => "'HGCV1','HGCV2','HGCV3'",
 | 
			
		||||
            "MET08RESIMAPCDE" => "'CDE1','CDE2','CDE3','CDE4','CDE5','CDE6'",
 | 
			
		||||
            "MET08RESISRP2100" => "'SRP'",
 | 
			
		||||
            "MET08THFTIRQS408M" => "'BIORAD2','BIORAD3','BIORAD4','BIORAD5'",
 | 
			
		||||
            "MET08THFTIRSTRATUS" => "'BIORAD4','BIORAD5'",
 | 
			
		||||
            _ => null,
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
    private static string GetCommandText(CommonB commonB, string jobNames)
 | 
			
		||||
    { // cSpell:disable
 | 
			
		||||
        List<string> results = new();
 | 
			
		||||
        results.Add(" select count(distinct(se.f_sgrp)) count_se_sgrp ");
 | 
			
		||||
        results.Add(" from [spcepiworld].[dbo].[sgrp_ext] se ");
 | 
			
		||||
        results.Add(" join [spcepiworld].[dbo].[prcs_dat] pr ");
 | 
			
		||||
        results.Add("   on se.f_prcs = pr.f_prcs ");
 | 
			
		||||
        results.Add(" join [spcepiworld].[dbo].[job_dat] jd ");
 | 
			
		||||
        results.Add("   on se.f_job = jd.f_job ");
 | 
			
		||||
        results.Add(" join [spcepiworld].[dbo].[part_lot] pl ");
 | 
			
		||||
        results.Add("   on se.f_lot = pl.f_lot ");
 | 
			
		||||
        results.Add(" join [spcepiworld].[dbo].[part_dat] pd ");
 | 
			
		||||
        results.Add("   on se.f_part = pd.f_part ");
 | 
			
		||||
        results.Add(" join [spcepiworld].[dbo].[test_dat] td ");
 | 
			
		||||
        results.Add("   on se.f_test = td.f_test ");
 | 
			
		||||
        results.Add(" where se.f_flag = 0 ");
 | 
			
		||||
        results.Add($"   and pl.f_name = '{commonB.RDSNumber}' ");
 | 
			
		||||
        results.Add($"   and pr.f_name = '{commonB.ReactorNumber}' ");
 | 
			
		||||
        results.Add($"   and pd.f_name = '{commonB.PSN}' ");
 | 
			
		||||
        results.Add($"   and jd.f_name in ({jobNames}) ");
 | 
			
		||||
        return string.Join(Environment.NewLine, results);
 | 
			
		||||
    } // cSpell:restore
 | 
			
		||||
 | 
			
		||||
    private static int? GetScalar(string connectionString, string commandText)
 | 
			
		||||
    {
 | 
			
		||||
        int? result;
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            using SqlConnection sqlConnection = new(connectionString);
 | 
			
		||||
            sqlConnection.Open();
 | 
			
		||||
            using SqlCommand sqlCommand = new(commandText, sqlConnection);
 | 
			
		||||
            object scalar = sqlCommand.ExecuteScalar();
 | 
			
		||||
            if (scalar is null || !int.TryParse(scalar.ToString(), out int value))
 | 
			
		||||
                result = null;
 | 
			
		||||
            else
 | 
			
		||||
                result = value;
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception)
 | 
			
		||||
        {
 | 
			
		||||
            result = null;
 | 
			
		||||
        }
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -17,19 +17,21 @@ internal partial class Main
 | 
			
		||||
    private static object _IfxTransport;
 | 
			
		||||
    private static string _CellInstanceName;
 | 
			
		||||
    private static string _MetrologyFileShare;
 | 
			
		||||
    private static string _IQSConnectionString;
 | 
			
		||||
    private static string _BarcodeHostFileShare;
 | 
			
		||||
    private static string _LSL2SQLConnectionString;
 | 
			
		||||
    private static string _TibcoParameterSubjectPrefix;
 | 
			
		||||
    private static HttpClient _HttpClient;
 | 
			
		||||
    private static FileConnectorConfiguration _FileConnectorConfiguration;
 | 
			
		||||
 | 
			
		||||
    internal static void Initialize(ISMTP smtp, string cellInstanceName, FileConnectorConfiguration fileConnectorConfiguration, string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient)
 | 
			
		||||
    internal static void Initialize(ISMTP smtp, string cellInstanceName, FileConnectorConfiguration fileConnectorConfiguration, string iqsConnectionString, string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient)
 | 
			
		||||
    {
 | 
			
		||||
        _SMTP = smtp;
 | 
			
		||||
        _IfxTransport = null;
 | 
			
		||||
        _HttpClient = httpClient;
 | 
			
		||||
        _CellInstanceName = cellInstanceName;
 | 
			
		||||
        _MetrologyFileShare = metrologyFileShare;
 | 
			
		||||
        _IQSConnectionString = iqsConnectionString;
 | 
			
		||||
        _TibcoParameterSubjectPrefix = string.Empty;
 | 
			
		||||
        _BarcodeHostFileShare = barcodeHostFileShare;
 | 
			
		||||
        _LSL2SQLConnectionString = lsl2SQLConnectionString;
 | 
			
		||||
@ -167,13 +169,12 @@ internal partial class Main
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            string mid = string.Empty;
 | 
			
		||||
            string[] sourceFiles = null;
 | 
			
		||||
            DateTime dateTime = DateTime.Now;
 | 
			
		||||
            string pdsfFileLogistics = string.Empty;
 | 
			
		||||
            IfxDoc envelopeDocument = ifxEnvelope.ExtractDocument();
 | 
			
		||||
            CultureInfo cultureInfo = new("en-US");
 | 
			
		||||
            string pdsfFileLogistics = string.Empty;
 | 
			
		||||
            Calendar calendar = cultureInfo.Calendar;
 | 
			
		||||
            IfxDoc envelopeDocument = ifxEnvelope.ExtractDocument();
 | 
			
		||||
            string weekOfYear = calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
 | 
			
		||||
            string weekOfYearSegment = string.Concat(@"\", dateTime.ToString("yyyy"), "_Week_", weekOfYear, @"\", dateTime.ToString("yyyy-MM-dd"));
 | 
			
		||||
            if (!string.IsNullOrEmpty(_FileConnectorConfiguration.SourceFileLocation))
 | 
			
		||||
@ -188,8 +189,10 @@ internal partial class Main
 | 
			
		||||
            }
 | 
			
		||||
            if (!subject.Contains(_TibcoParameterSubjectPrefix))
 | 
			
		||||
                throw new Exception("Invalid Subject");
 | 
			
		||||
            mid = GetJobsMID(envelopeDocument);
 | 
			
		||||
            Job job = new(_LSL2SQLConnectionString, _MetrologyFileShare, _BarcodeHostFileShare, _HttpClient, mid);
 | 
			
		||||
            string mid = GetJobsMID(envelopeDocument);
 | 
			
		||||
            DateTime enteredDateTimeFilter = dateTime.AddDays(-356);
 | 
			
		||||
            DateTime loadSignatureDateTimeFilter = dateTime.AddDays(-4);
 | 
			
		||||
            Job job = new(_IQSConnectionString, _LSL2SQLConnectionString, _MetrologyFileShare, _BarcodeHostFileShare, _HttpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
            if (job.IsAreaSi)
 | 
			
		||||
            {
 | 
			
		||||
                IfxDoc sendReply = GetJobsReply(job);
 | 
			
		||||
 | 
			
		||||
@ -6,13 +6,15 @@ public class Reactor
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    [JsonConstructor]
 | 
			
		||||
    public Reactor(int reactorNo, int[] loadedRDS)
 | 
			
		||||
    public Reactor(int reactorNo, int? loadLockLeftRDS, int? loadLockRightRDS)
 | 
			
		||||
    {
 | 
			
		||||
        LoadLockLeftRDS = loadLockLeftRDS;
 | 
			
		||||
        LoadLockRightRDS = loadLockRightRDS;
 | 
			
		||||
        ReactorNo = reactorNo;
 | 
			
		||||
        LoadedRDS = loadedRDS;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [JsonPropertyName("reactorNo")] public int ReactorNo { get; } // { init; get; }
 | 
			
		||||
    [JsonPropertyName("loadedRDS")] public int[] LoadedRDS { get; } // { init; get; }
 | 
			
		||||
    [JsonPropertyName("loadLockLeftRDS")] public int? LoadLockLeftRDS { get; } // { init; get; }
 | 
			
		||||
    [JsonPropertyName("loadLockRightRDS")] public int? LoadLockRightRDS { get; } // { init; get; }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -2,13 +2,15 @@ using System.Text.Json.Serialization;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation.FileHandlers.TIBCO.Transport;
 | 
			
		||||
 | 
			
		||||
#nullable enable
 | 
			
		||||
 | 
			
		||||
public class ReactorRoot
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    [JsonConstructor]
 | 
			
		||||
    public ReactorRoot(Reactor reactor) =>
 | 
			
		||||
    public ReactorRoot(Reactor? reactor) =>
 | 
			
		||||
        Reactor = reactor;
 | 
			
		||||
 | 
			
		||||
    [JsonPropertyName("reactor")] public Reactor Reactor { get; } // { init; get; }
 | 
			
		||||
    [JsonPropertyName("reactor")] public Reactor? Reactor { get; } // { init; get; }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -29,12 +29,6 @@ public class Run
 | 
			
		||||
    [JsonPropertyName("ps_no")]
 | 
			
		||||
    public string PSN { get; set; }
 | 
			
		||||
 | 
			
		||||
    [JsonPropertyName("load_lock_side")]
 | 
			
		||||
    public string LoadLockSide { get; set; }
 | 
			
		||||
 | 
			
		||||
    [JsonPropertyName("reactor_type")]
 | 
			
		||||
    public string ReactorType { get; set; }
 | 
			
		||||
 | 
			
		||||
    [JsonPropertyName("recipe_name")]
 | 
			
		||||
    public string RecipeName { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -6,13 +6,23 @@ public class RunDataSheet
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    [JsonConstructor]
 | 
			
		||||
    public RunDataSheet(int psn, int reactor)
 | 
			
		||||
    public RunDataSheet(string loadLockSide,
 | 
			
		||||
                        int number,
 | 
			
		||||
                        int psn,
 | 
			
		||||
                        int reactor,
 | 
			
		||||
                        string reactorType)
 | 
			
		||||
    {
 | 
			
		||||
        PSN = psn;
 | 
			
		||||
        Number = number;
 | 
			
		||||
        LoadLockSide = loadLockSide;
 | 
			
		||||
        Reactor = reactor;
 | 
			
		||||
        ReactorType = reactorType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [JsonPropertyName("keyId")] public int Number { get; } // { init; get; }
 | 
			
		||||
    [JsonPropertyName("loadLockSide")] public string LoadLockSide { get; } // { init; get; }
 | 
			
		||||
    [JsonPropertyName("PSN")] public int PSN { get; } // { init; get; }
 | 
			
		||||
    [JsonPropertyName("reactor")] public int Reactor { get; } // { init; get; }
 | 
			
		||||
    [JsonPropertyName("reactorType")] public string ReactorType { get; } // { init; get; }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -2,13 +2,16 @@ using System.Text.Json.Serialization;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation.FileHandlers.TIBCO.Transport;
 | 
			
		||||
 | 
			
		||||
#nullable enable
 | 
			
		||||
 | 
			
		||||
public class RunDataSheetRoot
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    [JsonConstructor]
 | 
			
		||||
    public RunDataSheetRoot(RunDataSheet runDataSheet) =>
 | 
			
		||||
    public RunDataSheetRoot(RunDataSheet? runDataSheet) =>
 | 
			
		||||
        RunDataSheet = runDataSheet;
 | 
			
		||||
 | 
			
		||||
    [JsonPropertyName("rds")] public RunDataSheet RunDataSheet { get; } // { init; get; }
 | 
			
		||||
    public string? Json { get; set; }
 | 
			
		||||
    [JsonPropertyName("rds")] public RunDataSheet? RunDataSheet { get; } // { init; get; }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -4,341 +4,344 @@ using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text.Json;
 | 
			
		||||
using System.Text.Json.Serialization;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation.FileHandlers.txt;
 | 
			
		||||
 | 
			
		||||
public class Description : IDescription, Shared.Properties.IDescription
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public int Test { get; set; }
 | 
			
		||||
    public int Count { get; set; }
 | 
			
		||||
    public int Index { get; set; }
 | 
			
		||||
    [JsonPropertyName("EventId")] public int Test { get; set; }
 | 
			
		||||
    [JsonPropertyName("Count")] public int Count { get; set; }
 | 
			
		||||
    [JsonPropertyName("Index")] 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; }
 | 
			
		||||
    [JsonPropertyName("MesEntity")] 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; }
 | 
			
		||||
    public string Employee { get; set; }
 | 
			
		||||
    public string Lot { get; set; }
 | 
			
		||||
    public string PSN { get; set; }
 | 
			
		||||
    public string Reactor { get; set; }
 | 
			
		||||
    [JsonPropertyName("Date")] public string Date { get; set; }
 | 
			
		||||
    [JsonPropertyName("Employee")] public string Employee { get; set; }
 | 
			
		||||
    [JsonPropertyName("Lot")] public string Lot { get; set; }
 | 
			
		||||
    [JsonPropertyName("PSN")] public string PSN { get; set; }
 | 
			
		||||
    [JsonPropertyName("Reactor")] public string Reactor { get; set; }
 | 
			
		||||
    public string Recipe { get; set; }
 | 
			
		||||
    [JsonPropertyName("IndexOf")] public string IndexOf { get; set; }
 | 
			
		||||
    [JsonPropertyName("AttemptCounter")] public string AttemptCounter { get; set; }
 | 
			
		||||
    //
 | 
			
		||||
    public string Grade { get; set; }
 | 
			
		||||
    [JsonPropertyName("Grade")] public string Grade { get; set; }
 | 
			
		||||
    public string HeaderUniqueId { get; set; }
 | 
			
		||||
    public string RDS { get; set; }
 | 
			
		||||
    public string Session { get; set; }
 | 
			
		||||
    public string Side { get; set; }
 | 
			
		||||
    public string SrcDest { get; set; }
 | 
			
		||||
    [JsonPropertyName("RDS")] public string RDS { get; set; }
 | 
			
		||||
    [JsonPropertyName("Session")] public string Session { get; set; }
 | 
			
		||||
    [JsonPropertyName("Side")] public string Side { get; set; }
 | 
			
		||||
    [JsonPropertyName("SrcDest")] public string SrcDest { get; set; }
 | 
			
		||||
    public string UniqueId { get; set; }
 | 
			
		||||
    public string WaferID { get; set; }
 | 
			
		||||
    [JsonPropertyName("WaferID")] public string WaferID { get; set; }
 | 
			
		||||
    //
 | 
			
		||||
    public string DcnAllMax { get; set; }
 | 
			
		||||
    public string DcnAllMean { get; set; }
 | 
			
		||||
    public string DcnAllMin { get; set; }
 | 
			
		||||
    public string DcnAllStdDev { get; set; }
 | 
			
		||||
    public string DcnAreaCountMax { get; set; }
 | 
			
		||||
    public string DcnAreaCountMean { get; set; }
 | 
			
		||||
    public string DcnAreaCountMin { get; set; }
 | 
			
		||||
    public string DcnAreaCountStdDev { get; set; }
 | 
			
		||||
    public string DcnAreaMax { get; set; }
 | 
			
		||||
    public string DcnAreaMean { get; set; }
 | 
			
		||||
    public string DcnAreaMin { get; set; }
 | 
			
		||||
    public string DcnAreaStdDev { get; set; }
 | 
			
		||||
    public string DcnBin1Max { get; set; }
 | 
			
		||||
    public string DcnBin1Mean { get; set; }
 | 
			
		||||
    public string DcnBin1Min { get; set; }
 | 
			
		||||
    public string DcnBin1StdDev { get; set; }
 | 
			
		||||
    public string DcnBin2Max { get; set; }
 | 
			
		||||
    public string DcnBin2Mean { get; set; }
 | 
			
		||||
    public string DcnBin2Min { get; set; }
 | 
			
		||||
    public string DcnBin2StdDev { get; set; }
 | 
			
		||||
    public string DcnBin3Max { get; set; }
 | 
			
		||||
    public string DcnBin3Mean { get; set; }
 | 
			
		||||
    public string DcnBin3Min { get; set; }
 | 
			
		||||
    public string DcnBin3StdDev { get; set; }
 | 
			
		||||
    public string DcnBin4Max { get; set; }
 | 
			
		||||
    public string DcnBin4Mean { get; set; }
 | 
			
		||||
    public string DcnBin4Min { get; set; }
 | 
			
		||||
    public string DcnBin4StdDev { get; set; }
 | 
			
		||||
    public string DcnBin5Max { get; set; }
 | 
			
		||||
    public string DcnBin5Mean { get; set; }
 | 
			
		||||
    public string DcnBin5Min { get; set; }
 | 
			
		||||
    public string DcnBin5StdDev { get; set; }
 | 
			
		||||
    public string DcnBin6Max { get; set; }
 | 
			
		||||
    public string DcnBin6Mean { get; set; }
 | 
			
		||||
    public string DcnBin6Min { get; set; }
 | 
			
		||||
    public string DcnBin6StdDev { get; set; }
 | 
			
		||||
    public string DcnBin7Max { get; set; }
 | 
			
		||||
    public string DcnBin7Mean { get; set; }
 | 
			
		||||
    public string DcnBin7Min { get; set; }
 | 
			
		||||
    public string DcnBin7StdDev { get; set; }
 | 
			
		||||
    public string DcnBin8Max { get; set; }
 | 
			
		||||
    public string DcnBin8Mean { get; set; }
 | 
			
		||||
    public string DcnBin8Min { get; set; }
 | 
			
		||||
    public string DcnBin8StdDev { get; set; }
 | 
			
		||||
    public string DcnHazeAvgMax { get; set; }
 | 
			
		||||
    public string DcnHazeAvgMean { get; set; }
 | 
			
		||||
    public string DcnHazeAvgMin { get; set; }
 | 
			
		||||
    public string DcnHazeAvgStdDev { get; set; }
 | 
			
		||||
    public string DcnHazeMedianMax { get; set; }
 | 
			
		||||
    public string DcnHazeMedianMean { get; set; }
 | 
			
		||||
    public string DcnHazeMedianMin { get; set; }
 | 
			
		||||
    public string DcnHazeMedianStdDev { get; set; }
 | 
			
		||||
    public string DcnHazeStdDevMax { get; set; }
 | 
			
		||||
    public string DcnHazeStdDevMean { get; set; }
 | 
			
		||||
    public string DcnHazeStdDevMin { get; set; }
 | 
			
		||||
    public string DcnHazeStdDevStdDev { get; set; }
 | 
			
		||||
    public string DcnLpdESMax { get; set; }
 | 
			
		||||
    public string DcnLpdESMean { get; set; }
 | 
			
		||||
    public string DcnLpdESMin { get; set; }
 | 
			
		||||
    public string DcnLpdESStdDev { get; set; }
 | 
			
		||||
    public string DcnLpdMax { get; set; }
 | 
			
		||||
    public string DcnLpdMean { get; set; }
 | 
			
		||||
    public string DcnLpdMin { get; set; }
 | 
			
		||||
    public string DcnLpdNMax { get; set; }
 | 
			
		||||
    public string DcnLpdNMean { get; set; }
 | 
			
		||||
    public string DcnLpdNMin { get; set; }
 | 
			
		||||
    public string DcnLpdNStdDev { get; set; }
 | 
			
		||||
    public string DcnLpdStdDev { get; set; }
 | 
			
		||||
    public string DcnMicroScrMax { get; set; }
 | 
			
		||||
    public string DcnMicroScrMean { get; set; }
 | 
			
		||||
    public string DcnMicroScrMin { get; set; }
 | 
			
		||||
    public string DcnMicroScrStdDev { get; set; }
 | 
			
		||||
    public string DcnScrMax { get; set; }
 | 
			
		||||
    public string DcnScrMean { get; set; }
 | 
			
		||||
    public string DcnScrMin { get; set; }
 | 
			
		||||
    public string DcnScrStdDev { get; set; }
 | 
			
		||||
    public string DcnSlipMax { get; set; }
 | 
			
		||||
    public string DcnSlipMean { get; set; }
 | 
			
		||||
    public string DcnSlipMin { get; set; }
 | 
			
		||||
    public string DcnSlipStdDev { get; set; }
 | 
			
		||||
    public string DnnAllMax { get; set; }
 | 
			
		||||
    public string DnnAllMean { get; set; }
 | 
			
		||||
    public string DnnAllMin { get; set; }
 | 
			
		||||
    public string DnnAllStdDev { get; set; }
 | 
			
		||||
    public string DnnAreaCountMax { get; set; }
 | 
			
		||||
    public string DnnAreaCountMean { get; set; }
 | 
			
		||||
    public string DnnAreaCountMin { get; set; }
 | 
			
		||||
    public string DnnAreaCountStdDev { get; set; }
 | 
			
		||||
    public string DnnAreaMax { get; set; }
 | 
			
		||||
    public string DnnAreaMean { get; set; }
 | 
			
		||||
    public string DnnAreaMin { get; set; }
 | 
			
		||||
    public string DnnAreaStdDev { get; set; }
 | 
			
		||||
    public string DnnBin1Max { get; set; }
 | 
			
		||||
    public string DnnBin1Mean { get; set; }
 | 
			
		||||
    public string DnnBin1Min { get; set; }
 | 
			
		||||
    public string DnnBin1StdDev { get; set; }
 | 
			
		||||
    public string DnnBin2Max { get; set; }
 | 
			
		||||
    public string DnnBin2Mean { get; set; }
 | 
			
		||||
    public string DnnBin2Min { get; set; }
 | 
			
		||||
    public string DnnBin2StdDev { get; set; }
 | 
			
		||||
    public string DnnBin3Max { get; set; }
 | 
			
		||||
    public string DnnBin3Mean { get; set; }
 | 
			
		||||
    public string DnnBin3Min { get; set; }
 | 
			
		||||
    public string DnnBin3StdDev { get; set; }
 | 
			
		||||
    public string DnnBin4Max { get; set; }
 | 
			
		||||
    public string DnnBin4Mean { get; set; }
 | 
			
		||||
    public string DnnBin4Min { get; set; }
 | 
			
		||||
    public string DnnBin4StdDev { get; set; }
 | 
			
		||||
    public string DnnBin5Max { get; set; }
 | 
			
		||||
    public string DnnBin5Mean { get; set; }
 | 
			
		||||
    public string DnnBin5Min { get; set; }
 | 
			
		||||
    public string DnnBin5StdDev { get; set; }
 | 
			
		||||
    public string DnnBin6Max { get; set; }
 | 
			
		||||
    public string DnnBin6Mean { get; set; }
 | 
			
		||||
    public string DnnBin6Min { get; set; }
 | 
			
		||||
    public string DnnBin6StdDev { get; set; }
 | 
			
		||||
    public string DnnBin7Max { get; set; }
 | 
			
		||||
    public string DnnBin7Mean { get; set; }
 | 
			
		||||
    public string DnnBin7Min { get; set; }
 | 
			
		||||
    public string DnnBin7StdDev { get; set; }
 | 
			
		||||
    public string DnnBin8Max { get; set; }
 | 
			
		||||
    public string DnnBin8Mean { get; set; }
 | 
			
		||||
    public string DnnBin8Min { get; set; }
 | 
			
		||||
    public string DnnBin8StdDev { get; set; }
 | 
			
		||||
    public string DnnHazeAvgMax { get; set; }
 | 
			
		||||
    public string DnnHazeAvgMean { get; set; }
 | 
			
		||||
    public string DnnHazeAvgMin { get; set; }
 | 
			
		||||
    public string DnnHazeAvgStdDev { get; set; }
 | 
			
		||||
    public string DnnHazeMedianMax { get; set; }
 | 
			
		||||
    public string DnnHazeMedianMean { get; set; }
 | 
			
		||||
    public string DnnHazeMedianMin { get; set; }
 | 
			
		||||
    public string DnnHazeMedianStdDev { get; set; }
 | 
			
		||||
    public string DnnHazeStdDevMax { get; set; }
 | 
			
		||||
    public string DnnHazeStdDevMean { get; set; }
 | 
			
		||||
    public string DnnHazeStdDevMin { get; set; }
 | 
			
		||||
    public string DnnHazeStdDevStdDev { get; set; }
 | 
			
		||||
    public string DnnLpdESMax { get; set; }
 | 
			
		||||
    public string DnnLpdESMean { get; set; }
 | 
			
		||||
    public string DnnLpdESMin { get; set; }
 | 
			
		||||
    public string DnnLpdESStdDev { get; set; }
 | 
			
		||||
    public string DnnLpdMax { get; set; }
 | 
			
		||||
    public string DnnLpdMean { get; set; }
 | 
			
		||||
    public string DnnLpdMin { get; set; }
 | 
			
		||||
    public string DnnLpdNMax { get; set; }
 | 
			
		||||
    public string DnnLpdNMean { get; set; }
 | 
			
		||||
    public string DnnLpdNMin { get; set; }
 | 
			
		||||
    public string DnnLpdNStdDev { get; set; }
 | 
			
		||||
    public string DnnLpdStdDev { get; set; }
 | 
			
		||||
    public string DnnMicroScrMax { get; set; }
 | 
			
		||||
    public string DnnMicroScrMean { get; set; }
 | 
			
		||||
    public string DnnMicroScrMin { get; set; }
 | 
			
		||||
    public string DnnMicroScrStdDev { get; set; }
 | 
			
		||||
    public string DnnScrMax { get; set; }
 | 
			
		||||
    public string DnnScrMean { get; set; }
 | 
			
		||||
    public string DnnScrMin { get; set; }
 | 
			
		||||
    public string DnnScrStdDev { get; set; }
 | 
			
		||||
    public string DnnSlipMax { get; set; }
 | 
			
		||||
    public string DnnSlipMean { get; set; }
 | 
			
		||||
    public string DnnSlipMin { get; set; }
 | 
			
		||||
    public string DnnSlipStdDev { get; set; }
 | 
			
		||||
    public string DwnAllMax { get; set; }
 | 
			
		||||
    public string DwnAllMean { get; set; }
 | 
			
		||||
    public string DwnAllMin { get; set; }
 | 
			
		||||
    public string DwnAllStdDev { get; set; }
 | 
			
		||||
    public string DwnAreaCountMax { get; set; }
 | 
			
		||||
    public string DwnAreaCountMean { get; set; }
 | 
			
		||||
    public string DwnAreaCountMin { get; set; }
 | 
			
		||||
    public string DwnAreaCountStdDev { get; set; }
 | 
			
		||||
    public string DwnAreaMax { get; set; }
 | 
			
		||||
    public string DwnAreaMean { get; set; }
 | 
			
		||||
    public string DwnAreaMin { get; set; }
 | 
			
		||||
    public string DwnAreaStdDev { get; set; }
 | 
			
		||||
    public string DwnBin1Max { get; set; }
 | 
			
		||||
    public string DwnBin1Mean { get; set; }
 | 
			
		||||
    public string DwnBin1Min { get; set; }
 | 
			
		||||
    public string DwnBin1StdDev { get; set; }
 | 
			
		||||
    public string DwnBin2Max { get; set; }
 | 
			
		||||
    public string DwnBin2Mean { get; set; }
 | 
			
		||||
    public string DwnBin2Min { get; set; }
 | 
			
		||||
    public string DwnBin2StdDev { get; set; }
 | 
			
		||||
    public string DwnBin3Max { get; set; }
 | 
			
		||||
    public string DwnBin3Mean { get; set; }
 | 
			
		||||
    public string DwnBin3Min { get; set; }
 | 
			
		||||
    public string DwnBin3StdDev { get; set; }
 | 
			
		||||
    public string DwnBin4Max { get; set; }
 | 
			
		||||
    public string DwnBin4Mean { get; set; }
 | 
			
		||||
    public string DwnBin4Min { get; set; }
 | 
			
		||||
    public string DwnBin4StdDev { get; set; }
 | 
			
		||||
    public string DwnBin5Max { get; set; }
 | 
			
		||||
    public string DwnBin5Mean { get; set; }
 | 
			
		||||
    public string DwnBin5Min { get; set; }
 | 
			
		||||
    public string DwnBin5StdDev { get; set; }
 | 
			
		||||
    public string DwnBin6Max { get; set; }
 | 
			
		||||
    public string DwnBin6Mean { get; set; }
 | 
			
		||||
    public string DwnBin6Min { get; set; }
 | 
			
		||||
    public string DwnBin6StdDev { get; set; }
 | 
			
		||||
    public string DwnBin7Max { get; set; }
 | 
			
		||||
    public string DwnBin7Mean { get; set; }
 | 
			
		||||
    public string DwnBin7Min { get; set; }
 | 
			
		||||
    public string DwnBin7StdDev { get; set; }
 | 
			
		||||
    public string DwnBin8Max { get; set; }
 | 
			
		||||
    public string DwnBin8Mean { get; set; }
 | 
			
		||||
    public string DwnBin8Min { get; set; }
 | 
			
		||||
    public string DwnBin8StdDev { get; set; }
 | 
			
		||||
    public string DwnHazeAvgMax { get; set; }
 | 
			
		||||
    public string DwnHazeAvgMean { get; set; }
 | 
			
		||||
    public string DwnHazeAvgMin { get; set; }
 | 
			
		||||
    public string DwnHazeAvgStdDev { get; set; }
 | 
			
		||||
    public string DwnHazeMedianMax { get; set; }
 | 
			
		||||
    public string DwnHazeMedianMean { get; set; }
 | 
			
		||||
    public string DwnHazeMedianMin { get; set; }
 | 
			
		||||
    public string DwnHazeMedianStdDev { get; set; }
 | 
			
		||||
    public string DwnHazeStdDevMax { get; set; }
 | 
			
		||||
    public string DwnHazeStdDevMean { get; set; }
 | 
			
		||||
    public string DwnHazeStdDevMin { get; set; }
 | 
			
		||||
    public string DwnHazeStdDevStdDev { get; set; }
 | 
			
		||||
    public string DwnLpdESMax { get; set; }
 | 
			
		||||
    public string DwnLpdESMean { get; set; }
 | 
			
		||||
    public string DwnLpdESMin { get; set; }
 | 
			
		||||
    public string DwnLpdESStdDev { get; set; }
 | 
			
		||||
    public string DwnLpdMax { get; set; }
 | 
			
		||||
    public string DwnLpdMean { get; set; }
 | 
			
		||||
    public string DwnLpdMin { get; set; }
 | 
			
		||||
    public string DwnLpdNMax { get; set; }
 | 
			
		||||
    public string DwnLpdNMean { get; set; }
 | 
			
		||||
    public string DwnLpdNMin { get; set; }
 | 
			
		||||
    public string DwnLpdNStdDev { get; set; }
 | 
			
		||||
    public string DwnLpdStdDev { get; set; }
 | 
			
		||||
    public string DwnMicroScrMax { get; set; }
 | 
			
		||||
    public string DwnMicroScrMean { get; set; }
 | 
			
		||||
    public string DwnMicroScrMin { get; set; }
 | 
			
		||||
    public string DwnMicroScrStdDev { get; set; }
 | 
			
		||||
    public string DwnScrMax { get; set; }
 | 
			
		||||
    public string DwnScrMean { get; set; }
 | 
			
		||||
    public string DwnScrMin { get; set; }
 | 
			
		||||
    public string DwnScrStdDev { get; set; }
 | 
			
		||||
    public string DwnSlipMax { get; set; }
 | 
			
		||||
    public string DwnSlipMean { get; set; }
 | 
			
		||||
    public string DwnSlipMin { get; set; }
 | 
			
		||||
    public string DwnSlipStdDev { get; set; }
 | 
			
		||||
    public string DcnAll { get; set; }
 | 
			
		||||
    public string DcnArea { get; set; }
 | 
			
		||||
    public string DcnAreaCount { get; set; }
 | 
			
		||||
    public string DcnBin1 { get; set; }
 | 
			
		||||
    public string DcnBin2 { get; set; }
 | 
			
		||||
    public string DcnBin3 { get; set; }
 | 
			
		||||
    public string DcnBin4 { get; set; }
 | 
			
		||||
    public string DcnBin5 { get; set; }
 | 
			
		||||
    public string DcnBin6 { get; set; }
 | 
			
		||||
    public string DcnBin7 { get; set; }
 | 
			
		||||
    public string DcnBin8 { get; set; }
 | 
			
		||||
    public string DcnHazeAvg { get; set; }
 | 
			
		||||
    public string DcnHazeMedian { get; set; }
 | 
			
		||||
    public string DcnHazeStdDev { get; set; }
 | 
			
		||||
    public string DcnLpd { get; set; }
 | 
			
		||||
    public string DcnLpdES { get; set; }
 | 
			
		||||
    public string DcnLpdN { get; set; }
 | 
			
		||||
    public string DcnMicroScr { get; set; }
 | 
			
		||||
    public string DcnScr { get; set; }
 | 
			
		||||
    public string DcnSlip { get; set; }
 | 
			
		||||
    public string DnnAll { get; set; }
 | 
			
		||||
    public string DnnArea { get; set; }
 | 
			
		||||
    public string DnnAreaCount { get; set; }
 | 
			
		||||
    public string DnnBin1 { get; set; }
 | 
			
		||||
    public string DnnBin2 { get; set; }
 | 
			
		||||
    public string DnnBin3 { get; set; }
 | 
			
		||||
    public string DnnBin4 { get; set; }
 | 
			
		||||
    public string DnnBin5 { get; set; }
 | 
			
		||||
    public string DnnBin6 { get; set; }
 | 
			
		||||
    public string DnnBin7 { get; set; }
 | 
			
		||||
    public string DnnBin8 { get; set; }
 | 
			
		||||
    public string DnnHazeAvg { get; set; }
 | 
			
		||||
    public string DnnHazeMedian { get; set; }
 | 
			
		||||
    public string DnnHazeStdDev { get; set; }
 | 
			
		||||
    public string DnnLpd { get; set; }
 | 
			
		||||
    public string DnnLpdES { get; set; }
 | 
			
		||||
    public string DnnLpdN { get; set; }
 | 
			
		||||
    public string DnnMicroScr { get; set; }
 | 
			
		||||
    public string DnnScr { get; set; }
 | 
			
		||||
    public string DnnSlip { get; set; }
 | 
			
		||||
    public string DwnAll { get; set; }
 | 
			
		||||
    public string DwnArea { get; set; }
 | 
			
		||||
    public string DwnAreaCount { get; set; }
 | 
			
		||||
    public string DwnBin1 { get; set; }
 | 
			
		||||
    public string DwnBin2 { get; set; }
 | 
			
		||||
    public string DwnBin3 { get; set; }
 | 
			
		||||
    public string DwnBin4 { get; set; }
 | 
			
		||||
    public string DwnBin5 { get; set; }
 | 
			
		||||
    public string DwnBin6 { get; set; }
 | 
			
		||||
    public string DwnBin7 { get; set; }
 | 
			
		||||
    public string DwnBin8 { get; set; }
 | 
			
		||||
    public string DwnHazeAvg { get; set; }
 | 
			
		||||
    public string DwnHazeMedian { get; set; }
 | 
			
		||||
    public string DwnHazeStdDev { get; set; }
 | 
			
		||||
    public string DwnLpd { get; set; }
 | 
			
		||||
    public string DwnLpdES { get; set; }
 | 
			
		||||
    public string DwnLpdN { get; set; }
 | 
			
		||||
    public string DwnMicroScr { get; set; }
 | 
			
		||||
    public string DwnScr { get; set; }
 | 
			
		||||
    public string DwnSlip { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAllMax")] public string DcnAllMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAllMean")] public string DcnAllMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAllMin")] public string DcnAllMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAllStdDev")] public string DcnAllStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAreaCountMax")] public string DcnAreaCountMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAreaCountMean")] public string DcnAreaCountMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAreaCountMin")] public string DcnAreaCountMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAreaCountStdDev")] public string DcnAreaCountStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAreaMax")] public string DcnAreaMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAreaMean")] public string DcnAreaMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAreaMin")] public string DcnAreaMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAreaStdDev")] public string DcnAreaStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin1Max")] public string DcnBin1Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin1Mean")] public string DcnBin1Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin1Min")] public string DcnBin1Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin1StdDev")] public string DcnBin1StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin2Max")] public string DcnBin2Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin2Mean")] public string DcnBin2Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin2Min")] public string DcnBin2Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin2StdDev")] public string DcnBin2StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin3Max")] public string DcnBin3Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin3Mean")] public string DcnBin3Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin3Min")] public string DcnBin3Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin3StdDev")] public string DcnBin3StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin4Max")] public string DcnBin4Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin4Mean")] public string DcnBin4Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin4Min")] public string DcnBin4Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin4StdDev")] public string DcnBin4StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin5Max")] public string DcnBin5Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin5Mean")] public string DcnBin5Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin5Min")] public string DcnBin5Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin5StdDev")] public string DcnBin5StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin6Max")] public string DcnBin6Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin6Mean")] public string DcnBin6Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin6Min")] public string DcnBin6Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin6StdDev")] public string DcnBin6StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin7Max")] public string DcnBin7Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin7Mean")] public string DcnBin7Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin7Min")] public string DcnBin7Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin7StdDev")] public string DcnBin7StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin8Max")] public string DcnBin8Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin8Mean")] public string DcnBin8Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin8Min")] public string DcnBin8Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin8StdDev")] public string DcnBin8StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeAvgMax")] public string DcnHazeAvgMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeAvgMean")] public string DcnHazeAvgMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeAvgMin")] public string DcnHazeAvgMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeAvgStdDev")] public string DcnHazeAvgStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeMedianMax")] public string DcnHazeMedianMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeMedianMean")] public string DcnHazeMedianMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeMedianMin")] public string DcnHazeMedianMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeMedianStdDev")] public string DcnHazeMedianStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeStdDevMax")] public string DcnHazeStdDevMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeStdDevMean")] public string DcnHazeStdDevMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeStdDevMin")] public string DcnHazeStdDevMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeStdDevStdDev")] public string DcnHazeStdDevStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdESMax")] public string DcnLpdESMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdESMean")] public string DcnLpdESMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdESMin")] public string DcnLpdESMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdESStdDev")] public string DcnLpdESStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdMax")] public string DcnLpdMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdMean")] public string DcnLpdMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdMin")] public string DcnLpdMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdNMax")] public string DcnLpdNMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdNMean")] public string DcnLpdNMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdNMin")] public string DcnLpdNMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdNStdDev")] public string DcnLpdNStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdStdDev")] public string DcnLpdStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnMicroScrMax")] public string DcnMicroScrMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnMicroScrMean")] public string DcnMicroScrMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnMicroScrMin")] public string DcnMicroScrMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnMicroScrStdDev")] public string DcnMicroScrStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnScrMax")] public string DcnScrMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnScrMean")] public string DcnScrMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnScrMin")] public string DcnScrMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnScrStdDev")] public string DcnScrStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnSlipMax")] public string DcnSlipMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnSlipMean")] public string DcnSlipMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnSlipMin")] public string DcnSlipMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnSlipStdDev")] public string DcnSlipStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAllMax")] public string DnnAllMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAllMean")] public string DnnAllMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAllMin")] public string DnnAllMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAllStdDev")] public string DnnAllStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAreaCountMax")] public string DnnAreaCountMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAreaCountMean")] public string DnnAreaCountMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAreaCountMin")] public string DnnAreaCountMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAreaCountStdDev")] public string DnnAreaCountStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAreaMax")] public string DnnAreaMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAreaMean")] public string DnnAreaMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAreaMin")] public string DnnAreaMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAreaStdDev")] public string DnnAreaStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin1Max")] public string DnnBin1Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin1Mean")] public string DnnBin1Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin1Min")] public string DnnBin1Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin1StdDev")] public string DnnBin1StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin2Max")] public string DnnBin2Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin2Mean")] public string DnnBin2Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin2Min")] public string DnnBin2Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin2StdDev")] public string DnnBin2StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin3Max")] public string DnnBin3Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin3Mean")] public string DnnBin3Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin3Min")] public string DnnBin3Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin3StdDev")] public string DnnBin3StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin4Max")] public string DnnBin4Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin4Mean")] public string DnnBin4Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin4Min")] public string DnnBin4Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin4StdDev")] public string DnnBin4StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin5Max")] public string DnnBin5Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin5Mean")] public string DnnBin5Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin5Min")] public string DnnBin5Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin5StdDev")] public string DnnBin5StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin6Max")] public string DnnBin6Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin6Mean")] public string DnnBin6Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin6Min")] public string DnnBin6Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin6StdDev")] public string DnnBin6StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin7Max")] public string DnnBin7Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin7Mean")] public string DnnBin7Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin7Min")] public string DnnBin7Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin7StdDev")] public string DnnBin7StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin8Max")] public string DnnBin8Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin8Mean")] public string DnnBin8Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin8Min")] public string DnnBin8Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin8StdDev")] public string DnnBin8StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeAvgMax")] public string DnnHazeAvgMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeAvgMean")] public string DnnHazeAvgMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeAvgMin")] public string DnnHazeAvgMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeAvgStdDev")] public string DnnHazeAvgStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeMedianMax")] public string DnnHazeMedianMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeMedianMean")] public string DnnHazeMedianMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeMedianMin")] public string DnnHazeMedianMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeMedianStdDev")] public string DnnHazeMedianStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeStdDevMax")] public string DnnHazeStdDevMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeStdDevMean")] public string DnnHazeStdDevMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeStdDevMin")] public string DnnHazeStdDevMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeStdDevStdDev")] public string DnnHazeStdDevStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdESMax")] public string DnnLpdESMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdESMean")] public string DnnLpdESMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdESMin")] public string DnnLpdESMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdESStdDev")] public string DnnLpdESStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdMax")] public string DnnLpdMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdMean")] public string DnnLpdMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdMin")] public string DnnLpdMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdNMax")] public string DnnLpdNMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdNMean")] public string DnnLpdNMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdNMin")] public string DnnLpdNMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdNStdDev")] public string DnnLpdNStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdStdDev")] public string DnnLpdStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnMicroScrMax")] public string DnnMicroScrMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnMicroScrMean")] public string DnnMicroScrMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnMicroScrMin")] public string DnnMicroScrMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnMicroScrStdDev")] public string DnnMicroScrStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnScrMax")] public string DnnScrMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnScrMean")] public string DnnScrMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnScrMin")] public string DnnScrMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnScrStdDev")] public string DnnScrStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnSlipMax")] public string DnnSlipMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnSlipMean")] public string DnnSlipMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnSlipMin")] public string DnnSlipMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnSlipStdDev")] public string DnnSlipStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAllMax")] public string DwnAllMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAllMean")] public string DwnAllMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAllMin")] public string DwnAllMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAllStdDev")] public string DwnAllStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAreaCountMax")] public string DwnAreaCountMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAreaCountMean")] public string DwnAreaCountMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAreaCountMin")] public string DwnAreaCountMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAreaCountStdDev")] public string DwnAreaCountStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAreaMax")] public string DwnAreaMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAreaMean")] public string DwnAreaMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAreaMin")] public string DwnAreaMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAreaStdDev")] public string DwnAreaStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin1Max")] public string DwnBin1Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin1Mean")] public string DwnBin1Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin1Min")] public string DwnBin1Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin1StdDev")] public string DwnBin1StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin2Max")] public string DwnBin2Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin2Mean")] public string DwnBin2Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin2Min")] public string DwnBin2Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin2StdDev")] public string DwnBin2StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin3Max")] public string DwnBin3Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin3Mean")] public string DwnBin3Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin3Min")] public string DwnBin3Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin3StdDev")] public string DwnBin3StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin4Max")] public string DwnBin4Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin4Mean")] public string DwnBin4Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin4Min")] public string DwnBin4Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin4StdDev")] public string DwnBin4StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin5Max")] public string DwnBin5Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin5Mean")] public string DwnBin5Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin5Min")] public string DwnBin5Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin5StdDev")] public string DwnBin5StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin6Max")] public string DwnBin6Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin6Mean")] public string DwnBin6Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin6Min")] public string DwnBin6Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin6StdDev")] public string DwnBin6StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin7Max")] public string DwnBin7Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin7Mean")] public string DwnBin7Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin7Min")] public string DwnBin7Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin7StdDev")] public string DwnBin7StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin8Max")] public string DwnBin8Max { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin8Mean")] public string DwnBin8Mean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin8Min")] public string DwnBin8Min { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin8StdDev")] public string DwnBin8StdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeAvgMax")] public string DwnHazeAvgMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeAvgMean")] public string DwnHazeAvgMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeAvgMin")] public string DwnHazeAvgMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeAvgStdDev")] public string DwnHazeAvgStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeMedianMax")] public string DwnHazeMedianMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeMedianMean")] public string DwnHazeMedianMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeMedianMin")] public string DwnHazeMedianMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeMedianStdDev")] public string DwnHazeMedianStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeStdDevMax")] public string DwnHazeStdDevMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeStdDevMean")] public string DwnHazeStdDevMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeStdDevMin")] public string DwnHazeStdDevMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeStdDevStdDev")] public string DwnHazeStdDevStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdESMax")] public string DwnLpdESMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdESMean")] public string DwnLpdESMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdESMin")] public string DwnLpdESMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdESStdDev")] public string DwnLpdESStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdMax")] public string DwnLpdMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdMean")] public string DwnLpdMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdMin")] public string DwnLpdMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdNMax")] public string DwnLpdNMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdNMean")] public string DwnLpdNMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdNMin")] public string DwnLpdNMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdNStdDev")] public string DwnLpdNStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdStdDev")] public string DwnLpdStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnMicroScrMax")] public string DwnMicroScrMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnMicroScrMean")] public string DwnMicroScrMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnMicroScrMin")] public string DwnMicroScrMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnMicroScrStdDev")] public string DwnMicroScrStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnScrMax")] public string DwnScrMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnScrMean")] public string DwnScrMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnScrMin")] public string DwnScrMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnScrStdDev")] public string DwnScrStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnSlipMax")] public string DwnSlipMax { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnSlipMean")] public string DwnSlipMean { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnSlipMin")] public string DwnSlipMin { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnSlipStdDev")] public string DwnSlipStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAll")] public string DcnAll { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnArea")] public string DcnArea { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAreaCount")] public string DcnAreaCount { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin1")] public string DcnBin1 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin2")] public string DcnBin2 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin3")] public string DcnBin3 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin4")] public string DcnBin4 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin5")] public string DcnBin5 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin6")] public string DcnBin6 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin7")] public string DcnBin7 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin8")] public string DcnBin8 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeAvg")] public string DcnHazeAvg { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeMedian")] public string DcnHazeMedian { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeStdDev")] public string DcnHazeStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpd")] public string DcnLpd { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdES")] public string DcnLpdES { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdN")] public string DcnLpdN { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnMicroScr")] public string DcnMicroScr { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnScr")] public string DcnScr { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnSlip")] public string DcnSlip { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAll")] public string DnnAll { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnArea")] public string DnnArea { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAreaCount")] public string DnnAreaCount { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin1")] public string DnnBin1 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin2")] public string DnnBin2 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin3")] public string DnnBin3 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin4")] public string DnnBin4 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin5")] public string DnnBin5 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin6")] public string DnnBin6 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin7")] public string DnnBin7 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin8")] public string DnnBin8 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeAvg")] public string DnnHazeAvg { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeMedian")] public string DnnHazeMedian { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeStdDev")] public string DnnHazeStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpd")] public string DnnLpd { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdES")] public string DnnLpdES { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdN")] public string DnnLpdN { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnMicroScr")] public string DnnMicroScr { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnScr")] public string DnnScr { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnSlip")] public string DnnSlip { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAll")] public string DwnAll { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnArea")] public string DwnArea { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAreaCount")] public string DwnAreaCount { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin1")] public string DwnBin1 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin2")] public string DwnBin2 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin3")] public string DwnBin3 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin4")] public string DwnBin4 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin5")] public string DwnBin5 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin6")] public string DwnBin6 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin7")] public string DwnBin7 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin8")] public string DwnBin8 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeAvg")] public string DwnHazeAvg { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeMedian")] public string DwnHazeMedian { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeStdDev")] public string DwnHazeStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpd")] public string DwnLpd { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdES")] public string DwnLpdES { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdN")] public string DwnLpdN { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnMicroScr")] public string DwnMicroScr { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnScr")] public string DwnScr { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnSlip")] public string DwnSlip { get; set; }
 | 
			
		||||
 | 
			
		||||
    string IDescription.GetEventDescription() => "File Has been read and parsed";
 | 
			
		||||
 | 
			
		||||
@ -782,6 +785,8 @@ public class Description : IDescription, Shared.Properties.IDescription
 | 
			
		||||
                    PSN = processData.PSN,
 | 
			
		||||
                    Reactor = processData.Reactor,
 | 
			
		||||
                    Recipe = processData.Recipe,
 | 
			
		||||
                    IndexOf = nameof(IndexOf),
 | 
			
		||||
                    AttemptCounter = nameof(AttemptCounter),
 | 
			
		||||
                    //
 | 
			
		||||
                    Grade = detail.Grade,
 | 
			
		||||
                    HeaderUniqueId = detail.HeaderUniqueID,
 | 
			
		||||
@ -1128,6 +1133,8 @@ public class Description : IDescription, Shared.Properties.IDescription
 | 
			
		||||
            PSN = nameof(PSN),
 | 
			
		||||
            Reactor = nameof(Reactor),
 | 
			
		||||
            Recipe = nameof(Recipe),
 | 
			
		||||
            IndexOf = nameof(IndexOf),
 | 
			
		||||
            AttemptCounter = nameof(AttemptCounter),
 | 
			
		||||
            //
 | 
			
		||||
            Grade = nameof(Grade),
 | 
			
		||||
            HeaderUniqueId = nameof(HeaderUniqueId),
 | 
			
		||||
@ -1445,3 +1452,15 @@ public class Description : IDescription, Shared.Properties.IDescription
 | 
			
		||||
    internal static string GetDateFormat() => "MM/dd/yyyy hh:mm:ss tt";
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
 | 
			
		||||
[JsonSerializable(typeof(Description))]
 | 
			
		||||
internal partial class DescriptionSourceGenerationContext : JsonSerializerContext
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
 | 
			
		||||
[JsonSerializable(typeof(Description[]))]
 | 
			
		||||
internal partial class DescriptionArraySourceGenerationContext : JsonSerializerContext
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
@ -1,76 +1,90 @@
 | 
			
		||||
namespace Adaptation.FileHandlers.txt;
 | 
			
		||||
using System.Text.Json.Serialization;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation.FileHandlers.txt;
 | 
			
		||||
 | 
			
		||||
public class Detail
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public string Grade { get; set; }
 | 
			
		||||
    [JsonPropertyName("Grade")] public string Grade { get; set; }
 | 
			
		||||
    public string HeaderUniqueID { get; set; }
 | 
			
		||||
    public string Side { get; set; }
 | 
			
		||||
    public string SrcDest { get; set; }
 | 
			
		||||
    [JsonPropertyName("Side")] public string Side { get; set; }
 | 
			
		||||
    [JsonPropertyName("SrcDest")] public string SrcDest { get; set; }
 | 
			
		||||
    public string UniqueID { get; set; }
 | 
			
		||||
    public string WaferID { get; set; }
 | 
			
		||||
    [JsonPropertyName("WaferID")] public string WaferID { get; set; }
 | 
			
		||||
    public string Data { get; set; }
 | 
			
		||||
    public string DcnAll { get; set; }
 | 
			
		||||
    public string DcnArea { get; set; }
 | 
			
		||||
    public string DcnAreaCount { get; set; }
 | 
			
		||||
    public string DcnBin1 { get; set; }
 | 
			
		||||
    public string DcnBin2 { get; set; }
 | 
			
		||||
    public string DcnBin3 { get; set; }
 | 
			
		||||
    public string DcnBin4 { get; set; }
 | 
			
		||||
    public string DcnBin5 { get; set; }
 | 
			
		||||
    public string DcnBin6 { get; set; }
 | 
			
		||||
    public string DcnBin7 { get; set; }
 | 
			
		||||
    public string DcnBin8 { get; set; }
 | 
			
		||||
    public string DcnHazeAvg { get; set; }
 | 
			
		||||
    public string DcnHazeMedian { get; set; }
 | 
			
		||||
    public string DcnHazeStdDev { get; set; }
 | 
			
		||||
    public string DcnLpd { get; set; }
 | 
			
		||||
    public string DcnLpdES { get; set; }
 | 
			
		||||
    public string DcnLpdN { get; set; }
 | 
			
		||||
    public string DcnMicroScr { get; set; }
 | 
			
		||||
    public string DcnScr { get; set; }
 | 
			
		||||
    public string DcnSlip { get; set; }
 | 
			
		||||
    public string DnnAll { get; set; }
 | 
			
		||||
    public string DnnArea { get; set; }
 | 
			
		||||
    public string DnnAreaCount { get; set; }
 | 
			
		||||
    public string DnnBin1 { get; set; }
 | 
			
		||||
    public string DnnBin2 { get; set; }
 | 
			
		||||
    public string DnnBin3 { get; set; }
 | 
			
		||||
    public string DnnBin4 { get; set; }
 | 
			
		||||
    public string DnnBin5 { get; set; }
 | 
			
		||||
    public string DnnBin6 { get; set; }
 | 
			
		||||
    public string DnnBin7 { get; set; }
 | 
			
		||||
    public string DnnBin8 { get; set; }
 | 
			
		||||
    public string DnnHazeAvg { get; set; }
 | 
			
		||||
    public string DnnHazeMedian { get; set; }
 | 
			
		||||
    public string DnnHazeStdDev { get; set; }
 | 
			
		||||
    public string DnnLpd { get; set; }
 | 
			
		||||
    public string DnnLpdES { get; set; }
 | 
			
		||||
    public string DnnLpdN { get; set; }
 | 
			
		||||
    public string DnnMicroScr { get; set; }
 | 
			
		||||
    public string DnnScr { get; set; }
 | 
			
		||||
    public string DnnSlip { get; set; }
 | 
			
		||||
    public string DwnAll { get; set; }
 | 
			
		||||
    public string DwnArea { get; set; }
 | 
			
		||||
    public string DwnAreaCount { get; set; }
 | 
			
		||||
    public string DwnBin1 { get; set; }
 | 
			
		||||
    public string DwnBin2 { get; set; }
 | 
			
		||||
    public string DwnBin3 { get; set; }
 | 
			
		||||
    public string DwnBin4 { get; set; }
 | 
			
		||||
    public string DwnBin5 { get; set; }
 | 
			
		||||
    public string DwnBin6 { get; set; }
 | 
			
		||||
    public string DwnBin7 { get; set; }
 | 
			
		||||
    public string DwnBin8 { get; set; }
 | 
			
		||||
    public string DwnHazeAvg { get; set; }
 | 
			
		||||
    public string DwnHazeMedian { get; set; }
 | 
			
		||||
    public string DwnHazeStdDev { get; set; }
 | 
			
		||||
    public string DwnLpd { get; set; }
 | 
			
		||||
    public string DwnLpdES { get; set; }
 | 
			
		||||
    public string DwnLpdN { get; set; }
 | 
			
		||||
    public string DwnMicroScr { get; set; }
 | 
			
		||||
    public string DwnScr { get; set; }
 | 
			
		||||
    public string DwnSlip { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAll")] public string DcnAll { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnArea")] public string DcnArea { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnAreaCount")] public string DcnAreaCount { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin1")] public string DcnBin1 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin2")] public string DcnBin2 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin3")] public string DcnBin3 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin4")] public string DcnBin4 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin5")] public string DcnBin5 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin6")] public string DcnBin6 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin7")] public string DcnBin7 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnBin8")] public string DcnBin8 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeAvg")] public string DcnHazeAvg { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeMedian")] public string DcnHazeMedian { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnHazeStdDev")] public string DcnHazeStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpd")] public string DcnLpd { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdES")] public string DcnLpdES { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnLpdN")] public string DcnLpdN { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnMicroScr")] public string DcnMicroScr { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnScr")] public string DcnScr { get; set; }
 | 
			
		||||
    [JsonPropertyName("DcnSlip")] public string DcnSlip { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAll")] public string DnnAll { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnArea")] public string DnnArea { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnAreaCount")] public string DnnAreaCount { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin1")] public string DnnBin1 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin2")] public string DnnBin2 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin3")] public string DnnBin3 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin4")] public string DnnBin4 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin5")] public string DnnBin5 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin6")] public string DnnBin6 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin7")] public string DnnBin7 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnBin8")] public string DnnBin8 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeAvg")] public string DnnHazeAvg { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeMedian")] public string DnnHazeMedian { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnHazeStdDev")] public string DnnHazeStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpd")] public string DnnLpd { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdES")] public string DnnLpdES { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnLpdN")] public string DnnLpdN { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnMicroScr")] public string DnnMicroScr { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnScr")] public string DnnScr { get; set; }
 | 
			
		||||
    [JsonPropertyName("DnnSlip")] public string DnnSlip { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAll")] public string DwnAll { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnArea")] public string DwnArea { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnAreaCount")] public string DwnAreaCount { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin1")] public string DwnBin1 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin2")] public string DwnBin2 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin3")] public string DwnBin3 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin4")] public string DwnBin4 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin5")] public string DwnBin5 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin6")] public string DwnBin6 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin7")] public string DwnBin7 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnBin8")] public string DwnBin8 { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeAvg")] public string DwnHazeAvg { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeMedian")] public string DwnHazeMedian { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnHazeStdDev")] public string DwnHazeStdDev { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpd")] public string DwnLpd { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdES")] public string DwnLpdES { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnLpdN")] public string DwnLpdN { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnMicroScr")] public string DwnMicroScr { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnScr")] public string DwnScr { get; set; }
 | 
			
		||||
    [JsonPropertyName("DwnSlip")] public string DwnSlip { get; set; }
 | 
			
		||||
 | 
			
		||||
    public Detail() => Data = "*Data*";
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
 | 
			
		||||
[JsonSerializable(typeof(Detail))]
 | 
			
		||||
internal partial class DetailSourceGenerationContext : JsonSerializerContext
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
 | 
			
		||||
[JsonSerializable(typeof(Detail[]))]
 | 
			
		||||
internal partial class DetailArraySourceGenerationContext : JsonSerializerContext
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
@ -1060,12 +1060,11 @@ public class ProcessData : IProcessData
 | 
			
		||||
    {
 | 
			
		||||
        List<Description> results = new();
 | 
			
		||||
        Description? description;
 | 
			
		||||
        JsonSerializerOptions jsonSerializerOptions = new() { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString };
 | 
			
		||||
        foreach (JsonElement jsonElement in jsonElements)
 | 
			
		||||
        {
 | 
			
		||||
            if (jsonElement.ValueKind != JsonValueKind.Object)
 | 
			
		||||
                throw new Exception();
 | 
			
		||||
            description = JsonSerializer.Deserialize<Description>(jsonElement.ToString(), jsonSerializerOptions);
 | 
			
		||||
            description = JsonSerializer.Deserialize(jsonElement.ToString(), DescriptionSourceGenerationContext.Default.Description);
 | 
			
		||||
            if (description is null)
 | 
			
		||||
                continue;
 | 
			
		||||
            results.Add(description);
 | 
			
		||||
 | 
			
		||||
@ -226,9 +226,9 @@ public class MonIn : IMonIn, IDisposable
 | 
			
		||||
    {
 | 
			
		||||
        StringBuilder stringBuilder = new();
 | 
			
		||||
        if (string.IsNullOrEmpty(subresource))
 | 
			
		||||
            _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), stateName.Trim(), state.Trim(), description.Trim());
 | 
			
		||||
            _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), stateName.Trim(), state.Trim(), description.Trim());
 | 
			
		||||
        else
 | 
			
		||||
            _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), subresource.Trim(), stateName.Trim(), state.Trim(), description.Trim());
 | 
			
		||||
            _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), subresource.Trim(), stateName.Trim(), state.Trim(), description.Trim());
 | 
			
		||||
        return stringBuilder.ToString();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -247,14 +247,14 @@ public class MonIn : IMonIn, IDisposable
 | 
			
		||||
        if (string.IsNullOrEmpty(subresource))
 | 
			
		||||
        {
 | 
			
		||||
            if (unit.Equals(string.Empty) && !interval.HasValue)
 | 
			
		||||
                _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), performanceName.Trim(), value, description.Trim());
 | 
			
		||||
                _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), performanceName.Trim(), value, description.Trim());
 | 
			
		||||
            else
 | 
			
		||||
                _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} {5} {{interval={6}, unit={7}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : (object)string.Empty, unit.Trim());
 | 
			
		||||
                _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} {5} {{interval={6}, unit={7}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : string.Empty, unit.Trim());
 | 
			
		||||
        }
 | 
			
		||||
        else if (unit.Equals(string.Empty) && !interval.HasValue)
 | 
			
		||||
            _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim());
 | 
			
		||||
            _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim());
 | 
			
		||||
        else
 | 
			
		||||
            _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} {6} {{interval={7}, unit={8}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : (object)string.Empty, unit.Trim());
 | 
			
		||||
            _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} {6} {{interval={7}, unit={8}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : string.Empty, unit.Trim());
 | 
			
		||||
        return stringBuilder.ToString();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -87,16 +87,16 @@
 | 
			
		||||
        </None>
 | 
			
		||||
    </ItemGroup>
 | 
			
		||||
    <ItemGroup>
 | 
			
		||||
        <None Condition="'$(Configuration)' == 'Debug'" Include="\\mestsa003.infineon.com\EC_EAFRepository\Staging\DeploymentStorage\GhostPCL\gpcl6win64\gpcl6dll64.dll">
 | 
			
		||||
        <None Condition="'$(Configuration)' == 'Debug'" Include="D:\EAF-Mesa-Integration\copy\GhostPCL\gpcl6win64\gpcl6dll64.dll">
 | 
			
		||||
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
			
		||||
        </None>
 | 
			
		||||
        <None Condition="'$(Configuration)' == 'Debug'" Include="\\mestsa003.infineon.com\EC_EAFRepository\Staging\DeploymentStorage\GhostPCL\gpcl6win64\gpcl6win64.exe">
 | 
			
		||||
        <None Condition="'$(Configuration)' == 'Debug'" Include="D:\EAF-Mesa-Integration\copy\GhostPCL\gpcl6win64\gpcl6win64.exe">
 | 
			
		||||
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
			
		||||
        </None>
 | 
			
		||||
        <None Condition="'$(Configuration)' == 'Release'" Include="\\mesfs.infineon.com\EC_EAFRepository\Staging\DeploymentStorage\GhostPCL\gpcl6win64\gpcl6dll64.dll">
 | 
			
		||||
        <None Condition="'$(Configuration)' == 'Release'" Include="D:\EAF-Mesa-Integration\copy\GhostPCL\gpcl6win64\gpcl6dll64.dll">
 | 
			
		||||
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
			
		||||
        </None>
 | 
			
		||||
        <None Condition="'$(Configuration)' == 'Release'" Include="\\mesfs.infineon.com\EC_EAFRepository\Staging\DeploymentStorage\GhostPCL\gpcl6win64\gpcl6win64.exe">
 | 
			
		||||
        <None Condition="'$(Configuration)' == 'Release'" Include="D:\EAF-Mesa-Integration\copy\GhostPCL\gpcl6win64\gpcl6win64.exe">
 | 
			
		||||
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
			
		||||
        </None>
 | 
			
		||||
    </ItemGroup>
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,7 @@ using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text.Json;
 | 
			
		||||
using System.Text.Json.Serialization;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation.Shared.Duplicator;
 | 
			
		||||
 | 
			
		||||
@ -179,3 +180,15 @@ public class Description : IDescription, Properties.IDescription
 | 
			
		||||
    internal static string GetDateFormat() => "MM/dd/yyyy hh:mm:ss tt";
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
 | 
			
		||||
[JsonSerializable(typeof(Description))]
 | 
			
		||||
internal partial class SharedDescriptionSourceGenerationContext : JsonSerializerContext
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
 | 
			
		||||
[JsonSerializable(typeof(Description[]))]
 | 
			
		||||
internal partial class SharedDescriptionArraySourceGenerationContext : JsonSerializerContext
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
@ -9,7 +9,6 @@ using System.IO;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Text.Json;
 | 
			
		||||
using System.Text.Json.Serialization;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation.Shared;
 | 
			
		||||
@ -383,17 +382,24 @@ public class FileRead : Properties.IFileRead
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            string[] files;
 | 
			
		||||
            string logisticsSequence = _Logistics.Sequence.ToString();
 | 
			
		||||
            string[] directories = Directory.GetDirectories(jobIdDirectory, $"*{logisticsSequence}*", SearchOption.TopDirectoryOnly);
 | 
			
		||||
            foreach (string directory in directories)
 | 
			
		||||
            string[] directories;
 | 
			
		||||
            string logisticsSequence;
 | 
			
		||||
            for (int i = 0; i < 10; i++)
 | 
			
		||||
            {
 | 
			
		||||
                files = Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly);
 | 
			
		||||
                if (files.Length == 0)
 | 
			
		||||
                    continue;
 | 
			
		||||
                results.Add(directory);
 | 
			
		||||
                logisticsSequence = (_Logistics.Sequence + -i).ToString();
 | 
			
		||||
                directories = Directory.GetDirectories(jobIdDirectory, $"*{logisticsSequence}*", SearchOption.TopDirectoryOnly);
 | 
			
		||||
                foreach (string directory in directories)
 | 
			
		||||
                {
 | 
			
		||||
                    files = Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly);
 | 
			
		||||
                    if (files.Length == 0)
 | 
			
		||||
                        continue;
 | 
			
		||||
                    results.Add(directory);
 | 
			
		||||
                }
 | 
			
		||||
                if (results.Count == 1)
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if ((results is null) || results.Count != 1)
 | 
			
		||||
        if (results.Count != 1)
 | 
			
		||||
            throw new Exception("Didn't find directory by logistics sequence");
 | 
			
		||||
        return results.ToArray();
 | 
			
		||||
    }
 | 
			
		||||
@ -440,12 +446,13 @@ public class FileRead : Properties.IFileRead
 | 
			
		||||
    {
 | 
			
		||||
        List<Properties.IDescription> results = new();
 | 
			
		||||
        Duplicator.Description description;
 | 
			
		||||
        JsonSerializerOptions jsonSerializerOptions = new() { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString };
 | 
			
		||||
        foreach (JsonElement jsonElement in jsonElements)
 | 
			
		||||
        {
 | 
			
		||||
            if (jsonElement.ValueKind != JsonValueKind.Object)
 | 
			
		||||
                throw new Exception();
 | 
			
		||||
            description = JsonSerializer.Deserialize<Duplicator.Description>(jsonElement.ToString(), jsonSerializerOptions);
 | 
			
		||||
            description = JsonSerializer.Deserialize(jsonElement.ToString(), Duplicator.SharedDescriptionSourceGenerationContext.Default.Description);
 | 
			
		||||
            if (description is null)
 | 
			
		||||
                continue;
 | 
			
		||||
            results.Add(description);
 | 
			
		||||
        }
 | 
			
		||||
        return results;
 | 
			
		||||
@ -478,27 +485,14 @@ public class FileRead : Properties.IFileRead
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void WritePDSF(IFileRead fileRead, JsonElement[] jsonElements)
 | 
			
		||||
    protected static void WritePDSF(IFileRead fileRead, JsonElement[] jsonElements)
 | 
			
		||||
    {
 | 
			
		||||
        string directory;
 | 
			
		||||
        string day = $"{_Logistics.DateTimeFromSequence:yyyy-MM-dd}";
 | 
			
		||||
        string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
 | 
			
		||||
        string weekDirectory = $"{_Logistics.DateTimeFromSequence:yyyy}_Week_{weekOfYear}";
 | 
			
		||||
        if (!_CellInstanceConnectionName.StartsWith(_CellInstanceName) && _CellInstanceConnectionNameBase == _EquipmentType)
 | 
			
		||||
            directory = Path.Combine(_TracePath, _EquipmentType, "Target", weekDirectory, day, _CellInstanceName, _CellInstanceConnectionName);
 | 
			
		||||
        else
 | 
			
		||||
            directory = Path.Combine(_TracePath, _EquipmentType, "Source", weekDirectory, day, _CellInstanceName, _CellInstanceConnectionName);
 | 
			
		||||
        if (!Directory.Exists(directory))
 | 
			
		||||
            _ = Directory.CreateDirectory(directory);
 | 
			
		||||
        string file = Path.Combine(directory, string.Concat(_Logistics.MesEntity, "_", _Logistics.Sequence, ".ipdsf"));
 | 
			
		||||
        string lines = ProcessDataStandardFormat.GetPDSFText(fileRead, _Logistics, jsonElements, logisticsText: string.Empty);
 | 
			
		||||
        File.WriteAllText(file, lines);
 | 
			
		||||
        if (_Logistics.TotalSecondsSinceLastWriteTimeFromSequence > 600)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            { File.SetLastWriteTime(file, _Logistics.DateTimeFromSequence); }
 | 
			
		||||
            catch (Exception) { }
 | 
			
		||||
        }
 | 
			
		||||
#pragma warning disable CA1510
 | 
			
		||||
        if (fileRead is null)
 | 
			
		||||
            throw new ArgumentNullException(nameof(fileRead));
 | 
			
		||||
        if (jsonElements is null)
 | 
			
		||||
            throw new ArgumentNullException(nameof(jsonElements));
 | 
			
		||||
#pragma warning restore CA1510
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void WaitForThread(Thread thread, List<Exception> threadExceptions)
 | 
			
		||||
 | 
			
		||||
@ -2,12 +2,14 @@ using Adaptation.Shared.Methods;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Collections.ObjectModel;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.Globalization;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Text.Json;
 | 
			
		||||
using System.Text.Json.Serialization;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation.Shared;
 | 
			
		||||
 | 
			
		||||
@ -61,8 +63,8 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
    internal static string Archive(bool addSpaces = true, char separator = ' ') =>
 | 
			
		||||
        GetString(SearchFor.Archive, addSpaces, separator);
 | 
			
		||||
 | 
			
		||||
    internal static ProcessDataStandardFormat GetEmpty() =>
 | 
			
		||||
        new(new(Array.Empty<string>()), new(Array.Empty<string>()), new(Array.Empty<string>()), new(Array.Empty<string>()), null, new(new string[] { "LOGISTICS_1" }), null);
 | 
			
		||||
    internal static ProcessDataStandardFormat GetEmpty(Logistics logistics) =>
 | 
			
		||||
        new(new(Array.Empty<string>()), new(Array.Empty<string>()), new(Array.Empty<string>()), new(Array.Empty<string>()), null, new(logistics.Logistics1), null);
 | 
			
		||||
 | 
			
		||||
    internal static List<string> PDSFToFixedWidth(string reportFullPath)
 | 
			
		||||
    {
 | 
			
		||||
@ -136,6 +138,7 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
    internal static ProcessDataStandardFormat GetProcessDataStandardFormat(string reportFullPath, string[]? lines = null, int columnsLine = 6)
 | 
			
		||||
    {
 | 
			
		||||
        ProcessDataStandardFormat result;
 | 
			
		||||
        long? sequence;
 | 
			
		||||
        string segment;
 | 
			
		||||
        string[] segments;
 | 
			
		||||
        bool addToFooter = false;
 | 
			
		||||
@ -184,15 +187,27 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        string? linesOne = lines.Length > 0 && body.Count == 0 && columns.Count == 0 ? lines[1] : null;
 | 
			
		||||
        string? linesOne = lines.Length > 1 && body.Count == 0 && columns.Count == 0 ? lines[1] : null;
 | 
			
		||||
        logistics = GetLogistics(footer, linesOne: linesOne);
 | 
			
		||||
        if (logistics.Count == 0)
 | 
			
		||||
            sequence = null;
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            segments = logistics[0].Split(new string[] { "SEQUENCE=" }, StringSplitOptions.None);
 | 
			
		||||
            sequence = segments.Length < 2 || !long.TryParse(segments[1].Split(';')[0], out long s) ? null : s;
 | 
			
		||||
        }
 | 
			
		||||
        if (sequence is null && !string.IsNullOrEmpty(reportFullPath))
 | 
			
		||||
        {
 | 
			
		||||
            FileInfo fileInfo = new(reportFullPath);
 | 
			
		||||
            sequence = fileInfo.LastWriteTime.Ticks;
 | 
			
		||||
        }
 | 
			
		||||
        result = new(body: body.AsReadOnly(),
 | 
			
		||||
                     columns: columns.AsReadOnly(),
 | 
			
		||||
                     footer: footer.AsReadOnly(),
 | 
			
		||||
                     header: header.AsReadOnly(),
 | 
			
		||||
                     inputPDSF: null,
 | 
			
		||||
                     logistics: logistics,
 | 
			
		||||
                     sequence: null);
 | 
			
		||||
                     sequence: sequence);
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -214,28 +229,29 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
        return results.AsReadOnly();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal static ProcessDataStandardFormat? GetProcessDataStandardFormat(string reportFullPath, ProcessDataStandardFormatMapping pdsfMapping)
 | 
			
		||||
    internal static ProcessDataStandardFormat GetProcessDataStandardFormat(string reportFullPath, ProcessDataStandardFormatMapping processDataStandardFormatMapping)
 | 
			
		||||
    {
 | 
			
		||||
        ProcessDataStandardFormat? result;
 | 
			
		||||
        ProcessDataStandardFormat result;
 | 
			
		||||
        const int columnsLine = 6;
 | 
			
		||||
        FileInfo fileInfo = new(reportFullPath);
 | 
			
		||||
        ProcessDataStandardFormat processDataStandardFormat = GetProcessDataStandardFormat(fileInfo.LastWriteTime, pdsfMapping.NewColumnNames.Count, columnsLine, fileInfo.FullName, lines: null);
 | 
			
		||||
        JsonElement[]? jsonElements = GetArray(pdsfMapping.NewColumnNames.Count, processDataStandardFormat, lookForNumbers: false);
 | 
			
		||||
        if (jsonElements is null || jsonElements.Length == 0 || pdsfMapping.OldColumnNames.Count != pdsfMapping.ColumnIndices.Count)
 | 
			
		||||
            result = null;
 | 
			
		||||
        ProcessDataStandardFormat processDataStandardFormat = GetProcessDataStandardFormat(fileInfo.LastWriteTime, columnsLine, fileInfo.FullName, lines: null);
 | 
			
		||||
        JsonElement[]? jsonElements = processDataStandardFormatMapping.OldColumnNames.Count == 0 ? null : GetFullArray(processDataStandardFormat);
 | 
			
		||||
        JsonProperty[]? jsonProperties = jsonElements is null || jsonElements.Length == 0 ? null : jsonElements[0].EnumerateObject().ToArray();
 | 
			
		||||
        if (jsonElements is null || jsonProperties is null || jsonProperties.Length != processDataStandardFormatMapping.NewColumnNames.Count)
 | 
			
		||||
            result = processDataStandardFormat;
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            result = GetProcessDataStandardFormat(pdsfMapping, jsonElements, processDataStandardFormat);
 | 
			
		||||
            result = GetProcessDataStandardFormat(processDataStandardFormatMapping, jsonElements, processDataStandardFormat);
 | 
			
		||||
            if (result.Sequence is null || result.Columns.Count == 0 || result.Body.Count == 0 || result.Logistics.Count == 0)
 | 
			
		||||
                result = null;
 | 
			
		||||
                result = processDataStandardFormat;
 | 
			
		||||
        }
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static ProcessDataStandardFormat GetProcessDataStandardFormat(DateTime lastWriteTime, int expectedColumns, int columnsLine, string path, string[]? lines)
 | 
			
		||||
    private static ProcessDataStandardFormat GetProcessDataStandardFormat(DateTime lastWriteTime, int columnsLine, string path, string[]? lines)
 | 
			
		||||
    {
 | 
			
		||||
        ProcessDataStandardFormat result;
 | 
			
		||||
        long sequence;
 | 
			
		||||
        long? sequence;
 | 
			
		||||
        string[] segments;
 | 
			
		||||
        bool addToFooter = false;
 | 
			
		||||
        List<string> body = new();
 | 
			
		||||
@ -248,8 +264,6 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            segments = lines[columnsLine].Split('\t');
 | 
			
		||||
            if (segments.Length != expectedColumns)
 | 
			
		||||
                segments = Array.Empty<string>();
 | 
			
		||||
            for (int i = 0; i < columnsLine; i++)
 | 
			
		||||
                header.Add(lines[i]);
 | 
			
		||||
        }
 | 
			
		||||
@ -269,12 +283,13 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
        }
 | 
			
		||||
        logistics = GetLogistics(footer, linesOne: null);
 | 
			
		||||
        if (logistics.Count == 0)
 | 
			
		||||
            sequence = lastWriteTime.Ticks;
 | 
			
		||||
            sequence = null;
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            segments = logistics[0].Split(new string[] { "SEQUENCE=" }, StringSplitOptions.None);
 | 
			
		||||
            sequence = segments.Length < 2 || !long.TryParse(segments[1].Split(';')[0], out long s) ? lastWriteTime.Ticks : s;
 | 
			
		||||
            sequence = segments.Length < 2 || !long.TryParse(segments[1].Split(';')[0], out long s) ? null : s;
 | 
			
		||||
        }
 | 
			
		||||
        sequence ??= lastWriteTime.Ticks;
 | 
			
		||||
        result = new(body: body.AsReadOnly(),
 | 
			
		||||
                     columns: new(columns),
 | 
			
		||||
                     footer: footer.AsReadOnly(),
 | 
			
		||||
@ -285,7 +300,7 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static JsonElement[]? GetArray(int expectedColumns, ProcessDataStandardFormat processDataStandardFormat, bool lookForNumbers)
 | 
			
		||||
    private static JsonElement[]? GetFullArray(ProcessDataStandardFormat processDataStandardFormat)
 | 
			
		||||
    {
 | 
			
		||||
        JsonElement[]? results;
 | 
			
		||||
        if (processDataStandardFormat.Body.Count == 0 || !processDataStandardFormat.Body[0].Contains('\t'))
 | 
			
		||||
@ -293,36 +308,18 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            string value;
 | 
			
		||||
            string[] segments;
 | 
			
		||||
            List<string> segments;
 | 
			
		||||
            List<string> lines = new();
 | 
			
		||||
            StringBuilder stringBuilder = new();
 | 
			
		||||
            foreach (string bodyLine in processDataStandardFormat.Body)
 | 
			
		||||
            {
 | 
			
		||||
                _ = stringBuilder.Clear();
 | 
			
		||||
                _ = stringBuilder.Append('{');
 | 
			
		||||
                segments = bodyLine.Split('\t');
 | 
			
		||||
                if (segments.Length != expectedColumns)
 | 
			
		||||
                    continue;
 | 
			
		||||
                if (!lookForNumbers)
 | 
			
		||||
                segments = bodyLine.Split('\t').ToList();
 | 
			
		||||
                for (int c = 0; c < segments.Count; c++)
 | 
			
		||||
                {
 | 
			
		||||
                    for (int c = 0; c < segments.Length; c++)
 | 
			
		||||
                    {
 | 
			
		||||
                        value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\");
 | 
			
		||||
                        _ = stringBuilder.Append('"').Append(processDataStandardFormat.Columns[c]).Append("\":\"").Append(value).Append("\",");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    for (int c = 0; c < segments.Length; c++)
 | 
			
		||||
                    {
 | 
			
		||||
                        value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\");
 | 
			
		||||
                        if (string.IsNullOrEmpty(value))
 | 
			
		||||
                            _ = stringBuilder.Append('"').Append(processDataStandardFormat.Columns[c]).Append("\":").Append(value).Append("null,");
 | 
			
		||||
                        else if (value.All(char.IsDigit))
 | 
			
		||||
                            _ = stringBuilder.Append('"').Append(processDataStandardFormat.Columns[c]).Append("\":").Append(value).Append(',');
 | 
			
		||||
                        else
 | 
			
		||||
                            _ = stringBuilder.Append('"').Append(processDataStandardFormat.Columns[c]).Append("\":\"").Append(value).Append("\",");
 | 
			
		||||
                    }
 | 
			
		||||
                    value = segments[c].Replace("\\", "\\\\").Replace("\"", "\\\"");
 | 
			
		||||
                    _ = stringBuilder.Append('"').Append(processDataStandardFormat.Columns[c]).Append("\":\"").Append(value).Append("\",");
 | 
			
		||||
                }
 | 
			
		||||
                _ = stringBuilder.Remove(stringBuilder.Length - 1, 1);
 | 
			
		||||
                _ = stringBuilder.AppendLine("}");
 | 
			
		||||
@ -340,12 +337,14 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
        int column;
 | 
			
		||||
        string value;
 | 
			
		||||
        JsonProperty jsonProperty;
 | 
			
		||||
        List<string> debug = new();
 | 
			
		||||
        List<string> values = new();
 | 
			
		||||
        List<string> results = new();
 | 
			
		||||
        JsonProperty[] jsonProperties;
 | 
			
		||||
        List<string> unknownColumns = new();
 | 
			
		||||
        for (int i = 0; i < jsonElements.Length; i++)
 | 
			
		||||
        {
 | 
			
		||||
            debug.Clear();
 | 
			
		||||
            values.Clear();
 | 
			
		||||
            if (jsonElements[i].ValueKind != JsonValueKind.Object)
 | 
			
		||||
            {
 | 
			
		||||
@ -359,16 +358,22 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
            {
 | 
			
		||||
                column = processDataStandardFormatMapping.ColumnIndices[c];
 | 
			
		||||
                if (column == -1)
 | 
			
		||||
                {
 | 
			
		||||
                    value = processDataStandardFormatMapping.OldColumnNames[c];
 | 
			
		||||
                    debug.Add($"<Item C=-01 Name=\"{value}\" DataType=\"8\" XmlType=\"1\" XPath=\"//records/record/{value}\" />");
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    jsonProperty = jsonProperties[column];
 | 
			
		||||
                    value = jsonProperty.Value.ToString();
 | 
			
		||||
                    debug.Add($"<Item C={column + 2:000} Name=\"{processDataStandardFormatMapping.OldColumnNames[c]}\" DataType=\"8\" XmlType=\"1\" XPath=\"//records/record/{jsonProperty.Name}\" />");
 | 
			
		||||
                }
 | 
			
		||||
                values.Add(value);
 | 
			
		||||
            }
 | 
			
		||||
            results.Add(string.Join("\t", values));
 | 
			
		||||
        }
 | 
			
		||||
        if (Debugger.IsAttached)
 | 
			
		||||
            File.WriteAllText("../../.txt", string.Join(Environment.NewLine, debug.OrderBy(l => l)));
 | 
			
		||||
        result = new(body: new(results),
 | 
			
		||||
                     columns: processDataStandardFormatMapping.OldColumnNames,
 | 
			
		||||
                     footer: processDataStandardFormat.Footer,
 | 
			
		||||
@ -379,9 +384,151 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static string GetJson(ProcessDataStandardFormat processDataStandardFormat)
 | 
			
		||||
    {
 | 
			
		||||
        if (processDataStandardFormat.InputPDSF is null)
 | 
			
		||||
            throw new NullReferenceException(nameof(processDataStandardFormat.InputPDSF));
 | 
			
		||||
        string result;
 | 
			
		||||
        string line;
 | 
			
		||||
        string value;
 | 
			
		||||
        string[] segments;
 | 
			
		||||
        List<string> lines = new();
 | 
			
		||||
        for (int i = 0; i < processDataStandardFormat.InputPDSF.Body.Count; i++)
 | 
			
		||||
        {
 | 
			
		||||
            line = "{";
 | 
			
		||||
            segments = processDataStandardFormat.InputPDSF.Body[i].Trim().Split('\t');
 | 
			
		||||
            if (segments.Length != processDataStandardFormat.InputPDSF.Columns.Count)
 | 
			
		||||
                break;
 | 
			
		||||
            for (int c = 0; c < segments.Length; c++)
 | 
			
		||||
            {
 | 
			
		||||
                value = segments[c].Replace("\\", "\\\\").Replace("\"", "\\\"");
 | 
			
		||||
                line += string.Concat('"', processDataStandardFormat.InputPDSF.Columns[c].Trim('"'), '"', ':', '"', value, '"', ',');
 | 
			
		||||
            }
 | 
			
		||||
            line = string.Concat(line.Substring(0, line.Length - 1), '}');
 | 
			
		||||
            lines.Add(line);
 | 
			
		||||
        }
 | 
			
		||||
        string? json = null;
 | 
			
		||||
        if (processDataStandardFormat.Footer is not null && processDataStandardFormat.Footer.Count > 0)
 | 
			
		||||
        {
 | 
			
		||||
            Dictionary<string, string> footerKeyValuePairs = GetFooterKeyValuePairs(processDataStandardFormat.Footer);
 | 
			
		||||
            Dictionary<string, Dictionary<string, string>> logisticKeyValuePairs = GetLogisticKeyValuePairs(processDataStandardFormat.Footer, footerKeyValuePairs);
 | 
			
		||||
            json = JsonSerializer.Serialize(logisticKeyValuePairs, DictionaryStringDictionaryStringStringSourceGenerationContext.Default.DictionaryStringDictionaryStringString);
 | 
			
		||||
        }
 | 
			
		||||
        string footerText = string.IsNullOrEmpty(json) || json == "{}" ? string.Empty : $",{Environment.NewLine}\"PDSF\":{Environment.NewLine}{json}";
 | 
			
		||||
        result = string.Concat(
 | 
			
		||||
            '{',
 | 
			
		||||
            Environment.NewLine,
 | 
			
		||||
            '"',
 | 
			
		||||
            "Count",
 | 
			
		||||
            '"',
 | 
			
		||||
            ": ",
 | 
			
		||||
            processDataStandardFormat.Body.Count,
 | 
			
		||||
            ',',
 | 
			
		||||
            Environment.NewLine,
 | 
			
		||||
            '"',
 | 
			
		||||
            "Records",
 | 
			
		||||
            '"',
 | 
			
		||||
            ": ",
 | 
			
		||||
            Environment.NewLine,
 | 
			
		||||
            '[',
 | 
			
		||||
            Environment.NewLine,
 | 
			
		||||
            string.Join($",{Environment.NewLine}", lines),
 | 
			
		||||
            Environment.NewLine,
 | 
			
		||||
            ']',
 | 
			
		||||
            ',',
 | 
			
		||||
            Environment.NewLine,
 | 
			
		||||
            '"',
 | 
			
		||||
            "Sequence",
 | 
			
		||||
            '"',
 | 
			
		||||
            ": ",
 | 
			
		||||
            processDataStandardFormat.Sequence,
 | 
			
		||||
            Environment.NewLine,
 | 
			
		||||
            footerText,
 | 
			
		||||
            Environment.NewLine,
 | 
			
		||||
            '}');
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static Dictionary<string, string> GetFooterKeyValuePairs(ReadOnlyCollection<string> footerLines)
 | 
			
		||||
    {
 | 
			
		||||
        Dictionary<string, string> results = new();
 | 
			
		||||
        string[] segments;
 | 
			
		||||
        foreach (string footerLine in footerLines)
 | 
			
		||||
        {
 | 
			
		||||
            segments = footerLine.Split('\t');
 | 
			
		||||
            if (segments.Length != 2 || string.IsNullOrEmpty(segments[1].Trim()))
 | 
			
		||||
            {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (segments[1].Contains(';'))
 | 
			
		||||
            {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                if (results.ContainsKey(segments[0]))
 | 
			
		||||
                {
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                results.Add(segments[0], segments[1]);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static Dictionary<string, Dictionary<string, string>> GetLogisticKeyValuePairs(ReadOnlyCollection<string> footerLines, Dictionary<string, string> footerKeyValuePairs)
 | 
			
		||||
    {
 | 
			
		||||
        Dictionary<string, Dictionary<string, string>> results = new();
 | 
			
		||||
        string[] segments;
 | 
			
		||||
        string[] subSegments;
 | 
			
		||||
        string[] subSubSegments;
 | 
			
		||||
        Dictionary<string, string>? keyValue;
 | 
			
		||||
        results.Add("Footer", footerKeyValuePairs);
 | 
			
		||||
        foreach (string footerLine in footerLines)
 | 
			
		||||
        {
 | 
			
		||||
            segments = footerLine.Split('\t');
 | 
			
		||||
            if (segments.Length != 2 || string.IsNullOrEmpty(segments[1].Trim()))
 | 
			
		||||
            {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (!segments[1].Contains(';') || !segments[1].Contains('='))
 | 
			
		||||
            {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                subSegments = segments[1].Split(';');
 | 
			
		||||
                if (subSegments.Length < 1)
 | 
			
		||||
                {
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                if (!results.TryGetValue(segments[0], out keyValue))
 | 
			
		||||
                {
 | 
			
		||||
                    results.Add(segments[0], new());
 | 
			
		||||
                    if (!results.TryGetValue(segments[0], out keyValue))
 | 
			
		||||
                    {
 | 
			
		||||
                        throw new Exception();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                foreach (string segment in subSegments)
 | 
			
		||||
                {
 | 
			
		||||
                    subSubSegments = segment.Split('=');
 | 
			
		||||
                    if (subSubSegments.Length != 2)
 | 
			
		||||
                    {
 | 
			
		||||
                        continue;
 | 
			
		||||
                    }
 | 
			
		||||
                    keyValue.Add(subSubSegments[0], subSubSegments[1]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal static void Write(string path, ProcessDataStandardFormat processDataStandardFormat, List<Metrology.WS.Results>? wsResults)
 | 
			
		||||
    {
 | 
			
		||||
        List<string> results = new();
 | 
			
		||||
        if (processDataStandardFormat.InputPDSF is null)
 | 
			
		||||
            throw new NullReferenceException(nameof(processDataStandardFormat.InputPDSF));
 | 
			
		||||
        if (processDataStandardFormat.Sequence is null)
 | 
			
		||||
            throw new NullReferenceException(nameof(processDataStandardFormat.Sequence));
 | 
			
		||||
        string endOffset = "E#######T";
 | 
			
		||||
@ -418,20 +565,26 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
                    results.Add($"{segments[0]}\t{segments[1][0]}_HeaderId={wsResults[0].HeaderId};{segments[1][0]}_SubgroupId={wsResults[0].SubgroupId};{segments[1]}");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        results.Add("END_HEADER");
 | 
			
		||||
        results.Add(string.Empty);
 | 
			
		||||
        List<char> hyphens = new();
 | 
			
		||||
        results.AddRange(processDataStandardFormat.InputPDSF.Header.Select(l => $"|{l.Replace('\t', '|')}|"));
 | 
			
		||||
        results.Add(string.Empty);
 | 
			
		||||
        results.Add($"|{string.Join("|", processDataStandardFormat.InputPDSF.Columns)}|");
 | 
			
		||||
        for (int i = 0; i < processDataStandardFormat.InputPDSF.Columns.Count; i++)
 | 
			
		||||
            hyphens.Add('-');
 | 
			
		||||
        results.Add($"|{string.Join("|", hyphens)}|");
 | 
			
		||||
        results.AddRange(processDataStandardFormat.InputPDSF.Body.Select(l => $"|{l.Replace('\t', '|')}|"));
 | 
			
		||||
        results.Add(string.Empty);
 | 
			
		||||
        results.AddRange(processDataStandardFormat.InputPDSF.Footer.Select(l => $"|{l.Replace('\t', '|')}|"));
 | 
			
		||||
        results.Add(string.Empty);
 | 
			
		||||
        string xml = GetXml(processDataStandardFormat);
 | 
			
		||||
        results.Add(xml);
 | 
			
		||||
        results.Add(string.Empty);
 | 
			
		||||
        results.Add("EOF");
 | 
			
		||||
        if (processDataStandardFormat.InputPDSF is not null)
 | 
			
		||||
        {
 | 
			
		||||
            List<char> hyphens = new();
 | 
			
		||||
            results.AddRange(processDataStandardFormat.InputPDSF.Header.Select(l => l.Replace('\t', '|')));
 | 
			
		||||
            results.Add(string.Empty);
 | 
			
		||||
            results.Add($"|{string.Join("|", processDataStandardFormat.InputPDSF.Columns)}|");
 | 
			
		||||
            for (int i = 0; i < processDataStandardFormat.InputPDSF.Columns.Count; i++)
 | 
			
		||||
                hyphens.Add('-');
 | 
			
		||||
            results.Add($"|{string.Join("|", hyphens)}|");
 | 
			
		||||
            results.AddRange(processDataStandardFormat.InputPDSF.Body.Select(l => l.Replace('\t', '|')));
 | 
			
		||||
            results.Add(string.Empty);
 | 
			
		||||
            results.AddRange(processDataStandardFormat.InputPDSF.Footer.Select(l => l.Replace('\t', '|')));
 | 
			
		||||
        }
 | 
			
		||||
        results.Add(string.Empty);
 | 
			
		||||
        string json = GetJson(processDataStandardFormat);
 | 
			
		||||
        results.Add(json);
 | 
			
		||||
        File.WriteAllText(path, string.Join(Environment.NewLine, results));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -474,7 +627,7 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
                {
 | 
			
		||||
                    for (int c = 1; c < segments.Length; c++)
 | 
			
		||||
                    {
 | 
			
		||||
                        value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\");
 | 
			
		||||
                        value = segments[c].Replace("\\", "\\\\").Replace("\"", "\\\"");
 | 
			
		||||
                        _ = stringBuilder.Append('"').Append(processDataStandardFormat.Columns[c]).Append("\":\"").Append(value).Append("\",");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
@ -482,7 +635,7 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
                {
 | 
			
		||||
                    for (int c = 1; c < segments.Length; c++)
 | 
			
		||||
                    {
 | 
			
		||||
                        value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\");
 | 
			
		||||
                        value = segments[c].Replace("\\", "\\\\").Replace("\"", "\\\"");
 | 
			
		||||
                        if (string.IsNullOrEmpty(value))
 | 
			
		||||
                            _ = stringBuilder.Append('"').Append(processDataStandardFormat.Columns[c]).Append("\":").Append(value).Append("null,");
 | 
			
		||||
                        else if (value.All(char.IsDigit))
 | 
			
		||||
@ -501,6 +654,17 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal static JsonElement[] GetArray(string reportFullPath, string[] lines, ProcessDataStandardFormat processDataStandardFormat)
 | 
			
		||||
    {
 | 
			
		||||
        JsonElement[] results;
 | 
			
		||||
        string? json = GetRecordsJson(reportFullPath, lines);
 | 
			
		||||
        if (string.IsNullOrEmpty(json))
 | 
			
		||||
            results = GetArray(processDataStandardFormat);
 | 
			
		||||
        else
 | 
			
		||||
            results = JsonSerializer.Deserialize(json, JsonElementCollectionSourceGenerationContext.Default.JsonElementArray) ?? throw new Exception();
 | 
			
		||||
        return results;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal static string GetPDSFText(IFileRead fileRead, Logistics logistics, JsonElement[] jsonElements, string logisticsText)
 | 
			
		||||
    {
 | 
			
		||||
        string result;
 | 
			
		||||
@ -713,6 +877,116 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal static string GetXml(ProcessDataStandardFormat processDataStandardFormat)
 | 
			
		||||
    {
 | 
			
		||||
        string result;
 | 
			
		||||
        string tag;
 | 
			
		||||
        string value;
 | 
			
		||||
        string[] segments;
 | 
			
		||||
        List<string> values;
 | 
			
		||||
        Dictionary<string, List<string>> results = new();
 | 
			
		||||
        ReadOnlyCollection<string> body = processDataStandardFormat.InputPDSF is null ?
 | 
			
		||||
            processDataStandardFormat.Body : processDataStandardFormat.InputPDSF.Body;
 | 
			
		||||
        ReadOnlyCollection<string> columns = processDataStandardFormat.InputPDSF is null ?
 | 
			
		||||
            processDataStandardFormat.Columns : processDataStandardFormat.InputPDSF.Columns;
 | 
			
		||||
        List<string> lines = new() { "<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "<records>" };
 | 
			
		||||
        for (int i = 0; i < body.Count; i++)
 | 
			
		||||
        {
 | 
			
		||||
            segments = body[i].Trim().Split('\t');
 | 
			
		||||
            if (segments.Length != columns.Count)
 | 
			
		||||
                break;
 | 
			
		||||
            for (int c = 0; c < segments.Length; c++)
 | 
			
		||||
            {
 | 
			
		||||
                value = segments[c].Replace("&", "&")
 | 
			
		||||
                                   .Replace("<", "<")
 | 
			
		||||
                                   .Replace(">", ">")
 | 
			
		||||
                                   .Replace("\"", """)
 | 
			
		||||
                                   .Replace("'", "'");
 | 
			
		||||
                tag = Regex.Replace(columns[c].Trim('"'), @"[^a-zA-Z0-9]", "_").Split('\r')[0].Split('\n')[0];
 | 
			
		||||
                if (i == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    if (results.ContainsKey(tag))
 | 
			
		||||
                        continue;
 | 
			
		||||
                    results.Add(tag, new List<string>());
 | 
			
		||||
                }
 | 
			
		||||
                results[tag].Add(value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        foreach (KeyValuePair<string, List<string>> keyValuePair in results)
 | 
			
		||||
        {
 | 
			
		||||
            if (body.Count < 2)
 | 
			
		||||
                break;
 | 
			
		||||
            if (keyValuePair.Value.Count != body.Count)
 | 
			
		||||
                continue;
 | 
			
		||||
            values = keyValuePair.Value.Distinct().ToList();
 | 
			
		||||
            if (values.Count == 2 && (string.IsNullOrEmpty(values[0]) || string.IsNullOrEmpty(values[1])))
 | 
			
		||||
            {
 | 
			
		||||
                for (int i = 0; i < body.Count; i++)
 | 
			
		||||
                    keyValuePair.Value[i] = string.Empty;
 | 
			
		||||
                foreach (string v in values)
 | 
			
		||||
                {
 | 
			
		||||
                    if (string.IsNullOrEmpty(v))
 | 
			
		||||
                        continue;
 | 
			
		||||
                    keyValuePair.Value[0] = v;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        for (int i = 0; i < body.Count; i++)
 | 
			
		||||
        {
 | 
			
		||||
            lines.Add("  <record>");
 | 
			
		||||
            foreach (KeyValuePair<string, List<string>> keyValuePair in results)
 | 
			
		||||
            {
 | 
			
		||||
                if (keyValuePair.Value.Count != body.Count)
 | 
			
		||||
                    continue;
 | 
			
		||||
                lines.Add(string.Concat("    <", keyValuePair.Key, '>', keyValuePair.Value[i], "</", keyValuePair.Key, '>'));
 | 
			
		||||
            }
 | 
			
		||||
            lines.Add("  </record>");
 | 
			
		||||
        }
 | 
			
		||||
        lines.Add("</records>");
 | 
			
		||||
        result = string.Join(Environment.NewLine, lines);
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal static string GetXml(string reportFullPath, string[]? lines = null)
 | 
			
		||||
    {
 | 
			
		||||
        string result;
 | 
			
		||||
        bool foundXml = false;
 | 
			
		||||
        List<string> results = new();
 | 
			
		||||
        lines ??= File.ReadAllLines(reportFullPath);
 | 
			
		||||
        foreach (string line in lines)
 | 
			
		||||
        {
 | 
			
		||||
            if (line.StartsWith("<?xml"))
 | 
			
		||||
                foundXml = true;
 | 
			
		||||
            if (!foundXml)
 | 
			
		||||
                continue;
 | 
			
		||||
            if (line.StartsWith("EOF"))
 | 
			
		||||
                break;
 | 
			
		||||
            results.Add(line);
 | 
			
		||||
        }
 | 
			
		||||
        result = string.Join(Environment.NewLine, results);
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static string? GetRecordsJson(string reportFullPath, string[] lines)
 | 
			
		||||
    {
 | 
			
		||||
        string? result;
 | 
			
		||||
        bool foundRecords = false;
 | 
			
		||||
        List<string> results = new();
 | 
			
		||||
        lines ??= File.ReadAllLines(reportFullPath);
 | 
			
		||||
        foreach (string line in lines)
 | 
			
		||||
        {
 | 
			
		||||
            if (line.StartsWith("\"Records\""))
 | 
			
		||||
                foundRecords = true;
 | 
			
		||||
            if (!foundRecords)
 | 
			
		||||
                continue;
 | 
			
		||||
            if (line == "],")
 | 
			
		||||
                break;
 | 
			
		||||
            results.Add(line);
 | 
			
		||||
        }
 | 
			
		||||
        result = results.Count == 0 ? null : $"{string.Join(Environment.NewLine, results.Skip(1))}{Environment.NewLine}]";
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[JsonSourceGenerationOptions(WriteIndented = true)]
 | 
			
		||||
@ -720,3 +994,9 @@ internal class ProcessDataStandardFormat
 | 
			
		||||
internal partial class JsonElementCollectionSourceGenerationContext : JsonSerializerContext
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
 | 
			
		||||
[JsonSerializable(typeof(Dictionary<string, Dictionary<string, string>>))]
 | 
			
		||||
internal partial class DictionaryStringDictionaryStringStringSourceGenerationContext : JsonSerializerContext
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
@ -1,33 +1,34 @@
 | 
			
		||||
using System.Collections.ObjectModel;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation.Shared;
 | 
			
		||||
 | 
			
		||||
public class ProcessDataStandardFormatMapping
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public ReadOnlyCollection<string> BackfillColumns { get; private set; }
 | 
			
		||||
    public ReadOnlyCollection<int> ColumnIndices { get; private set; }
 | 
			
		||||
    public ReadOnlyCollection<string> IgnoreColumns { get; private set; }
 | 
			
		||||
    public ReadOnlyCollection<string> IndexOnlyColumns { get; private set; }
 | 
			
		||||
    public ReadOnlyDictionary<string, string> KeyValuePairs { get; private set; }
 | 
			
		||||
    public ReadOnlyCollection<string> NewColumnNames { get; private set; }
 | 
			
		||||
    public ReadOnlyCollection<string> OldColumnNames { get; private set; }
 | 
			
		||||
 | 
			
		||||
    public ProcessDataStandardFormatMapping(ReadOnlyCollection<string> backfillColumns,
 | 
			
		||||
                                            ReadOnlyCollection<int> columnIndices,
 | 
			
		||||
                                            ReadOnlyCollection<string> ignoreColumns,
 | 
			
		||||
                                            ReadOnlyCollection<string> indexOnlyColumns,
 | 
			
		||||
                                            ReadOnlyDictionary<string, string> keyValuePairs,
 | 
			
		||||
    public ProcessDataStandardFormatMapping(ReadOnlyCollection<int> columnIndices,
 | 
			
		||||
                                            ReadOnlyCollection<string> newColumnNames,
 | 
			
		||||
                                            ReadOnlyCollection<string> oldColumnNames)
 | 
			
		||||
    {
 | 
			
		||||
        BackfillColumns = backfillColumns;
 | 
			
		||||
        ColumnIndices = columnIndices;
 | 
			
		||||
        IgnoreColumns = ignoreColumns;
 | 
			
		||||
        IndexOnlyColumns = indexOnlyColumns;
 | 
			
		||||
        KeyValuePairs = keyValuePairs;
 | 
			
		||||
        NewColumnNames = newColumnNames;
 | 
			
		||||
        OldColumnNames = oldColumnNames;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal static ProcessDataStandardFormatMapping Get(string processDataStandardFormatMappingOldColumnNames, string processDataStandardFormatMappingNewColumnNames, string processDataStandardFormatMappingColumnIndices)
 | 
			
		||||
    {
 | 
			
		||||
        ProcessDataStandardFormatMapping result;
 | 
			
		||||
        ReadOnlyCollection<string> newColumnNames = new(processDataStandardFormatMappingNewColumnNames.Split(','));
 | 
			
		||||
        ReadOnlyCollection<string> oldColumnNames = new(processDataStandardFormatMappingOldColumnNames.Split(','));
 | 
			
		||||
        ReadOnlyCollection<int> columnIndices = new(processDataStandardFormatMappingColumnIndices.Split(',').Select(int.Parse).ToArray());
 | 
			
		||||
        result = new(columnIndices: columnIndices,
 | 
			
		||||
                     newColumnNames: newColumnNames,
 | 
			
		||||
                     oldColumnNames: oldColumnNames);
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
#if true
 | 
			
		||||
#if v2_59_0
 | 
			
		||||
using Adaptation._Tests.Shared;
 | 
			
		||||
using Microsoft.Extensions.Logging;
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
#if true
 | 
			
		||||
#if v2_59_0
 | 
			
		||||
using Adaptation._Tests.Shared;
 | 
			
		||||
using Microsoft.Extensions.Logging;
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
#if true
 | 
			
		||||
#if v2_59_0
 | 
			
		||||
using Adaptation._Tests.Shared;
 | 
			
		||||
using Microsoft.Extensions.Logging;
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,195 @@
 | 
			
		||||
#if v2_60_0
 | 
			
		||||
using Adaptation._Tests.Shared;
 | 
			
		||||
using Microsoft.Extensions.Logging;
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation._Tests.CreateSelfDescription.Production.v2_60_0;
 | 
			
		||||
 | 
			
		||||
[TestClass]
 | 
			
		||||
public class MET08DDUPSP1TBI : EAFLoggingUnitTesting
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#pragma warning disable CA2254
 | 
			
		||||
#pragma warning disable IDE0060
 | 
			
		||||
 | 
			
		||||
    internal static string DummyRoot { get; private set; }
 | 
			
		||||
    internal static MET08DDUPSP1TBI EAFLoggingUnitTesting { get; private set; }
 | 
			
		||||
 | 
			
		||||
    static MET08DDUPSP1TBI() => DummyRoot = @"\\mesfs.infineon.com\EC_Characterization_Si\Dummy";
 | 
			
		||||
 | 
			
		||||
    public MET08DDUPSP1TBI() : base(DummyRoot, testContext: null, declaringType: null, skipEquipmentDictionary: false)
 | 
			
		||||
    {
 | 
			
		||||
        if (EAFLoggingUnitTesting is null)
 | 
			
		||||
            throw new Exception();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public MET08DDUPSP1TBI(TestContext testContext) : base(DummyRoot, testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [ClassInitialize]
 | 
			
		||||
    public static void ClassInitialize(TestContext testContext)
 | 
			
		||||
    {
 | 
			
		||||
        EAFLoggingUnitTesting ??= new MET08DDUPSP1TBI(testContext);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(testContext.TestName, " - ClassInitialize"));
 | 
			
		||||
        string[] fileNameAndText = EAFLoggingUnitTesting.AdaptationTesting.GetCSharpText(testContext.TestName);
 | 
			
		||||
        File.WriteAllText(fileNameAndText[0], fileNameAndText[1]);
 | 
			
		||||
        File.WriteAllText(fileNameAndText[2], fileNameAndText[3]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [ClassCleanup()]
 | 
			
		||||
    public static void ClassCleanup()
 | 
			
		||||
    {
 | 
			
		||||
        EAFLoggingUnitTesting?.Logger?.LogInformation("Cleanup");
 | 
			
		||||
        EAFLoggingUnitTesting?.Dispose();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__MoveMatchingFiles()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__OpenInsightMetrologyViewer()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__IQSSi()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__OpenInsight()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__OpenInsightMetrologyViewerAttachments()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__APC()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__SPaCe()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__Processed()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__Archive()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__Dummy()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "637400748000000000.zip";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__TIBCO()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.idc";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
@ -0,0 +1,70 @@
 | 
			
		||||
#if v2_60_0
 | 
			
		||||
using Adaptation._Tests.Shared;
 | 
			
		||||
using Microsoft.Extensions.Logging;
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
namespace Adaptation._Tests.CreateSelfDescription.Production.v2_60_0;
 | 
			
		||||
 | 
			
		||||
[TestClass]
 | 
			
		||||
public class SP101_EQPT : EAFLoggingUnitTesting
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#pragma warning disable CA2254
 | 
			
		||||
#pragma warning disable IDE0060
 | 
			
		||||
 | 
			
		||||
    internal static string DummyRoot { get; private set; }
 | 
			
		||||
    internal static SP101_EQPT EAFLoggingUnitTesting { get; private set; }
 | 
			
		||||
 | 
			
		||||
    static SP101_EQPT() => DummyRoot = @"\\mesfs.infineon.com\EC_Characterization_Si\Dummy";
 | 
			
		||||
 | 
			
		||||
    public SP101_EQPT() : base(DummyRoot, testContext: null, declaringType: null, skipEquipmentDictionary: false)
 | 
			
		||||
    {
 | 
			
		||||
        if (EAFLoggingUnitTesting is null)
 | 
			
		||||
            throw new Exception();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public SP101_EQPT(TestContext testContext) : base(DummyRoot, testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [ClassInitialize]
 | 
			
		||||
    public static void ClassInitialize(TestContext testContext)
 | 
			
		||||
    {
 | 
			
		||||
        EAFLoggingUnitTesting ??= new SP101_EQPT(testContext);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(testContext.TestName, " - ClassInitialize"));
 | 
			
		||||
        string[] fileNameAndText = EAFLoggingUnitTesting.AdaptationTesting.GetCSharpText(testContext.TestName);
 | 
			
		||||
        File.WriteAllText(fileNameAndText[0], fileNameAndText[1]);
 | 
			
		||||
        File.WriteAllText(fileNameAndText[2], fileNameAndText[3]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [ClassCleanup()]
 | 
			
		||||
    public static void ClassCleanup()
 | 
			
		||||
    {
 | 
			
		||||
        EAFLoggingUnitTesting?.Logger?.LogInformation("Cleanup");
 | 
			
		||||
        EAFLoggingUnitTesting?.Dispose();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void NonThrowTryCatch()
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        { throw new Exception(); }
 | 
			
		||||
        catch (Exception) { }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [Ignore]
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__SP101_EQPT__MoveAllFiles()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
@ -0,0 +1,65 @@
 | 
			
		||||
#if v2_60_0
 | 
			
		||||
using Adaptation._Tests.Shared;
 | 
			
		||||
using Microsoft.Extensions.Logging;
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation._Tests.CreateSelfDescription.Production.v2_60_0;
 | 
			
		||||
 | 
			
		||||
[TestClass]
 | 
			
		||||
public class SP101 : EAFLoggingUnitTesting
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#pragma warning disable CA2254
 | 
			
		||||
#pragma warning disable IDE0060
 | 
			
		||||
 | 
			
		||||
    internal static string DummyRoot { get; private set; }
 | 
			
		||||
    internal static SP101 EAFLoggingUnitTesting { get; private set; }
 | 
			
		||||
 | 
			
		||||
    static SP101() => DummyRoot = @"\\mesfs.infineon.com\EC_Characterization_Si\Dummy";
 | 
			
		||||
 | 
			
		||||
    public SP101() : base(DummyRoot, testContext: null, declaringType: null, skipEquipmentDictionary: false)
 | 
			
		||||
    {
 | 
			
		||||
        if (EAFLoggingUnitTesting is null)
 | 
			
		||||
            throw new Exception();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public SP101(TestContext testContext) : base(DummyRoot, testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [ClassInitialize]
 | 
			
		||||
    public static void ClassInitialize(TestContext testContext)
 | 
			
		||||
    {
 | 
			
		||||
        EAFLoggingUnitTesting ??= new SP101(testContext);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(testContext.TestName, " - ClassInitialize"));
 | 
			
		||||
        string[] fileNameAndText = EAFLoggingUnitTesting.AdaptationTesting.GetCSharpText(testContext.TestName);
 | 
			
		||||
        File.WriteAllText(fileNameAndText[0], fileNameAndText[1]);
 | 
			
		||||
        File.WriteAllText(fileNameAndText[2], fileNameAndText[3]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [ClassCleanup()]
 | 
			
		||||
    public static void ClassCleanup()
 | 
			
		||||
    {
 | 
			
		||||
        EAFLoggingUnitTesting?.Logger?.LogInformation("Cleanup");
 | 
			
		||||
        EAFLoggingUnitTesting?.Dispose();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__SP101__txt()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.txt";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
@ -0,0 +1,195 @@
 | 
			
		||||
#if true
 | 
			
		||||
using Adaptation._Tests.Shared;
 | 
			
		||||
using Microsoft.Extensions.Logging;
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation._Tests.CreateSelfDescription.Production.v2_61_1;
 | 
			
		||||
 | 
			
		||||
[TestClass]
 | 
			
		||||
public class MET08DDUPSP1TBI : EAFLoggingUnitTesting
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#pragma warning disable CA2254
 | 
			
		||||
#pragma warning disable IDE0060
 | 
			
		||||
 | 
			
		||||
    internal static string DummyRoot { get; private set; }
 | 
			
		||||
    internal static MET08DDUPSP1TBI EAFLoggingUnitTesting { get; private set; }
 | 
			
		||||
 | 
			
		||||
    static MET08DDUPSP1TBI() => DummyRoot = @"\\mesfs.infineon.com\EC_Characterization_Si\Dummy";
 | 
			
		||||
 | 
			
		||||
    public MET08DDUPSP1TBI() : base(DummyRoot, testContext: null, declaringType: null, skipEquipmentDictionary: false)
 | 
			
		||||
    {
 | 
			
		||||
        if (EAFLoggingUnitTesting is null)
 | 
			
		||||
            throw new Exception();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public MET08DDUPSP1TBI(TestContext testContext) : base(DummyRoot, testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [ClassInitialize]
 | 
			
		||||
    public static void ClassInitialize(TestContext testContext)
 | 
			
		||||
    {
 | 
			
		||||
        EAFLoggingUnitTesting ??= new MET08DDUPSP1TBI(testContext);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(testContext.TestName, " - ClassInitialize"));
 | 
			
		||||
        string[] fileNameAndText = EAFLoggingUnitTesting.AdaptationTesting.GetCSharpText(testContext.TestName);
 | 
			
		||||
        File.WriteAllText(fileNameAndText[0], fileNameAndText[1]);
 | 
			
		||||
        File.WriteAllText(fileNameAndText[2], fileNameAndText[3]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [ClassCleanup()]
 | 
			
		||||
    public static void ClassCleanup()
 | 
			
		||||
    {
 | 
			
		||||
        EAFLoggingUnitTesting?.Logger?.LogInformation("Cleanup");
 | 
			
		||||
        EAFLoggingUnitTesting?.Dispose();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__MoveMatchingFiles()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__OpenInsightMetrologyViewer()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__IQSSi()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__OpenInsight()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__OpenInsightMetrologyViewerAttachments()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__APC()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__SPaCe()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__Processed()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__Archive()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__Dummy()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "637400748000000000.zip";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__TIBCO()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.idc";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
@ -0,0 +1,70 @@
 | 
			
		||||
#if true
 | 
			
		||||
using Adaptation._Tests.Shared;
 | 
			
		||||
using Microsoft.Extensions.Logging;
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
namespace Adaptation._Tests.CreateSelfDescription.Production.v2_61_1;
 | 
			
		||||
 | 
			
		||||
[TestClass]
 | 
			
		||||
public class SP101_EQPT : EAFLoggingUnitTesting
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#pragma warning disable CA2254
 | 
			
		||||
#pragma warning disable IDE0060
 | 
			
		||||
 | 
			
		||||
    internal static string DummyRoot { get; private set; }
 | 
			
		||||
    internal static SP101_EQPT EAFLoggingUnitTesting { get; private set; }
 | 
			
		||||
 | 
			
		||||
    static SP101_EQPT() => DummyRoot = @"\\mesfs.infineon.com\EC_Characterization_Si\Dummy";
 | 
			
		||||
 | 
			
		||||
    public SP101_EQPT() : base(DummyRoot, testContext: null, declaringType: null, skipEquipmentDictionary: false)
 | 
			
		||||
    {
 | 
			
		||||
        if (EAFLoggingUnitTesting is null)
 | 
			
		||||
            throw new Exception();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public SP101_EQPT(TestContext testContext) : base(DummyRoot, testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [ClassInitialize]
 | 
			
		||||
    public static void ClassInitialize(TestContext testContext)
 | 
			
		||||
    {
 | 
			
		||||
        EAFLoggingUnitTesting ??= new SP101_EQPT(testContext);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(testContext.TestName, " - ClassInitialize"));
 | 
			
		||||
        string[] fileNameAndText = EAFLoggingUnitTesting.AdaptationTesting.GetCSharpText(testContext.TestName);
 | 
			
		||||
        File.WriteAllText(fileNameAndText[0], fileNameAndText[1]);
 | 
			
		||||
        File.WriteAllText(fileNameAndText[2], fileNameAndText[3]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [ClassCleanup()]
 | 
			
		||||
    public static void ClassCleanup()
 | 
			
		||||
    {
 | 
			
		||||
        EAFLoggingUnitTesting?.Logger?.LogInformation("Cleanup");
 | 
			
		||||
        EAFLoggingUnitTesting?.Dispose();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void NonThrowTryCatch()
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        { throw new Exception(); }
 | 
			
		||||
        catch (Exception) { }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [Ignore]
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__SP101_EQPT__MoveAllFiles()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
@ -0,0 +1,65 @@
 | 
			
		||||
#if true
 | 
			
		||||
using Adaptation._Tests.Shared;
 | 
			
		||||
using Microsoft.Extensions.Logging;
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation._Tests.CreateSelfDescription.Production.v2_61_1;
 | 
			
		||||
 | 
			
		||||
[TestClass]
 | 
			
		||||
public class SP101 : EAFLoggingUnitTesting
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#pragma warning disable CA2254
 | 
			
		||||
#pragma warning disable IDE0060
 | 
			
		||||
 | 
			
		||||
    internal static string DummyRoot { get; private set; }
 | 
			
		||||
    internal static SP101 EAFLoggingUnitTesting { get; private set; }
 | 
			
		||||
 | 
			
		||||
    static SP101() => DummyRoot = @"\\mesfs.infineon.com\EC_Characterization_Si\Dummy";
 | 
			
		||||
 | 
			
		||||
    public SP101() : base(DummyRoot, testContext: null, declaringType: null, skipEquipmentDictionary: false)
 | 
			
		||||
    {
 | 
			
		||||
        if (EAFLoggingUnitTesting is null)
 | 
			
		||||
            throw new Exception();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public SP101(TestContext testContext) : base(DummyRoot, testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [ClassInitialize]
 | 
			
		||||
    public static void ClassInitialize(TestContext testContext)
 | 
			
		||||
    {
 | 
			
		||||
        EAFLoggingUnitTesting ??= new SP101(testContext);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(testContext.TestName, " - ClassInitialize"));
 | 
			
		||||
        string[] fileNameAndText = EAFLoggingUnitTesting.AdaptationTesting.GetCSharpText(testContext.TestName);
 | 
			
		||||
        File.WriteAllText(fileNameAndText[0], fileNameAndText[1]);
 | 
			
		||||
        File.WriteAllText(fileNameAndText[2], fileNameAndText[3]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [ClassCleanup()]
 | 
			
		||||
    public static void ClassCleanup()
 | 
			
		||||
    {
 | 
			
		||||
        EAFLoggingUnitTesting?.Logger?.LogInformation("Cleanup");
 | 
			
		||||
        EAFLoggingUnitTesting?.Dispose();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__SP101__txt()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.txt";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        _ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
 | 
			
		||||
        EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
#if true
 | 
			
		||||
#if v2_59_0
 | 
			
		||||
using Adaptation.Shared;
 | 
			
		||||
using Adaptation.Shared.Methods;
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
#if true
 | 
			
		||||
#if v2_59_0
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation._Tests.Extract.Production.v2_59_0;
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
#if true
 | 
			
		||||
#if v2_59_0
 | 
			
		||||
using Adaptation.Shared;
 | 
			
		||||
using Adaptation.Shared.Methods;
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										148
									
								
								Adaptation/_Tests/Extract/Production/v2.60.0/MET08DDUPSP1TBI.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								Adaptation/_Tests/Extract/Production/v2.60.0/MET08DDUPSP1TBI.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,148 @@
 | 
			
		||||
#if v2_60_0
 | 
			
		||||
using Adaptation.Shared;
 | 
			
		||||
using Adaptation.Shared.Methods;
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation._Tests.Extract.Production.v2_60_0;
 | 
			
		||||
 | 
			
		||||
[TestClass]
 | 
			
		||||
public class MET08DDUPSP1TBI
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#pragma warning disable CA2254
 | 
			
		||||
#pragma warning disable IDE0060
 | 
			
		||||
 | 
			
		||||
    private static CreateSelfDescription.Production.v2_60_0.MET08DDUPSP1TBI _MET08DDUPSP1TBI;
 | 
			
		||||
 | 
			
		||||
    [ClassInitialize]
 | 
			
		||||
    public static void ClassInitialize(TestContext testContext)
 | 
			
		||||
    {
 | 
			
		||||
        CreateSelfDescription.Production.v2_60_0.MET08DDUPSP1TBI.ClassInitialize(testContext);
 | 
			
		||||
        _MET08DDUPSP1TBI = CreateSelfDescription.Production.v2_60_0.MET08DDUPSP1TBI.EAFLoggingUnitTesting;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void NonThrowTryCatch()
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        { throw new Exception(); }
 | 
			
		||||
        catch (Exception) { }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__MoveMatchingFiles() => _MET08DDUPSP1TBI.Production__v2_60_0__MET08DDUPSP1TBI__MoveMatchingFiles();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__MoveMatchingFiles637955319879801344__Normal()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        bool validatePDSF = false;
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        _MET08DDUPSP1TBI.Production__v2_60_0__MET08DDUPSP1TBI__MoveMatchingFiles();
 | 
			
		||||
        string[] variables = _MET08DDUPSP1TBI.AdaptationTesting.GetVariables(methodBase, check, validatePDSF);
 | 
			
		||||
        IFileRead fileRead = _MET08DDUPSP1TBI.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
 | 
			
		||||
        Logistics logistics = new(fileRead);
 | 
			
		||||
        _ = Shared.AdaptationTesting.ReExtractCompareUpdatePassDirectory(variables, fileRead, logistics, validatePDSF);
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__OpenInsightMetrologyViewer() => _MET08DDUPSP1TBI.Production__v2_60_0__MET08DDUPSP1TBI__OpenInsightMetrologyViewer();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__IQSSi() => _MET08DDUPSP1TBI.Production__v2_60_0__MET08DDUPSP1TBI__IQSSi();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__OpenInsight() => _MET08DDUPSP1TBI.Production__v2_60_0__MET08DDUPSP1TBI__OpenInsight();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__OpenInsight638052814829645888__IqsSql()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        _MET08DDUPSP1TBI.Production__v2_60_0__MET08DDUPSP1TBI__OpenInsight();
 | 
			
		||||
        string[] variables = _MET08DDUPSP1TBI.AdaptationTesting.GetVariables(methodBase, check, validatePDSF: false);
 | 
			
		||||
        IFileRead fileRead = _MET08DDUPSP1TBI.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
 | 
			
		||||
        Logistics logistics = new(fileRead);
 | 
			
		||||
        _ = Shared.AdaptationTesting.ReExtractCompareUpdatePassDirectory(variables, fileRead, logistics);
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__OpenInsightMetrologyViewerAttachments() => _MET08DDUPSP1TBI.Production__v2_60_0__MET08DDUPSP1TBI__OpenInsightMetrologyViewerAttachments();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__APC() => _MET08DDUPSP1TBI.Production__v2_60_0__MET08DDUPSP1TBI__APC();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__SPaCe() => _MET08DDUPSP1TBI.Production__v2_60_0__MET08DDUPSP1TBI__SPaCe();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__Processed() => _MET08DDUPSP1TBI.Production__v2_60_0__MET08DDUPSP1TBI__Processed();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__Archive() => _MET08DDUPSP1TBI.Production__v2_60_0__MET08DDUPSP1TBI__Archive();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__Dummy() => _MET08DDUPSP1TBI.Production__v2_60_0__MET08DDUPSP1TBI__Dummy();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__TIBCO() => _MET08DDUPSP1TBI.Production__v2_60_0__MET08DDUPSP1TBI__TIBCO();
 | 
			
		||||
 | 
			
		||||
    [Ignore]
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__MET08DDUPSP1TBI__TIBCO638217888620242702__Normal()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.idc";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        _MET08DDUPSP1TBI.Production__v2_60_0__MET08DDUPSP1TBI__TIBCO();
 | 
			
		||||
        string[] variables = _MET08DDUPSP1TBI.AdaptationTesting.GetVariables(methodBase, check, validatePDSF: false);
 | 
			
		||||
        _ = _MET08DDUPSP1TBI.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
 | 
			
		||||
        for (int i = 0; i < int.MaxValue; i++)
 | 
			
		||||
            System.Threading.Thread.Sleep(500);
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										27
									
								
								Adaptation/_Tests/Extract/Production/v2.60.0/SP101-EQPT.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								Adaptation/_Tests/Extract/Production/v2.60.0/SP101-EQPT.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
			
		||||
#if v2_60_0
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation._Tests.Extract.Production.v2_60_0;
 | 
			
		||||
 | 
			
		||||
[TestClass]
 | 
			
		||||
public class SP101_EQPT
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#pragma warning disable CA2254
 | 
			
		||||
#pragma warning disable IDE0060
 | 
			
		||||
 | 
			
		||||
    private static CreateSelfDescription.Production.v2_60_0.SP101_EQPT _SP101_EQPT;
 | 
			
		||||
 | 
			
		||||
    [ClassInitialize]
 | 
			
		||||
    public static void ClassInitialize(TestContext testContext)
 | 
			
		||||
    {
 | 
			
		||||
        CreateSelfDescription.Production.v2_60_0.SP101_EQPT.ClassInitialize(testContext);
 | 
			
		||||
        _SP101_EQPT = CreateSelfDescription.Production.v2_60_0.SP101_EQPT.EAFLoggingUnitTesting;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [Ignore]
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__SP101_EQPT__MoveAllFiles() => _SP101_EQPT.Production__v2_60_0__SP101_EQPT__MoveAllFiles();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										58
									
								
								Adaptation/_Tests/Extract/Production/v2.60.0/SP101.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								Adaptation/_Tests/Extract/Production/v2.60.0/SP101.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,58 @@
 | 
			
		||||
#if v2_60_0
 | 
			
		||||
using Adaptation.Shared;
 | 
			
		||||
using Adaptation.Shared.Methods;
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation._Tests.Extract.Production.v2_60_0;
 | 
			
		||||
 | 
			
		||||
[TestClass]
 | 
			
		||||
public class SP101
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#pragma warning disable CA2254
 | 
			
		||||
#pragma warning disable IDE0060
 | 
			
		||||
 | 
			
		||||
    private static CreateSelfDescription.Production.v2_60_0.SP101 _SP101;
 | 
			
		||||
 | 
			
		||||
    [ClassInitialize]
 | 
			
		||||
    public static void ClassInitialize(TestContext testContext)
 | 
			
		||||
    {
 | 
			
		||||
        CreateSelfDescription.Production.v2_60_0.SP101.ClassInitialize(testContext);
 | 
			
		||||
        _SP101 = CreateSelfDescription.Production.v2_60_0.SP101.EAFLoggingUnitTesting;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void NonThrowTryCatch()
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        { throw new Exception(); }
 | 
			
		||||
        catch (Exception) { }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__SP101__txt() => _SP101.Production__v2_60_0__SP101__txt();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_60_0__SP101__txt637955319879801344__Normal()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.txt";
 | 
			
		||||
        bool validatePDSF = false;
 | 
			
		||||
        _SP101.Production__v2_60_0__SP101__txt();
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        string[] variables = _SP101.AdaptationTesting.GetVariables(methodBase, check, validatePDSF);
 | 
			
		||||
        IFileRead fileRead = _SP101.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
 | 
			
		||||
        Logistics logistics = new(fileRead);
 | 
			
		||||
        _ = Shared.AdaptationTesting.ReExtractCompareUpdatePassDirectory(variables, fileRead, logistics, validatePDSF);
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										146
									
								
								Adaptation/_Tests/Extract/Production/v2.61.1/MET08DDUPSP1TBI.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								Adaptation/_Tests/Extract/Production/v2.61.1/MET08DDUPSP1TBI.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,146 @@
 | 
			
		||||
#if true
 | 
			
		||||
using Adaptation.Shared;
 | 
			
		||||
using Adaptation.Shared.Methods;
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation._Tests.Extract.Production.v2_61_1;
 | 
			
		||||
 | 
			
		||||
[TestClass]
 | 
			
		||||
public class MET08DDUPSP1TBI
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#pragma warning disable CA2254
 | 
			
		||||
#pragma warning disable IDE0060
 | 
			
		||||
 | 
			
		||||
    private static CreateSelfDescription.Production.v2_61_1.MET08DDUPSP1TBI _MET08DDUPSP1TBI;
 | 
			
		||||
 | 
			
		||||
    [ClassInitialize]
 | 
			
		||||
    public static void ClassInitialize(TestContext testContext)
 | 
			
		||||
    {
 | 
			
		||||
        CreateSelfDescription.Production.v2_61_1.MET08DDUPSP1TBI.ClassInitialize(testContext);
 | 
			
		||||
        _MET08DDUPSP1TBI = CreateSelfDescription.Production.v2_61_1.MET08DDUPSP1TBI.EAFLoggingUnitTesting;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void NonThrowTryCatch()
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        { throw new Exception(); }
 | 
			
		||||
        catch (Exception) { }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__MoveMatchingFiles() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__MoveMatchingFiles();
 | 
			
		||||
 | 
			
		||||
    [Ignore]
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__MoveMatchingFiles637955319879801344__Normal()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        bool validatePDSF = false;
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__MoveMatchingFiles();
 | 
			
		||||
        string[] variables = _MET08DDUPSP1TBI.AdaptationTesting.GetVariables(methodBase, check, validatePDSF);
 | 
			
		||||
        IFileRead fileRead = _MET08DDUPSP1TBI.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
 | 
			
		||||
        Logistics logistics = new(fileRead);
 | 
			
		||||
        _ = Shared.AdaptationTesting.ReExtractCompareUpdatePassDirectory(variables, fileRead, logistics, validatePDSF);
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__OpenInsightMetrologyViewer() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__OpenInsightMetrologyViewer();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__IQSSi() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__IQSSi();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__OpenInsight() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__OpenInsight();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__OpenInsight638052814829645888__IqsSql()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.pdsf";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__OpenInsight();
 | 
			
		||||
        string[] variables = _MET08DDUPSP1TBI.AdaptationTesting.GetVariables(methodBase, check, validatePDSF: false);
 | 
			
		||||
        IFileRead fileRead = _MET08DDUPSP1TBI.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
 | 
			
		||||
        Logistics logistics = new(fileRead);
 | 
			
		||||
        _ = Shared.AdaptationTesting.ReExtractCompareUpdatePassDirectory(variables, fileRead, logistics);
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__OpenInsightMetrologyViewerAttachments() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__OpenInsightMetrologyViewerAttachments();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__APC() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__APC();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__SPaCe() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__SPaCe();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__Processed() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__Processed();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__Archive() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__Archive();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__Dummy() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__Dummy();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__TIBCO() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__TIBCO();
 | 
			
		||||
 | 
			
		||||
    [Ignore]
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__MET08DDUPSP1TBI__TIBCO638217888620242702__Normal()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.idc";
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__TIBCO();
 | 
			
		||||
        string[] variables = _MET08DDUPSP1TBI.AdaptationTesting.GetVariables(methodBase, check, validatePDSF: false);
 | 
			
		||||
        _ = _MET08DDUPSP1TBI.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
 | 
			
		||||
        for (int i = 0; i < int.MaxValue; i++)
 | 
			
		||||
            System.Threading.Thread.Sleep(500);
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										27
									
								
								Adaptation/_Tests/Extract/Production/v2.61.1/SP101-EQPT.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								Adaptation/_Tests/Extract/Production/v2.61.1/SP101-EQPT.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
			
		||||
#if true
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation._Tests.Extract.Production.v2_61_1;
 | 
			
		||||
 | 
			
		||||
[TestClass]
 | 
			
		||||
public class SP101_EQPT
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#pragma warning disable CA2254
 | 
			
		||||
#pragma warning disable IDE0060
 | 
			
		||||
 | 
			
		||||
    private static CreateSelfDescription.Production.v2_61_1.SP101_EQPT _SP101_EQPT;
 | 
			
		||||
 | 
			
		||||
    [ClassInitialize]
 | 
			
		||||
    public static void ClassInitialize(TestContext testContext)
 | 
			
		||||
    {
 | 
			
		||||
        CreateSelfDescription.Production.v2_61_1.SP101_EQPT.ClassInitialize(testContext);
 | 
			
		||||
        _SP101_EQPT = CreateSelfDescription.Production.v2_61_1.SP101_EQPT.EAFLoggingUnitTesting;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [Ignore]
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__SP101_EQPT__MoveAllFiles() => _SP101_EQPT.Production__v2_61_1__SP101_EQPT__MoveAllFiles();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										58
									
								
								Adaptation/_Tests/Extract/Production/v2.61.1/SP101.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								Adaptation/_Tests/Extract/Production/v2.61.1/SP101.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,58 @@
 | 
			
		||||
#if true
 | 
			
		||||
using Adaptation.Shared;
 | 
			
		||||
using Adaptation.Shared.Methods;
 | 
			
		||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
 | 
			
		||||
namespace Adaptation._Tests.Extract.Production.v2_61_1;
 | 
			
		||||
 | 
			
		||||
[TestClass]
 | 
			
		||||
public class SP101
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#pragma warning disable CA2254
 | 
			
		||||
#pragma warning disable IDE0060
 | 
			
		||||
 | 
			
		||||
    private static CreateSelfDescription.Production.v2_61_1.SP101 _SP101;
 | 
			
		||||
 | 
			
		||||
    [ClassInitialize]
 | 
			
		||||
    public static void ClassInitialize(TestContext testContext)
 | 
			
		||||
    {
 | 
			
		||||
        CreateSelfDescription.Production.v2_61_1.SP101.ClassInitialize(testContext);
 | 
			
		||||
        _SP101 = CreateSelfDescription.Production.v2_61_1.SP101.EAFLoggingUnitTesting;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void NonThrowTryCatch()
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        { throw new Exception(); }
 | 
			
		||||
        catch (Exception) { }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__SP101__txt() => _SP101.Production__v2_61_1__SP101__txt();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void Production__v2_61_1__SP101__txt637955319879801344__Normal()
 | 
			
		||||
    {
 | 
			
		||||
        string check = "*.txt";
 | 
			
		||||
        bool validatePDSF = false;
 | 
			
		||||
        _SP101.Production__v2_61_1__SP101__txt();
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        string[] variables = _SP101.AdaptationTesting.GetVariables(methodBase, check, validatePDSF);
 | 
			
		||||
        IFileRead fileRead = _SP101.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
 | 
			
		||||
        Logistics logistics = new(fileRead);
 | 
			
		||||
        _ = Shared.AdaptationTesting.ReExtractCompareUpdatePassDirectory(variables, fileRead, logistics, validatePDSF);
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
@ -193,7 +193,12 @@ public class AdaptationTesting : ISMTP
 | 
			
		||||
            segments = withActualCICN.Split(new string[] { ticks }, StringSplitOptions.None);
 | 
			
		||||
            dummyDirectory = Path.Combine(dummyRoot, cellInstanceName, ticks, string.Join(null, segments));
 | 
			
		||||
            if (!Directory.Exists(dummyDirectory))
 | 
			
		||||
            {
 | 
			
		||||
                _ = Directory.CreateDirectory(dummyDirectory);
 | 
			
		||||
                try
 | 
			
		||||
                { Directory.SetLastWriteTime(Path.Combine(dummyRoot, cellInstanceName), DateTime.Now); }
 | 
			
		||||
                catch { }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (string.IsNullOrEmpty(ticks))
 | 
			
		||||
        {
 | 
			
		||||
@ -1182,7 +1187,7 @@ public class AdaptationTesting : ISMTP
 | 
			
		||||
            Assert.IsNotNull(extractResult.Item3);
 | 
			
		||||
            Assert.IsNotNull(extractResult.Item4);
 | 
			
		||||
            if (!validatePDSF)
 | 
			
		||||
                _ = GetProcessDataStandardFormat(fileRead, logistics, extractResult, ProcessDataStandardFormat.GetEmpty());
 | 
			
		||||
                _ = GetProcessDataStandardFormat(fileRead, logistics, extractResult, ProcessDataStandardFormat.GetEmpty(logistics));
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                Assert.IsTrue(extractResult.Item3.Length > 0, "extractResult Array Length check!");
 | 
			
		||||
 | 
			
		||||
@ -44,7 +44,7 @@ public class Job : LoggingUnitTesting, IDisposable
 | 
			
		||||
        catch (Exception) { }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if !Always
 | 
			
		||||
#if Always
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
@ -52,44 +52,58 @@ public class Job : LoggingUnitTesting, IDisposable
 | 
			
		||||
    {
 | 
			
		||||
        string mid;
 | 
			
		||||
        FileHandlers.TIBCO.Transport.Job job;
 | 
			
		||||
        DateTime enteredDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
 | 
			
		||||
        string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
 | 
			
		||||
        string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
 | 
			
		||||
        string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
 | 
			
		||||
        LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
 | 
			
		||||
        mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"12-123456-1234\", \"Recipe\": \"Recipe\"}";
 | 
			
		||||
        job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid);
 | 
			
		||||
        mid = """
 | 
			
		||||
        {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "12-123456-1234", "Recipe": "Recipe"}
 | 
			
		||||
        """;
 | 
			
		||||
        job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "21");
 | 
			
		||||
        Assert.AreEqual("123456", job.LotName);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4609");
 | 
			
		||||
        mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"12-1234567-1234\", \"Recipe\": \"Recipe\"}";
 | 
			
		||||
        job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid);
 | 
			
		||||
        mid = """
 | 
			
		||||
        {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "12-1234567-1234", "Recipe": "Recipe"}
 | 
			
		||||
        """;
 | 
			
		||||
        job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "21");
 | 
			
		||||
        Assert.AreEqual("1234567", job.LotName);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4609");
 | 
			
		||||
        mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"-544481-\", \"Recipe\": \"Recipe\"}";
 | 
			
		||||
        job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid);
 | 
			
		||||
        mid = """
 | 
			
		||||
        {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "-544481-", "Recipe": "Recipe"}
 | 
			
		||||
        """;
 | 
			
		||||
        job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "51");
 | 
			
		||||
        Assert.AreEqual("544481", job.LotName);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); //  == "5158");
 | 
			
		||||
        mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"00-544481-0000\", \"Recipe\": \"Recipe\"}";
 | 
			
		||||
        job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid);
 | 
			
		||||
        mid = """
 | 
			
		||||
        {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "00-544481-0000", "Recipe": "Recipe"}
 | 
			
		||||
        """;
 | 
			
		||||
        job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "51");
 | 
			
		||||
        Assert.AreEqual("544481", job.LotName);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); //  == "5158");
 | 
			
		||||
        mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"00-o171308.1.51-0000\", \"Recipe\": \"Recipe\", \"Slot\": \"11\"}";
 | 
			
		||||
        job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid);
 | 
			
		||||
        mid = """
 | 
			
		||||
        {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "00-o171308.1.51-0000", "Recipe": "Recipe", "Slot": "11"}
 | 
			
		||||
        """;
 | 
			
		||||
        job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "54");
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "547000");
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4445");
 | 
			
		||||
        LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
        mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE5\", \"Sequence\": \"638163023363575829\", \"MID\": \"B48\", \"Recipe\": \"lsl_6in \"}";
 | 
			
		||||
        job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid);
 | 
			
		||||
        mid = """
 | 
			
		||||
        {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE5", "Sequence": "638163023363575829", "MID": "B48", "Recipe": "lsl_6in "}
 | 
			
		||||
        """;
 | 
			
		||||
        job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "54");
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "547000");
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4445");
 | 
			
		||||
        LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -99,16 +113,20 @@ public class Job : LoggingUnitTesting, IDisposable
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void TestJobAA()
 | 
			
		||||
    {
 | 
			
		||||
        string mid;
 | 
			
		||||
        FileHandlers.TIBCO.Transport.Job job;
 | 
			
		||||
        DateTime enteredDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
 | 
			
		||||
        string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
 | 
			
		||||
        string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
 | 
			
		||||
        string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
 | 
			
		||||
        LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
 | 
			
		||||
        mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08THFTIRQS408M\", \"MesEntity\": \"BIORAD2\", \"Sequence\": \"123456789\", \"MID\": \"37--\", \"Recipe\": \"Recipe\"}";
 | 
			
		||||
        job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid);
 | 
			
		||||
        string mid = """
 | 
			
		||||
        {"Area": "Si", "EquipmentType": "MET08THFTIRQS408M", "MesEntity": "BIORAD2", "Sequence": "123456789", "MID": "37--", "Recipe": "Recipe"}
 | 
			
		||||
        """;
 | 
			
		||||
        job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
        Assert.AreEqual("37", job.ProcessType);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "549918");
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "5101");
 | 
			
		||||
@ -116,21 +134,26 @@ public class Job : LoggingUnitTesting, IDisposable
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if !Always
 | 
			
		||||
#if Always
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void TestJobB()
 | 
			
		||||
    {
 | 
			
		||||
        FileHandlers.TIBCO.Transport.Job job;
 | 
			
		||||
        DateTime enteredDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
 | 
			
		||||
        string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
 | 
			
		||||
        string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
 | 
			
		||||
        string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
 | 
			
		||||
        LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
 | 
			
		||||
        string mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"P1234\", \"Recipe\": \"Recipe\"}";
 | 
			
		||||
        job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid);
 | 
			
		||||
        string mid = """
 | 
			
		||||
        {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "P1234", "Recipe": "Recipe"}
 | 
			
		||||
        """;
 | 
			
		||||
        job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType));
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.LotName));
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProductName));
 | 
			
		||||
@ -145,14 +168,19 @@ public class Job : LoggingUnitTesting, IDisposable
 | 
			
		||||
    public void TestJobC()
 | 
			
		||||
    {
 | 
			
		||||
        FileHandlers.TIBCO.Transport.Job job;
 | 
			
		||||
        DateTime enteredDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
 | 
			
		||||
        string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
 | 
			
		||||
        string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
 | 
			
		||||
        string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
 | 
			
		||||
        LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
 | 
			
		||||
        string mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"BIORAD3\", \"Sequence\": \"638234699589174855\", \"MID\": \"33--\", \"Recipe\": \"Recipe\"}";
 | 
			
		||||
        job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid);
 | 
			
		||||
        string mid = """
 | 
			
		||||
        {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "BIORAD3", "Sequence": "638234699589174855", "MID": "33--", "Recipe": "Recipe"}
 | 
			
		||||
        """;
 | 
			
		||||
        job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType));
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.LotName));
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProductName));
 | 
			
		||||
@ -160,22 +188,26 @@ public class Job : LoggingUnitTesting, IDisposable
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if !Always
 | 
			
		||||
#if Always
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void TestJobD()
 | 
			
		||||
    {
 | 
			
		||||
        FileHandlers.TIBCO.Transport.Job job;
 | 
			
		||||
        DateTime enteredDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        string metrologyFileShare =
 | 
			
		||||
        FileHandlers.TIBCO.FileRead.MetrologyFileShare;
 | 
			
		||||
        DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
 | 
			
		||||
        string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
 | 
			
		||||
        string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
 | 
			
		||||
        string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
 | 
			
		||||
        LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
 | 
			
		||||
        string mid = "{\"Area\": \"Si\", \"EquipmentType\": \"DEP08CEPIEPSILON\", \"MesEntity\": \"R32\", \"Sequence\": \"\", \"MID\": \"32--\", \"Recipe\": \"Recipe\"}";
 | 
			
		||||
        job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid);
 | 
			
		||||
        string mid = """
 | 
			
		||||
        {"Area": "Si", "EquipmentType": "DEP08CEPIEPSILON", "MesEntity": "R32", "Sequence": "", "MID": "32--", "Recipe": "Recipe"}
 | 
			
		||||
        """;
 | 
			
		||||
        job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType));
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.LotName));
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProductName));
 | 
			
		||||
@ -184,23 +216,26 @@ public class Job : LoggingUnitTesting, IDisposable
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if !Always
 | 
			
		||||
#if Always
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void TestJobE()
 | 
			
		||||
    {
 | 
			
		||||
        FileHandlers.TIBCO.Transport.Job job;
 | 
			
		||||
        DateTime enteredDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
 | 
			
		||||
        string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
 | 
			
		||||
        string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
 | 
			
		||||
        string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
 | 
			
		||||
        LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
 | 
			
		||||
        string mid = """
 | 
			
		||||
        {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE5", "Sequence": "638756365880000000", "MID": "38-660275-5095.1", "Recipe": "IRC6mm"}
 | 
			
		||||
        """;
 | 
			
		||||
        job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid);
 | 
			
		||||
        job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType));
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.LotName));
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProductName));
 | 
			
		||||
@ -209,23 +244,26 @@ public class Job : LoggingUnitTesting, IDisposable
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if !Always
 | 
			
		||||
#if Always
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void TestJobF()
 | 
			
		||||
    {
 | 
			
		||||
        FileHandlers.TIBCO.Transport.Job job;
 | 
			
		||||
        DateTime enteredDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
 | 
			
		||||
        string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
 | 
			
		||||
        string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
 | 
			
		||||
        string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
 | 
			
		||||
        LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
 | 
			
		||||
        string mid = """
 | 
			
		||||
        {"Area": "Si", "EquipmentType": "MET08THFTIRQS408M", "MesEntity": "BIORAD2", "Sequence": "638757112479659597", "MID": "173308.1.5", "Recipe": "6inTHICK"}
 | 
			
		||||
        """;
 | 
			
		||||
        job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid);
 | 
			
		||||
        job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType));
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.LotName));
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProductName));
 | 
			
		||||
@ -234,23 +272,26 @@ public class Job : LoggingUnitTesting, IDisposable
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if !Always
 | 
			
		||||
#if Always
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void TestJobG()
 | 
			
		||||
    {
 | 
			
		||||
        FileHandlers.TIBCO.Transport.Job job;
 | 
			
		||||
        DateTime enteredDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
 | 
			
		||||
        string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
 | 
			
		||||
        string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
 | 
			
		||||
        string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
 | 
			
		||||
        LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
 | 
			
		||||
        string mid = """
 | 
			
		||||
        {"Area": "Si", "EquipmentType": "MET08DDUPSFS6420", "MesEntity": "TENCOR1", "Sequence": "638765945581765554", "MID": "1T661282", "Recipe": "8IN_THIN ROTR"}
 | 
			
		||||
        """;
 | 
			
		||||
        job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid);
 | 
			
		||||
        job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType));
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.LotName));
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProductName));
 | 
			
		||||
@ -259,23 +300,26 @@ public class Job : LoggingUnitTesting, IDisposable
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if !Always
 | 
			
		||||
#if Always
 | 
			
		||||
    [Ignore]
 | 
			
		||||
#endif
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void TestJobH()
 | 
			
		||||
    {
 | 
			
		||||
        FileHandlers.TIBCO.Transport.Job job;
 | 
			
		||||
        DateTime enteredDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
 | 
			
		||||
        string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
 | 
			
		||||
        string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
 | 
			
		||||
        string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
 | 
			
		||||
        LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
 | 
			
		||||
        string mid = """
 | 
			
		||||
        {"Area": "Si", "EquipmentType": "MET08DDUPSFS6420", "MesEntity": "TENCOR1", "Sequence": "638765945581765554", "MID": "AK1PL2", "Recipe": "8INCLEAN"}
 | 
			
		||||
        """;
 | 
			
		||||
        job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid);
 | 
			
		||||
        job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType));
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.LotName));
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProductName));
 | 
			
		||||
@ -284,4 +328,29 @@ public class Job : LoggingUnitTesting, IDisposable
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [TestMethod]
 | 
			
		||||
    public void TestJobI()
 | 
			
		||||
    {
 | 
			
		||||
        FileHandlers.TIBCO.Transport.Job job;
 | 
			
		||||
        DateTime enteredDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        MethodBase methodBase = new StackFrame().GetMethod();
 | 
			
		||||
        DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
 | 
			
		||||
        string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
 | 
			
		||||
        string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
 | 
			
		||||
        string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
 | 
			
		||||
        string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
 | 
			
		||||
        HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
 | 
			
		||||
        LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
 | 
			
		||||
        string mid = """
 | 
			
		||||
        {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE5", "Sequence": "638163023363575829", "MID": "1T1014894", "Recipe": "lsl_6in "}
 | 
			
		||||
        """;
 | 
			
		||||
        job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "23");
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "111111");
 | 
			
		||||
        Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "5053");
 | 
			
		||||
        LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
        LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
 | 
			
		||||
        NonThrowTryCatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -64,7 +64,7 @@ public class MET08DDUPSP1TBI : LoggingUnitTesting, IDisposable
 | 
			
		||||
        StringBuilder results = new();
 | 
			
		||||
        (string cellInstanceName, string cellInstanceVersionName)[] collection = new (string, string)[]
 | 
			
		||||
        {
 | 
			
		||||
            new("MET08DDUPSP1TBI", "v2.59.0"),
 | 
			
		||||
            new("MET08DDUPSP1TBI", "v2.61.1"),
 | 
			
		||||
        };
 | 
			
		||||
        string production = "http://messa08ec.infineon.com:9003/CellInstanceServiceV2";
 | 
			
		||||
        Shared.PasteSpecialXml.EAF.XML.API.CellInstance.CellInstanceVersion cellInstanceVersion;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										115
									
								
								Adaptation/_Tests/Static/recipes-and-patterns.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								Adaptation/_Tests/Static/recipes-and-patterns.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,115 @@
 | 
			
		||||
// Recipe 1 = Matched
 | 
			
		||||
// recipes-and-patterns.js under IndexOf
 | 
			
		||||
// RecipesAndPatternsMatch
 | 
			
		||||
// ($('dcp.SP101/csv/Index', 0) + 1) == $('dcp.SP101/csv/Count', 0)
 | 
			
		||||
// getValue('TENCOR', $('dcp.SP101/csv/Count', 0), $('dcp.SP101/csv/Session', ''), 'pattern', getContextData('2', 'cds.NULL_DATA', ''));
 | 
			
		||||
 | 
			
		||||
function getValue(tool, patternSize, recipe, pattern, json) {
 | 
			
		||||
    let result;
 | 
			
		||||
    if (tool == undefined || tool.length === 0 || patternSize == undefined || patternSize.length === 0 || recipe == undefined || recipe.length === 0 || pattern == undefined || pattern.length === 0 || json == undefined || json.length === 0)
 | 
			
		||||
        result = 'A) Invalid input!';
 | 
			
		||||
    else {
 | 
			
		||||
        let parsed;
 | 
			
		||||
        try {
 | 
			
		||||
            parsed = JSON.parse(json);
 | 
			
		||||
        } catch (error) {
 | 
			
		||||
            parsed = null;
 | 
			
		||||
        }
 | 
			
		||||
        if (parsed == null)
 | 
			
		||||
            result = 'B) Invalid input!';
 | 
			
		||||
        else if (parsed.rds == undefined || parsed.rds.prodSpec == undefined || parsed.rds.prodSpec.recipesAndPatterns == undefined)
 | 
			
		||||
            result = 'C) No Spec!';
 | 
			
		||||
        else {
 | 
			
		||||
            let toolMatches = [];
 | 
			
		||||
            for (let index = 0; index < parsed.rds.prodSpec.recipesAndPatterns.length; index++) {
 | 
			
		||||
                if (parsed.rds.prodSpec.recipesAndPatterns[index].tool === tool) {
 | 
			
		||||
                    toolMatches.push(parsed.rds.prodSpec.recipesAndPatterns[index]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (toolMatches == null || toolMatches.length === 0)
 | 
			
		||||
                result = 'Tool [' + tool + '] not found in OI API results!';
 | 
			
		||||
            else {
 | 
			
		||||
                let debug = '';
 | 
			
		||||
                let matches = 0;
 | 
			
		||||
                for (let index = 0; index < toolMatches.length; index++) {
 | 
			
		||||
                    debug += 'patternSize: ' + toolMatches[index].patternSize +
 | 
			
		||||
                             '; recipe: ' + toolMatches[index].recipe +
 | 
			
		||||
                             '; pattern: ' + toolMatches[index].pattern + ';~';
 | 
			
		||||
                    if (toolMatches[index].recipe.localeCompare(recipe, ['en-US'], { sensitivity: 'base' }) === 0) {
 | 
			
		||||
                        matches++;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (matches > 0)
 | 
			
		||||
                    result = '1';
 | 
			
		||||
                else
 | 
			
		||||
                    result = 'Value not matched~Run~patternSize: ' + patternSize + '; recipe: ' + recipe + '; pattern: ' + pattern + ';~API~' + debug;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
getValue('TENCOR', 0, 'AS_IFX100_ROTR', 'pattern', '{"rds":{"prodSpec":{"recipesAndPatterns":[]}}}');
 | 
			
		||||
 | 
			
		||||
let json;
 | 
			
		||||
let tool;
 | 
			
		||||
let recipe;
 | 
			
		||||
let pattern;
 | 
			
		||||
let patternSize;
 | 
			
		||||
 | 
			
		||||
tool = 'TENCOR'
 | 
			
		||||
patternSize = 9;
 | 
			
		||||
recipe = 'lr8in.SET';
 | 
			
		||||
pattern = '4_108IN.PAT';
 | 
			
		||||
json = '{"rds":{"prodSpec":{"recipesAndPatterns":[]}}}';
 | 
			
		||||
const testA = getValue(tool, patternSize, recipe, pattern, json);
 | 
			
		||||
if (testA !== '1')
 | 
			
		||||
    throw 'Test A failed: ' + testA;
 | 
			
		||||
tool = null;
 | 
			
		||||
const testB = getValue(tool, patternSize, recipe, pattern, json);
 | 
			
		||||
if (testB !== 'A) Invalid input!')
 | 
			
		||||
    throw 'Test L failed: ' + testB;
 | 
			
		||||
tool = '';
 | 
			
		||||
const testC = getValue(tool, patternSize, recipe, pattern, json);
 | 
			
		||||
if (testC !== 'A) Invalid input!')
 | 
			
		||||
    throw 'Test M failed: ' + testC;
 | 
			
		||||
patternSize = null;
 | 
			
		||||
const testD = getValue(tool, patternSize, recipe, pattern, json);
 | 
			
		||||
if (testD !== 'A) Invalid input!')
 | 
			
		||||
    throw 'Test J failed: ' + testD;
 | 
			
		||||
patternSize = '';
 | 
			
		||||
const testE = getValue(tool, patternSize, recipe, pattern, json);
 | 
			
		||||
if (testE !== 'A) Invalid input!')
 | 
			
		||||
    throw 'Test K failed: ' + testE;
 | 
			
		||||
recipe = null;
 | 
			
		||||
const testF = getValue(tool, patternSize, recipe, pattern, json);
 | 
			
		||||
if (testF !== 'A) Invalid input!')
 | 
			
		||||
    throw 'Test F failed: ' + testF;
 | 
			
		||||
recipe = '';
 | 
			
		||||
const testG = getValue(tool, patternSize, recipe, pattern, json);
 | 
			
		||||
if (testG !== 'A) Invalid input!')
 | 
			
		||||
    throw 'Test G failed: ' + testG;
 | 
			
		||||
pattern = null;
 | 
			
		||||
const testH = getValue(tool, patternSize, recipe, pattern, json);
 | 
			
		||||
if (testH !== 'A) Invalid input!')
 | 
			
		||||
    throw 'Test H failed: ' + testH;
 | 
			
		||||
pattern = '';
 | 
			
		||||
const testI = getValue(tool, patternSize, recipe, pattern, json);
 | 
			
		||||
if (testI !== 'A) Invalid input!')
 | 
			
		||||
    throw 'Test I failed: ' + testI;
 | 
			
		||||
json = '';
 | 
			
		||||
const testK = getValue(tool, patternSize, recipe, pattern, json);
 | 
			
		||||
if (testK !== 'A) Invalid input!')
 | 
			
		||||
    throw 'Test B failed: ' + testK;
 | 
			
		||||
json = 'invalid';
 | 
			
		||||
const testL = getValue(tool, patternSize, recipe, pattern, json);
 | 
			
		||||
if (testL !== 'B) Invalid input!')
 | 
			
		||||
    throw 'Test C failed: ' + testL;
 | 
			
		||||
json = '{"rds":{}}';
 | 
			
		||||
const testM = getValue(tool, patternSize, recipe, pattern, json);
 | 
			
		||||
if (testM !== 'C) No Spec!')
 | 
			
		||||
    throw 'Test D failed: ' + testM;
 | 
			
		||||
json = '{"rds":{"prodSpec":{"recipesAndPatterns":[]}}}';
 | 
			
		||||
const testN = getValue(tool, patternSize, recipe, pattern, json);
 | 
			
		||||
if (testN !== 'Tool [TENCOR] not found in OI API results!')
 | 
			
		||||
    throw 'Test E failed: ' + testN;
 | 
			
		||||
@ -203,8 +203,8 @@ public class TXT : LoggingUnitTesting, IDisposable
 | 
			
		||||
        StringBuilder results = new();
 | 
			
		||||
        (string cellInstanceName, string cellInstanceVersionName)[] collection = new (string, string)[]
 | 
			
		||||
        {
 | 
			
		||||
            new("SP101", "v2.59.0"),
 | 
			
		||||
            new("SP101-EQPT", "v2.59.0"),
 | 
			
		||||
            new("SP101", "v2.61.1"),
 | 
			
		||||
            new("SP101-EQPT", "v2.61.1"),
 | 
			
		||||
        };
 | 
			
		||||
        string production = "http://messa08ec.infineon.com:9003/CellInstanceServiceV2";
 | 
			
		||||
        Shared.PasteSpecialXml.EAF.XML.API.CellInstance.CellInstanceVersion cellInstanceVersion;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								Adaptation/_Tests/Static/wizard.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Adaptation/_Tests/Static/wizard.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
 | 
			
		||||
const rds = 'http://messa020ec.infineon.com:8080/api/oiWizard/materials/rds/1005602';
 | 
			
		||||
 | 
			
		||||
let workItemCollection = [];
 | 
			
		||||
 | 
			
		||||
await fetch(rds)
 | 
			
		||||
    .then((res) => res.text())
 | 
			
		||||
    .then((text) => {
 | 
			
		||||
        const records = JSON.parse(text);
 | 
			
		||||
        if (records != undefined) {
 | 
			
		||||
            if (records != undefined) {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
    .catch((e) => console.error(e));
 | 
			
		||||
 | 
			
		||||
workItemCollection.forEach(element => {
 | 
			
		||||
    console.log(`{"Id": "${element.Id}", "State": "${element.State}", "ClosedDate": "${element.ClosedDate}", "TargetDate": "${element.TargetDate}", "IterationPath": "${element.IterationPath}", "AssignedTo": "${element.AssignedTo}", "Title": "${element.Title}"},`);
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										76
									
								
								Adaptation/bun.lock
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								Adaptation/bun.lock
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,76 @@
 | 
			
		||||
{
 | 
			
		||||
  "lockfileVersion": 1,
 | 
			
		||||
  "workspaces": {
 | 
			
		||||
    "": {
 | 
			
		||||
      "name": "adaptation",
 | 
			
		||||
      "devDependencies": {
 | 
			
		||||
        "@types/bun": "latest",
 | 
			
		||||
        "axios": "^1.11.0",
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "typescript": "^5",
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  "packages": {
 | 
			
		||||
    "@types/bun": ["@types/bun@1.2.19", "", { "dependencies": { "bun-types": "1.2.19" } }, "sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg=="],
 | 
			
		||||
 | 
			
		||||
    "@types/node": ["@types/node@24.1.0", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w=="],
 | 
			
		||||
 | 
			
		||||
    "@types/react": ["@types/react@19.1.9", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA=="],
 | 
			
		||||
 | 
			
		||||
    "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="],
 | 
			
		||||
 | 
			
		||||
    "axios": ["axios@1.11.0", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA=="],
 | 
			
		||||
 | 
			
		||||
    "bun-types": ["bun-types@1.2.19", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-uAOTaZSPuYsWIXRpj7o56Let0g/wjihKCkeRqUBhlLVM/Bt+Fj9xTo+LhC1OV1XDaGkz4hNC80et5xgy+9KTHQ=="],
 | 
			
		||||
 | 
			
		||||
    "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="],
 | 
			
		||||
 | 
			
		||||
    "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="],
 | 
			
		||||
 | 
			
		||||
    "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
 | 
			
		||||
 | 
			
		||||
    "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="],
 | 
			
		||||
 | 
			
		||||
    "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="],
 | 
			
		||||
 | 
			
		||||
    "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="],
 | 
			
		||||
 | 
			
		||||
    "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="],
 | 
			
		||||
 | 
			
		||||
    "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="],
 | 
			
		||||
 | 
			
		||||
    "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="],
 | 
			
		||||
 | 
			
		||||
    "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="],
 | 
			
		||||
 | 
			
		||||
    "form-data": ["form-data@4.0.4", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow=="],
 | 
			
		||||
 | 
			
		||||
    "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
 | 
			
		||||
 | 
			
		||||
    "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="],
 | 
			
		||||
 | 
			
		||||
    "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="],
 | 
			
		||||
 | 
			
		||||
    "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="],
 | 
			
		||||
 | 
			
		||||
    "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="],
 | 
			
		||||
 | 
			
		||||
    "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="],
 | 
			
		||||
 | 
			
		||||
    "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="],
 | 
			
		||||
 | 
			
		||||
    "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="],
 | 
			
		||||
 | 
			
		||||
    "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="],
 | 
			
		||||
 | 
			
		||||
    "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="],
 | 
			
		||||
 | 
			
		||||
    "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="],
 | 
			
		||||
 | 
			
		||||
    "typescript": ["typescript@5.9.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A=="],
 | 
			
		||||
 | 
			
		||||
    "undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="],
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,18 +1,29 @@
 | 
			
		||||
{
 | 
			
		||||
    "scripts": {
 | 
			
		||||
        "AA-CreateSelfDescription.Staging.v2_47_1-SP101_EQPT": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1 & ClassName~SP101_EQPT\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
        "BA-CreateSelfDescription.Staging.v2_47_1-SP101": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1 & ClassName~SP101\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
        "CA-CreateSelfDescription.Staging.v2_47_1-MET08DDUPSP1TBI": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
        "DA-CreateSelfDescription.Staging.v2_47_1": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
        "EA-Extract.Staging.v2_47_1-SP101_EQPT-Staging__v2_47_1__SP101_EQPT__DownloadRsMFile637953072332628623__Normal": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~SP101_EQPT & Name~Staging__v2_47_1__SP101_EQPT__DownloadRsMFile637953072332628623__Normal\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
        "FA-Extract.Staging.v2_47_1-SP101-Staging__v2_47_1__SP101__txt637955319879801344__Normal": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~SP101 & Name~Staging__v2_47_1__SP101__txt637955319879801344__Normal\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
        "GA-Extract.Staging.v2_47_1-MET08DDUPSP1TBI-Staging__v2_47_1__MET08DDUPSP1TBI__MoveMatchingFiles637955319879801344__Normal": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI & Name~Staging__v2_47_1__MET08DDUPSP1TBI__MoveMatchingFiles637955319879801344__Normal\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
        "HA-Extract.Staging.v2_47_1-SP101-Staging__v2_47_1__SP101__pcl637812984345592512__MinFileLength": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~SP101 & Name~Staging__v2_47_1__SP101__pcl637812984345592512__MinFileLength\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
        "HB-Extract.Staging.v2_47_1-MET08DDUPSP1TBI-Staging__v2_47_1__MET08DDUPSP1TBI__OpenInsight638052814829645888__IqsSql": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI & Name~Staging__v2_47_1__MET08DDUPSP1TBI__OpenInsight638052814829645888__IqsSql\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
        "IA-Extract.Staging.v2_47_1-MET08DDUPSP1TBI-Staging__v2_47_1__MET08DDUPSP1TBI__TIBCO": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI & Name~Staging__v2_47_1__MET08DDUPSP1TBI__TIBCO\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
        "Alpha": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
 | 
			
		||||
        "kanbn.board": "kanbn board",
 | 
			
		||||
        "kanbn.board.json": "kanbn board -j > .kanbn/board.json",
 | 
			
		||||
        "garbage-collect": "git gc"
 | 
			
		||||
    }
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@types/bun": "latest",
 | 
			
		||||
    "axios": "^1.11.0"
 | 
			
		||||
  },
 | 
			
		||||
  "module": "index.ts",
 | 
			
		||||
  "name": "adaptation",
 | 
			
		||||
  "peerDependencies": {
 | 
			
		||||
    "typescript": "^5"
 | 
			
		||||
  },
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "AA-CreateSelfDescription.Staging.v2_47_1-SP101_EQPT": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1 & ClassName~SP101_EQPT\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
    "Alpha": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
 | 
			
		||||
    "BA-CreateSelfDescription.Staging.v2_47_1-SP101": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1 & ClassName~SP101\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
    "CA-CreateSelfDescription.Staging.v2_47_1-MET08DDUPSP1TBI": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
    "DA-CreateSelfDescription.Staging.v2_47_1": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
    "EA-Extract.Staging.v2_47_1-SP101_EQPT-Staging__v2_47_1__SP101_EQPT__DownloadRsMFile637953072332628623__Normal": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~SP101_EQPT & Name~Staging__v2_47_1__SP101_EQPT__DownloadRsMFile637953072332628623__Normal\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
    "FA-Extract.Staging.v2_47_1-SP101-Staging__v2_47_1__SP101__txt637955319879801344__Normal": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~SP101 & Name~Staging__v2_47_1__SP101__txt637955319879801344__Normal\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
    "GA-Extract.Staging.v2_47_1-MET08DDUPSP1TBI-Staging__v2_47_1__MET08DDUPSP1TBI__MoveMatchingFiles637955319879801344__Normal": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI & Name~Staging__v2_47_1__MET08DDUPSP1TBI__MoveMatchingFiles637955319879801344__Normal\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
    "garbage-collect": "git gc",
 | 
			
		||||
    "HA-Extract.Staging.v2_47_1-SP101-Staging__v2_47_1__SP101__pcl637812984345592512__MinFileLength": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~SP101 & Name~Staging__v2_47_1__SP101__pcl637812984345592512__MinFileLength\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
    "HB-Extract.Staging.v2_47_1-MET08DDUPSP1TBI-Staging__v2_47_1__MET08DDUPSP1TBI__OpenInsight638052814829645888__IqsSql": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI & Name~Staging__v2_47_1__MET08DDUPSP1TBI__OpenInsight638052814829645888__IqsSql\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
    "IA-Extract.Staging.v2_47_1-MET08DDUPSP1TBI-Staging__v2_47_1__MET08DDUPSP1TBI__TIBCO": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI & Name~Staging__v2_47_1__MET08DDUPSP1TBI__TIBCO\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")",
 | 
			
		||||
    "kanbn.board": "kanbn board",
 | 
			
		||||
    "kanbn.board.json": "kanbn board -j > .kanbn/board.json"
 | 
			
		||||
  },
 | 
			
		||||
  "type": "module"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										29
									
								
								Adaptation/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								Adaptation/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,29 @@
 | 
			
		||||
{
 | 
			
		||||
  "compilerOptions": {
 | 
			
		||||
    // Environment setup & latest features
 | 
			
		||||
    "lib": ["ESNext"],
 | 
			
		||||
    "target": "ESNext",
 | 
			
		||||
    "module": "Preserve",
 | 
			
		||||
    "moduleDetection": "force",
 | 
			
		||||
    "jsx": "react-jsx",
 | 
			
		||||
    "allowJs": true,
 | 
			
		||||
 | 
			
		||||
    // Bundler mode
 | 
			
		||||
    "moduleResolution": "bundler",
 | 
			
		||||
    "allowImportingTsExtensions": true,
 | 
			
		||||
    "verbatimModuleSyntax": true,
 | 
			
		||||
    "noEmit": true,
 | 
			
		||||
 | 
			
		||||
    // Best practices
 | 
			
		||||
    "strict": true,
 | 
			
		||||
    "skipLibCheck": true,
 | 
			
		||||
    "noFallthroughCasesInSwitch": true,
 | 
			
		||||
    "noUncheckedIndexedAccess": true,
 | 
			
		||||
    "noImplicitOverride": true,
 | 
			
		||||
 | 
			
		||||
    // Some stricter flags (disabled by default)
 | 
			
		||||
    "noUnusedLocals": false,
 | 
			
		||||
    "noUnusedParameters": false,
 | 
			
		||||
    "noPropertyAccessFromIndexSignature": false
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -196,7 +196,7 @@
 | 
			
		||||
      <Version>7.2.4630.5</Version>
 | 
			
		||||
    </PackageReference>
 | 
			
		||||
    <PackageReference Include="Infineon.EAF.Runtime">
 | 
			
		||||
      <Version>2.59.0</Version>
 | 
			
		||||
      <Version>2.61.1</Version>
 | 
			
		||||
    </PackageReference>
 | 
			
		||||
    <PackageReference Include="Pdfbox">
 | 
			
		||||
      <Version>1.1.1</Version>
 | 
			
		||||
 | 
			
		||||
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 | 
			
		||||
// You can specify all the values or you can default the Build and Revision Numbers
 | 
			
		||||
// by using the '*' as shown below:
 | 
			
		||||
// [assembly: AssemblyVersion("1.0.*")]
 | 
			
		||||
[assembly: AssemblyVersion("2.59.0.0")]
 | 
			
		||||
[assembly: AssemblyFileVersion("2.59.0.0")]
 | 
			
		||||
[assembly: AssemblyVersion("2.61.1.0")]
 | 
			
		||||
[assembly: AssemblyFileVersion("2.61.1.0")]
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user