From 967c918a0605517c6fafc9a44cf74c7f531a55d4 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Tue, 11 Oct 2022 11:23:22 -0700 Subject: [PATCH] MET08DDUPSFS6420 - v2.47.0 - 1t --- Adaptation/FileHandlers/pcl/Descriptor.cs | 6 +- Adaptation/FileHandlers/pcl/ProcessData.cs | 122 ++++++++++++++++----- Adaptation/_Tests/Static/pcl.cs | 72 ++++++++++-- MET08DDUPSFS6420.csproj | 2 +- Properties/AssemblyInfo.cs | 4 +- 5 files changed, 165 insertions(+), 41 deletions(-) diff --git a/Adaptation/FileHandlers/pcl/Descriptor.cs b/Adaptation/FileHandlers/pcl/Descriptor.cs index a5d9037..c2efef6 100644 --- a/Adaptation/FileHandlers/pcl/Descriptor.cs +++ b/Adaptation/FileHandlers/pcl/Descriptor.cs @@ -4,18 +4,22 @@ public class Descriptor { public string Employee { get; private set; } + public string Layer { get; private set; } public string Lot { get; private set; } public string PSN { get; private set; } public string RDS { get; private set; } public string Reactor { get; private set; } + public string Zone { get; private set; } - public Descriptor(string employee, string lot, string psn, string rds, string reactor) + public Descriptor(string employee, string layer, string lot, string psn, string rds, string reactor, string zone) { Employee = employee; + Layer = layer; Lot = lot; PSN = psn; RDS = rds; Reactor = reactor; + Zone = zone; } } \ No newline at end of file diff --git a/Adaptation/FileHandlers/pcl/ProcessData.cs b/Adaptation/FileHandlers/pcl/ProcessData.cs index c0990cb..1530fa1 100644 --- a/Adaptation/FileHandlers/pcl/ProcessData.cs +++ b/Adaptation/FileHandlers/pcl/ProcessData.cs @@ -245,57 +245,123 @@ public class ProcessData : IProcessData private string PeekNextLine() { int j = _I; - string toEol = GetToEOL(); + string result = GetToEOL(); _I = j; - return toEol; + return result; + } + + private static (string, string) GetReactorAndRDS(string defaultReactor, string defaultRDS, string text, string formattedText, string[] segments) + { + string rds; + string reactor; + if (string.IsNullOrEmpty(text) || segments.Length == 0 || string.IsNullOrEmpty(formattedText)) + reactor = defaultReactor; + else + reactor = segments[0]; + if (segments.Length <= 1 || !int.TryParse(segments[1], out int rdsValue) || rdsValue < 99) + rds = defaultRDS; + else + rds = segments[1]; + if (reactor.Length > 3) + { + rds = reactor; + reactor = defaultReactor; + } + return new(reactor, rds); + } + + private static (string, string) GetLayerAndPSN(string defaultLayer, string defaultPSN, string[] segments) + { + string psn; + string layer; + if (segments.Length <= 2) + { + psn = defaultPSN; + layer = defaultLayer; + } + else + { + string[] segmentsB = segments[2].Split('.'); + psn = segmentsB[0]; + if (segmentsB.Length <= 1) + layer = defaultLayer; + else + { + layer = segmentsB[1]; + if (layer.Length > 1 && layer[0] == '0') + layer = layer.Substring(1); + } + } + return (layer, psn); + } + + private static string GetZone(string[] segments) + { + string result; + if (segments.Length <= 3) + result = string.Empty; + else + { + result = segments[3]; + if (result.Length > 1 && result[0] == '0') + result = result.Substring(1); + } + return result; } public static Descriptor GetDescriptor(string text) { Descriptor result; string lot; - string rds; string psn; + string rds; + string zone; + string layer; string reactor; string employee; - const string defaultPSN = "0000"; - const string defaultReactor = "00"; - const string defaultRDS = "000000"; - if (text.Length is 2 or 3) + string defaultPSN = string.Empty; + string defaultRDS = string.Empty; + string defaultZone = string.Empty; + string defaultLayer = string.Empty; + string defaultReactor = string.Empty; + string defaultEmployee = string.Empty; + if (string.IsNullOrEmpty(text) || (text.Length is 2 or 3 && Regex.IsMatch(text, "^[a-zA-z]{2,3}"))) { lot = text; employee = text; - rds = defaultRDS; psn = defaultPSN; + rds = defaultRDS; + zone = defaultZone; + layer = defaultLayer; reactor = defaultReactor; } + else if (Regex.IsMatch(text, @"^[0-9]{2}[.][0-9]{1}[.]?[0-9]{0,1}")) + { + string[] segments = text.Split('.'); + lot = text; + psn = defaultPSN; + rds = defaultRDS; + layer = segments[1]; + reactor = segments[0]; + employee = defaultEmployee; + if (segments.Length <= 2) + zone = defaultZone; + else + zone = segments[2]; + } else { - employee = string.Empty; // Remove illegal characters \/:*?"<>| found in the Lot. lot = Regex.Replace(text, @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]", "_").Split('\r')[0].Split('\n')[0]; - if (lot.StartsWith("1T") || lot.StartsWith("1t")) + if (lot.Length > 2 && lot[0] == '1' && (lot[1] == 'T' || lot[1] == 't')) lot = lot.Substring(2); string[] segments = lot.Split('-'); - if (segments.Length == 0) - reactor = defaultReactor; - else - reactor = segments[0]; - if (segments.Length <= 1) - rds = defaultRDS; - else - rds = segments[1]; - if (reactor.Length > 3) - { - rds = reactor; - reactor = defaultReactor; - } - if (segments.Length <= 2) - psn = defaultPSN; - else - psn = segments[2].Split('.')[0]; + (reactor, rds) = GetReactorAndRDS(defaultReactor, defaultRDS, text, lot, segments); + (layer, psn) = GetLayerAndPSN(defaultLayer, defaultPSN, segments); + zone = GetZone(segments); + employee = defaultEmployee; } - result = new(employee, lot, psn, rds, reactor); + result = new(employee, layer, lot, psn, rds, reactor, zone); return result; } diff --git a/Adaptation/_Tests/Static/pcl.cs b/Adaptation/_Tests/Static/pcl.cs index 3dafe2f..4b11598 100644 --- a/Adaptation/_Tests/Static/pcl.cs +++ b/Adaptation/_Tests/Static/pcl.cs @@ -48,29 +48,83 @@ public class PCL : LoggingUnitTesting, IDisposable FileHandlers.pcl.Descriptor descriptor; MethodBase methodBase = new StackFrame().GetMethod(); LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); + descriptor = FileHandlers.pcl.ProcessData.GetDescriptor(string.Empty); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Reactor)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.RDS)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.PSN)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Layer)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Zone)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Employee)); descriptor = FileHandlers.pcl.ProcessData.GetDescriptor("12-123456-1234"); Assert.IsTrue(descriptor.Reactor is "12"); Assert.IsTrue(descriptor.RDS is "123456"); Assert.IsTrue(descriptor.PSN is "1234"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Layer)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Zone)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Employee)); descriptor = FileHandlers.pcl.ProcessData.GetDescriptor("123456"); - Assert.IsTrue(descriptor.Reactor is "00"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Reactor)); Assert.IsTrue(descriptor.RDS is "123456"); - Assert.IsTrue(descriptor.PSN is "0000"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.PSN)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Layer)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Zone)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Employee)); descriptor = FileHandlers.pcl.ProcessData.GetDescriptor("1T123456"); - Assert.IsTrue(descriptor.Reactor is "00"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Reactor)); Assert.IsTrue(descriptor.RDS is "123456"); - Assert.IsTrue(descriptor.PSN is "0000"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.PSN)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Layer)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Zone)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Employee)); descriptor = FileHandlers.pcl.ProcessData.GetDescriptor("MP"); - Assert.IsTrue(descriptor.Reactor is "00"); - Assert.IsTrue(descriptor.RDS is "000000"); - Assert.IsTrue(descriptor.PSN is "0000"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Reactor)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.RDS)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.PSN)); Assert.IsTrue(descriptor.Employee is "MP"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Layer)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Zone)); descriptor = FileHandlers.pcl.ProcessData.GetDescriptor("12-123456-1234.2-1"); Assert.IsTrue(descriptor.Reactor is "12"); Assert.IsTrue(descriptor.RDS is "123456"); Assert.IsTrue(descriptor.PSN is "1234"); - // Assert.IsTrue(descriptor.Layer is "2"); - // Assert.IsTrue(descriptor.Zone is "1"); + Assert.IsTrue(descriptor.Layer is "2"); + Assert.IsTrue(descriptor.Zone is "1"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Employee)); + descriptor = FileHandlers.pcl.ProcessData.GetDescriptor("12-123456-1234.02-1"); + Assert.IsTrue(descriptor.Reactor is "12"); + Assert.IsTrue(descriptor.RDS is "123456"); + Assert.IsTrue(descriptor.PSN is "1234"); + Assert.IsTrue(descriptor.Layer is "2"); + Assert.IsTrue(descriptor.Zone is "1"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Employee)); + descriptor = FileHandlers.pcl.ProcessData.GetDescriptor("20"); + Assert.IsTrue(descriptor.Reactor is "20"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.RDS)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.PSN)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Layer)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Zone)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Employee)); + descriptor = FileHandlers.pcl.ProcessData.GetDescriptor("20.2"); + Assert.IsTrue(descriptor.Reactor is "20"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.RDS)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.PSN)); + Assert.IsTrue(descriptor.Layer is "2"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Zone)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Employee)); + descriptor = FileHandlers.pcl.ProcessData.GetDescriptor("20.2.1"); + Assert.IsTrue(descriptor.Layer is "2"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.PSN)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.RDS)); + Assert.IsTrue(descriptor.Reactor is "20"); + Assert.IsTrue(descriptor.Zone is "1"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Employee)); + descriptor = FileHandlers.pcl.ProcessData.GetDescriptor("20.1.1"); + Assert.IsTrue(descriptor.Layer is "1"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.PSN)); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.RDS)); + Assert.IsTrue(descriptor.Reactor is "20"); + Assert.IsTrue(descriptor.Zone is "1"); + Assert.IsTrue(string.IsNullOrEmpty(descriptor.Employee)); LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); } diff --git a/MET08DDUPSFS6420.csproj b/MET08DDUPSFS6420.csproj index a7b4ffc..e82d1da 100644 --- a/MET08DDUPSFS6420.csproj +++ b/MET08DDUPSFS6420.csproj @@ -169,7 +169,7 @@ 7.2.4630.5 - 2.43.0 + 2.47.0 1.1.1 diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 6ee6d30..9f9cbb9 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -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.43.0.0")] -[assembly: AssemblyFileVersion("2.43.0.0")] +[assembly: AssemblyVersion("2.47.0.0")] +[assembly: AssemblyFileVersion("2.47.0.0")]