diff --git a/Adaptation/.vscode/format-report.json b/Adaptation/.vscode/format-report.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/Adaptation/.vscode/format-report.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/Adaptation/.vscode/settings.json b/Adaptation/.vscode/settings.json new file mode 100644 index 0000000..4039abb --- /dev/null +++ b/Adaptation/.vscode/settings.json @@ -0,0 +1,35 @@ +{ + "cSpell.words": [ + "DDUPSP", + "EQPT", + "gpcl", + "ISMTP", + "JOBID", + "linc", + "NOPAUSE", + "PDFC", + "PDSF", + "PPID", + "TIBCO" + ], + "workbench.colorCustomizations": { + "activityBar.activeBackground": "#50b98e", + "activityBar.activeBorder": "#f0e8f6", + "activityBar.background": "#50b98e", + "activityBar.foreground": "#15202b", + "activityBar.inactiveForeground": "#15202b99", + "activityBarBadge.background": "#f0e8f6", + "activityBarBadge.foreground": "#15202b", + "sash.hoverBorder": "#50b98e", + "statusBar.background": "#3d9973", + "statusBar.foreground": "#e7e7e7", + "statusBarItem.hoverBackground": "#50b98e", + "statusBarItem.remoteBackground": "#3d9973", + "statusBarItem.remoteForeground": "#e7e7e7", + "titleBar.activeBackground": "#3d9973", + "titleBar.activeForeground": "#e7e7e7", + "titleBar.inactiveBackground": "#3d997399", + "titleBar.inactiveForeground": "#e7e7e799" + }, + "peacock.color": "#3d9973" +} \ No newline at end of file diff --git a/Adaptation/Eaf/Core/AutoGenerated/BackboneComponent.cs b/Adaptation/Eaf/Core/AutoGenerated/BackboneComponent.cs index 4b83dcf..06ec233 100644 --- a/Adaptation/Eaf/Core/AutoGenerated/BackboneComponent.cs +++ b/Adaptation/Eaf/Core/AutoGenerated/BackboneComponent.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.Core +namespace Adaptation.Eaf.Core; + +public class BackboneComponent { - public class BackboneComponent - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/Core/AutoGenerated/BackboneStatusCache.cs b/Adaptation/Eaf/Core/AutoGenerated/BackboneStatusCache.cs index 5da2cda..69d3b7a 100644 --- a/Adaptation/Eaf/Core/AutoGenerated/BackboneStatusCache.cs +++ b/Adaptation/Eaf/Core/AutoGenerated/BackboneStatusCache.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.Core +namespace Adaptation.Eaf.Core; + +public class BackboneStatusCache { - public class BackboneStatusCache - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/Core/AutoGenerated/ILoggingSetupManager.cs b/Adaptation/Eaf/Core/AutoGenerated/ILoggingSetupManager.cs index ba939e7..62e12d8 100644 --- a/Adaptation/Eaf/Core/AutoGenerated/ILoggingSetupManager.cs +++ b/Adaptation/Eaf/Core/AutoGenerated/ILoggingSetupManager.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.Core +namespace Adaptation.Eaf.Core; + +public interface ILoggingSetupManager { - public interface ILoggingSetupManager - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/Core/AutoGenerated/StatusItem.cs b/Adaptation/Eaf/Core/AutoGenerated/StatusItem.cs index 4dc8f3b..f981297 100644 --- a/Adaptation/Eaf/Core/AutoGenerated/StatusItem.cs +++ b/Adaptation/Eaf/Core/AutoGenerated/StatusItem.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.Core +namespace Adaptation.Eaf.Core; + +public class StatusItem { - public class StatusItem - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/Core/Backbone.cs b/Adaptation/Eaf/Core/Backbone.cs index d4b6f03..f39f081 100644 --- a/Adaptation/Eaf/Core/Backbone.cs +++ b/Adaptation/Eaf/Core/Backbone.cs @@ -2,47 +2,52 @@ using System; using System.Collections.Generic; -namespace Adaptation.Eaf.Core +namespace Adaptation.Eaf.Core; + +public class Backbone { - public class Backbone - { - public const string STATE_ERROR = "Error"; - public const string STATE_OFFLINE = "Offline"; - public const string STATE_RUNNING = "Running"; - public const string STATE_SHUTDOWN = "Shutting Down"; - public const string STATE_STARTING = "Starting"; - protected Backbone() { } +#pragma warning disable CA1822 +#pragma warning disable CA2254 +#pragma warning disable IDE0060 - [NotNull] - public static Backbone Instance { get; } - [NotNull] - public ILoggingSetupManager LoggingConfigurationManager { get; set; } - public BackboneStatusCache Status { get; } - public bool IsAutomatedRestartActive { get; } - public bool IsReadyForRestart { get; } - public string StartTime { get; } - public string State { get; } - public string Name { get; } - public string ConfigurationServiceAddress { get; } - public string CellName { get; } - protected bool IsInitialized { get; set; } - protected Dictionary BackboneComponents { get; } + public const string STATE_ERROR = "Error"; + public const string STATE_OFFLINE = "Offline"; + public const string STATE_RUNNING = "Running"; + public const string STATE_SHUTDOWN = "Shutting Down"; + public const string STATE_STARTING = "Starting"; + + protected Backbone() { } + + [NotNull] + public static Backbone Instance { get; } + [NotNull] + public ILoggingSetupManager LoggingConfigurationManager { get; set; } + public BackboneStatusCache Status { get; } + public bool IsAutomatedRestartActive { get; } + public bool IsReadyForRestart { get; } + public string StartTime { get; } + public string State { get; } + public string Name { get; } + public string ConfigurationServiceAddress { get; } + public string CellName { get; } + protected bool IsInitialized { get; set; } + protected Dictionary BackboneComponents { get; } + + public void AddBackboneComponent(BackboneComponent backboneComponent) { } + public bool ContainsBackboneComponent(string id) => throw new NotImplementedException(); + [Obsolete("Use the capabilities exposed via the Status property -> GetAll. Will be removed with next major release.")] + public List GetAllStatuses() => throw new NotImplementedException(); + public BackboneComponent GetBackboneComponentById(string id) => throw new NotImplementedException(); + public List GetBackboneComponentsOfType() => throw new NotImplementedException(); + public List GetBackboneComponentsOfType(Type type) => throw new NotImplementedException(); + public void RegisterSubprocess(int pid) { } + [Obsolete("Use the capabilities exposed via the Status property -> SetValue. Will be removed with next major release.")] + public void SetStatus(string statusName, string statusValue) { } + [Obsolete("Use the capabilities exposed via the Status property -> SetValue. Will be removed with next major release.")] + public void SetStatus(BackboneComponent source, string statusName, string statusValue) { } + protected void CloseConnectionOfComponents(List components) { } + protected virtual void StopAllComponents() { } + protected void StopComponents(List components) { } - public void AddBackboneComponent(BackboneComponent backboneComponent) { } - public bool ContainsBackboneComponent(string id) { throw new NotImplementedException(); } - [Obsolete("Use the capabilities exposed via the Status property -> GetAll. Will be removed with next major release.")] - public List GetAllStatuses() { throw new NotImplementedException(); } - public BackboneComponent GetBackboneComponentById(string id) { throw new NotImplementedException(); } - public List GetBackboneComponentsOfType() { throw new NotImplementedException(); } - public List GetBackboneComponentsOfType(Type type) { throw new NotImplementedException(); } - public void RegisterSubprocess(int pid) { } - [Obsolete("Use the capabilities exposed via the Status property -> SetValue. Will be removed with next major release.")] - public void SetStatus(string statusName, string statusValue) { } - [Obsolete("Use the capabilities exposed via the Status property -> SetValue. Will be removed with next major release.")] - public void SetStatus(BackboneComponent source, string statusName, string statusValue) { } - protected void CloseConnectionOfComponents(List components) { } - protected virtual void StopAllComponents() { } - protected void StopComponents(List components) { } - } } \ No newline at end of file diff --git a/Adaptation/Eaf/Core/Smtp/EmailMessage.cs b/Adaptation/Eaf/Core/Smtp/EmailMessage.cs index f0c2baf..e16b8aa 100644 --- a/Adaptation/Eaf/Core/Smtp/EmailMessage.cs +++ b/Adaptation/Eaf/Core/Smtp/EmailMessage.cs @@ -1,24 +1,25 @@ using System; -namespace Adaptation.Eaf.Core.Smtp +namespace Adaptation.Eaf.Core.Smtp; + +public class EmailMessage { - public class EmailMessage - { - public EmailMessage() { } - public EmailMessage(string subject, string body, MailPriority priority = MailPriority.Normal) { } +#pragma warning disable CA2254 +#pragma warning disable IDE0060 - public string Body { get; } - public MailPriority Priority { get; } - public string Subject { get; } + public EmailMessage() { } + public EmailMessage(string subject, string body, MailPriority priority = MailPriority.Normal) { } - public EmailMessage PriorityHigh() { throw new NotImplementedException(); } - public EmailMessage PriorityLow() { throw new NotImplementedException(); } - public EmailMessage PriorityNormal() { throw new NotImplementedException(); } - public EmailMessage SetBody(string body) { throw new NotImplementedException(); } - public EmailMessage SetPriority(MailPriority priority) { throw new NotImplementedException(); } - public EmailMessage SetSubject(string subject) { throw new NotImplementedException(); } + public string Body { get; } + public MailPriority Priority { get; } + public string Subject { get; } - } + public EmailMessage PriorityHigh() => throw new NotImplementedException(); + public EmailMessage PriorityLow() => throw new NotImplementedException(); + public EmailMessage PriorityNormal() => throw new NotImplementedException(); + public EmailMessage SetBody(string body) => throw new NotImplementedException(); + public EmailMessage SetPriority(MailPriority priority) => throw new NotImplementedException(); + public EmailMessage SetSubject(string subject) => throw new NotImplementedException(); } \ No newline at end of file diff --git a/Adaptation/Eaf/Core/Smtp/ISmtp.cs b/Adaptation/Eaf/Core/Smtp/ISmtp.cs index 3a12278..0446065 100644 --- a/Adaptation/Eaf/Core/Smtp/ISmtp.cs +++ b/Adaptation/Eaf/Core/Smtp/ISmtp.cs @@ -1,9 +1,6 @@ -namespace Adaptation.Eaf.Core.Smtp +namespace Adaptation.Eaf.Core.Smtp; + +public interface ISmtp { - - public interface ISmtp - { - void Send(EmailMessage message); - } - + void Send(EmailMessage message); } \ No newline at end of file diff --git a/Adaptation/Eaf/Core/Smtp/MailPriority.cs b/Adaptation/Eaf/Core/Smtp/MailPriority.cs index 18ee1af..b59d146 100644 --- a/Adaptation/Eaf/Core/Smtp/MailPriority.cs +++ b/Adaptation/Eaf/Core/Smtp/MailPriority.cs @@ -1,11 +1,8 @@ -namespace Adaptation.Eaf.Core.Smtp +namespace Adaptation.Eaf.Core.Smtp; + +public enum MailPriority { - - public enum MailPriority - { - Low = 0, - Normal = 1, - High = 2 - } - + Low = 0, + Normal = 1, + High = 2 } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ChangeDataCollectionHandler.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ChangeDataCollectionHandler.cs index 096cfd8..80e911e 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ChangeDataCollectionHandler.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ChangeDataCollectionHandler.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public class ChangeDataCollectionHandler { - public class ChangeDataCollectionHandler - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/DataCollectionRequest.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/DataCollectionRequest.cs index f085c14..d49c557 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/DataCollectionRequest.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/DataCollectionRequest.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public class DataCollectionRequest { - public class DataCollectionRequest - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentEvent.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentEvent.cs index fd97bcb..9d45cb1 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentEvent.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentEvent.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public class EquipmentEvent { - public class EquipmentEvent - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentException.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentException.cs index 1a3babd..c0cf1c3 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentException.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentException.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public class EquipmentException { - public class EquipmentException - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentSelfDescription.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentSelfDescription.cs index 3697004..92d7722 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentSelfDescription.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentSelfDescription.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public class EquipmentSelfDescription { - public class EquipmentSelfDescription - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/GetParameterValuesHandler.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/GetParameterValuesHandler.cs index bc26e0f..dca26fc 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/GetParameterValuesHandler.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/GetParameterValuesHandler.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public class GetParameterValuesHandler { - public class GetParameterValuesHandler - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IConnectionControl.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IConnectionControl.cs index a9e800c..7481501 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IConnectionControl.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IConnectionControl.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public interface IConnectionControl { - public interface IConnectionControl - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IDataTracingHandler.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IDataTracingHandler.cs index 3b98f85..cf0602a 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IDataTracingHandler.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IDataTracingHandler.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public interface IDataTracingHandler { - public interface IDataTracingHandler - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentCommandService.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentCommandService.cs index 2a54add..9f6000e 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentCommandService.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentCommandService.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public interface IEquipmentCommandService { - public interface IEquipmentCommandService - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentControl.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentControl.cs index a119d2b..8b4f8d1 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentControl.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentControl.cs @@ -1,16 +1,15 @@ using Adaptation.PeerGroup.GCL.Annotations; -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public interface IEquipmentControl : IPackageSource { - public interface IEquipmentControl : IPackageSource - { - [NotNull] - IEquipmentSelfDescriptionBuilder SelfDescriptionBuilder { get; } - [NotNull] - IEquipmentDataCollection DataCollection { get; } - [NotNull] - IEquipmentCommandService Commands { get; } - [NotNull] - IConnectionControl Connection { get; } - } + [NotNull] + IEquipmentSelfDescriptionBuilder SelfDescriptionBuilder { get; } + [NotNull] + IEquipmentDataCollection DataCollection { get; } + [NotNull] + IEquipmentCommandService Commands { get; } + [NotNull] + IConnectionControl Connection { get; } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentSelfDescriptionBuilder.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentSelfDescriptionBuilder.cs index b583e8c..f34413f 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentSelfDescriptionBuilder.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentSelfDescriptionBuilder.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public interface IEquipmentSelfDescriptionBuilder { - public interface IEquipmentSelfDescriptionBuilder - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IPackage.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IPackage.cs index 67ef808..eef26c3 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IPackage.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IPackage.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public interface IPackage { - public interface IPackage - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ISelfDescriptionLookup.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ISelfDescriptionLookup.cs index 57b3215..be924e9 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ISelfDescriptionLookup.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ISelfDescriptionLookup.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public interface ISelfDescriptionLookup { - public interface ISelfDescriptionLookup - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IVirtualParameterValuesHandler.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IVirtualParameterValuesHandler.cs index 64e4621..e7a76fc 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IVirtualParameterValuesHandler.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IVirtualParameterValuesHandler.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public interface IVirtualParameterValuesHandler { - public interface IVirtualParameterValuesHandler - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/SetParameterValuesHandler.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/SetParameterValuesHandler.cs index 200fb13..2615f40 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/SetParameterValuesHandler.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/SetParameterValuesHandler.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public class SetParameterValuesHandler { - public class SetParameterValuesHandler - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/TraceRequest.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/TraceRequest.cs index 84511e9..8d26e7b 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/TraceRequest.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/TraceRequest.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public class TraceRequest { - public class TraceRequest - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/IEquipmentDataCollection.cs b/Adaptation/Eaf/EquipmentCore/Control/IEquipmentDataCollection.cs index 7a704b5..d0980ee 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/IEquipmentDataCollection.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/IEquipmentDataCollection.cs @@ -3,37 +3,36 @@ using Adaptation.Eaf.EquipmentCore.SelfDescription.ElementDescription; using System; using System.Collections.Generic; -namespace Adaptation.Eaf.EquipmentCore.Control -{ - public interface IEquipmentDataCollection - { - IVirtualParameterValuesHandler VirtualParameterValuesHandler { get; } - ISelfDescriptionLookup SelfDescriptionLookup { get; } - EquipmentSelfDescription SelfDescription { get; } - IEnumerable ActiveRequests { get; } - IDataTracingHandler DataTracingHandler { get; } +namespace Adaptation.Eaf.EquipmentCore.Control; - ParameterValue CreateParameterValue(EquipmentParameter parameter, object value); - void NotifyDataTracingAvailable(bool isAvailable); - void RegisterChangeDataCollectionHandler(ChangeDataCollectionHandler handler); - void RegisterDataTracingHandler(IDataTracingHandler handler); - void RegisterGetParameterValuesHandler(GetParameterValuesHandler handler); - void RegisterSetParameterValuesHandler(SetParameterValuesHandler handler); - void TriggerDeactivate(DataCollectionRequest deactivateRequest); - void TriggerEvent(EquipmentEvent equipmentEvent, IEnumerable parameters); - void TriggerEvent(EquipmentEvent equipmentEvent, IEnumerable parameters, IPackage sourcePackage); - void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters); - void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters, IPackage sourcePackage); - void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride); - void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride, IPackage sourcePackage); - void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride, IPackage sourcePackage); - void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride); - void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters, IPackage sourcePackage); - void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters); - void TriggerPerformanceRestored(); - void TriggerPerformanceWarning(); - void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable parameters); - void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable parameters, IPackage sourcePackage); - void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable parameters, DateTime equipmentTimeStamp); - } +public interface IEquipmentDataCollection +{ + IVirtualParameterValuesHandler VirtualParameterValuesHandler { get; } + ISelfDescriptionLookup SelfDescriptionLookup { get; } + EquipmentSelfDescription SelfDescription { get; } + IEnumerable ActiveRequests { get; } + IDataTracingHandler DataTracingHandler { get; } + + ParameterValue CreateParameterValue(EquipmentParameter parameter, object value); + void NotifyDataTracingAvailable(bool isAvailable); + void RegisterChangeDataCollectionHandler(ChangeDataCollectionHandler handler); + void RegisterDataTracingHandler(IDataTracingHandler handler); + void RegisterGetParameterValuesHandler(GetParameterValuesHandler handler); + void RegisterSetParameterValuesHandler(SetParameterValuesHandler handler); + void TriggerDeactivate(DataCollectionRequest deactivateRequest); + void TriggerEvent(EquipmentEvent equipmentEvent, IEnumerable parameters); + void TriggerEvent(EquipmentEvent equipmentEvent, IEnumerable parameters, IPackage sourcePackage); + void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters); + void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters, IPackage sourcePackage); + void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride); + void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride, IPackage sourcePackage); + void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride, IPackage sourcePackage); + void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride); + void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters, IPackage sourcePackage); + void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters); + void TriggerPerformanceRestored(); + void TriggerPerformanceWarning(); + void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable parameters); + void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable parameters, IPackage sourcePackage); + void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable parameters, DateTime equipmentTimeStamp); } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/IPackageSource.cs b/Adaptation/Eaf/EquipmentCore/Control/IPackageSource.cs index 2c0371e..86760aa 100644 --- a/Adaptation/Eaf/EquipmentCore/Control/IPackageSource.cs +++ b/Adaptation/Eaf/EquipmentCore/Control/IPackageSource.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.EquipmentCore.Control +namespace Adaptation.Eaf.EquipmentCore.Control; + +public interface IPackageSource { - public interface IPackageSource - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/DataCollection/Reporting/ParameterValue.cs b/Adaptation/Eaf/EquipmentCore/DataCollection/Reporting/ParameterValue.cs index 9f0b794..468230d 100644 --- a/Adaptation/Eaf/EquipmentCore/DataCollection/Reporting/ParameterValue.cs +++ b/Adaptation/Eaf/EquipmentCore/DataCollection/Reporting/ParameterValue.cs @@ -2,19 +2,24 @@ using Adaptation.PeerGroup.GCL.Annotations; using System; -namespace Adaptation.Eaf.EquipmentCore.DataCollection.Reporting +namespace Adaptation.Eaf.EquipmentCore.DataCollection.Reporting; + +public class ParameterValue { - public class ParameterValue - { - public ParameterValue(EquipmentParameter definition, object value) { } - public ParameterValue(EquipmentParameter definition, object value, DateTime timestamp) { } - public virtual object Value { get; protected internal set; } - [NotNull] - public EquipmentParameter Definition { get; } - public DateTime Timestamp { get; protected set; } +#pragma warning disable CA1822 +#pragma warning disable CA2254 +#pragma warning disable IDE0060 + + public ParameterValue(EquipmentParameter definition, object value) { } + public ParameterValue(EquipmentParameter definition, object value, DateTime timestamp) { } + + public virtual object Value { get; protected internal set; } + [NotNull] + public EquipmentParameter Definition { get; } + public DateTime Timestamp { get; protected set; } + + public virtual ParameterValue Clone(EquipmentParameter newDefinition) => throw new NotImplementedException(); + public override string ToString() => base.ToString(); - public virtual ParameterValue Clone(EquipmentParameter newDefinition) { throw new NotImplementedException(); } - public override string ToString() { return base.ToString(); } - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/SelfDescription/ElementDescription/EquipmentParameter.cs b/Adaptation/Eaf/EquipmentCore/SelfDescription/ElementDescription/EquipmentParameter.cs index 852fb8d..f9c126d 100644 --- a/Adaptation/Eaf/EquipmentCore/SelfDescription/ElementDescription/EquipmentParameter.cs +++ b/Adaptation/Eaf/EquipmentCore/SelfDescription/ElementDescription/EquipmentParameter.cs @@ -1,24 +1,27 @@ using Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes; -namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ElementDescription +namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ElementDescription; + +public class EquipmentParameter { - public class EquipmentParameter - { - public EquipmentParameter(EquipmentParameter source, ParameterTypeDefinition typeDefinition) { } - public EquipmentParameter(string name, ParameterTypeDefinition typeDefinition, string description, bool isTransient = false, bool isReadOnly = true) { } - public EquipmentParameter(string id, string name, ParameterTypeDefinition typeDefinition, string description, bool isTransient = false, bool isReadOnly = true) { } - public string Name { get; } - public string Id { get; } - public string Description { get; } - public string SourcePath { get; } - public string SourceEquipment { get; } - public ParameterTypeDefinition TypeDefinition { get; } - public bool IsTransient { get; } - public bool IsReadOnly { get; } +#pragma warning disable CA2254 +#pragma warning disable IDE0060 - public override string ToString() { return base.ToString(); } - public string ToStringWithDetails() { return base.ToString(); } - } + public EquipmentParameter(EquipmentParameter source, ParameterTypeDefinition typeDefinition) { } + public EquipmentParameter(string name, ParameterTypeDefinition typeDefinition, string description, bool isTransient = false, bool isReadOnly = true) { } + public EquipmentParameter(string id, string name, ParameterTypeDefinition typeDefinition, string description, bool isTransient = false, bool isReadOnly = true) { } + + public string Name { get; } + public string Id { get; } + public string Description { get; } + public string SourcePath { get; } + public string SourceEquipment { get; } + public ParameterTypeDefinition TypeDefinition { get; } + public bool IsTransient { get; } + public bool IsReadOnly { get; } + + public override string ToString() => base.ToString(); + public string ToStringWithDetails() => base.ToString(); } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/Field.cs b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/Field.cs index a83b45f..726b51a 100644 --- a/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/Field.cs +++ b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/Field.cs @@ -1,12 +1,16 @@ -namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes -{ - public class Field - { - public Field(string name, string description, bool canBeNull, ParameterTypeDefinition typeDefinition) { } +namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes; + +public class Field +{ + +#pragma warning disable CA2254 +#pragma warning disable IDE0060 + + public Field(string name, string description, bool canBeNull, ParameterTypeDefinition typeDefinition) { } + + public string Name { get; } + public string Description { get; } + public ParameterTypeDefinition TypeDefinition { get; } + public bool CanBeNull { get; } - public string Name { get; } - public string Description { get; } - public ParameterTypeDefinition TypeDefinition { get; } - public bool CanBeNull { get; } - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/ParameterTypeDefinition.cs b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/ParameterTypeDefinition.cs index 65ad7dd..00fc42a 100644 --- a/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/ParameterTypeDefinition.cs +++ b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/ParameterTypeDefinition.cs @@ -1,12 +1,16 @@ -namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes +namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes; + +public abstract class ParameterTypeDefinition { - public abstract class ParameterTypeDefinition - { - public ParameterTypeDefinition(string name, string description) { } - public string Name { get; } - public string Description { get; } +#pragma warning disable CA2254 +#pragma warning disable IDE0060 + + public ParameterTypeDefinition(string name, string description) { } + + public string Name { get; } + public string Description { get; } + + public override string ToString() => base.ToString(); - public override string ToString() { return base.ToString(); } - } } \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/StructuredType.cs b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/StructuredType.cs index 24c5856..fe5fbce 100644 --- a/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/StructuredType.cs +++ b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/StructuredType.cs @@ -1,12 +1,16 @@ using System.Collections.Generic; -namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes +namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes; + +public class StructuredType : ParameterTypeDefinition { - public class StructuredType : ParameterTypeDefinition - { - public StructuredType(string name, string description, IList fields) : base(name, description) { } +#pragma warning disable CA1822 +#pragma warning disable CA2254 +#pragma warning disable IDE0060 + + public StructuredType(string name, string description, IList fields) : base(name, description) { } + + public IList Fields { get; } - public IList Fields { get; } - } } \ No newline at end of file diff --git a/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/IConfigurationObject.cs b/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/IConfigurationObject.cs index 597ace3..70ef834 100644 --- a/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/IConfigurationObject.cs +++ b/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/IConfigurationObject.cs @@ -1,6 +1,5 @@ -namespace Adaptation.Eaf.Management.ConfigurationData.CellAutomation +namespace Adaptation.Eaf.Management.ConfigurationData.CellAutomation; + +public interface IConfigurationObject { - public interface IConfigurationObject - { - } } \ No newline at end of file diff --git a/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterDefinition.cs b/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterDefinition.cs index 0b772a2..067bf67 100644 --- a/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterDefinition.cs +++ b/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterDefinition.cs @@ -1,26 +1,30 @@ using System; -namespace Adaptation.Eaf.Management.ConfigurationData.CellAutomation +namespace Adaptation.Eaf.Management.ConfigurationData.CellAutomation; + +[System.Runtime.Serialization.DataContractAttribute(IsReference = true)] +public class ModelObjectParameterDefinition : IConfigurationObject { - [System.Runtime.Serialization.DataContractAttribute(IsReference = true)] - public class ModelObjectParameterDefinition : IConfigurationObject - { - public ModelObjectParameterDefinition() { } - public ModelObjectParameterDefinition(string name, ModelObjectParameterType valueType, object defaultValue) { } - public ModelObjectParameterDefinition(string name, Type enumType, object defaultValue) { } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long Id { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual string Name { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual string Value { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual ModelObjectParameterType ValueType { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual string EnumType { get; set; } +#pragma warning disable CA2254 +#pragma warning disable IDE0060 + + public ModelObjectParameterDefinition() { } + public ModelObjectParameterDefinition(string name, ModelObjectParameterType valueType, object defaultValue) { } + public ModelObjectParameterDefinition(string name, Type enumType, object defaultValue) { } + + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long Id { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual string Name { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual string Value { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual ModelObjectParameterType ValueType { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual string EnumType { get; set; } + + public virtual ModelObjectParameterDefinition Clone() => null; + public virtual bool IsValidValue(string value) => false; - public virtual ModelObjectParameterDefinition Clone() { return null; } - public virtual bool IsValidValue(string value) { return false; } - } } \ No newline at end of file diff --git a/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterType.cs b/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterType.cs index 6f779af..c5a85c2 100644 --- a/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterType.cs +++ b/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterType.cs @@ -1,17 +1,16 @@ -namespace Adaptation.Eaf.Management.ConfigurationData.CellAutomation +namespace Adaptation.Eaf.Management.ConfigurationData.CellAutomation; + +public enum ModelObjectParameterType { - public enum ModelObjectParameterType - { - String = 0, - Bool = 1, - Byte = 2, - SignedByte = 3, - Integer = 4, - UnsignedInteger = 5, - LongInteger = 6, - UnsignedLongInteger = 7, - Double = 8, - Float = 9, - Enum = 10 - } + String = 0, + Bool = 1, + Byte = 2, + SignedByte = 3, + Integer = 4, + UnsignedInteger = 5, + LongInteger = 6, + UnsignedLongInteger = 7, + Double = 8, + Float = 9, + Enum = 10 } \ No newline at end of file diff --git a/Adaptation/Eaf/Management/ConfigurationData/Semiconductor/CellInstances/SecsConnectionConfiguration.cs b/Adaptation/Eaf/Management/ConfigurationData/Semiconductor/CellInstances/SecsConnectionConfiguration.cs index 91493b0..bea5a40 100644 --- a/Adaptation/Eaf/Management/ConfigurationData/Semiconductor/CellInstances/SecsConnectionConfiguration.cs +++ b/Adaptation/Eaf/Management/ConfigurationData/Semiconductor/CellInstances/SecsConnectionConfiguration.cs @@ -1,44 +1,43 @@ using Adaptation.PeerGroup.GCL.SecsDriver; using System; -namespace Adaptation.Eaf.Management.ConfigurationData.Semiconductor.CellInstances -{ - [System.Runtime.Serialization.DataContractAttribute] - public class SecsConnectionConfiguration - { - public SecsConnectionConfiguration() { } +namespace Adaptation.Eaf.Management.ConfigurationData.Semiconductor.CellInstances; - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T6HsmsControlMessage { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T5ConnectionSeperation { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T4InterBlock { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T3MessageReply { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T2Protocol { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T1InterCharacter { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual SerialBaudRate? BaudRate { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual SecsTransportType? PortType { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long? Port { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan LinkTestTimer { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual string Host { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long? DeviceId { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual HsmsSessionMode? SessionMode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual HsmsConnectionMode? ConnectionMode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T7ConnectionIdle { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual TimeSpan T8NetworkIntercharacter { get; set; } - } +[System.Runtime.Serialization.DataContractAttribute] +public class SecsConnectionConfiguration +{ + public SecsConnectionConfiguration() { } + + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T6HsmsControlMessage { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T5ConnectionSeperation { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T4InterBlock { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T3MessageReply { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T2Protocol { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T1InterCharacter { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual SerialBaudRate? BaudRate { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual SecsTransportType? PortType { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long? Port { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan LinkTestTimer { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual string Host { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long? DeviceId { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual HsmsSessionMode? SessionMode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual HsmsConnectionMode? ConnectionMode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T7ConnectionIdle { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual TimeSpan T8NetworkIntercharacter { get; set; } } \ No newline at end of file diff --git a/Adaptation/FileHandlers/Archive/FileRead.cs b/Adaptation/FileHandlers/Archive/FileRead.cs new file mode 100644 index 0000000..5a7643d --- /dev/null +++ b/Adaptation/FileHandlers/Archive/FileRead.cs @@ -0,0 +1,141 @@ +using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared; +using Adaptation.Shared.Duplicator; +using Adaptation.Shared.Methods; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text.Json; + +namespace Adaptation.FileHandlers.Archive; + +public class FileRead : Shared.FileRead, IFileRead +{ + + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : + base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + { + _MinFileLength = 10; + _NullData = string.Empty; + _Logistics = new Logistics(this); + if (_FileParameter is null) + throw new Exception(cellInstanceConnectionName); + if (_ModelObjectParameterDefinitions is null) + throw new Exception(cellInstanceConnectionName); + if (!_IsDuplicator) + throw new Exception(cellInstanceConnectionName); + } + + void IFileRead.Move(Tuple> extractResults, Exception exception) => Move(extractResults, exception); + + void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); + + string IFileRead.GetEventDescription() + { + string result = _Description.GetEventDescription(); + return result; + } + + List IFileRead.GetHeaderNames() + { + List results = _Description.GetHeaderNames(); + return results; + } + + string[] IFileRead.Move(Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception) + { + string[] results = Move(extractResults, to, from, resolvedFileLocation, exception); + return results; + } + + JsonProperty[] IFileRead.GetDefault() + { + JsonProperty[] results = _Description.GetDefault(this, _Logistics); + return results; + } + + Dictionary IFileRead.GetDisplayNamesJsonElement() + { + Dictionary results = _Description.GetDisplayNamesJsonElement(this); + return results; + } + + List IFileRead.GetDescriptions(IFileRead fileRead, List tests, IProcessData processData) + { + List results = _Description.GetDescriptions(fileRead, _Logistics, tests, processData); + return results; + } + + Tuple> IFileRead.GetExtractResult(string reportFullPath, string eventName) + { + Tuple> results; + if (string.IsNullOrEmpty(eventName)) + throw new Exception(); + _ReportFullPath = reportFullPath; + DateTime dateTime = DateTime.Now; + results = GetExtractResult(reportFullPath, dateTime); + if (results.Item3 is null) + results = new Tuple>(results.Item1, Array.Empty(), JsonSerializer.Deserialize("[]"), results.Item4); + if (results.Item3.Length > 0 && _IsEAFHosted) + WritePDSF(this, results.Item3); + UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks); + return results; + } + + Tuple> IFileRead.ReExtract() + { + Tuple> results; + List headerNames = _Description.GetHeaderNames(); + Dictionary keyValuePairs = _Description.GetDisplayNamesJsonElement(this); + results = ReExtract(this, headerNames, keyValuePairs); + return results; + } + + void IFileRead.CheckTests(Test[] tests, bool extra) + { + if (_Description is not Description) + throw new Exception(); + } + + void IFileRead.Callback(object state) => throw new Exception(string.Concat("Not ", nameof(_IsDuplicator))); + + private void MoveArchive(DateTime dateTime) + { + if (dateTime == DateTime.MinValue) + { } + string logisticsSequence = _Logistics.Sequence.ToString(); + string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); + string weekDirectory = string.Concat(_Logistics.DateTimeFromSequence.ToString("yyyy"), "_Week_", weekOfYear, @"\", _Logistics.DateTimeFromSequence.ToString("yyyy-MM-dd")); + string jobIdDirectory = string.Concat(_FileConnectorConfiguration.TargetFileLocation, @"\", _Logistics.JobID); + if (!Directory.Exists(jobIdDirectory)) + _ = Directory.CreateDirectory(jobIdDirectory); + //string destinationArchiveDirectory = string.Concat(jobIdDirectory, @"\!Archive\", weekDirectory); + string destinationArchiveDirectory = string.Concat(Path.GetDirectoryName(_FileConnectorConfiguration.TargetFileLocation), @"\Archive\", _Logistics.JobID, @"\", weekDirectory); + if (!Directory.Exists(destinationArchiveDirectory)) + _ = Directory.CreateDirectory(destinationArchiveDirectory); + string[] matchDirectories = new string[] { GetDirectoriesRecursively(jobIdDirectory, logisticsSequence).FirstOrDefault() }; + if ((matchDirectories is null) || matchDirectories.Length != 1) + throw new Exception("Didn't find directory by logistics sequence"); + string sourceDirectory = Path.GetDirectoryName(matchDirectories[0]); + destinationArchiveDirectory = string.Concat(destinationArchiveDirectory, @"\", Path.GetFileName(sourceDirectory)); + Directory.Move(sourceDirectory, destinationArchiveDirectory); + } + + private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) + { + Tuple> results; + Tuple pdsf = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(reportFullPath); + _Logistics = new Logistics(reportFullPath, pdsf.Item1); + SetFileParameterLotIDToLogisticsMID(); + JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(pdsf); + List descriptions = GetDuplicatorDescriptions(jsonElements); + Tuple>> tuple = GetTuple(this, descriptions, extra: false); + MoveArchive(dateTime); + results = new Tuple>(pdsf.Item1, tuple.Item1, jsonElements, new List()); + return results; + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/CellInstanceConnectionName.cs b/Adaptation/FileHandlers/CellInstanceConnectionName.cs new file mode 100644 index 0000000..3434cec --- /dev/null +++ b/Adaptation/FileHandlers/CellInstanceConnectionName.cs @@ -0,0 +1,40 @@ +using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared.Methods; +using System; +using System.Collections.Generic; + +namespace Adaptation.FileHandlers; + +public class CellInstanceConnectionName +{ + + internal static IFileRead Get(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) + { + IFileRead result; + bool isDuplicator = cellInstanceConnectionName.StartsWith(cellInstanceName); + if (isDuplicator) + { + string cellInstanceConnectionNameBase = cellInstanceConnectionName.Replace("-", string.Empty); + int hyphens = cellInstanceConnectionName.Length - cellInstanceConnectionNameBase.Length; + result = hyphens switch + { + (int)MET08DDUPSP1TBI.Hyphen.IsArchive => new Archive.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted), + (int)MET08DDUPSP1TBI.Hyphen.IsDummy => new Dummy.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted), + (int)MET08DDUPSP1TBI.Hyphen.IsTIBCO => new TIBCO.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted), + (int)MET08DDUPSP1TBI.Hyphen.IsXToArchive => new ToArchive.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted), + _ => new MET08DDUPSP1TBI.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + }; + } + else + { + result = cellInstanceConnectionName switch + { + nameof(txt) => new txt.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted), + _ => throw new Exception(), + }; + } + return result; + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/Dummy/FileRead.cs b/Adaptation/FileHandlers/Dummy/FileRead.cs new file mode 100644 index 0000000..b33618f --- /dev/null +++ b/Adaptation/FileHandlers/Dummy/FileRead.cs @@ -0,0 +1,308 @@ +using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared; +using Adaptation.Shared.Duplicator; +using Adaptation.Shared.Methods; +using Infineon.Monitoring.MonA; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Text.Json; +using System.Threading; + +namespace Adaptation.FileHandlers.Dummy; + +public class FileRead : Shared.FileRead, IFileRead +{ + + private readonly Timer _Timer; + private int _LastDummyRunIndex; + private readonly string[] _CellNames; + + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : + base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + { + _MinFileLength = 10; + _NullData = string.Empty; + _Logistics = new Logistics(this); + if (_FileParameter is null) + throw new Exception(cellInstanceConnectionName); + if (_ModelObjectParameterDefinitions is null) + throw new Exception(cellInstanceConnectionName); + if (!_IsDuplicator) + throw new Exception(cellInstanceConnectionName); + _LastDummyRunIndex = -1; + List cellNames = new(); + _Timer = new Timer(Callback, null, Timeout.Infinite, Timeout.Infinite); + ModelObjectParameterDefinition[] cellInstanceCollection = GetProperties(cellInstanceConnectionName, modelObjectParameters, "CellInstance.", ".Alias"); + foreach (ModelObjectParameterDefinition modelObjectParameterDefinition in cellInstanceCollection) + cellNames.Add(modelObjectParameterDefinition.Name.Split('.')[1]); + _CellNames = cellNames.ToArray(); + if (Debugger.IsAttached || fileConnectorConfiguration.PreProcessingMode == FileConnectorConfiguration.PreProcessingModeEnum.Process) + Callback(null); + else + { + TimeSpan timeSpan = new(DateTime.Now.AddSeconds(_FileConnectorConfiguration.FileScanningIntervalInSeconds.Value).Ticks - DateTime.Now.Ticks); + _ = _Timer.Change((long)timeSpan.TotalMilliseconds, Timeout.Infinite); + } + } + + void IFileRead.Move(Tuple> extractResults, Exception exception) => Move(extractResults, exception); + + void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); + + string IFileRead.GetEventDescription() + { + string result = _Description.GetEventDescription(); + return result; + } + + List IFileRead.GetHeaderNames() + { + List results = _Description.GetHeaderNames(); + return results; + } + + string[] IFileRead.Move(Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception) + { + string[] results = Move(extractResults, to, from, resolvedFileLocation, exception); + return results; + } + + JsonProperty[] IFileRead.GetDefault() + { + JsonProperty[] results = _Description.GetDefault(this, _Logistics); + return results; + } + + Dictionary IFileRead.GetDisplayNamesJsonElement() + { + Dictionary results = _Description.GetDisplayNamesJsonElement(this); + return results; + } + + List IFileRead.GetDescriptions(IFileRead fileRead, List tests, IProcessData processData) + { + List results = _Description.GetDescriptions(fileRead, _Logistics, tests, processData); + return results; + } + + Tuple> IFileRead.GetExtractResult(string reportFullPath, string eventName) => throw new Exception(string.Concat("See ", nameof(CallbackFileExists))); + + Tuple> IFileRead.ReExtract() => throw new Exception(string.Concat("See ", nameof(CallbackFileExists))); + + void IFileRead.CheckTests(Test[] tests, bool extra) + { + if (_Description is not Description) + throw new Exception(); + } + + void IFileRead.Callback(object state) => Callback(state); + + private void CallbackInProcessCleared(string sourceArchiveFile, string traceDummyFile, string targetFileLocation, string monARessource, string inProcessDirectory, long sequence, bool warning) + { + const string site = "sjc"; + string stateName = string.Concat("Dummy_", _EventName); + const string monInURL = "http://moninhttp.sjc.infineon.com/input/text"; + MonIn monIn = MonIn.GetInstance(monInURL); + try + { + if (warning) + { + File.AppendAllLines(traceDummyFile, new string[] { site, monARessource, stateName, State.Warning.ToString() }); + _ = monIn.SendStatus(site, monARessource, stateName, State.Warning); + for (int i = 1; i < 12; i++) + Thread.Sleep(500); + } + ZipFile.ExtractToDirectory(sourceArchiveFile, inProcessDirectory); + string[] files = Directory.GetFiles(inProcessDirectory, "*", SearchOption.TopDirectoryOnly); + if (files.Length > 250) + throw new Exception("Safety net!"); + foreach (string file in files) + File.SetLastWriteTime(file, new DateTime(sequence)); + if (!_FileConnectorConfiguration.IncludeSubDirectories.Value) + { + foreach (string file in files) + File.Move(file, Path.Combine(targetFileLocation, Path.GetFileName(file))); + } + else + { + string[] directories = Directory.GetDirectories(inProcessDirectory, "*", SearchOption.AllDirectories); + foreach (string directory in directories) + _ = Directory.CreateDirectory(string.Concat(targetFileLocation, directory.Substring(inProcessDirectory.Length))); + foreach (string file in files) + File.Move(file, string.Concat(targetFileLocation, file.Substring(inProcessDirectory.Length))); + } + File.AppendAllLines(traceDummyFile, new string[] { site, monARessource, stateName, State.Ok.ToString() }); + _ = monIn.SendStatus(site, monARessource, stateName, State.Ok); + } + catch (Exception exception) + { + string subject = string.Concat("Exception:", _CellInstanceConnectionName); + string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace); + try + { _SMTP.SendHighPriorityEmailMessage(subject, body); } + catch (Exception) { } + File.AppendAllLines(traceDummyFile, new string[] { site, monARessource, stateName, State.Critical.ToString(), exception.Message, exception.StackTrace }); + _ = monIn.SendStatus(site, monARessource, stateName, State.Critical); + } + } + + private void CallbackFileExists(string sourceArchiveFile, string traceDummyFile, string targetFileLocation, string monARessource, long sequence) + { + string[] files; + bool warning = false; + if (!_DummyRuns.ContainsKey(monARessource)) + _DummyRuns.Add(monARessource, new List()); + if (!_DummyRuns[monARessource].Contains(sequence)) + _DummyRuns[monARessource].Add(sequence); + File.AppendAllLines(traceDummyFile, new string[] { sourceArchiveFile }); + string inProcessDirectory = Path.Combine(_ProgressPath, "Dummy In-Process", sequence.ToString()); + if (!Directory.Exists(inProcessDirectory)) + _ = Directory.CreateDirectory(inProcessDirectory); + files = Directory.GetFiles(inProcessDirectory, "*", SearchOption.AllDirectories); + if (files.Any()) + { + if (files.Length > 250) + throw new Exception("Safety net!"); + try + { + foreach (string file in files) + File.Delete(file); + } + catch (Exception) { } + } + if (_FileConnectorConfiguration.IncludeSubDirectories.Value) + files = Directory.GetFiles(targetFileLocation, "*", SearchOption.AllDirectories); + else + files = Directory.GetFiles(targetFileLocation, "*", SearchOption.TopDirectoryOnly); + foreach (string file in files) + { + if (new FileInfo(file).LastWriteTime.Ticks == sequence) + { + warning = true; + break; + } + } + CallbackInProcessCleared(sourceArchiveFile, traceDummyFile, targetFileLocation, monARessource, inProcessDirectory, sequence, warning); + } + + private string GetCellName(string pathSegment) + { + string result = string.Empty; + foreach (string cellName in _CellNames) + { + if (pathSegment.ToLower().Contains(cellName.ToLower())) + { + result = cellName; + break; + } + } + if (string.IsNullOrEmpty(result)) + { + int count; + List<(string CellName, int Count)> cellNames = new(); + foreach (string cellName in _CellNames) + { + count = 0; + foreach (char @char in cellName.ToLower()) + count += pathSegment.Length - pathSegment.ToLower().Replace(@char.ToString(), string.Empty).Length; + cellNames.Add(new(cellName, count)); + } + result = (from l in cellNames orderby l.CellName.Length, l.Count descending select l.CellName).First(); + } + return result; + } + + private void Callback(object state) + { + try + { + string pathSegment; + string monARessource; + DateTime dateTime = DateTime.Now; + if (!_FileConnectorConfiguration.TargetFileLocation.Contains(_FileConnectorConfiguration.SourceFileLocation)) + throw new Exception("Target must start with source"); + bool check = dateTime.Hour > 7 && dateTime.Hour < 18 && dateTime.DayOfWeek != DayOfWeek.Sunday && dateTime.DayOfWeek != DayOfWeek.Saturday; + if (!_IsEAFHosted || check) + { + string checkSegment; + string checkDirectory; + string sourceFileFilter; + string sourceArchiveFile; + string sourceFileLocation; + string weekOfYear = _Calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); + string traceDummyDirectory = Path.Combine(Path.GetPathRoot(_TracePath), "TracesDummy", _CellInstanceName, "Source", $"{dateTime:yyyy}___Week_{weekOfYear}"); + if (!Directory.Exists(traceDummyDirectory)) + _ = Directory.CreateDirectory(traceDummyDirectory); + string traceDummyFile = Path.Combine(traceDummyDirectory, $"{dateTime.Ticks} - {_CellInstanceName}.txt"); + File.AppendAllText(traceDummyFile, string.Empty); + if (_FileConnectorConfiguration.SourceFileLocation.EndsWith("\\")) + sourceFileLocation = _FileConnectorConfiguration.SourceFileLocation; + else + sourceFileLocation = string.Concat(_FileConnectorConfiguration.SourceFileLocation, '\\'); + for (int i = 0; i < _FileConnectorConfiguration.SourceFileFilters.Count; i++) + { + _LastDummyRunIndex += 1; + if (_LastDummyRunIndex >= _FileConnectorConfiguration.SourceFileFilters.Count) + _LastDummyRunIndex = 0; + sourceFileFilter = _FileConnectorConfiguration.SourceFileFilters[_LastDummyRunIndex]; + sourceArchiveFile = Path.GetFullPath(string.Concat(sourceFileLocation, sourceFileFilter)); + if (File.Exists(sourceArchiveFile)) + { + checkSegment = _FileConnectorConfiguration.TargetFileLocation.Substring(sourceFileLocation.Length); + checkDirectory = Path.GetDirectoryName(sourceArchiveFile); + for (int z = 0; z < int.MaxValue; z++) + { + if (checkDirectory.Length < sourceFileLocation.Length || !checkDirectory.StartsWith(sourceFileLocation)) + break; + checkDirectory = Path.GetDirectoryName(checkDirectory); + if (Directory.Exists(Path.Combine(checkDirectory, checkSegment))) + { + checkDirectory = Path.Combine(checkDirectory, checkSegment); + break; + } + } + if (!checkDirectory.EndsWith(checkSegment)) + throw new Exception("Could not determine dummy target directory for extract!"); + if (!long.TryParse(Path.GetFileNameWithoutExtension(sourceArchiveFile).Replace("x", string.Empty), out long sequence)) + throw new Exception("Invalid file name for source archive file!"); + pathSegment = checkDirectory.Substring(sourceFileLocation.Length); + monARessource = GetCellName(pathSegment); + if (string.IsNullOrEmpty(monARessource)) + throw new Exception("Could not determine which cell archive file is associated with!"); + if (_IsEAFHosted) + CallbackFileExists(sourceArchiveFile, traceDummyFile, checkDirectory, monARessource, sequence); + break; + } + } + } + } + catch (Exception exception) + { + string subject = string.Concat("Exception:", _CellInstanceConnectionName); + string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace); + try + { _SMTP.SendHighPriorityEmailMessage(subject, body); } + catch (Exception) { } + } + try + { + TimeSpan timeSpan = new(DateTime.Now.AddSeconds(_FileConnectorConfiguration.FileScanningIntervalInSeconds.Value).Ticks - DateTime.Now.Ticks); + _ = _Timer.Change((long)timeSpan.TotalMilliseconds, Timeout.Infinite); + } + catch (Exception exception) + { + string subject = string.Concat("Exception:", _CellInstanceConnectionName); + string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace); + try + { _SMTP.SendHighPriorityEmailMessage(subject, body); } + catch (Exception) { } + } + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/FileRead.cs b/Adaptation/FileHandlers/FileRead.cs deleted file mode 100644 index 0e74689..0000000 --- a/Adaptation/FileHandlers/FileRead.cs +++ /dev/null @@ -1,293 +0,0 @@ -using Adaptation.Helpers; -using Adaptation.Shared; -using Adaptation.Shared.Metrology; -using log4net; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text.Json; -using System.Text.RegularExpressions; - -namespace Adaptation.FileHandlers -{ - - public partial class FileRead : ILogic - { - - private string _LastLines; - private ConfigData _ConfigData; - - - public FileRead() - { - _LastLines = string.Empty; - Logistics = new Logistics(); - _Log = LogManager.GetLogger(typeof(FileRead)); - } - - public ILogic ShallowCopy() - { - return (ILogic)MemberwiseClone(); - } - - public void WaitForThread() - { - WaitForThread(thread: null, threadExceptions: null); - } - - public Tuple GetOpenInsightTuple() - { - Tuple restuls = new Tuple(_ConfigData.OpenInsightSiViewer, _ConfigData); - return restuls; - } - - public Tuple> GetExtractResult(string reportFullPath, string eventName) - { - Tuple> results; - _FileParameter.Clear(); - DateTime dateTime = DateTime.Now; - if (_ConfigData.IsEvent && _ConfigData.Duplicator is null) - results = GetExtractResult(reportFullPath); - else if (_ConfigData.Duplicator.HasValue) - results = GetDuplicatorExtractResult(reportFullPath, dateTime); - else - throw new Exception(); - if (results.Item2 is null) - results = new Tuple>(results.Item1, JsonSerializer.Deserialize("[]"), results.Item3); - int count = results.Item2.Value.GetArrayLength(); - if (count > 0 && _ConfigData.EafHosted) - WritePDSF(results.Item2.Value); - UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks); - return results; - } - - private Tuple> GetExtractResult(string reportFullPath) - { - Tuple> results = new Tuple>(string.Empty, null, new List()); - FileInfo fileInfo = new FileInfo(reportFullPath); - Logistics = new Logistics(ConfigData.NullData, _ConfigData.CellNames, _ConfigData.MesEntities, fileInfo, useSplitForMID: false); - SetFileParameterLotID(Logistics.MID); - if (_Configuration.SourceFileFilter == "*") - _Log.Debug("Share transfer"); - else if (fileInfo.Length < ConfigData.MinFileLength) - results.Item3.Add(fileInfo); - else - { - ProcessData processData = new ProcessData(this, _ConfigData, results.Item3); - if (!(processData.Header is null)) - { - string mid = string.Concat(processData.Header.Reactor, "-", processData.Header.RDS, "-", processData.Header.PSN); - mid = Regex.Replace(mid, @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]", "_").Split('\r')[0].Split('\n')[0]; - Logistics.MID = mid; - SetFileParameterLotID(mid); - Logistics.ProcessJobID = processData.Header.Reactor; - } - if (processData.Header is null || !processData.Details.Any()) - throw new Exception(); - results = processData.GetResults(this, _ConfigData, results.Item3); - } - return results; - } - - private Tuple> GetDuplicatorExtractResult(string reportFullPath, DateTime dateTime) - { - Tuple> results; - Tuple pdsf = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(reportFullPath); - Logistics = new Logistics(reportFullPath, pdsf.Item1); - SetFileParameterLotIDToLogisticsMID(); - JsonElement pdsdBodyValues = ProcessDataStandardFormat.GetArray(pdsf); - results = new Tuple>(pdsf.Item1, pdsdBodyValues, new List()); - List processDataDescriptions = _ConfigData.GetProcessDataDescriptions(pdsdBodyValues); - Dictionary> keyValuePairs = ProcessData.GetKeyValuePairs(_ConfigData, pdsdBodyValues, processDataDescriptions, extra: false); - bool isNotUsedInsightMetrologyViewerAttachments = (!(_Configuration.FileScanningIntervalInSeconds > 0) && _ConfigData.Duplicator.Value == ConfigData.Level.IsXToOpenInsightMetrologyViewerAttachments); - bool isDummyRun = (ConfigData.DummyRuns.Any() && ConfigData.DummyRuns.ContainsKey(Logistics.JobID) && ConfigData.DummyRuns[Logistics.JobID].Any() && (from l in ConfigData.DummyRuns[Logistics.JobID] where l == Logistics.Sequence select 1).Any()); - if (isDummyRun) - { - try - { File.SetLastWriteTime(reportFullPath, dateTime); } - catch (Exception) { } - } - string duplicateDirectory; - string[] segments = Path.GetFileNameWithoutExtension(reportFullPath).Split('_'); - if (_ConfigData.Duplicator.Value != ConfigData.Level.IsXToOpenInsight) - duplicateDirectory = string.Concat(_Configuration.TargetFileLocation, @"\", segments[0]); - else - duplicateDirectory = string.Concat(Path.GetDirectoryName(Path.GetDirectoryName(_Configuration.TargetFileLocation)), @"\Data"); - if (segments.Length > 2) - duplicateDirectory = string.Concat(duplicateDirectory, @"-", segments[2]); - if (!Directory.Exists(duplicateDirectory)) - Directory.CreateDirectory(duplicateDirectory); - if (!Directory.Exists(duplicateDirectory)) - Directory.CreateDirectory(duplicateDirectory); - if ((isDummyRun || isNotUsedInsightMetrologyViewerAttachments || _Configuration.FileScanningIntervalInSeconds > 0) && _ConfigData.Duplicator.Value != ConfigData.Level.IsXToArchive && _ConfigData.Duplicator.Value != ConfigData.Level.IsArchive) - { - string successDirectory; - if (_ConfigData.Duplicator.Value != ConfigData.Level.IsXToAPC) - successDirectory = string.Empty; - else - { - successDirectory = string.Concat(Path.GetDirectoryName(_Configuration.TargetFileLocation), @"\ViewerPath"); - if (!Directory.Exists(successDirectory)) - Directory.CreateDirectory(successDirectory); - } - CultureInfo cultureInfo = new CultureInfo("en-US"); - Calendar calendar = cultureInfo.Calendar; - List> tuples = new List>(); - string duplicateFile = string.Concat(duplicateDirectory, @"\", Path.GetFileName(reportFullPath)); - string weekOfYear = calendar.GetWeekOfYear(Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); - string weekDirectory = string.Concat(Logistics.DateTimeFromSequence.ToString("yyyy"), "_Week_", weekOfYear, @"\", Logistics.DateTimeFromSequence.ToString("yyyy-MM-dd")); - string logisticsSequenceMemoryDirectory = string.Concat(_ConfigData.MemoryPath, @"\", _ConfigData.GetEquipmentType(), @"\Source\", weekDirectory, @"\", Logistics.Sequence); - if (!Directory.Exists(logisticsSequenceMemoryDirectory)) - Directory.CreateDirectory(logisticsSequenceMemoryDirectory); - if (_ConfigData.Duplicator.Value == ConfigData.Level.IsXToAPC) - { - if (!isDummyRun && _ConfigData.EafHosted) - File.Copy(reportFullPath, duplicateFile, overwrite: true); - } - else - { - if (_ConfigData.Duplicator.Value == ConfigData.Level.IsXToOpenInsightMetrologyViewer) - { - List fileReadDescriptions = ProcessData.GetProcessDataFileReadDescriptions(_ConfigData, pdsdBodyValues); - ProcessData.WSRequest wsRequest = new ProcessData.WSRequest(this, fileReadDescriptions); - if (!isDummyRun && _ConfigData.EafHosted) - { - Tuple wsResults = WS.SendData(_ConfigData.OpenInsightMetrologyViewerAPI, wsRequest); - if (!wsResults.Item2.Success) - throw new Exception(wsResults.ToString()); - _Log.Debug(wsResults.Item2.HeaderID); - File.WriteAllText(string.Concat(logisticsSequenceMemoryDirectory, @"\", nameof(WS.Results), ".json"), wsResults.Item1); - } - } - else - { - Test test; - string check; - IScopeInfo scopeInfo; - Tuple tuple; - foreach (KeyValuePair> keyValuePair in keyValuePairs) - { - test = keyValuePair.Key; - //scopeInfo = new ScopeInfo(this, _ConfigData, test); - if (_ConfigData.Duplicator.Value != ConfigData.Level.IsXToOpenInsight) - scopeInfo = new ScopeInfo(this, _ConfigData, test, _ConfigData.IqsFile, _ConfigData.IqsQueryFilter); - else - scopeInfo = new ScopeInfo(this, _ConfigData, test, _ConfigData.OpenInsightFilePattern, _ConfigData.IqsQueryFilter); - //lines = ProcessDataStandardFormat.GetLines(Logistics, scopeInfo, names, values, dateFormat: "M/d/yyyy hh:mm:ss tt", timeFormat: string.Empty, pairedColumns: ExtractResultPairedColumns); - List fileReadDescriptions = ProcessData.GetProcessDataFileReadDescriptions(_ConfigData, pdsdBodyValues); - tuple = ProcessData.GetLines(this, fileReadDescriptions); - check = tuple.Item1.Replace(tuple.Item2, "$Date$"); - if (string.IsNullOrEmpty(_LastLines) || check != _LastLines) - tuples.Add(new Tuple(scopeInfo, tuple.Item1)); - _LastLines = check; - } - } - if (_ConfigData.Duplicator.Value == ConfigData.Level.IsXToOpenInsightMetrologyViewerAttachments) - { - string[] matchDirectories = Shared1567(reportFullPath, tuples); - if (!isDummyRun && _ConfigData.EafHosted && !isNotUsedInsightMetrologyViewerAttachments) - { - List fileReadDescriptions = ProcessData.GetProcessDataFileReadDescriptions(_ConfigData, pdsdBodyValues); - ProcessData.PostOpenInsightMetrologyViewerAttachments(_Log, _ConfigData, Logistics, dateTime, logisticsSequenceMemoryDirectory, fileReadDescriptions, matchDirectories[0]); - } - } - } - if (_ConfigData.Duplicator.Value != ConfigData.Level.IsXToOpenInsightMetrologyViewer && _ConfigData.Duplicator.Value != ConfigData.Level.IsXToOpenInsightMetrologyViewerAttachments) - Shared0413(dateTime, isDummyRun, successDirectory, duplicateDirectory, tuples, duplicateFile); - } - if (_ConfigData.Duplicator.Value == ConfigData.Level.IsXToOpenInsightMetrologyViewerAttachments) - { - string destinationDirectory; - //string destinationDirectory = WriteScopeInfo(_ConfigData.ProgressPath, Logistics, dateTime, duplicateDirectory, tuples); - FileInfo fileInfo = new FileInfo(reportFullPath); - string logisticsSequence = Logistics.Sequence.ToString(); - if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) - File.SetLastWriteTime(reportFullPath, fileInfo.CreationTime); - string jobIdDirectory = string.Concat(Path.GetDirectoryName(Path.GetDirectoryName(_ConfigData.FileConnectorConfiguration.TargetFileLocation)), @"\", Logistics.JobID); - if (!Directory.Exists(jobIdDirectory)) - Directory.CreateDirectory(jobIdDirectory); - string[] matchDirectories; - if (!_ConfigData.EafHosted) - matchDirectories = new string[] { Path.GetDirectoryName(Path.GetDirectoryName(reportFullPath)) }; - else - matchDirectories = Directory.GetDirectories(jobIdDirectory, string.Concat(Logistics.MID, '*', logisticsSequence, '*'), SearchOption.TopDirectoryOnly); - if ((matchDirectories is null) || matchDirectories.Length != 1) - throw new Exception("Didn't find directory by logistics sequence"); - destinationDirectory = matchDirectories[0]; - if (isDummyRun) - Shared0607(reportFullPath, duplicateDirectory, logisticsSequence, destinationDirectory); - else - { - List fileReadDescriptions = ProcessData.GetProcessDataFileReadDescriptions(_ConfigData, pdsdBodyValues); - ProcessData.WSRequest wsRequest = new ProcessData.WSRequest(this, fileReadDescriptions); - JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions { WriteIndented = true }; - string json = JsonSerializer.Serialize(wsRequest, wsRequest.GetType(), jsonSerializerOptions); - if (_ConfigData.EafHosted) - Shared1277(reportFullPath, destinationDirectory, logisticsSequence, jobIdDirectory, json); - else - { - string jsonFileName = Path.ChangeExtension(reportFullPath, ".json"); - string historicalText = File.ReadAllText(jsonFileName); - if (json != historicalText) - throw new Exception("File doesn't match historical!"); - } - } - } - return results; - } - - private void MoveArchive() - { - CultureInfo cultureInfo = new CultureInfo("en-US"); - Calendar calendar = cultureInfo.Calendar; - string logisticsSequence = Logistics.Sequence.ToString(); - string weekOfYear = calendar.GetWeekOfYear(Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); - string weekDirectory = string.Concat(Logistics.DateTimeFromSequence.ToString("yyyy"), "_Week_", weekOfYear, @"\", Logistics.DateTimeFromSequence.ToString("yyyy-MM-dd")); - string jobIdDirectory = string.Concat(_ConfigData.FileConnectorConfiguration.TargetFileLocation, @"\", Logistics.JobID); - if (!Directory.Exists(jobIdDirectory)) - Directory.CreateDirectory(jobIdDirectory); - //string destinationArchiveDirectory = string.Concat(jobIdDirectory, @"\!Archive\", weekDirectory); - string destinationArchiveDirectory = string.Concat(Path.GetDirectoryName(_ConfigData.FileConnectorConfiguration.TargetFileLocation), @"\Archive\", Logistics.JobID, @"\", weekDirectory); - if (!Directory.Exists(destinationArchiveDirectory)) - Directory.CreateDirectory(destinationArchiveDirectory); - string[] matchDirectories = new string[] { GetDirectoriesRecursively(jobIdDirectory, logisticsSequence).FirstOrDefault() }; - if ((matchDirectories is null) || matchDirectories.Length != 1) - throw new Exception("Didn't find directory by logistics sequence"); - string sourceDirectory = Path.GetDirectoryName(matchDirectories[0]); - destinationArchiveDirectory = string.Concat(destinationArchiveDirectory, @"\", Path.GetFileName(sourceDirectory)); - Directory.Move(sourceDirectory, destinationArchiveDirectory); - } - - public void Move(string reportFullPath, Tuple> extractResults, Exception exception = null) - { - Shared1872(reportFullPath, exception); - bool isErrorFile = !(exception is null); - if (!isErrorFile && _ConfigData.Duplicator.HasValue) - { - if (_ConfigData.Duplicator.Value == ConfigData.Level.IsXToArchive) - Shared0192(reportFullPath); - else if (_ConfigData.EafHosted && _ConfigData.Duplicator.Value == ConfigData.Level.IsArchive) - MoveArchive(); - if (_ConfigData.EafHosted && !string.IsNullOrEmpty(_ConfigData.ProgressPath)) - CreateProgressDirectory(_ConfigData.ProgressPath, Logistics, (int?)_ConfigData.Duplicator, exceptionLines: null); - } - if (!isErrorFile && _ConfigData.Duplicator is null) - WriteIO(reportFullPath); - if (!_ConfigData.EafHosted) - { - object @object = GetFilePathGeneratorInfo(reportFullPath, isErrorFile: false); - if (!(@object is null) && @object is string to) - { - if (to.Contains("%")) - _Log.Debug("Can't debug without EAF Hosting"); - else - Shared1124(reportFullPath, extractResults, to, _Configuration.SourceFileLocation, resolvedFileLocation: string.Empty, exception: null); - } - } - } - - } - -} \ No newline at end of file diff --git a/Adaptation/FileHandlers/FileReadShared.cs b/Adaptation/FileHandlers/FileReadShared.cs deleted file mode 100644 index 1be34c7..0000000 --- a/Adaptation/FileHandlers/FileReadShared.cs +++ /dev/null @@ -1,1041 +0,0 @@ -using Adaptation.Eaf.Core; -using Adaptation.Eaf.EquipmentCore.DataCollection.Reporting; -using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; -using Adaptation.Helpers; -using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; -using Adaptation.Shared; -using Adaptation.Shared.Metrology; -using log4net; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Text.Json; -using System.Text.Json.Serialization; -using System.Threading; - -namespace Adaptation.FileHandlers -{ - - public partial class FileRead - { - - public Logistics Logistics { get; protected set; } - - private bool _TargetFileLocationOkay; - private bool _ErrorTargetFileLocationOkay; - - private string _OriginalSourceFileLocation; - private string _OriginalTargetFileLocation; - private string _OriginalTarget2FileLocation; - private string _OriginalErrorTargetFileLocation; - -#pragma warning disable CS0169 - private readonly ILog _Log; - private Description _Description; -#pragma warning restore CS0169 - - private Type _ConfigurationType; - private MethodInfo _SetPlaceHolderMethodInfo; - private PropertyInfo _Target2FileLocationPropertyInfo; - private MethodInfo _ResolveSourcePlaceHoldersMethodInfo; - private MethodInfo _ResolveTargetPlaceHoldersMethodInfo; - private MethodInfo _ResolveTarget2PlaceHoldersMethodInfo; - private MethodInfo _ResolveErrorTargetPlaceHoldersMethodInfo; - - private string _LastReportFullPath; - private long _BreakAfterSeconds = 0; - private long _LastTicksDuration = 0; - private Dictionary _FileParameter; - private FileConnectorConfiguration _Configuration; - - public ConfigDataBase GetConfigDataBase(MethodBase methodBase, string cellInstanceName, string equipmentElementName, FileConnectorConfiguration fileConnectorConfiguration, IList modelObjectParameterDefinitions, bool eafHosted) - { - ConfigData result; - _Configuration = fileConnectorConfiguration; - Type type = methodBase.DeclaringType; - string equipmentTypeName = string.Empty; - result = new ConfigData(this, cellInstanceName, equipmentElementName, fileConnectorConfiguration, equipmentTypeName, modelObjectParameterDefinitions, type.FullName, isEAFHosted: true); - _ConfigData = result; - return result; - } - - public string GetTarget2FileLocation() - { - string result; - if (_Target2FileLocationPropertyInfo is null) - _Target2FileLocationPropertyInfo = _ConfigurationType.GetProperty("Target2FileLocation", BindingFlags.Instance | BindingFlags.Public); - if (_Target2FileLocationPropertyInfo is null) - result = string.Empty; - else - { - object @object = _Target2FileLocationPropertyInfo.GetValue(_Configuration); - if (@object is null) - result = string.Empty; - else - result = @object.ToString(); - } - return result; - } - - public void ReflectionCreateSelfDescription(string equipmentElementName, int? input, string cellName, string debugConfig, string[] strings, bool[] booleans, long[] numbers, string[] enums) - { - throw new NotImplementedException("Use V2"); - } - - public ConfigDataBase ReflectionCreateSelfDescriptionV2(string json) - { - ConfigData result; - string cellInstanceName; - string equipmentTypeName; - string cellInstanceConnectionName; - string parameterizedModelObjectDefinitionType; - if (!json.Contains(nameof(cellInstanceName))) - throw new Exception(); - if (!json.Contains(nameof(equipmentTypeName))) - throw new Exception(); - if (!json.Contains(nameof(cellInstanceConnectionName))) - throw new Exception(); - if (!json.Contains(nameof(FileConnectorConfiguration))) - throw new Exception(); - if (!json.Contains(nameof(IList))) - throw new Exception(); - if (!json.Contains(nameof(parameterizedModelObjectDefinitionType))) - throw new Exception(); - MethodBase methodBase = new StackFrame().GetMethod(); - JsonElement jsonElement = JsonSerializer.Deserialize(json); - cellInstanceName = jsonElement.GetProperty(nameof(cellInstanceName)).ToString(); - equipmentTypeName = jsonElement.GetProperty(nameof(equipmentTypeName)).ToString(); - cellInstanceConnectionName = jsonElement.GetProperty(nameof(cellInstanceConnectionName)).ToString(); - JsonElement fileConnectorConfigurationJsonElement = jsonElement.GetProperty(nameof(FileConnectorConfiguration)); - parameterizedModelObjectDefinitionType = jsonElement.GetProperty(nameof(parameterizedModelObjectDefinitionType)).ToString(); - if (fileConnectorConfigurationJsonElement.ValueKind != JsonValueKind.Object) - throw new Exception(); - JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions { Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase) } }; - FileConnectorConfiguration fileConnectorConfiguration = JsonSerializer.Deserialize(fileConnectorConfigurationJsonElement.ToString(), jsonSerializerOptions); - _Configuration = fileConnectorConfiguration; - JsonElement modelObjectParameterDefinitionJsonElement = jsonElement.GetProperty(nameof(IList)); - if (modelObjectParameterDefinitionJsonElement.ValueKind != JsonValueKind.Array) - throw new Exception(); - IList modelObjectParameterDefinitions = JsonSerializer.Deserialize>(modelObjectParameterDefinitionJsonElement.ToString(), jsonSerializerOptions); -#if (false) - FileConnectorConfiguration fileConnectorConfigurationOld = GetFileConnectorConfiguration(strings, booleans, numbers, enums); - jsonSerializerOptions = new JsonSerializerOptions { WriteIndented = true }; - string @new = JsonSerializer.Serialize(fileConnectorConfiguration, fileConnectorConfiguration.GetType(), jsonSerializerOptions); - string old = JsonSerializer.Serialize(fileConnectorConfigurationOld, fileConnectorConfiguration.GetType(), jsonSerializerOptions); - if (@new != old) - throw new Exception(); -#endif - if (!(Backbone.Instance is null)) - { - Type type = Backbone.Instance.GetType(); - PropertyInfo propertyInfo = type.GetProperty(nameof(Backbone.Instance.CellName)); - if (!(propertyInfo is null)) - { - MethodInfo methodInfo = propertyInfo.GetSetMethod(nonPublic: true); - if (!(methodInfo is null)) - methodInfo.Invoke(Backbone.Instance, new object[] { cellInstanceName }); - } - } - _Configuration = fileConnectorConfiguration; - result = new ConfigData(this, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, modelObjectParameterDefinitions, parameterizedModelObjectDefinitionType, isEAFHosted: false); - _ConfigData = result; - _Description = new Description(this, result, equipmentControl: null); - Shared0749(); - _FileParameter = new Dictionary(); - Shared1301(_FileParameter, fileConnectorConfiguration); - return result; - } - - public object GetFilePathGeneratorInfo(string reportFullPath, bool isErrorFile) - { - string result; - if (!_Configuration.TargetFileLocation.EndsWith(Path.DirectorySeparatorChar.ToString())) - result = _Configuration.TargetFileLocation; - else - result = Path.GetDirectoryName(_Configuration.TargetFileLocation); - foreach (KeyValuePair keyValuePair in _FileParameter) - result = result.Replace(string.Concat('%', keyValuePair.Key, '%'), keyValuePair.Value); - return result; - } - - private void TriggerEvents(string reportFullPath, Tuple> extractResults) - { - List parameters; - int count = extractResults.Item2.Value.GetArrayLength(); - for (int i = 0; i < count; i++) - { - _Log.Debug(string.Concat("TriggerEvent - {", reportFullPath, "} ", i, " of ", count)); - parameters = _Description.GetParameterValues(this, null, extractResults.Item2.Value, i); -#if (false) - if (!(_EquipmentEvent is null)) - Equipment.DataCollection.TriggerEvent(_EquipmentEvent, parameters); -#endif - if (_ConfigData.UseCyclicalForDescription) - break; - } - if (_ConfigData.IsDatabaseExportToIPDSF && count > 0) - { - _Log.Debug(string.Concat("TriggerEvent - {", reportFullPath, "} ", null, " of ", count)); - parameters = _Description.GetParameterValues(this, null, extractResults.Item2.Value, null); -#if (false) - if (!(_EquipmentEvent is null)) - Equipment.DataCollection.TriggerEvent(_EquipmentEvent, parameters); -#endif - } - } - - public Tuple> ReExtract(string searchDirectory, string sourceFileFilter) - { - Tuple> results; - if (!Directory.Exists(searchDirectory)) - results = null; - else - { - string[] segments; - string[] matches = null; - foreach (string subSourceFileFilter in sourceFileFilter.Split('|')) - { - segments = subSourceFileFilter.Split('\\'); - if (_Configuration.IncludeSubDirectories.Value) - matches = Directory.GetFiles(searchDirectory, segments.Last(), SearchOption.AllDirectories); - else - matches = Directory.GetFiles(searchDirectory, segments.Last(), SearchOption.TopDirectoryOnly); - if (matches.Any()) - break; - } - if (matches is null || !matches.Any()) - results = null; - else - { - string reportFullPath = matches[0]; - results = GetExtractResult(reportFullPath, Description.FileFound); - if (!_ConfigData.EafHosted) - TriggerEvents(Logistics.ReportFullPath, results); - } - } - return results; - } - - public void SetTarget2FileLocation(string value) - { - if (_Target2FileLocationPropertyInfo is null) - _Target2FileLocationPropertyInfo = _ConfigurationType.GetProperty("Target2FileLocation", BindingFlags.Instance | BindingFlags.Public); - if (!(_Target2FileLocationPropertyInfo is null)) - _Target2FileLocationPropertyInfo.SetValue(_Configuration, value); - } - - public void ConfigurationRestore() - { - _Configuration.SourceFileLocation = _OriginalSourceFileLocation; - _Configuration.TargetFileLocation = _OriginalTargetFileLocation; - SetTarget2FileLocation(_OriginalTarget2FileLocation); - _Configuration.ErrorTargetFileLocation = _OriginalErrorTargetFileLocation; - } - - public string GetConfigurationSourceFileLocation() - { - return _Configuration.SourceFileLocation; - } - - public string GetConfigurationTargetFileLocation() - { - return _Configuration.TargetFileLocation; - } - - public string GetConfigurationTargetFileName() - { - return _Configuration.TargetFileName; - } - - public string GetConfigurationTarget2FileLocation() - { - return GetTarget2FileLocation(); - } - - public string GetConfigurationErrorTargetFileLocation() - { - return _Configuration.ErrorTargetFileLocation; - } - - public void SetPlaceHolder(string reportFullPath, string key, string value) - { - if (!string.IsNullOrEmpty(reportFullPath) && _LastReportFullPath != reportFullPath) - _LastReportFullPath = reportFullPath; - if (_SetPlaceHolderMethodInfo is null) - _SetPlaceHolderMethodInfo = _ConfigurationType.GetMethod(nameof(this.SetPlaceHolder)); - object @object = _SetPlaceHolderMethodInfo.Invoke(_Configuration, new object[] { key, value }); - if (!_FileParameter.ContainsKey(key)) - _FileParameter[key] = string.Empty; - _FileParameter[key] = value; - } - - public string ResolveSourcePlaceHolders(string reportFullPath, bool createDirectory = true) - { - string result; - if (!string.IsNullOrEmpty(reportFullPath) && _LastReportFullPath != reportFullPath) - _LastReportFullPath = reportFullPath; - _FileParameter.Clear(); - if (_ResolveSourcePlaceHoldersMethodInfo is null) - _ResolveSourcePlaceHoldersMethodInfo = _ConfigurationType.GetMethod(nameof(this.ResolveSourcePlaceHolders)); - if (_ResolveSourcePlaceHoldersMethodInfo is null) - result = string.Empty; - else - { - object @object = _ResolveSourcePlaceHoldersMethodInfo.Invoke(_Configuration, new object[] { createDirectory }); - if (@object is null) - result = string.Empty; - else - result = @object.ToString(); - } - return result; - } - - public string ResolveTargetPlaceHolders(string reportFullPath, bool createDirectory = true, string fileFoundPath = "") - { - string result; - if (!string.IsNullOrEmpty(reportFullPath) && _LastReportFullPath != reportFullPath) - _LastReportFullPath = reportFullPath; - if (!string.IsNullOrEmpty(reportFullPath) || !string.IsNullOrEmpty(_LastReportFullPath)) - { - //bool isErrorFile = false; - //Ifx.Eaf.EquipmentConnector.File.Component.FilePathGenerator filePathGenerator; - //if (!string.IsNullOrEmpty(reportFullPath)) - // filePathGenerator = new Ifx.Eaf.EquipmentConnector.File.Component.FilePathGenerator(_Configuration, reportFullPath, isErrorFile, _FileParameter); - //else if (!string.IsNullOrEmpty(_LastReportFullPath)) - // filePathGenerator = new Ifx.Eaf.EquipmentConnector.File.Component.FilePathGenerator(_Configuration, _LastReportFullPath, isErrorFile, _FileParameter); - //else - // throw new Exception(); - //result = filePathGenerator.GetTargetFolder(); - } - _FileParameter.Clear(); - if (_ResolveTargetPlaceHoldersMethodInfo is null) - _ResolveTargetPlaceHoldersMethodInfo = _ConfigurationType.GetMethod(nameof(this.ResolveTargetPlaceHolders)); - if (_ResolveTargetPlaceHoldersMethodInfo is null) - result = string.Empty; - else - { - object @object = _ResolveTargetPlaceHoldersMethodInfo.Invoke(_Configuration, new object[] { createDirectory, fileFoundPath }); - if (@object is null) - result = string.Empty; - else - result = @object.ToString(); - } - return result; - } - - public string ResolveTarget2PlaceHolders(string reportFullPath, bool createDirectory = true, string fileFoundPath = "") - { - string result; - if (!string.IsNullOrEmpty(reportFullPath) && _LastReportFullPath != reportFullPath) - _LastReportFullPath = reportFullPath; - _FileParameter.Clear(); - if (_ResolveTarget2PlaceHoldersMethodInfo is null) - _ResolveTarget2PlaceHoldersMethodInfo = _ConfigurationType.GetMethod(nameof(this.ResolveTarget2PlaceHolders)); - if (_ResolveTarget2PlaceHoldersMethodInfo is null) - result = string.Empty; - else - { - object @object = _ResolveTarget2PlaceHoldersMethodInfo.Invoke(_Configuration, new object[] { createDirectory, fileFoundPath }); - if (@object is null) - result = string.Empty; - else - result = @object.ToString(); - } - return result; - } - - public string ResolveErrorTargetPlaceHolders(string reportFullPath, bool createDirectory = true, string fileFoundPath = "") - { - string result; - if (!string.IsNullOrEmpty(reportFullPath) && _LastReportFullPath != reportFullPath) - _LastReportFullPath = reportFullPath; - if (!string.IsNullOrEmpty(reportFullPath) || !string.IsNullOrEmpty(_LastReportFullPath)) - { - //bool isErrorFile = true; - //Ifx.Eaf.EquipmentConnector.File.Component.FilePathGenerator filePathGenerator; - //if (!string.IsNullOrEmpty(reportFullPath)) - // filePathGenerator = new Ifx.Eaf.EquipmentConnector.File.Component.FilePathGenerator(_Configuration, reportFullPath, isErrorFile, _FileParameter); - //else if (!string.IsNullOrEmpty(_LastReportFullPath)) - // filePathGenerator = new Ifx.Eaf.EquipmentConnector.File.Component.FilePathGenerator(_Configuration, _LastReportFullPath, isErrorFile, _FileParameter); - //else - // throw new Exception(); - //result = filePathGenerator.GetTargetFolder(); - } - _FileParameter.Clear(); - if (_ResolveErrorTargetPlaceHoldersMethodInfo is null) - _ResolveErrorTargetPlaceHoldersMethodInfo = _ConfigurationType.GetMethod(nameof(this.ResolveErrorTargetPlaceHolders)); - if (_ResolveErrorTargetPlaceHoldersMethodInfo is null) - result = string.Empty; - else - { - object @object = _ResolveErrorTargetPlaceHoldersMethodInfo.Invoke(_Configuration, new object[] { createDirectory, fileFoundPath }); - if (@object is null) - result = string.Empty; - else - result = @object.ToString(); - } - return result; - } - - public string GetReportFullPath(Dictionary keyValuePairs) - { - string result; - if (keyValuePairs is null || !keyValuePairs.Any()) - result = string.Empty; - else - { - string key; - key = "Param1"; - Dictionary eventDataList; - if (!keyValuePairs.ContainsKey(key)) - eventDataList = keyValuePairs; - else - eventDataList = (Dictionary)keyValuePairs[key]; - key = "InputFileName"; - if (!eventDataList.ContainsKey(key)) - result = string.Empty; - else - result = eventDataList[key].ToString(); - } - return result; - } - - public void SetFileParameter(string key, string value) - { - if (_Configuration is null || _Configuration.TargetFileLocation.Contains(string.Concat("%", key, "%")) || _Configuration.ErrorTargetFileLocation.Contains(string.Concat("%", key, "%")) || _Configuration.TargetFileName.Contains(string.Concat("%", key, "%")) || _Configuration.ErrorTargetFileName.Contains(string.Concat("%", key, "%"))) - { - if (_FileParameter.ContainsKey(key)) - _FileParameter[key] = value; - else - _FileParameter.Add(key, value); - } - } - - public void SetFileParameterLotID(string value, bool includeLogisticsSequence = true) - { - string key; - if (!includeLogisticsSequence) - key = "LotID"; - else - { - key = "LotIDWithLogisticsSequence"; - value = string.Concat(value, "_", Logistics.Sequence, "_", DateTime.Now.Ticks - Logistics.Sequence); - } - SetFileParameter(key, value); - } - - public void SetFileParameterLotIDToLogisticsMID(bool includeLogisticsSequence = true) - { - string key; - if (!includeLogisticsSequence) - key = "LotID"; - else - key = "LotIDWithLogisticsSequence"; - string value = string.Concat(Logistics.MID, "_", Logistics.Sequence, "_", DateTime.Now.Ticks - Logistics.Sequence); - SetFileParameter(key, value); - } - - public void SetFileParameterSystemDateTimeToLogisticsSequence() - { - string key = "SystemDateTime"; - string value = string.Concat(DateTime.Now.ToString("hh;mm;ss_tt_"), Logistics.Sequence); - SetFileParameter(key, value); - } - - private void UpdateLastTicksDuration(long ticksDuration) - { - if (ticksDuration < 50000000) - ticksDuration = 50000000; - _LastTicksDuration = (long)Math.Ceiling(ticksDuration * .667); - } - - private string GetTupleFile(Logistics logistics, IScopeInfo scopeInfo, string duplicateDirectory) - { - string result; - string rds; - string dateValue; - string datePlaceholder; - string[] segments = logistics.MID.Split('-'); - if (segments.Length < 2) - rds = "%RDS%"; - else - rds = segments[1]; - segments = scopeInfo.FileName.Split(new string[] { "DateTime:" }, StringSplitOptions.RemoveEmptyEntries); - if (segments.Length == 0) - result = string.Concat(duplicateDirectory, @"\", scopeInfo.FileNameWithoutExtension.Replace("%RDS%", rds)); - else - { - datePlaceholder = "%DateTime%"; - segments = segments[1].Split('%'); - dateValue = logistics.DateTimeFromSequence.ToString(segments[0]); - foreach (string segment in scopeInfo.FileName.Split('%')) - { - if (!segment.Contains(segments[0])) - continue; - datePlaceholder = string.Concat('%', segment, '%'); - } - result = string.Concat(duplicateDirectory, @"\", scopeInfo.FileName.Replace("%RDS%", rds).Replace(datePlaceholder, dateValue)); - } - if (result.Contains('%')) - throw new Exception("Placeholder exists!"); - return result; - } - - private void WaitForFileConsumption(string sourceDirectoryCloaking, Logistics logistics, DateTime dateTime, string successDirectory, string duplicateDirectory, string duplicateFile, List> tuples) - { - bool check; - long preWait; - string tupleFile; - List consumedFileIndices = new List(); - List duplicateFiles = new List(); - bool moreThanAnHour = (_BreakAfterSeconds > 3600); - StringBuilder stringBuilder = new StringBuilder(); - long breakAfter = dateTime.AddSeconds(_BreakAfterSeconds).Ticks; - if (moreThanAnHour) - preWait = dateTime.AddSeconds(30).Ticks; - else - preWait = dateTime.AddTicks(_LastTicksDuration).Ticks; - if (!tuples.Any()) - duplicateFiles.Add(duplicateFile); - string fileName = Path.GetFileNameWithoutExtension(logistics.ReportFullPath); - string successFile = string.Concat(successDirectory, @"\", Path.GetFileName(logistics.ReportFullPath)); - foreach (Tuple tuple in tuples) - { - if (tuple.Item1.FileName.StartsWith(@"\")) - tupleFile = tuple.Item1.FileName; - else if (!tuple.Item1.FileName.Contains('%')) - tupleFile = string.Concat(duplicateDirectory, @"\", fileName, "_", tuple.Item1.FileNameWithoutExtension, ".pdsfc"); - else - tupleFile = GetTupleFile(logistics, tuple.Item1, duplicateDirectory); - duplicateFiles.Add(tupleFile); - File.WriteAllText(tupleFile, tuple.Item2); - } - for (short i = 0; i < short.MaxValue; i++) - { - if (DateTime.Now.Ticks > preWait) - break; - Thread.Sleep(500); - } - if (!moreThanAnHour) - { - for (short z = 0; z < short.MaxValue; z++) - { - try - { - check = (string.IsNullOrEmpty(successDirectory) || File.Exists(successFile)); - if (check) - { - consumedFileIndices.Clear(); - for (int i = 0; i < duplicateFiles.Count; i++) - { - if (!File.Exists(duplicateFiles[i])) - consumedFileIndices.Add(i); - } - if (consumedFileIndices.Count == duplicateFiles.Count) - break; - } - } - catch (Exception) { } - if (DateTime.Now.Ticks > breakAfter) - { - for (int i = 0; i < duplicateFiles.Count; i++) - { - if (File.Exists(duplicateFiles[i])) - { - try - { File.Delete(duplicateFiles[i]); } - catch (Exception) { } - stringBuilder.Append("<").Append(duplicateFiles[i]).Append("> "); - } - } - throw new Exception(string.Concat("After {", _BreakAfterSeconds, "} seconds, right side of {", sourceDirectoryCloaking, "} didn't consume file(s) ", stringBuilder)); - } - Thread.Sleep(500); - } - } - } - - private IEnumerable GetDirectoriesRecursively(string path, string directoryNameSegment = null) - { - Queue queue = new Queue(); - queue.Enqueue(path); - while (queue.Count > 0) - { - path = queue.Dequeue(); - foreach (string subDirectory in Directory.GetDirectories(path)) - { - queue.Enqueue(subDirectory); - if (string.IsNullOrEmpty(directoryNameSegment) || Path.GetFileName(subDirectory).Contains(directoryNameSegment)) - yield return subDirectory; - } - } - } - - private string GetProcessedDirectory(string progressPath, Logistics logistics, DateTime dateTime, string duplicateDirectory) - { - string result = duplicateDirectory; - string logisticsSequence = logistics.Sequence.ToString(); - string[] matchDirectories; - if (!_ConfigData.EafHosted) - matchDirectories = new string[] { Path.GetDirectoryName(Path.GetDirectoryName(logistics.ReportFullPath)) }; - else - matchDirectories = new string[] { GetDirectoriesRecursively(Path.GetDirectoryName(progressPath), logisticsSequence).FirstOrDefault() }; - if (matchDirectories.Length == 0 || string.IsNullOrEmpty(matchDirectories[0])) - matchDirectories = Directory.GetDirectories(duplicateDirectory, string.Concat('*', logisticsSequence, '*'), SearchOption.AllDirectories); - if ((matchDirectories is null) || matchDirectories.Length != 1) - throw new Exception("Didn't find directory by logistics sequence"); - if (!matchDirectories[0].Contains("_processed")) - { - result = string.Concat(matchDirectories[0].Split(new string[] { logisticsSequence }, StringSplitOptions.None)[0], logistics.DateTimeFromSequence.ToString("yyyy-MM-dd_hh;mm_tt_"), dateTime.Ticks - logistics.Sequence, "_processed"); - Directory.Move(matchDirectories[0], result); - result = string.Concat(result, @"\", logistics.Sequence); - if (!Directory.Exists(result)) - Directory.CreateDirectory(result); - } - return result; - } - - private string WriteScopeInfo(string progressPath, Logistics logistics, DateTime dateTime, string duplicateDirectory, List> tuples) - { - string result = GetProcessedDirectory(progressPath, logistics, dateTime, duplicateDirectory); - string tupleFile; - string fileName = Path.GetFileNameWithoutExtension(logistics.ReportFullPath); - string duplicateFile = string.Concat(result, @"\", fileName, ".pdsf"); - foreach (Tuple tuple in tuples) - { - if (tuple.Item1.FileName.StartsWith(@"\")) - tupleFile = tuple.Item1.FileName; - else - tupleFile = string.Concat(result, @"\", fileName, "_", tuple.Item1.FileNameWithoutExtension, ".pdsfc"); - File.WriteAllText(tupleFile, tuple.Item2); - } - File.Copy(logistics.ReportFullPath, duplicateFile, overwrite: true); - return result; - } - - private void CreateProgressDirectory(string progressPath, Logistics logistics, int? duplicator, string[] exceptionLines) - { - string progressDirectory; - StringBuilder stringBuilder = new StringBuilder(); - if (duplicator is null || duplicator.Value == 0) - progressDirectory = string.Concat(progressPath, @"\", ProcessDataStandardFormat.EquipmentIntegration()); - else - { - stringBuilder.Clear(); - for (int i = 0; i < duplicator.Value; i++) - { - if (i > 0 && (i % 2) == 0) - stringBuilder.Append(' '); - stringBuilder.Append('-'); - } - progressDirectory = string.Concat(progressPath, @"\", (duplicator.Value + 1).ToString().PadLeft(2, '0'), " ", stringBuilder).Trim(); - } - DateTime dateTime = DateTime.Now; - CultureInfo cultureInfo = new CultureInfo("en-US"); - Calendar calendar = cultureInfo.Calendar; - string weekOfYear = calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); - progressDirectory = string.Concat(progressDirectory, @"\", dateTime.ToString("yyyy"), "_Week_", weekOfYear, @"\", logistics.MID, "_", logistics.Sequence, "_", DateTime.Now.Ticks - logistics.Sequence); - if (!Directory.Exists(progressDirectory)) - Directory.CreateDirectory(progressDirectory); - if (!(exceptionLines is null)) - { - string fileName = string.Concat(progressDirectory, @"\readme.txt"); - try - { File.WriteAllLines(fileName, exceptionLines); } - catch (Exception) { } - } - } - - private void Shared0192(string reportFullPath) - { - if (!string.IsNullOrEmpty(reportFullPath)) - { - FileInfo fileInfo = new FileInfo(reportFullPath); - if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) - File.SetLastWriteTime(reportFullPath, fileInfo.CreationTime); - } - } - - public void Shared0231(List directories) - { - if (_Configuration.PostProcessingMode != FileConnectorConfiguration.PostProcessingModeEnum.Copy) - { - foreach (string directory in (from l in directories orderby l.Split('\\').Length descending select l).Distinct()) - { - if (Directory.Exists(directory) && !Directory.GetFiles(directory).Any()) - Directory.Delete(directory); - } - } - } - - private void WriteIO(string reportFullPath) - { - if (!_ConfigData.IsSourceTimer && !_ConfigData.IsDatabaseExportToIPDSF) - { - string fileName = string.Concat(reportFullPath, ".IO"); - if (!(_Configuration is null) && _Configuration.PostProcessingMode == FileConnectorConfiguration.PostProcessingModeEnum.Copy) - File.WriteAllLines(fileName, new string[] { _Configuration.TargetFileName, Logistics.Sequence.ToString() }); - } - } - - private void Shared0413(DateTime dateTime, bool isDummyRun, string successDirectory, string duplicateDirectory, List> tuples, string duplicateFile) - { - if (!isDummyRun && _ConfigData.EafHosted) - WaitForFileConsumption(_Configuration.SourceDirectoryCloaking, Logistics, dateTime, successDirectory, duplicateDirectory, duplicateFile, tuples); - else - { - long breakAfter = DateTime.Now.AddSeconds(_Configuration.ConnectionRetryInterval.Value).Ticks; - for (short i = 0; i < short.MaxValue; i++) - { - if (!_ConfigData.EafHosted || DateTime.Now.Ticks > breakAfter) - break; - Thread.Sleep(500); - } - } - } - - public void Shared0449(string to, string[] exceptionLines) - { - if (_ConfigData.Duplicator.HasValue) - CreateProgressDirectory(_ConfigData.ProgressPath, Logistics, (int?)_ConfigData.Duplicator, exceptionLines); - else - { - string fileName = string.Concat(to, @"\readme.txt"); - try - { - if (!Directory.Exists(to)) - Directory.CreateDirectory(to); - File.WriteAllLines(fileName, exceptionLines); - } - catch (Exception ex) { _Log.Error(ex.Message); } - } - } - - private static void Shared0607(string reportFullPath, string duplicateDirectory, string logisticsSequence, string destinationDirectory) - { - if (destinationDirectory == duplicateDirectory) - throw new Exception("Check Target File Folder for %LotIDWithLogisticsSequence%_in process on CI (not Duplicator)"); - if (destinationDirectory.EndsWith(logisticsSequence)) - destinationDirectory = Path.GetDirectoryName(destinationDirectory); - string[] deleteFiles = Directory.GetFiles(destinationDirectory, "*", SearchOption.AllDirectories); - if (deleteFiles.Length > 250) - throw new Exception("Safety net!"); - foreach (string file in deleteFiles) - File.Delete(file); - Directory.Delete(destinationDirectory, recursive: true); - File.Delete(reportFullPath); - } - - public void Shared0749() - { - long breakAfterSeconds; - if (_Configuration is null) - breakAfterSeconds = 360; - else - { - if (_Configuration.FileScanningOption == FileConnectorConfiguration.FileScanningOptionEnum.TimeBased) - breakAfterSeconds = 360; - else - breakAfterSeconds = Math.Abs(_Configuration.FileScanningIntervalInSeconds.Value); - } - _BreakAfterSeconds = breakAfterSeconds; - UpdateLastTicksDuration(breakAfterSeconds * 10000000); - if (_ConfigData.Duplicator.HasValue) - { - if (string.IsNullOrEmpty(_Configuration.TargetFileLocation) || string.IsNullOrEmpty(_Configuration.ErrorTargetFileLocation)) - throw new Exception("_Configuration is empty?"); - if (_Configuration.TargetFileLocation.Contains('%') || _Configuration.ErrorTargetFileLocation.Contains('%')) - throw new Exception("_Configuration is incorrect for a duplicator!"); - if (!(_Configuration is null)) - { - if (string.IsNullOrEmpty(_Configuration.SourceDirectoryCloaking)) - throw new Exception("SourceDirectoryCloaking is empty?"); - if (!_Configuration.SourceDirectoryCloaking.StartsWith("~")) - throw new Exception("SourceDirectoryCloaking is incorrect for a duplicator!"); - } - } - } - - public string[] Shared1124(string reportFullPath, Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception = null) - { - string[] results; - bool isErrorFile = !(exception is null); - if (!to.EndsWith(@"\")) - string.Concat(to, @"\"); - if (!isErrorFile) - results = new string[] { }; - else - { - results = new string[] { Logistics.Sequence.ToString(), reportFullPath, from, resolvedFileLocation, to, string.Empty, string.Empty, exception.Message, string.Empty, string.Empty, exception.StackTrace }; - Shared0449(to, results); - } - if (!(extractResults is null) && !(extractResults.Item3 is null) && extractResults.Item3.Any()) - { - string itemFile; - List directories = new List(); - foreach (FileInfo sourceFile in extractResults.Item3) - { - if (sourceFile.FullName != reportFullPath) - { - itemFile = sourceFile.FullName.Replace(from, to); - Shared1880(reportFullPath, itemFile, directories, sourceFile, isErrorFile); - } - else if (!isErrorFile && !(Logistics is null)) - Shared1811(to, sourceFile); - } - Shared0231(directories); - } - return results; - } - - private void WritePDSF(JsonElement jsonElement) - { - string directory; - string eventName = _ConfigData.GetEventName(); - string equipmentType = _ConfigData.GetEquipmentType(); - if (_ConfigData.EquipmentConnection is null || _ConfigData.EquipmentConnection.Value == _ConfigData.EquipmentType) - directory = Path.Combine(_ConfigData.TracePath, equipmentType, "Source", _ConfigData.CellName, _ConfigData.EquipmentElementName); - else - directory = Path.Combine(_ConfigData.VillachPath, equipmentType, "Target"); - if (!Directory.Exists(directory)) - Directory.CreateDirectory(directory); - string file = Path.Combine(directory, string.Concat(Logistics.MesEntity, "_", Logistics.Sequence, ".ipdsf")); - string lines = ProcessDataStandardFormat.GetPDSFText(this, eventName, equipmentType, jsonElement, logisticsText: string.Empty); - File.WriteAllText(file, lines); - if (Logistics.TotalSecondsSinceLastWriteTimeFromSequence > 600) - { - try - { File.SetLastWriteTime(file, Logistics.DateTimeFromSequence); } - catch (Exception) { } - } - } - - private void Shared1277(string reportFullPath, string destinationDirectory, string logisticsSequence, string jobIdDirectory, string json) - { - string ecCharacterizationSi = Path.GetDirectoryName(Path.GetDirectoryName(jobIdDirectory)); - string destinationJobIdDirectory = string.Concat(ecCharacterizationSi, @"\Processed\", Logistics.JobID); - if (!Directory.Exists(destinationJobIdDirectory)) - Directory.CreateDirectory(destinationJobIdDirectory); - destinationJobIdDirectory = string.Concat(destinationJobIdDirectory, @"\", Path.GetFileName(destinationDirectory).Split(new string[] { logisticsSequence }, StringSplitOptions.None)[0], Logistics.DateTimeFromSequence.ToString("yyyy-MM-dd_hh;mm_tt_"), DateTime.Now.Ticks - Logistics.Sequence); - string sequenceDirectory = string.Concat(destinationJobIdDirectory, @"\", logisticsSequence); - string jsonFileName = string.Concat(sequenceDirectory, @"\", Path.GetFileNameWithoutExtension(reportFullPath), ".json"); - Directory.Move(destinationDirectory, destinationJobIdDirectory); - if (!Directory.Exists(sequenceDirectory)) - Directory.CreateDirectory(sequenceDirectory); - File.Copy(reportFullPath, string.Concat(sequenceDirectory, @"\", Path.GetFileName(reportFullPath)), overwrite: true); - File.WriteAllText(jsonFileName, json); - } - - public void Shared1301(Dictionary fileParameter, FileConnectorConfiguration configuration) - { - if (fileParameter is null) - throw new Exception("File Parameter is null?"); - _FileParameter = fileParameter; - _LastReportFullPath = string.Empty; - _TargetFileLocationOkay = true; - _ErrorTargetFileLocationOkay = true; - _ConfigurationType = configuration.GetType(); - _OriginalSourceFileLocation = configuration.SourceFileLocation; - _OriginalTargetFileLocation = configuration.TargetFileLocation; - _OriginalTarget2FileLocation = GetTarget2FileLocation(); - _OriginalErrorTargetFileLocation = configuration.ErrorTargetFileLocation; - if (_TargetFileLocationOkay) - { } - if (_ErrorTargetFileLocationOkay) - { } - } - - private string[] Shared1567(string reportFullPath, List> tuples) - { - string[] results; - string historicalText; - string logisticsSequence = Logistics.Sequence.ToString(); - string jobIdDirectory = string.Concat(Path.GetDirectoryName(Path.GetDirectoryName(_Configuration.TargetFileLocation)), @"\", Logistics.JobID); - if (!Directory.Exists(jobIdDirectory)) - Directory.CreateDirectory(jobIdDirectory); - string[] matchDirectories; - if (!_ConfigData.EafHosted) - matchDirectories = new string[] { Path.GetDirectoryName(Path.GetDirectoryName(reportFullPath)) }; - else - matchDirectories = Directory.GetDirectories(jobIdDirectory, string.Concat(Logistics.MID, '*', logisticsSequence, '*'), SearchOption.TopDirectoryOnly); - if ((matchDirectories is null) || matchDirectories.Length != 1) - throw new Exception("Didn't find directory by logistics sequence"); - string fileName = Path.GetFileNameWithoutExtension(reportFullPath); - string sequenceDirectory = string.Concat(matchDirectories[0], @"\", logisticsSequence); - if (!Directory.Exists(sequenceDirectory)) - Directory.CreateDirectory(sequenceDirectory); - foreach (Tuple tuple in tuples) - { - fileName = string.Concat(sequenceDirectory, @"\", fileName, "_", tuple.Item1.FileNameWithoutExtension, ".pdsfc"); - if (_ConfigData.EafHosted) - File.WriteAllText(fileName, tuple.Item2); - else - { - historicalText = File.ReadAllText(fileName); - if (tuple.Item2 != historicalText) - throw new Exception("File doesn't match historical!"); - } - } - results = matchDirectories; - return results; - } - - public void Shared1811(string to, FileInfo sourceFile) - { - if (_ConfigData.Duplicator is null && _Configuration.SourceFileFilter != "*" && sourceFile.Exists && sourceFile.Length < ConfigData.MinFileLength) - { - string directoryName = Path.GetFileName(to); - string jobIdDirectory = Path.GetDirectoryName(to); - CultureInfo cultureInfo = new CultureInfo("en-US"); - Calendar calendar = cultureInfo.Calendar; - DateTime dateTime = DateTime.Now.AddMinutes(-15); - string weekOfYear = calendar.GetWeekOfYear(Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); - string weekDirectory = string.Concat(Logistics.DateTimeFromSequence.ToString("yyyy"), "_Week_", weekOfYear, @"\", Logistics.DateTimeFromSequence.ToString("yyyy-MM-dd")); - string destinationDirectory = string.Concat(jobIdDirectory, @"\_ Ignore 100 bytes\", weekDirectory, @"\", directoryName); - if (!Directory.Exists(destinationDirectory)) - Directory.CreateDirectory(destinationDirectory); - File.Move(sourceFile.FullName, string.Concat(destinationDirectory, @"\", sourceFile.Name)); - try - { - string[] checkDirectories = Directory.GetDirectories(jobIdDirectory, "*", SearchOption.TopDirectoryOnly); - foreach (string checkDirectory in checkDirectories) - { - if (!checkDirectory.Contains("_")) - continue; - if (Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly).Any()) - continue; - if (Directory.GetFiles(checkDirectory, "*", SearchOption.TopDirectoryOnly).Any()) - continue; - if (Directory.GetDirectories(checkDirectory, "*", SearchOption.AllDirectories).Any()) - continue; - if (Directory.GetFiles(checkDirectory, "*", SearchOption.AllDirectories).Any()) - continue; - if (new DirectoryInfo(checkDirectory).CreationTime > dateTime) - continue; - Directory.Delete(checkDirectory, recursive: false); - } - } - catch (Exception) { throw; } - } - } - - private void Shared1872(string reportFullPath, Exception exception) - { - if (!string.IsNullOrEmpty(reportFullPath) && !(exception is null)) - { - if (!(_Configuration is null) && _ConfigData.Duplicator.HasValue) - try - { File.WriteAllLines(string.Concat(_Configuration.ErrorTargetFileLocation, @"\", Path.GetFileNameWithoutExtension(reportFullPath), ".err"), new string[] { Logistics.Sequence.ToString(), exception.Message, string.Empty, string.Empty, exception.StackTrace }); } - catch (Exception) { } - if (!_ConfigData.IsSourceTimer && !_ConfigData.IsDatabaseExportToIPDSF) - { - string fileName = string.Concat(reportFullPath, ".IO"); - if (!(_Configuration is null) && _Configuration.PostProcessingMode == FileConnectorConfiguration.PostProcessingModeEnum.Copy) - try - { File.WriteAllLines(fileName, new string[] { _Configuration.TargetFileName, Logistics.Sequence.ToString(), exception.Message, string.Empty, string.Empty, exception.StackTrace }); } - catch (Exception) { } - } - if (_ConfigData.EquipmentConnection.HasValue && _ConfigData.EquipmentConnection.Value != _ConfigData.EquipmentType) - { - if (!reportFullPath.EndsWith(".pdsf") && !reportFullPath.EndsWith(".ipdsf")) - { - string fileName = string.Concat(reportFullPath, ".IO"); - try - { File.WriteAllLines(fileName, new string[] { _Configuration.TargetFileName, Logistics.Sequence.ToString(), exception.Message, string.Empty, string.Empty, exception.StackTrace }); } - catch (Exception) { } - } - else - { - List debug = new List { "//Exception:" }; - if (!(Logistics is null) && !(Logistics.Tags is null)) - debug.AddRange(Logistics.Tags); - debug.Add(exception.Message); - debug.Add(exception.StackTrace); - try - { File.AppendAllLines(reportFullPath, debug); } - catch (Exception) { } - if (!(Logistics is null) && Logistics.DateTimeFromSequence != DateTime.MinValue && Logistics.TotalSecondsSinceLastWriteTimeFromSequence > 600) - { - try - { File.SetLastWriteTime(reportFullPath, Logistics.DateTimeFromSequence); } - catch (Exception) { } - } - } - } - } - } - - public void Shared1880(string reportFullPath, string itemFile, List directories, FileInfo sourceFile, bool isErrorFile) - { - string itemDirectory; - directories.Add(Path.GetDirectoryName(sourceFile.FullName)); - itemDirectory = Path.GetDirectoryName(itemFile); - FileConnectorConfiguration.PostProcessingModeEnum processingModeEnum; - if (!isErrorFile) - processingModeEnum = _Configuration.PostProcessingMode.Value; - else - processingModeEnum = _Configuration.ErrorPostProcessingMode.Value; - if (processingModeEnum != FileConnectorConfiguration.PostProcessingModeEnum.Delete && !Directory.Exists(itemDirectory)) - { - Directory.CreateDirectory(itemDirectory); - FileInfo fileInfo = new FileInfo(reportFullPath); - Directory.SetCreationTime(itemDirectory, fileInfo.LastWriteTime); - } - if (_ConfigData.EafHosted) - { - switch (processingModeEnum) - { - case FileConnectorConfiguration.PostProcessingModeEnum.Move: - File.Move(sourceFile.FullName, itemFile); - break; - case FileConnectorConfiguration.PostProcessingModeEnum.Copy: - File.Copy(sourceFile.FullName, itemFile); - break; - case FileConnectorConfiguration.PostProcessingModeEnum.Delete: - File.Delete(sourceFile.FullName); - break; - default: - throw new Exception(); - } - } - } - - public void WaitForThread(Thread thread, List threadExceptions) - { - if (!(thread is null)) - { - System.Threading.ThreadState threadState; - for (short i = 0; i < short.MaxValue; i++) - { - if (thread is null) - break; - else - { - threadState = thread.ThreadState; - if (threadState != System.Threading.ThreadState.Running && threadState != System.Threading.ThreadState.WaitSleepJoin) - break; - } - Thread.Sleep(500); - } - lock (threadExceptions) - { - if (threadExceptions.Any()) - { - foreach (Exception item in threadExceptions) - _Log.Error(string.Concat(item.Message, Environment.NewLine, Environment.NewLine, item.StackTrace)); - Exception exception = threadExceptions[0]; - threadExceptions.Clear(); - throw exception; - } - } - } - } - - } - -} \ No newline at end of file diff --git a/Adaptation/FileHandlers/MET08DDUPSP1TBI/FileRead.cs b/Adaptation/FileHandlers/MET08DDUPSP1TBI/FileRead.cs new file mode 100644 index 0000000..d4e136b --- /dev/null +++ b/Adaptation/FileHandlers/MET08DDUPSP1TBI/FileRead.cs @@ -0,0 +1,512 @@ +using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared; +using Adaptation.Shared.Duplicator; +using Adaptation.Shared.Methods; +using Adaptation.Shared.Metrology; +using Infineon.Monitoring.MonA; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Reflection; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Threading; + +namespace Adaptation.FileHandlers.MET08DDUPSP1TBI; + +public class FileRead : Shared.FileRead, IFileRead +{ + + private string _LastLines; + private readonly Timer _Timer; + private int _LastDummyRunIndex; + private readonly bool _IsDummy; + private readonly bool _IsNaEDA; + private readonly bool _IsXToAPC; + private readonly string _IqsFile; + private readonly bool _IsXToIQSSi; + private readonly bool _IsXToSPaCe; + private readonly string _MemoryPath; + private readonly bool _IsXToOpenInsight; + private readonly string _GhostPCLFileName; + private readonly string _OpenInsightFilePattern; + private readonly bool _IsXToOpenInsightMetrologyViewer; + private readonly Dictionary _CellNames; + private readonly string _OpenInsightMetrologyViewerAPI; + private readonly bool _IsXToOpenInsightMetrologyViewerAttachments; + + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : + base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + { + _MinFileLength = 10; + _NullData = string.Empty; + _Logistics = new Logistics(this); + if (_FileParameter is null) + throw new Exception(cellInstanceConnectionName); + if (_ModelObjectParameterDefinitions is null) + throw new Exception(cellInstanceConnectionName); + if (!_IsDuplicator) + throw new Exception(cellInstanceConnectionName); + _LastDummyRunIndex = -1; + _IsDummy = _Hyphens == (int)Hyphen.IsDummy; + _IsNaEDA = _Hyphens == (int)Hyphen.IsNaEDA; + _IsXToAPC = _Hyphens == (int)Hyphen.IsXToAPC; + _CellNames = new Dictionary(); + _IsXToIQSSi = _Hyphens == (int)Hyphen.IsXToIQSSi; + _IsXToSPaCe = _Hyphens == (int)Hyphen.IsXToSPaCe; + _IsXToOpenInsight = _Hyphens == (int)Hyphen.IsXToOpenInsight; + _IqsFile = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "IQS.File"); + _IsXToOpenInsightMetrologyViewer = _Hyphens == (int)Hyphen.IsXToOpenInsightMetrologyViewer; + _MemoryPath = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Path.Memory"); + _IsXToOpenInsightMetrologyViewerAttachments = _Hyphens == (int)Hyphen.IsXToOpenInsightMetrologyViewerAttachments; + _OpenInsightFilePattern = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "OpenInsight.FilePattern"); + _OpenInsightMetrologyViewerAPI = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "OpenInsight.MetrologyViewerAPI"); + ModelObjectParameterDefinition[] cellInstanceCollection = GetProperties(cellInstanceConnectionName, modelObjectParameters, "CellInstance.", ".Path"); + foreach (ModelObjectParameterDefinition modelObjectParameterDefinition in cellInstanceCollection) + _CellNames.Add(modelObjectParameterDefinition.Name.Split('.')[1], modelObjectParameterDefinition.Value); + _GhostPCLFileName = string.Concat(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), @"\gpcl6win64.exe"); + if (_IsEAFHosted && _IsXToOpenInsightMetrologyViewerAttachments && !File.Exists(_GhostPCLFileName)) + throw new Exception("Ghost PCL FileName doesn't Exist!"); + if (_IsDummy) + { + if (Debugger.IsAttached || fileConnectorConfiguration.PreProcessingMode == FileConnectorConfiguration.PreProcessingModeEnum.Process) + { + _Timer = new Timer(Callback, null, Timeout.Infinite, Timeout.Infinite); + Callback(null); + } + else + { + int milliSeconds; + milliSeconds = (int)(fileConnectorConfiguration.FileScanningIntervalInSeconds * 1000 / 2); + _Timer = new Timer(Callback, null, milliSeconds, Timeout.Infinite); + milliSeconds += 2000; + } + } + } + + void IFileRead.Move(Tuple> extractResults, Exception exception) => Move(extractResults, exception); + + void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); + + string IFileRead.GetEventDescription() + { + string result = _Description.GetEventDescription(); + return result; + } + + List IFileRead.GetHeaderNames() + { + List results = _Description.GetHeaderNames(); + return results; + } + + string[] IFileRead.Move(Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception) + { + string[] results = Move(extractResults, to, from, resolvedFileLocation, exception); + return results; + } + + JsonProperty[] IFileRead.GetDefault() + { + JsonProperty[] results = _Description.GetDefault(this, _Logistics); + return results; + } + + Dictionary IFileRead.GetDisplayNamesJsonElement() + { + Dictionary results = _Description.GetDisplayNamesJsonElement(this); + return results; + } + + List IFileRead.GetDescriptions(IFileRead fileRead, List tests, IProcessData processData) + { + List results = _Description.GetDescriptions(fileRead, _Logistics, tests, processData); + return results; + } + + Tuple> IFileRead.GetExtractResult(string reportFullPath, string eventName) + { + Tuple> results; + if (string.IsNullOrEmpty(eventName)) + throw new Exception(); + _ReportFullPath = reportFullPath; + DateTime dateTime = DateTime.Now; + results = GetExtractResult(reportFullPath, dateTime); + if (results.Item3 is null) + results = new Tuple>(results.Item1, Array.Empty(), JsonSerializer.Deserialize("[]"), results.Item4); + if (results.Item3.Length > 0 && _IsEAFHosted) + WritePDSF(this, results.Item3); + UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks); + return results; + } + + Tuple> IFileRead.ReExtract() + { + Tuple> results; + List headerNames = _Description.GetHeaderNames(); + Dictionary keyValuePairs = _Description.GetDisplayNamesJsonElement(this); + results = ReExtract(this, headerNames, keyValuePairs); + return results; + } + + void IFileRead.CheckTests(Test[] tests, bool extra) + { + if (_Description is not Description) + throw new Exception(); + } + + void IFileRead.Callback(object state) => Callback(state); + + protected static List GetDescriptions(JsonElement[] jsonElements) + { + List results = new(); + txt.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(jsonElement.ToString(), jsonSerializerOptions); + results.Add(description); + } + return results; + } + + private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) + { + Tuple> results; + string duplicateDirectory; + Tuple pdsf = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(reportFullPath); + _Logistics = new Logistics(reportFullPath, pdsf.Item1); + SetFileParameterLotIDToLogisticsMID(); + JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(pdsf); + List descriptions = GetDescriptions(jsonElements); + Tuple>> tuple = GetTuple(this, from l in descriptions select (Shared.Properties.IDescription)l, extra: false); + results = new Tuple>(pdsf.Item1, tuple.Item1, jsonElements, new List()); + bool isNotUsedInsightMetrologyViewerAttachments = !(_FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) && _IsXToOpenInsightMetrologyViewerAttachments; + bool isDummyRun = _DummyRuns.Any() && _DummyRuns.ContainsKey(_Logistics.JobID) && _DummyRuns[_Logistics.JobID].Any() && (from l in _DummyRuns[_Logistics.JobID] where l == _Logistics.Sequence select 1).Any(); + if (isDummyRun) + { + try + { File.SetLastWriteTime(reportFullPath, dateTime); } + catch (Exception) { } + } + string[] segments = Path.GetFileNameWithoutExtension(reportFullPath).Split('_'); + if (_IsXToIQSSi) + duplicateDirectory = string.Concat(_FileConnectorConfiguration.TargetFileLocation, @"\All"); + else if (!_IsXToOpenInsight) + duplicateDirectory = string.Concat(_FileConnectorConfiguration.TargetFileLocation, @"\", segments[0]); + else + duplicateDirectory = string.Concat(Path.GetDirectoryName(Path.GetDirectoryName(_FileConnectorConfiguration.TargetFileLocation)), @"\Data"); + if (segments.Length > 2) + duplicateDirectory = string.Concat(duplicateDirectory, @"-", segments[2]); + if (!Directory.Exists(duplicateDirectory)) + _ = Directory.CreateDirectory(duplicateDirectory); + if (isDummyRun || isNotUsedInsightMetrologyViewerAttachments || _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) + { + if (!Directory.Exists(duplicateDirectory)) + _ = Directory.CreateDirectory(duplicateDirectory); + string successDirectory; + if (!_IsXToAPC) + successDirectory = string.Empty; + else + { + successDirectory = string.Concat(Path.GetDirectoryName(_FileConnectorConfiguration.TargetFileLocation), @"\ViewerPath"); + if (!Directory.Exists(successDirectory)) + _ = Directory.CreateDirectory(successDirectory); + } + List> tuples = new(); + string duplicateFile = string.Concat(duplicateDirectory, @"\", Path.GetFileName(reportFullPath)); + string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); + string weekDirectory = string.Concat(_Logistics.DateTimeFromSequence.ToString("yyyy"), "_Week_", weekOfYear, @"\", _Logistics.DateTimeFromSequence.ToString("yyyy-MM-dd")); + string logisticsSequenceMemoryDirectory = string.Concat(_MemoryPath, @"\", _EquipmentType, @"\Source\", weekDirectory, @"\", _Logistics.Sequence); + if (!Directory.Exists(logisticsSequenceMemoryDirectory)) + _ = Directory.CreateDirectory(logisticsSequenceMemoryDirectory); + if (_IsXToAPC) + { + if (!isDummyRun && _IsEAFHosted) + File.Copy(reportFullPath, duplicateFile, overwrite: true); + } + else + { + if (_IsXToOpenInsightMetrologyViewer) + { + WSRequest wsRequest = new(this, _Logistics, descriptions); + if (!isDummyRun && _IsEAFHosted) + { + Tuple wsResults = WS.SendData(_OpenInsightMetrologyViewerAPI, wsRequest); + if (!wsResults.Item2.Success) + throw new Exception(wsResults.ToString()); + _Log.Debug(wsResults.Item2.HeaderID); + File.WriteAllText(string.Concat(logisticsSequenceMemoryDirectory, @"\", nameof(WS.Results), ".json"), wsResults.Item1); + } + } + else + { + Test test; + string check; + Tuple lines; + Shared.Properties.IScopeInfo scopeInfo; + foreach (KeyValuePair> keyValuePair in tuple.Item2) + { + test = keyValuePair.Key; + //scopeInfo = new ScopeInfo(test); + if (!_IsXToOpenInsight) + scopeInfo = new ScopeInfo(test, _IqsFile); + else + scopeInfo = new ScopeInfo(test, _OpenInsightFilePattern); + lines = ProcessData.GetLines(this, _Logistics, descriptions); + check = lines.Item1.Replace(lines.Item2, "$Date$"); + if (string.IsNullOrEmpty(_LastLines) || check != _LastLines) + tuples.Add(new Tuple(scopeInfo, lines.Item1)); + _LastLines = check; + } + } + if (_IsXToOpenInsightMetrologyViewerAttachments) + { + string[] matchDirectories = Shared1567(reportFullPath, tuples); + if (!isDummyRun && _IsEAFHosted && !isNotUsedInsightMetrologyViewerAttachments) + ProcessData.PostOpenInsightMetrologyViewerAttachments(this, _Logistics, _OpenInsightMetrologyViewerAPI, _GhostPCLFileName, dateTime, logisticsSequenceMemoryDirectory, descriptions, matchDirectories[0]); + } + } + if (!_IsXToOpenInsightMetrologyViewer && !_IsXToOpenInsightMetrologyViewerAttachments) + Shared0413(dateTime, isDummyRun, successDirectory, duplicateDirectory, tuples, duplicateFile); + } + if (_IsXToOpenInsightMetrologyViewerAttachments) + { + string destinationDirectory; + //string destinationDirectory = WriteScopeInfo(_ProgressPath, _Logistics, dateTime, duplicateDirectory, tuples); + FileInfo fileInfo = new(reportFullPath); + string logisticsSequence = _Logistics.Sequence.ToString(); + if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) + File.SetLastWriteTime(reportFullPath, fileInfo.CreationTime); + string jobIdDirectory = string.Concat(Path.GetDirectoryName(Path.GetDirectoryName(_FileConnectorConfiguration.TargetFileLocation)), @"\", _Logistics.JobID); + if (!Directory.Exists(jobIdDirectory)) + _ = Directory.CreateDirectory(jobIdDirectory); + string[] matchDirectories; + if (!_IsEAFHosted) + matchDirectories = new string[] { Path.GetDirectoryName(Path.GetDirectoryName(reportFullPath)) }; + else + matchDirectories = Directory.GetDirectories(jobIdDirectory, string.Concat(_Logistics.MID, '*', logisticsSequence, '*'), SearchOption.TopDirectoryOnly); + if ((matchDirectories is null) || matchDirectories.Length != 1) + throw new Exception("Didn't find directory by logistics sequence"); + destinationDirectory = matchDirectories[0]; + if (isDummyRun) + Shared0607(reportFullPath, duplicateDirectory, logisticsSequence, destinationDirectory); + else + { + WSRequest wsRequest = new(this, _Logistics, descriptions); + JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true }; + string json = JsonSerializer.Serialize(wsRequest, wsRequest.GetType(), jsonSerializerOptions); + if (_IsEAFHosted) + Shared1277(reportFullPath, destinationDirectory, logisticsSequence, jobIdDirectory, json); + else + { + string jsonFileName = Path.ChangeExtension(reportFullPath, ".json"); + string historicalText = File.ReadAllText(jsonFileName); + if (json != historicalText) + throw new Exception("File doesn't match historical!"); + } + } + } + return results; + } + + private void CallbackIsDummy(string traceDummyFile, List> tuples, bool fileConnectorConfigurationIncludeSubDirectories, bool includeSubDirectoriesExtra) + { + int fileCount; + string[] files; + string monARessource; + string checkDirectory; + string sourceArchiveFile; + string inProcessDirectory; + const string site = "sjc"; + string stateName = string.Concat("Dummy_", _EventName); + const string monInURL = "http://moninhttp.sjc.infineon.com/input/text"; + MonIn monIn = MonIn.GetInstance(monInURL); + foreach (Tuple item in tuples) + { + monARessource = item.Item1; + sourceArchiveFile = item.Item2; + inProcessDirectory = item.Item3; + checkDirectory = item.Item4; + fileCount = item.Item5; + try + { + if (fileCount > 0 || string.IsNullOrEmpty(checkDirectory)) + { + File.AppendAllLines(traceDummyFile, new string[] { site, monARessource, stateName, State.Warning.ToString() }); + _ = monIn.SendStatus(site, monARessource, stateName, State.Warning); + for (int i = 1; i < 12; i++) + Thread.Sleep(500); + } + else if (inProcessDirectory == checkDirectory) + continue; + if (!_IsEAFHosted) + continue; + if (!File.Exists(sourceArchiveFile)) + continue; + if (!long.TryParse(Path.GetFileNameWithoutExtension(sourceArchiveFile).Replace("x", string.Empty), out long sequence)) + continue; + ZipFile.ExtractToDirectory(sourceArchiveFile, inProcessDirectory); + if (fileConnectorConfigurationIncludeSubDirectories && includeSubDirectoriesExtra) + checkDirectory = string.Concat(checkDirectory, @"\", sequence); + if (fileConnectorConfigurationIncludeSubDirectories) + files = Directory.GetFiles(inProcessDirectory, "*", SearchOption.AllDirectories); + else + files = Directory.GetFiles(inProcessDirectory, "*", SearchOption.TopDirectoryOnly); + if (files.Length > 250) + throw new Exception("Safety net!"); + foreach (string file in files) + File.SetLastWriteTime(file, new DateTime(sequence)); + if (!fileConnectorConfigurationIncludeSubDirectories) + { + foreach (string file in files) + File.Move(file, string.Concat(checkDirectory, @"\", Path.GetFileName(file))); + } + else + { + string[] directories = Directory.GetDirectories(inProcessDirectory, "*", SearchOption.AllDirectories); + foreach (string directory in directories) + _ = Directory.CreateDirectory(string.Concat(checkDirectory, directory.Substring(inProcessDirectory.Length))); + foreach (string file in files) + File.Move(file, string.Concat(checkDirectory, file.Substring(inProcessDirectory.Length))); + } + File.AppendAllLines(traceDummyFile, new string[] { site, monARessource, stateName, State.Ok.ToString() }); + _ = monIn.SendStatus(site, monARessource, stateName, State.Ok); + } + catch (Exception exception) + { + string subject = string.Concat("Exception:", _CellInstanceConnectionName); + string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace); + try + { _SMTP.SendHighPriorityEmailMessage(subject, body); } + catch (Exception) { } + File.AppendAllLines(traceDummyFile, new string[] { site, monARessource, stateName, State.Critical.ToString(), exception.Message, exception.StackTrace }); + _ = monIn.SendStatus(site, monARessource, stateName, State.Critical); + } + } + } + + private void Callback(object state) + { + if (!_IsDummy) + throw new Exception(); + try + { + DateTime dateTime = DateTime.Now; + bool check = dateTime.Hour > 7 && dateTime.Hour < 18 && dateTime.DayOfWeek != DayOfWeek.Sunday && dateTime.DayOfWeek != DayOfWeek.Saturday; + if (check) + { + int fileCount; + string[] files; + string monARessource; + string checkDirectory; + string sourceArchiveFile; + string sourceFileLocation; + string inProcessDirectory; + string weekOfYear = _Calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); + string traceDummyDirectory = string.Concat(Path.GetPathRoot(_TracePath), @"\TracesDummy\", _CellInstanceName, @"\Source\", dateTime.ToString("yyyy"), "___Week_", weekOfYear); + if (!Directory.Exists(traceDummyDirectory)) + _ = Directory.CreateDirectory(traceDummyDirectory); + string traceDummyFile = string.Concat(traceDummyDirectory, @"\", dateTime.Ticks, " - ", _CellInstanceName, ".txt"); + File.AppendAllText(traceDummyFile, string.Empty); + List> tuples = new(); + string progressDirectory = Path.GetFullPath(string.Concat(_FileConnectorConfiguration.SourceFileLocation, @"\_ Progress")); + if (progressDirectory != _ProgressPath || !Directory.Exists(progressDirectory)) + throw new Exception("Invalid progress path"); + foreach (KeyValuePair keyValuePair in _CellNames) + { + monARessource = keyValuePair.Key; + if (!keyValuePair.Value.Contains('\\')) + continue; + foreach (string sourceFileFilter in _FileConnectorConfiguration.SourceFileFilter.Split('|')) + { + if (sourceFileFilter.ToLower().StartsWith(keyValuePair.Value.Replace(@"\", string.Empty))) + sourceFileLocation = Path.GetFullPath(_FileConnectorConfiguration.SourceFileLocation); + else if (_FileConnectorConfiguration.SourceFileLocation.ToLower().EndsWith(keyValuePair.Value)) + sourceFileLocation = Path.GetFullPath(_FileConnectorConfiguration.SourceFileLocation); + else + sourceFileLocation = Path.GetFullPath(string.Concat(_FileConnectorConfiguration.SourceFileLocation, @"\", keyValuePair.Value)); + sourceArchiveFile = Path.GetFullPath(string.Concat(sourceFileLocation, @"\", sourceFileFilter)); + if (!File.Exists(sourceArchiveFile)) + continue; + if (!_DummyRuns.ContainsKey(monARessource)) + _DummyRuns.Add(monARessource, new List()); + tuples.Add(new Tuple(monARessource, sourceFileFilter, sourceFileLocation, sourceArchiveFile, 0)); + } + } + File.AppendAllLines(traceDummyFile, from l in tuples select l.Item4); + if (tuples.Any()) + { + _LastDummyRunIndex += 1; + if (_LastDummyRunIndex >= tuples.Count) + _LastDummyRunIndex = 0; + monARessource = tuples[_LastDummyRunIndex].Item1; + string sourceFileFilter = tuples[_LastDummyRunIndex].Item2; + sourceFileLocation = tuples[_LastDummyRunIndex].Item3; + sourceArchiveFile = tuples[_LastDummyRunIndex].Item4; + //fileCount = tuples[_LastDummyRunIndex].Item5; + tuples.Clear(); + if (long.TryParse(Path.GetFileNameWithoutExtension(sourceArchiveFile).Replace("x", string.Empty), out long sequence)) + { + if (!_DummyRuns[monARessource].Contains(sequence)) + _DummyRuns[monARessource].Add(sequence); + inProcessDirectory = string.Concat(progressDirectory, @"\Dummy_in process\", sequence); + checkDirectory = inProcessDirectory; + if (!Directory.Exists(checkDirectory)) + _ = Directory.CreateDirectory(checkDirectory); + files = Directory.GetFiles(checkDirectory, "*", SearchOption.AllDirectories); + fileCount = files.Length; + if (files.Any()) + { + if (files.Length > 250) + throw new Exception("Safety net!"); + try + { + foreach (string file in files) + File.Delete(file); + } + catch (Exception) { } + } + tuples.Add(new Tuple(monARessource, sourceArchiveFile, inProcessDirectory, checkDirectory, fileCount)); + checkDirectory = sourceFileLocation; + files = Directory.GetFiles(checkDirectory, string.Concat("*", sequence, "*"), SearchOption.TopDirectoryOnly); + fileCount = files.Length; + tuples.Add(new Tuple(monARessource, sourceArchiveFile, inProcessDirectory, checkDirectory, fileCount)); + } + } + if (tuples.Any()) + //CallbackIsDummy(traceDummyFile, tuples, FileConnectorConfiguration.IncludeSubDirectories.Value, includeSubDirectoriesExtra: false); + CallbackIsDummy(traceDummyFile, tuples, fileConnectorConfigurationIncludeSubDirectories: true, includeSubDirectoriesExtra: true); + } + } + catch (Exception exception) + { + string subject = string.Concat("Exception:", _CellInstanceConnectionName); + string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace); + try + { _SMTP.SendHighPriorityEmailMessage(subject, body); } + catch (Exception) { } + } + try + { + TimeSpan timeSpan = new(DateTime.Now.AddSeconds(_FileConnectorConfiguration.FileScanningIntervalInSeconds.Value).Ticks - DateTime.Now.Ticks); + _ = _Timer.Change((long)timeSpan.TotalMilliseconds, Timeout.Infinite); + } + catch (Exception exception) + { + string subject = string.Concat("Exception:", _CellInstanceConnectionName); + string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace); + try + { _SMTP.SendHighPriorityEmailMessage(subject, body); } + catch (Exception) { } + } + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/MET08DDUPSP1TBI/Hyphen.cs b/Adaptation/FileHandlers/MET08DDUPSP1TBI/Hyphen.cs new file mode 100644 index 0000000..fd4d98b --- /dev/null +++ b/Adaptation/FileHandlers/MET08DDUPSP1TBI/Hyphen.cs @@ -0,0 +1,16 @@ +namespace Adaptation.FileHandlers.MET08DDUPSP1TBI; + +public enum Hyphen +{ + IsXToOpenInsightMetrologyViewer, //MetrologyWS.SendData(logic, string.Concat("http://", serverName, "/api/inbound/TencorSP1"), headerAttachments, detailAttachments); + IsXToIQSSi, //bool WriteFileSPC(Dictionary + IsXToOpenInsight, //bool WriteFileOpenInsight(Dictionary + IsXToOpenInsightMetrologyViewerAttachments, //Site-Two + IsXToAPC, + IsXToSPaCe, + IsXToArchive, + IsArchive, + IsDummy, + IsTIBCO, + IsNaEDA +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/MET08DDUPSP1TBI/ProcessData.cs b/Adaptation/FileHandlers/MET08DDUPSP1TBI/ProcessData.cs new file mode 100644 index 0000000..f2e9a7b --- /dev/null +++ b/Adaptation/FileHandlers/MET08DDUPSP1TBI/ProcessData.cs @@ -0,0 +1,158 @@ +using Adaptation.Shared; +using Adaptation.Shared.Metrology; +using Adaptation.Shared.Properties; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.Json; + +namespace Adaptation.FileHandlers.MET08DDUPSP1TBI; + +public class ProcessData +{ + + internal static List> HyphenTuples => new() + { + new Tuple(0, Hyphen.IsNaEDA, @"\EC_EDA\Staging\Traces\~\Source"), + new Tuple(15, Hyphen.IsXToOpenInsightMetrologyViewer, @"\EC_EAFLog\TracesMES\~\Source"), + new Tuple(36, Hyphen.IsXToIQSSi, @"\EC_SPC_Si\Traces\~\PollPath"), + new Tuple(36, Hyphen.IsXToOpenInsight, @"\\messa01ec.ec.local\APPS\Metrology\~\Source"), + new Tuple(36, Hyphen.IsXToOpenInsightMetrologyViewerAttachments, @"\EC_Characterization_Si\In Process\~\Source"), + new Tuple(360, Hyphen.IsXToAPC, @"\EC_APC\Staging\Traces\~\PollPath"), + new Tuple(-36, Hyphen.IsXToSPaCe, @"\EC_SPC_Si\Traces\~\Source"), + new Tuple(180, Hyphen.IsXToArchive, @"\EC_EAFLog\TracesArchive\~\Source"), + new Tuple(36, Hyphen.IsArchive, @"\EC_Characterization_Si\Processed") + //new Tuple("IsDummy" + }; + + internal static Tuple GetLines(IFileRead fileRead, Logistics logistics, List descriptions) + { + StringBuilder result = new(); + if (fileRead is null) + { } + if (logistics is null) + { } + if (descriptions is null) + { } + 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(result.ToString(), x.Date); + } + + /// + /// Convert the raw data file to parsable file format - in this case from PRN to PDF + /// + /// source file to be converted to PDF + /// + private static string ConvertSourceFileToPdf(string ghostPCLFileName, string sourceFile) + { + string result = Path.ChangeExtension(sourceFile, ".pdf"); + if (!File.Exists(result)) + { + //string arguments = string.Concat("-i \"", sourceFile, "\" -o \"", result, "\""); + string arguments = string.Concat("-dSAFER -dBATCH -dNOPAUSE -sOutputFile=\"", result, "\" -sDEVICE=pdfwrite \"", sourceFile, "\""); + //Process process = Process.Start(lincPDFCFileName, arguments); + Process process = Process.Start(ghostPCLFileName, arguments); + _ = process.WaitForExit(30000); + if (!File.Exists(result)) + throw new Exception("PDF file wasn't created"); + } + return result; + } + + internal static void PostOpenInsightMetrologyViewerAttachments(IFileRead fileRead, Logistics logistics, string openInsightMetrologyViewerAPI, string ghostPCLFileName, DateTime dateTime, string logisticsSequenceMemoryDirectory, List descriptions, string matchDirectory) + { + if (fileRead is null) + { } + if (dateTime == DateTime.MinValue) + { } + if (logisticsSequenceMemoryDirectory is null) + { } + if (descriptions is null) + { } + if (matchDirectory is null) + { } + string[] summaryFiles = Directory.GetFiles(matchDirectory, "*.txt", SearchOption.TopDirectoryOnly); + if (summaryFiles.Length != 1) + throw new Exception("Invalid summary file count!"); + string wsResultsMemoryFile = string.Concat(logisticsSequenceMemoryDirectory, @"\", nameof(WS.Results), ".json"); + if (!File.Exists(wsResultsMemoryFile)) + throw new Exception(string.Concat("Memory file <", wsResultsMemoryFile, "> doesn't exist!")); + string json = File.ReadAllText(wsResultsMemoryFile); + WS.Results metrologyWSRequest = JsonSerializer.Deserialize(json); + long wsResultsHeaderID = metrologyWSRequest.HeaderID; + string[] prnFiles = Directory.GetFiles(matchDirectory, "WaferMap*.prn", SearchOption.TopDirectoryOnly); + if (prnFiles.Length == 0 || prnFiles.Length != descriptions.Count) + throw new Exception("Invalid WaferMap*.prn file count!"); + List pdfFiles = new(); + foreach (string prnFile in prnFiles.OrderBy(l => l)) + pdfFiles.Add(ConvertSourceFileToPdf(ghostPCLFileName, prnFile)); + if (pdfFiles.Count == 0 || pdfFiles.Count != descriptions.Count) + throw new Exception("Invalid *.pdf file count!"); + List dataAttachments = new(); + List headerAttachments = new() + { new WS.Attachment(descriptions[0].HeaderUniqueId, "Data.txt", summaryFiles[0]) }; + int count; + if (pdfFiles.Count < descriptions.Count) + count = pdfFiles.Count; + else + count = descriptions.Count; + for (int i = 0; i < count; i++) + { + if (!string.IsNullOrEmpty(pdfFiles[i])) + dataAttachments.Add(new WS.Attachment(descriptions[i].UniqueId, "Image.pdf", pdfFiles[i])); + } + if (dataAttachments.Count == 0 || dataAttachments.Count != descriptions.Count) + throw new Exception("Invalid attachment count!"); + WS.AttachFiles(openInsightMetrologyViewerAPI, wsResultsHeaderID, headerAttachments, dataAttachments); + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/MET08DDUPSP1TBI/WSRequest.cs b/Adaptation/FileHandlers/MET08DDUPSP1TBI/WSRequest.cs new file mode 100644 index 0000000..4b3aa1f --- /dev/null +++ b/Adaptation/FileHandlers/MET08DDUPSP1TBI/WSRequest.cs @@ -0,0 +1,608 @@ +using Adaptation.Shared; +using Adaptation.Shared.Properties; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Adaptation.FileHandlers.MET08DDUPSP1TBI; + +public class WSRequest +{ + public bool SentToMetrology { get; set; } + public bool SentToSPC { get; set; } + // + + public string CellName { get; set; } + public string Date { get; set; } + public string LotID { get; set; } + public string Operator { get; set; } + public string PSN { get; set; } + public string RDS { get; set; } + public string Reactor { get; set; } + 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; } + public string DcnAreaMin { get; set; } + public string DcnAreaStDev { get; set; } + public string DcnBin1Max { get; set; } + public string DcnBin1Mean { get; set; } + public string DcnBin1Min { get; set; } + public string DcnBin1StDev { get; set; } + public string DcnBin2Max { get; set; } + public string DcnBin2Mean { get; set; } + public string DcnBin2Min { get; set; } + public string DcnBin2StDev { get; set; } + public string DcnBin3Max { get; set; } + public string DcnBin3Mean { get; set; } + public string DcnBin3Min { get; set; } + public string DcnBin3StDev { get; set; } + public string DcnBin4Max { get; set; } + public string DcnBin4Mean { get; set; } + public string DcnBin4Min { get; set; } + public string DcnBin4StDev { get; set; } + public string DcnBin5Max { get; set; } + public string DcnBin5Mean { get; set; } + public string DcnBin5Min { get; set; } + public string DcnBin5StDev { get; set; } + public string DcnBin6Max { get; set; } + public string DcnBin6Mean { get; set; } + public string DcnBin6Min { get; set; } + public string DcnBin6StDev { get; set; } + public string DcnBin7Max { get; set; } + public string DcnBin7Mean { get; set; } + public string DcnBin7Min { get; set; } + public string DcnBin7StDev { get; set; } + public string DcnBin8Max { get; set; } + public string DcnBin8Mean { get; set; } + public string DcnBin8Min { get; set; } + public string DcnBin8StDev { get; set; } + public string DcnHazeAvgMax { get; set; } + public string DcnHazeAvgMean { get; set; } + public string DcnHazeAvgMin { get; set; } + public string DcnHazeAvgStDev { get; set; } + public string DcnHazeMedMax { get; set; } + public string DcnHazeMedMean { get; set; } + public string DcnHazeMedMin { get; set; } + public string DcnHazeMedStDev { get; set; } + public string DcnHazeStDevMax { get; set; } + public string DcnHazeStDevMean { get; set; } + public string DcnHazeStDevMin { get; set; } + public string DcnHazeStDevStDev { get; set; } + public string DcnLpdESMax { get; set; } + public string DcnLpdESMean { get; set; } + public string DcnLpdESMin { get; set; } + public string DcnLpdESStDev { 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 DcnLpdNStDev { get; set; } + public string DcnLpdStDev { get; set; } + public string DcnMicroScrMax { get; set; } + public string DcnMicroScrMean { get; set; } + public string DcnMicroScrMin { get; set; } + public string DcnMicroScrStDev { get; set; } + public string DcnScrMax { get; set; } + public string DcnScrMean { get; set; } + public string DcnScrMin { get; set; } + public string DcnScrStDev { get; set; } + public string DcnSlipMax { get; set; } + public string DcnSlipMean { get; set; } + public string DcnSlipMin { get; set; } + public string DcnSlipStDev { get; set; } + public string DnnAllMax { get; set; } + public string DnnAllMean { get; set; } + public string DnnAllMin { get; set; } + public string DnnAllStDev { get; set; } + public string DnnAreaCntMax { get; set; } + public string DnnAreaCntMean { get; set; } + public string DnnAreaCntMin { get; set; } + public string DnnAreaCntStDev { get; set; } + public string DnnAreaMax { get; set; } + public string DnnAreaMean { get; set; } + public string DnnAreaMin { get; set; } + public string DnnAreaStDev { get; set; } + public string DnnBin1Max { get; set; } + public string DnnBin1Mean { get; set; } + public string DnnBin1Min { get; set; } + public string DnnBin1StDev { get; set; } + public string DnnBin2Max { get; set; } + public string DnnBin2Mean { get; set; } + public string DnnBin2Min { get; set; } + public string DnnBin2StDev { get; set; } + public string DnnBin3Max { get; set; } + public string DnnBin3Mean { get; set; } + public string DnnBin3Min { get; set; } + public string DnnBin3StDev { get; set; } + public string DnnBin4Max { get; set; } + public string DnnBin4Mean { get; set; } + public string DnnBin4Min { get; set; } + public string DnnBin4StDev { get; set; } + public string DnnBin5Max { get; set; } + public string DnnBin5Mean { get; set; } + public string DnnBin5Min { get; set; } + public string DnnBin5StDev { get; set; } + public string DnnBin6Max { get; set; } + public string DnnBin6Mean { get; set; } + public string DnnBin6Min { get; set; } + public string DnnBin6StDev { get; set; } + public string DnnBin7Max { get; set; } + public string DnnBin7Mean { get; set; } + public string DnnBin7Min { get; set; } + public string DnnBin7StDev { get; set; } + public string DnnBin8Max { get; set; } + public string DnnBin8Mean { get; set; } + public string DnnBin8Min { get; set; } + public string DnnBin8StDev { get; set; } + public string DnnHazeAvgMax { get; set; } + public string DnnHazeAvgMean { get; set; } + public string DnnHazeAvgMin { get; set; } + public string DnnHazeAvgStDev { get; set; } + public string DnnHazeMedMax { get; set; } + public string DnnHazeMedMean { get; set; } + public string DnnHazeMedMin { get; set; } + public string DnnHazeMedStDev { get; set; } + public string DnnHazeStDevMax { get; set; } + public string DnnHazeStDevMean { get; set; } + public string DnnHazeStDevMin { get; set; } + public string DnnHazeStDevStDev { get; set; } + public string DnnLpdESMax { get; set; } + public string DnnLpdESMean { get; set; } + public string DnnLpdESMin { get; set; } + public string DnnLpdESStDev { 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 DnnLpdNStDev { get; set; } + public string DnnLpdStDev { get; set; } + public string DnnMicroScrMax { get; set; } + public string DnnMicroScrMean { get; set; } + public string DnnMicroScrMin { get; set; } + public string DnnMicroScrStDev { get; set; } + public string DnnScrMax { get; set; } + public string DnnScrMean { get; set; } + public string DnnScrMin { get; set; } + public string DnnScrStDev { get; set; } + public string DnnSlipMax { get; set; } + public string DnnSlipMean { get; set; } + public string DnnSlipMin { get; set; } + public string DnnSlipStDev { get; set; } + public string DwnAllMax { get; set; } + public string DwnAllMean { get; set; } + public string DwnAllMin { get; set; } + public string DwnAllStDev { get; set; } + public string DwnAreaCntMax { get; set; } + public string DwnAreaCntMean { get; set; } + public string DwnAreaCntMin { get; set; } + public string DwnAreaCntStDev { get; set; } + public string DwnAreaMax { get; set; } + public string DwnAreaMean { get; set; } + public string DwnAreaMin { get; set; } + public string DwnAreaStDev { get; set; } + public string DwnBin1Max { get; set; } + public string DwnBin1Mean { get; set; } + public string DwnBin1Min { get; set; } + public string DwnBin1StDev { get; set; } + public string DwnBin2Max { get; set; } + public string DwnBin2Mean { get; set; } + public string DwnBin2Min { get; set; } + public string DwnBin2StDev { get; set; } + public string DwnBin3Max { get; set; } + public string DwnBin3Mean { get; set; } + public string DwnBin3Min { get; set; } + public string DwnBin3StDev { get; set; } + public string DwnBin4Max { get; set; } + public string DwnBin4Mean { get; set; } + public string DwnBin4Min { get; set; } + public string DwnBin4StDev { get; set; } + public string DwnBin5Max { get; set; } + public string DwnBin5Mean { get; set; } + public string DwnBin5Min { get; set; } + public string DwnBin5StDev { get; set; } + public string DwnBin6Max { get; set; } + public string DwnBin6Mean { get; set; } + public string DwnBin6Min { get; set; } + public string DwnBin6StDev { get; set; } + public string DwnBin7Max { get; set; } + public string DwnBin7Mean { get; set; } + public string DwnBin7Min { get; set; } + public string DwnBin7StDev { get; set; } + public string DwnBin8Max { get; set; } + public string DwnBin8Mean { get; set; } + public string DwnBin8Min { get; set; } + public string DwnBin8StDev { get; set; } + public string DwnHazeAvgMax { get; set; } + public string DwnHazeAvgMean { get; set; } + public string DwnHazeAvgMin { get; set; } + public string DwnHazeAvgStDev { get; set; } + public string DwnHazeMedMax { get; set; } + public string DwnHazeMedMean { get; set; } + public string DwnHazeMedMin { get; set; } + public string DwnHazeMedStDev { get; set; } + public string DwnHazeStDevMax { get; set; } + public string DwnHazeStDevMean { get; set; } + public string DwnHazeStDevMin { get; set; } + public string DwnHazeStDevStDev { get; set; } + public string DwnLpdESMax { get; set; } + public string DwnLpdESMean { get; set; } + public string DwnLpdESMin { get; set; } + public string DwnLpdESStDev { 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 DwnLpdNStDev { get; set; } + public string DwnLpdStDev { get; set; } + public string DwnMicroScrMax { get; set; } + public string DwnMicroScrMean { get; set; } + public string DwnMicroScrMin { get; set; } + public string DwnMicroScrStDev { get; set; } + public string DwnScrMax { get; set; } + public string DwnScrMean { get; set; } + public string DwnScrMin { get; set; } + public string DwnScrStDev { get; set; } + public string DwnSlipMax { get; set; } + public string DwnSlipMean { get; set; } + public string DwnSlipMin { get; set; } + public string DwnSlipStDev { get; set; } + public List Details { get; protected set; } + + [Obsolete("For json")] public WSRequest() { } + + internal WSRequest(IFileRead fileRead, Logistics logistics, List descriptions) + { + if (fileRead is null) + { } + Details = new List(); + CellName = logistics.MesEntity; + txt.Description x = descriptions[0]; + //Header + { + UniqueID = x.UniqueId; + Date = x.Date; + Reactor = x.Reactor; + LotID = x.Lot; + Session = x.Session; + DcnAllMin = x.DcnAllMin; + DcnAllMax = x.DcnAllMax; + DcnAllMean = x.DcnAllMean; + DcnAllStDev = x.DcnAllStdDev; + DcnLpdMin = x.DcnLpdMin; + DcnLpdMax = x.DcnLpdMax; + DcnLpdMean = x.DcnLpdMean; + DcnLpdStDev = x.DcnLpdStdDev; + DcnLpdNMin = x.DcnLpdNMin; + DcnLpdNMax = x.DcnLpdNMax; + DcnLpdNMean = x.DcnLpdNMean; + DcnLpdNStDev = x.DcnLpdNStdDev; + DcnLpdESMin = x.DcnLpdESMin; + DcnLpdESMax = x.DcnLpdESMax; + DcnLpdESMean = x.DcnLpdESMean; + DcnLpdESStDev = x.DcnLpdESStdDev; + DcnMicroScrMin = x.DcnMicroScrMin; + DcnMicroScrMax = x.DcnMicroScrMax; + DcnMicroScrMean = x.DcnMicroScrMean; + DcnMicroScrStDev = x.DcnMicroScrStdDev; + DcnScrMin = x.DcnScrMin; + DcnScrMax = x.DcnScrMax; + DcnScrMean = x.DcnScrMean; + DcnScrStDev = x.DcnScrStdDev; + DcnSlipMin = x.DcnSlipMin; + DcnSlipMax = x.DcnSlipMax; + DcnSlipMean = x.DcnSlipMean; + DcnSlipStDev = x.DcnSlipStdDev; + DcnAreaCntMin = x.DcnAreaCountMin; + DcnAreaCntMax = x.DcnAreaCountMax; + DcnAreaCntMean = x.DcnAreaCountMean; + DcnAreaCntStDev = x.DcnAreaCountStdDev; + DcnAreaMin = x.DcnAreaMin; + DcnAreaMax = x.DcnAreaMax; + DcnAreaMean = x.DcnAreaMean; + DcnAreaStDev = x.DcnAreaStdDev; + 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; + DcnBin1Min = x.DcnBin1Min; + DcnBin1Max = x.DcnBin1Max; + DcnBin1Mean = x.DcnBin1Mean; + DcnBin1StDev = x.DcnBin1StdDev; + DcnBin2Min = x.DcnBin2Min; + DcnBin2Max = x.DcnBin2Max; + DcnBin2Mean = x.DcnBin2Mean; + DcnBin2StDev = x.DcnBin2StdDev; + DcnBin3Min = x.DcnBin3Min; + DcnBin3Max = x.DcnBin3Max; + DcnBin3Mean = x.DcnBin3Mean; + DcnBin3StDev = x.DcnBin3StdDev; + DcnBin4Min = x.DcnBin4Min; + DcnBin4Max = x.DcnBin4Max; + DcnBin4Mean = x.DcnBin4Mean; + DcnBin4StDev = x.DcnBin4StdDev; + DcnBin5Min = x.DcnBin5Min; + DcnBin5Max = x.DcnBin5Max; + DcnBin5Mean = x.DcnBin5Mean; + DcnBin5StDev = x.DcnBin5StdDev; + DcnBin6Min = x.DcnBin6Min; + DcnBin6Max = x.DcnBin6Max; + DcnBin6Mean = x.DcnBin6Mean; + DcnBin6StDev = x.DcnBin6StdDev; + DcnBin7Min = x.DcnBin7Min; + DcnBin7Max = x.DcnBin7Max; + DcnBin7Mean = x.DcnBin7Mean; + DcnBin7StDev = x.DcnBin7StdDev; + DcnBin8Min = x.DcnBin8Min; + DcnBin8Max = x.DcnBin8Max; + DcnBin8Mean = x.DcnBin8Mean; + DcnBin8StDev = x.DcnBin8StdDev; + DwnAllMin = x.DwnAllMin; + DwnAllMax = x.DwnAllMax; + DwnAllMean = x.DwnAllMean; + DwnAllStDev = x.DwnAllStdDev; + DwnLpdMin = x.DwnLpdMin; + DwnLpdMax = x.DwnLpdMax; + DwnLpdMean = x.DwnLpdMean; + DwnLpdStDev = x.DwnLpdStdDev; + DwnLpdNMin = x.DwnLpdNMin; + DwnLpdNMax = x.DwnLpdNMax; + DwnLpdNMean = x.DwnLpdNMean; + DwnLpdNStDev = x.DwnLpdNStdDev; + DwnLpdESMin = x.DwnLpdESMin; + DwnLpdESMax = x.DwnLpdESMax; + DwnLpdESMean = x.DwnLpdESMean; + DwnLpdESStDev = x.DwnLpdESStdDev; + DwnMicroScrMin = x.DwnMicroScrMin; + DwnMicroScrMax = x.DwnMicroScrMax; + DwnMicroScrMean = x.DwnMicroScrMean; + DwnMicroScrStDev = x.DwnMicroScrStdDev; + DwnScrMin = x.DwnScrMin; + DwnScrMax = x.DwnScrMax; + DwnScrMean = x.DwnScrMean; + DwnScrStDev = x.DwnScrStdDev; + DwnSlipMin = x.DwnSlipMin; + DwnSlipMax = x.DwnSlipMax; + DwnSlipMean = x.DwnSlipMean; + DwnSlipStDev = x.DwnSlipStdDev; + DwnAreaCntMin = x.DwnAreaCountMin; + DwnAreaCntMax = x.DwnAreaCountMax; + DwnAreaCntMean = x.DwnAreaCountMean; + DwnAreaCntStDev = x.DwnAreaCountStdDev; + DwnAreaMin = x.DwnAreaMin; + DwnAreaMax = x.DwnAreaMax; + DwnAreaMean = x.DwnAreaMean; + DwnAreaStDev = x.DwnAreaStdDev; + 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; + DwnBin1Min = x.DwnBin1Min; + DwnBin1Max = x.DwnBin1Max; + DwnBin1Mean = x.DwnBin1Mean; + DwnBin1StDev = x.DwnBin1StdDev; + DwnBin2Min = x.DwnBin2Min; + DwnBin2Max = x.DwnBin2Max; + DwnBin2Mean = x.DwnBin2Mean; + DwnBin2StDev = x.DwnBin2StdDev; + DwnBin3Min = x.DwnBin3Min; + DwnBin3Max = x.DwnBin3Max; + DwnBin3Mean = x.DwnBin3Mean; + DwnBin3StDev = x.DwnBin3StdDev; + DwnBin4Min = x.DwnBin4Min; + DwnBin4Max = x.DwnBin4Max; + DwnBin4Mean = x.DwnBin4Mean; + DwnBin4StDev = x.DwnBin4StdDev; + DwnBin5Min = x.DwnBin5Min; + DwnBin5Max = x.DwnBin5Max; + DwnBin5Mean = x.DwnBin5Mean; + DwnBin5StDev = x.DwnBin5StdDev; + DwnBin6Min = x.DwnBin6Min; + DwnBin6Max = x.DwnBin6Max; + DwnBin6Mean = x.DwnBin6Mean; + DwnBin6StDev = x.DwnBin6StdDev; + DwnBin7Min = x.DwnBin7Min; + DwnBin7Max = x.DwnBin7Max; + DwnBin7Mean = x.DwnBin7Mean; + DwnBin7StDev = x.DwnBin7StdDev; + DwnBin8Min = x.DwnBin8Min; + DwnBin8Max = x.DwnBin8Max; + DwnBin8Mean = x.DwnBin8Mean; + DwnBin8StDev = x.DwnBin8StdDev; + DnnAllMin = x.DnnAllMin; + DnnAllMax = x.DnnAllMax; + DnnAllMean = x.DnnAllMean; + DnnAllStDev = x.DnnAllStdDev; + DnnLpdMin = x.DnnLpdMin; + DnnLpdMax = x.DnnLpdMax; + DnnLpdMean = x.DnnLpdMean; + DnnLpdStDev = x.DnnLpdStdDev; + DnnLpdNMin = x.DnnLpdNMin; + DnnLpdNMax = x.DnnLpdNMax; + DnnLpdNMean = x.DnnLpdNMean; + DnnLpdNStDev = x.DnnLpdNStdDev; + DnnLpdESMin = x.DnnLpdESMin; + DnnLpdESMax = x.DnnLpdESMax; + DnnLpdESMean = x.DnnLpdESMean; + DnnLpdESStDev = x.DnnLpdESStdDev; + DnnMicroScrMin = x.DnnMicroScrMin; + DnnMicroScrMax = x.DnnMicroScrMax; + DnnMicroScrMean = x.DnnMicroScrMean; + DnnMicroScrStDev = x.DnnMicroScrStdDev; + DnnScrMin = x.DnnScrMin; + DnnScrMax = x.DnnScrMax; + DnnScrMean = x.DnnScrMean; + DnnScrStDev = x.DnnScrStdDev; + DnnSlipMin = x.DnnSlipMin; + DnnSlipMax = x.DnnSlipMax; + DnnSlipMean = x.DnnSlipMean; + DnnSlipStDev = x.DnnSlipStdDev; + DnnAreaCntMin = x.DnnAreaCountMin; + DnnAreaCntMax = x.DnnAreaCountMax; + DnnAreaCntMean = x.DnnAreaCountMean; + DnnAreaCntStDev = x.DnnAreaCountStdDev; + DnnAreaMin = x.DnnAreaMin; + DnnAreaMax = x.DnnAreaMax; + DnnAreaMean = x.DnnAreaMean; + DnnAreaStDev = x.DnnAreaStdDev; + 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; + DnnBin1Min = x.DnnBin1Min; + DnnBin1Max = x.DnnBin1Max; + DnnBin1Mean = x.DnnBin1Mean; + DnnBin1StDev = x.DnnBin1StdDev; + DnnBin2Min = x.DnnBin2Min; + DnnBin2Max = x.DnnBin2Max; + DnnBin2Mean = x.DnnBin2Mean; + DnnBin2StDev = x.DnnBin2StdDev; + DnnBin3Min = x.DnnBin3Min; + DnnBin3Max = x.DnnBin3Max; + DnnBin3Mean = x.DnnBin3Mean; + DnnBin3StDev = x.DnnBin3StdDev; + DnnBin4Min = x.DnnBin4Min; + DnnBin4Max = x.DnnBin4Max; + DnnBin4Mean = x.DnnBin4Mean; + DnnBin4StDev = x.DnnBin4StdDev; + DnnBin5Min = x.DnnBin5Min; + DnnBin5Max = x.DnnBin5Max; + DnnBin5Mean = x.DnnBin5Mean; + DnnBin5StDev = x.DnnBin5StdDev; + DnnBin6Min = x.DnnBin6Min; + DnnBin6Max = x.DnnBin6Max; + DnnBin6Mean = x.DnnBin6Mean; + DnnBin6StDev = x.DnnBin6StdDev; + DnnBin7Min = x.DnnBin7Min; + DnnBin7Max = x.DnnBin7Max; + DnnBin7Mean = x.DnnBin7Mean; + DnnBin7StDev = x.DnnBin7StdDev; + DnnBin8Min = x.DnnBin8Min; + DnnBin8Max = x.DnnBin8Max; + DnnBin8Mean = x.DnnBin8Mean; + DnnBin8StDev = x.DnnBin8StdDev; + RDS = x.RDS; + PSN = x.PSN; + Recipe = x.Recipe; + Operator = x.Employee; + } + txt.Detail detail; + foreach (txt.Description description in descriptions) + { + detail = new txt.Detail + { + Grade = description.Grade, + HeaderUniqueID = description.HeaderUniqueId, + Side = description.Side, + SrcDest = description.SrcDest, + UniqueID = description.UniqueId, + WaferID = description.WaferID, + Data = "*Data*", + DcnAll = description.DcnAll, + DcnArea = description.DcnArea, + DcnAreaCount = description.DcnAreaCount, + DcnBin1 = description.DcnBin1, + DcnBin2 = description.DcnBin2, + DcnBin3 = description.DcnBin3, + DcnBin4 = description.DcnBin4, + DcnBin5 = description.DcnBin5, + DcnBin6 = description.DcnBin6, + DcnBin7 = description.DcnBin7, + DcnBin8 = description.DcnBin8, + DcnHazeAvg = description.DcnHazeAvg, + DcnHazeMedian = description.DcnHazeMedian, + DcnHazeStdDev = description.DcnHazeStdDev, + DcnLpd = description.DcnLpd, + DcnLpdES = description.DcnLpdES, + DcnLpdN = description.DcnLpdN, + DcnMicroScr = description.DcnMicroScr, + DcnScr = description.DcnScr, + DcnSlip = description.DcnSlip, + DnnAll = description.DnnAll, + DnnArea = description.DnnArea, + DnnAreaCount = description.DnnAreaCount, + DnnBin1 = description.DnnBin1, + DnnBin2 = description.DnnBin2, + DnnBin3 = description.DnnBin3, + DnnBin4 = description.DnnBin4, + DnnBin5 = description.DnnBin5, + DnnBin6 = description.DnnBin6, + DnnBin7 = description.DnnBin7, + DnnBin8 = description.DnnBin8, + DnnHazeAvg = description.DnnHazeAvg, + DnnHazeMedian = description.DnnHazeMedian, + DnnHazeStdDev = description.DnnHazeStdDev, + DnnLpd = description.DnnLpd, + DnnLpdES = description.DnnLpdES, + DnnLpdN = description.DnnLpdN, + DnnMicroScr = description.DnnMicroScr, + DnnScr = description.DnnScr, + DnnSlip = description.DnnSlip, + DwnAll = description.DwnAll, + DwnArea = description.DwnArea, + DwnAreaCount = description.DwnAreaCount, + DwnBin1 = description.DwnBin1, + DwnBin2 = description.DwnBin2, + DwnBin3 = description.DwnBin3, + DwnBin4 = description.DwnBin4, + DwnBin5 = description.DwnBin5, + DwnBin6 = description.DwnBin6, + DwnBin7 = description.DwnBin7, + DwnBin8 = description.DwnBin8, + DwnHazeAvg = description.DwnHazeAvg, + DwnHazeMedian = description.DwnHazeMedian, + DwnHazeStdDev = description.DwnHazeStdDev, + DwnLpd = description.DwnLpd, + DwnLpdES = description.DwnLpdES, + DwnLpdN = description.DwnLpdN, + DwnMicroScr = description.DwnMicroScr, + DwnScr = description.DwnScr, + DwnSlip = description.DwnSlip + }; + Details.Add(detail); + } + Date = logistics.DateTimeFromSequence.ToString(); + if (UniqueID is null && Details.Any()) + UniqueID = Details[0].HeaderUniqueID; + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/TIBCO/FileRead.cs b/Adaptation/FileHandlers/TIBCO/FileRead.cs new file mode 100644 index 0000000..5850312 --- /dev/null +++ b/Adaptation/FileHandlers/TIBCO/FileRead.cs @@ -0,0 +1,150 @@ +using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared; +using Adaptation.Shared.Duplicator; +using Adaptation.Shared.Methods; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.Json; + +namespace Adaptation.FileHandlers.TIBCO; + +public class FileRead : Shared.FileRead, IFileRead +{ + + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : + base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + { + _MinFileLength = 10; + _NullData = string.Empty; + _Logistics = new Logistics(this); + if (_FileParameter is null) + throw new Exception(cellInstanceConnectionName); + if (_ModelObjectParameterDefinitions is null) + throw new Exception(cellInstanceConnectionName); + if (!_IsDuplicator) + throw new Exception(cellInstanceConnectionName); + ModelObjectParameterDefinition[] pathParameters = GetProperties(cellInstanceConnectionName, modelObjectParameters, "Path."); + string oiContextDataPendingPath = GetPropertyValue(cellInstanceConnectionName, pathParameters, "Path.OIContextDataPending"); + string oiContextDataResultsPath = GetPropertyValue(cellInstanceConnectionName, pathParameters, "Path.OIContextDataResults"); + string oiContextDataSearchPath = GetPropertyValue(cellInstanceConnectionName, pathParameters, "Path.OIContextDataSearch"); + string lsl2SQLConnectionString = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ConnectionString.LSL2SQL"); + ModelObjectParameterDefinition[] tibcoParameters = GetProperties(cellInstanceConnectionName, modelObjectParameters, "TIBCO."); + string tibcoParameterChannel = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_CHANNEL"); + string tibcoParameterSubject = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_SUBJECT"); + 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 (_IsEAFHosted) + { + Transport.Main.Initialize(smtp, cellInstanceName, fileConnectorConfiguration, oiContextDataPendingPath, oiContextDataResultsPath, oiContextDataSearchPath, lsl2SQLConnectionString); + if (!string.IsNullOrEmpty(fileConnectorConfiguration.SourceFileLocation)) + _ = Transport.Main.Setup(useSleep: true, setIfxTransport: true, tibcoParameterChannel, tibcoParameterSubjectPrefix, tibcoParameterConfigurationLocation, tibcoParameterConfigurationLocationCopy, tibcoParameterSubject); + else + _ = Transport.Main.Setup(useSleep: false, setIfxTransport: false, tibcoParameterChannel, tibcoParameterSubjectPrefix, tibcoParameterConfigurationLocation, tibcoParameterConfigurationLocationCopy, tibcoParameterSubject); + } + } + + void IFileRead.Move(Tuple> extractResults, Exception exception) + { + bool isErrorFile = exception is not null; + if (!isErrorFile && !string.IsNullOrEmpty(_Logistics.ReportFullPath)) + { + FileInfo fileInfo = new(_Logistics.ReportFullPath); + if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) + File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime); + } + Move(extractResults, exception); + } + + void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); + + string IFileRead.GetEventDescription() + { + string result = _Description.GetEventDescription(); + return result; + } + + List IFileRead.GetHeaderNames() + { + List results = _Description.GetHeaderNames(); + return results; + } + + string[] IFileRead.Move(Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception) + { + string[] results = Move(extractResults, to, from, resolvedFileLocation, exception); + return results; + } + + JsonProperty[] IFileRead.GetDefault() + { + JsonProperty[] results = _Description.GetDefault(this, _Logistics); + return results; + } + + Dictionary IFileRead.GetDisplayNamesJsonElement() + { + Dictionary results = _Description.GetDisplayNamesJsonElement(this); + return results; + } + + List IFileRead.GetDescriptions(IFileRead fileRead, List tests, IProcessData processData) + { + List results = _Description.GetDescriptions(fileRead, _Logistics, tests, processData); + return results; + } + + Tuple> IFileRead.GetExtractResult(string reportFullPath, string eventName) + { + Tuple> results; + if (string.IsNullOrEmpty(eventName)) + throw new Exception(); + _ReportFullPath = reportFullPath; + DateTime dateTime = DateTime.Now; + results = GetExtractResult(reportFullPath, dateTime); + if (results.Item3 is null) + results = new Tuple>(results.Item1, Array.Empty(), JsonSerializer.Deserialize("[]"), results.Item4); + if (results.Item3.Length > 0 && _IsEAFHosted) + WritePDSF(this, results.Item3); + UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks); + return results; + } + + Tuple> IFileRead.ReExtract() + { + Tuple> results; + List headerNames = _Description.GetHeaderNames(); + Dictionary keyValuePairs = _Description.GetDisplayNamesJsonElement(this); + results = ReExtract(this, headerNames, keyValuePairs); + return results; + } + + void IFileRead.CheckTests(Test[] tests, bool extra) + { + if (_Description is not Description) + throw new Exception(); + } + + void IFileRead.Callback(object state) => throw new Exception(string.Concat("Not ", nameof(_IsDuplicator))); + + private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) + { + if (dateTime == DateTime.MinValue) + { } + Tuple> results = new(string.Empty, null, null, new List()); + _Logistics = new Logistics(this, reportFullPath, useSplitForMID: true); + SetFileParameterLotIDToLogisticsMID(); + + string[] segments = Path.GetFileNameWithoutExtension(reportFullPath).Split('_'); + string duplicateDirectory = string.Concat(_FileConnectorConfiguration.TargetFileLocation, @"\", segments[0]); + if (segments.Length > 2) + duplicateDirectory = string.Concat(duplicateDirectory, @"-", segments[2]); + if (!Directory.Exists(duplicateDirectory)) + _ = Directory.CreateDirectory(duplicateDirectory); + return results; + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/TIBCO/Transport/Input.cs b/Adaptation/FileHandlers/TIBCO/Transport/Input.cs new file mode 100644 index 0000000..aaa42c6 --- /dev/null +++ b/Adaptation/FileHandlers/TIBCO/Transport/Input.cs @@ -0,0 +1,13 @@ +namespace Adaptation.FileHandlers.TIBCO.Transport; + +public class Input +{ + + public string Sequence { get; set; } + public string Area { get; set; } + public string EquipmentType { get; set; } + public string MesEntity { get; set; } + public string MID { get; set; } + public string Recipe { get; set; } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/TIBCO/Transport/Item.cs b/Adaptation/FileHandlers/TIBCO/Transport/Item.cs new file mode 100644 index 0000000..105e43e --- /dev/null +++ b/Adaptation/FileHandlers/TIBCO/Transport/Item.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace Adaptation.FileHandlers.TIBCO.Transport; + +public class Item +{ + public string Name { get; set; } //WaferLot //UniqueID + public string Type { get; set; } //SatelliteGroup //Sort + public string Number { get; set; } //PocketNumber //Slot + public string Qty { get; set; } //1 + public string CarrierName { get; set; } //PROCESS_GROUP +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/TIBCO/Transport/Job.cs b/Adaptation/FileHandlers/TIBCO/Transport/Job.cs new file mode 100644 index 0000000..8e72823 --- /dev/null +++ b/Adaptation/FileHandlers/TIBCO/Transport/Job.cs @@ -0,0 +1,187 @@ +using System; +using System.Collections.Generic; +using System.Data.SqlClient; +using System.Globalization; +using System.IO; +using System.Text; +using System.Text.Json; + +namespace Adaptation.FileHandlers.TIBCO.Transport; + +public class Job +{ + + public string AutomationMode { get; } + public string BasicType { get; } + public string Equipment { get; } + public string JobName { get; } + public string LotName { get; } + public string PackageName { get; } + public string ProcessSpecName { get; } + public string ProcessType { get; } + public string ProductName { get; } + public string Qty { get; } + public string RecipeName { get; } + public string StateModel { get; } + // + public bool IsAreaSi { get; } + public DateTime DateTime { get; } + public List Items { get; } + + public Job(string oiContextDataPendingPath, string oiContextDataResultsPath, string oiContextDataSearchPath, string lsl2SQLConnectionString, string mid) + { + Items = new List(); + if (mid[0] != '{' || mid[mid.Length - 1] != '}' || !mid.Contains("\"Si\"")) + IsAreaSi = false; + else + { + string[] segments; + const string hyphen = "-"; + Input input = JsonSerializer.Deserialize(mid); + IsAreaSi = input.Area == "Si"; + if (!long.TryParse(input.Sequence, out long sequence)) + DateTime = DateTime.Now; + else + DateTime = new DateTime(sequence); + if (!string.IsNullOrEmpty(input.MID) && input.MID.Length > 9 && input.MID[2] == hyphen[0] && input.MID[9] == hyphen[0]) + segments = input.MID.Split(hyphen[0]); + else + segments = new string[] { hyphen, hyphen, hyphen }; + // + AutomationMode = string.Concat(DateTime.Ticks, ".", input.MesEntity); + if (segments[1] == hyphen) + BasicType = hyphen; + else + BasicType = GetBasicType(lsl2SQLConnectionString, hyphen, segments[1]); + Equipment = input.MesEntity; + JobName = DateTime.Ticks.ToString(); + if (segments[0] == hyphen) + LotName = input.MID; + else + LotName = segments[1]; + PackageName = hyphen; //WAFER_ID WaferLot + ProcessSpecName = hyphen; //WAFER_POS PocketNumber + ProcessType = segments[0]; + ProductName = segments[2].Split('.')[0]; + Qty = "1"; + RecipeName = input.Recipe; + StateModel = input.EquipmentType; + Items.Add(new Item { Name = "0", Type = "NA", Number = (0 + 1).ToString(), Qty = "1", CarrierName = hyphen }); + MoveOldFiles(oiContextDataSearchPath, oiContextDataPendingPath, oiContextDataResultsPath); + } + } + + public string GetBasicType(string lsl2SQLConnectionString, string hyphen, string rds) + { + string result; + // string json; + // string loadLock; + // JsonElement jsonElement; + // DateTime dateTime = DateTime.Now; + // string rdsFile = Path.Combine(configData.OIContextDataResultsPath, $"{DateTime.Ticks}.rds"); + // string jsonFile = Path.Combine(configData.OIContextDataResultsPath, $"{DateTime.Ticks}.json"); + // File.WriteAllText(Path.Combine(configData.OIContextDataSearchPath, $"{DateTime.Ticks}.rds"), rds); + // CultureInfo cultureInfo = new CultureInfo("en-US"); + // Calendar calendar = cultureInfo.Calendar; + // string weekOfYear = calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); + // string yearWeek = string.Concat(dateTime.ToString("yyyy"), "___Week_", weekOfYear); + // string resultsDirectory = Path.Combine(configData.OIContextDataResultsPath, yearWeek); + // if (!Directory.Exists(resultsDirectory)) + // Directory.CreateDirectory(resultsDirectory); + // long breakAfter = dateTime.AddSeconds(60).Ticks; + // for (int i = 0; i < short.MaxValue; i++) + // { + // if (File.Exists(rdsFile) && File.Exists(jsonFile)) + // { + // loadLock = string.Empty; + // json = File.ReadAllText(jsonFile); + // jsonElement = JsonSerializer.Deserialize(json); + // if (jsonElement.ValueKind == JsonValueKind.Object) + // { + // foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) + // { + // if (jsonProperty.Name != "LoadLock") + // continue; + // loadLock = jsonProperty.Value.ToString(); + // } + // } + // if (string.IsNullOrEmpty(loadLock)) + // File.Move(jsonFile, Path.Combine(configData.OIContextDataResultsPath, $"{DateTime.Ticks}.err")); + // else + // { + // File.Move(rdsFile, Path.Combine(configData.OIContextDataResultsPath, yearWeek, $"{DateTime.Ticks}.rds")); + // File.Move(jsonFile, Path.Combine(configData.OIContextDataResultsPath, yearWeek, $"{DateTime.Ticks}.json")); + // result = loadLock; + // } + // break; + // } + // if (DateTime.Now.Ticks > breakAfter) + // break; + // } + object scalar = null; + StringBuilder sql = new(); + _ = sql.Append(" SELECT "). + Append(" CASE "). + Append(" WHEN LOAD_LOCK_SIDE = 'L' THEN 'Left - ' "). + Append(" WHEN LOAD_LOCK_SIDE = 'R' THEN 'Right - ' "). + Append(" ELSE LOAD_LOCK_SIDE "). + Append(" END + REACTOR_TYPE AS LOAD_LOCK "). + Append(" FROM [LSL2SQL].[dbo].[REACT_RUN] "). + Append($" WHERE RDS_NO = '{rds}' "); + //Append(" AND LOAD_SIG != '' "); + try + { + using SqlConnection sqlConnection = new(lsl2SQLConnectionString); + sqlConnection.Open(); + using (SqlCommand sqlCommand = new(sql.ToString(), sqlConnection)) + scalar = sqlCommand.ExecuteScalar(); + sqlConnection.Close(); + } + catch (Exception) + { + } + if (scalar is null) + result = hyphen; + else + result = scalar.ToString(); + return result; + } + + private static void MoveOldFiles(string oiContextDataPendingPath, string oiContextDataResultsPath, string oiContextDataSearchPath) + { + string yearWeek; + string[] oldFiles; + FileInfo fileInfo; + string weekOfYear; + string moveDirectory; + DateTime daysOld = DateTime.Now.AddDays(-2); + CultureInfo cultureInfo = new("en-US"); + Calendar calendar = cultureInfo.Calendar; + string[] directories = new string[] { oiContextDataSearchPath, oiContextDataPendingPath, oiContextDataResultsPath }; + foreach (string directory in directories) + { + try + { + oldFiles = Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly); + foreach (string oldFile in oldFiles) + { + fileInfo = new FileInfo(oldFile); + if (!fileInfo.Exists || fileInfo.LastWriteTime > daysOld) + continue; + weekOfYear = calendar.GetWeekOfYear(fileInfo.LastWriteTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); + yearWeek = string.Concat(fileInfo.LastWriteTime.ToString("yyyy"), "___Week_", weekOfYear); + moveDirectory = Path.Combine(fileInfo.DirectoryName, yearWeek); + if (!Directory.Exists(moveDirectory)) + _ = Directory.CreateDirectory(moveDirectory); + try + { File.Move(oldFile, Path.Combine(moveDirectory, fileInfo.Name)); } + catch (Exception) { } + } + } + catch (Exception) + { + } + } + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/TIBCO/Transport/Logistics.cs b/Adaptation/FileHandlers/TIBCO/Transport/Logistics.cs new file mode 100644 index 0000000..cd63941 --- /dev/null +++ b/Adaptation/FileHandlers/TIBCO/Transport/Logistics.cs @@ -0,0 +1,70 @@ +namespace Adaptation.FileHandlers.TIBCO.Transport; + +/// +/// EDA-Configurator.pdf +/// CDS Namespace Reply Variables +/// +public class Logistics +{ + + /// + /// Basic Type + /// + public string BASIC_TYPE { get; set; } + + /// + /// Text for additional information + /// + public string INFO { get; set; } + + /// + /// Unique assignment of lot processing to the basic cell (Dresden) + /// + public string JOBID { get; set; } + + /// + /// Equipment name used in MES + /// + public string MES_ENTITY { get; set; } + + /// + /// Lot number, name for a lot + /// + public string MID { get; set; } + + /// + /// Recipe (Process Program ID) + /// + public string PPID { get; set; } + + /// + /// Process group (e.g. C5PR) + /// + public string PROCESS_GROUP { get; set; } + + /// + /// Product name + /// + public string PRODUCT { get; set; } + + /// + /// Total number of wafers in lot + /// + public string TOTAL_NUMBER_OF_WAFERS { get; set; } + + /// + /// Equipment sequence number + /// + public string SEQUENCE { get; set; } + + /// + /// Unique wafer number (barcode, OCR) + /// + public string WAFER_ID { get; set; } + + /// + /// Wafer position in a tube (Furnace) + /// + public string WAFER_POS { get; set; } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/TIBCO/Transport/Main.cs b/Adaptation/FileHandlers/TIBCO/Transport/Main.cs new file mode 100644 index 0000000..cf51083 --- /dev/null +++ b/Adaptation/FileHandlers/TIBCO/Transport/Main.cs @@ -0,0 +1,228 @@ +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared.Methods; +using Infineon.Yoda; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Threading; + +namespace Adaptation.FileHandlers.TIBCO.Transport; + +internal partial class Main +{ + + private static ISMTP _SMTP; + private static object _IfxTransport; + private static string _CellInstanceName; + private static string _LSL2SQLConnectionString; + private static string _OIContextDataSearchPath; + private static string _OIContextDataPendingPath; + private static string _OIContextDataResultsPath; + private static FileConnectorConfiguration _FileConnectorConfiguration; + + internal static void Initialize(ISMTP smtp, string cellInstanceName, FileConnectorConfiguration fileConnectorConfiguration, string oiContextDataPendingPath, string oiContextDataResultsPath, string oiContextDataSearchPath, string lsl2SQLConnectionString) + { + _SMTP = smtp; + _IfxTransport = null; + _CellInstanceName = cellInstanceName; + _LSL2SQLConnectionString = lsl2SQLConnectionString; + _OIContextDataSearchPath = oiContextDataSearchPath; + _OIContextDataPendingPath = oiContextDataPendingPath; + _OIContextDataResultsPath = oiContextDataResultsPath; + _FileConnectorConfiguration = fileConnectorConfiguration; + } + + internal static List Setup(bool useSleep, bool setIfxTransport, string tibcoParameterChannel, string tibcoParameterSubjectPrefix, string tibcoParameterConfigurationLocation, string tibcoParameterConfigurationLocationCopy, string tibcoParameterSubject) + { + List results = new(); + if (useSleep) + { + for (int i = 1; i < 4; i++) + Thread.Sleep(500); + } + if (setIfxTransport) + { + results.Add(string.Concat("IfxTransport Subject: ", tibcoParameterSubject)); + IfxDoc ifxDoc = new(); + ifxDoc.Add(IfxConst.SUBJECT_PREFIX, tibcoParameterSubjectPrefix); + ifxDoc.Add(IfxConst.IFX_CHANNEL, tibcoParameterChannel); + ifxDoc.Add(IfxConst.IFX_CONFIGURATION_LOCATION, tibcoParameterConfigurationLocation); + ifxDoc.Add(IfxConst.IFX_CONFIGURATION_LOCATION_LOCAL_COPY, tibcoParameterConfigurationLocationCopy); + results.Add(string.Concat("IfxTransport Config: ", ifxDoc)); + _IfxTransport = new IfxTransport(); + IfxTransport ifxTransport = (IfxTransport)_IfxTransport; + ifxTransport.Create(ifxDoc); + if (useSleep) + { + for (int i = 1; i < 10; i++) + Thread.Sleep(500); + } + results.Add(string.Concat("IfxTransport Current Daemon: ", ifxTransport.CurrentDaemon)); + results.Add(string.Concat("IfxTransport Current Network: ", ifxTransport.CurrentNetwork)); + results.Add(string.Concat("IfxTransport Current Service: ", ifxTransport.CurrentService)); + results.Add(string.Concat("IfxTransport Current PoolName: ", ifxTransport.CurrentPoolName)); + } + for (int i = 1; i < 3; i++) + Thread.Sleep(500); + if (_IfxTransport is null) + throw new Exception(); + else + { + IfxTransport ifxTransport = (IfxTransport)_IfxTransport; + string[] subjects = tibcoParameterSubject.Split('|'); + foreach (string subject in subjects) + ifxTransport.Subscribe(string.Concat(tibcoParameterSubjectPrefix, ".", subject)); + ifxTransport.ReliableMessage += MainTransport_ReliableMessage; + for (int i = 1; i < 3; i++) + Thread.Sleep(500); + } + return results; + } + + private static void MoveSourceFiles(string[] sourceFiles, string pdsfFileLogistics, Calendar calendar) + { + DateTime dateTime; + string weekOfYear; + string checkDirectory; + foreach (string pdsfFile in sourceFiles) + { + if (pdsfFile == pdsfFileLogistics) + continue; + dateTime = new FileInfo(pdsfFile).LastWriteTime; + weekOfYear = calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); + checkDirectory = string.Concat(Path.GetDirectoryName(pdsfFile), @"\_ Logistics Archive\", dateTime.ToString("yyyy"), "_Week_", weekOfYear); + if (!Directory.Exists(checkDirectory)) + _ = Directory.CreateDirectory(checkDirectory); + try + { File.Move(pdsfFile, string.Concat(checkDirectory, @"\", Path.GetFileName(pdsfFile))); } + catch (Exception) { } + } + } + + private static string GetJobsMID(IfxDoc envelopeDocument) + { + string mid; + if (envelopeDocument is null || !envelopeDocument.FieldExists("LotName")) + mid = string.Empty; + else + mid = envelopeDocument.GetFieldByName("LotName").ToString(); + return mid; + } + + private static IfxDoc GetJobsReply(Job job) + { + IfxDoc result = new(); + IfxDoc itemDoc; + IfxDoc jobDoc = new(); + IfxDoc lotDoc = new(); + IfxDoc recipeDoc = new(); + List itemDocs = new(); + jobDoc.Add("AutomationMode", job.AutomationMode); + jobDoc.Add("CreationTimestamp", job.DateTime); + jobDoc.Add("CreationUser", "-"); + jobDoc.Add("CurrentState", true); + jobDoc.Add("Equipment", job.Equipment); + jobDoc.Add("JobName", job.JobName); + jobDoc.Add("LastUpdateTimestamp", job.DateTime); + jobDoc.Add("LastUpdateUser", "-"); + jobDoc.Add("ProcessType", job.ProcessType); + jobDoc.Add("StateModel", job.StateModel); + jobDoc.Add("Status", "-"); + lotDoc.Add("BasicType", job.BasicType); + lotDoc.Add("IsActive", true); + lotDoc.Add("LotName", job.LotName); + lotDoc.Add("LotState", "-"); + lotDoc.Add("PackageName", job.PackageName); + lotDoc.Add("ProcessSpecName", job.ProcessSpecName); + lotDoc.Add("ProductName", job.ProductName); + lotDoc.Add("Qty", job.Qty); + lotDoc.Add("Qty2", "-"); + recipeDoc.Add("RecipeName", job.RecipeName); + lotDoc.Add("SpecName", "-"); + foreach (Item item in job.Items) + { + itemDoc = new IfxDoc(); + itemDoc.Add("Name", item.Name); + itemDoc.Add("Type", item.Type); + itemDoc.Add("Number", item.Number); + itemDoc.Add("Qty", item.Qty); + itemDoc.Add("CarrierName", item.CarrierName); + itemDocs.Add(itemDoc); + } + jobDoc.Add("Recipe", recipeDoc); + lotDoc.Add("Items", itemDocs.ToArray()); + jobDoc.Add("Lots", new IfxDoc[] { lotDoc }); + result.Add("FAJobs", new IfxDoc[] { jobDoc }); + result.Add("IFX_ECD", "0"); + result.Add("IFX_ETX", 0); + return result; + } + + private static void MainTransport_ReliableMessage(string subject, string replySubject, IfxEnvelope ifxEnvelope) + { + 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"); + Calendar calendar = cultureInfo.Calendar; + 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)) + { + string directory = string.Concat(_FileConnectorConfiguration.SourceFileLocation, weekOfYearSegment); + if (!Directory.Exists(directory)) + _ = Directory.CreateDirectory(directory); + string fileName = string.Concat(directory, @"\", subject.Replace(".", "~"), " - ", DateTime.Now.Ticks, ".xml"); + try + { envelopeDocument.SaveAsXml(fileName); } + catch (Exception) { } + } + if (!subject.EndsWith("GETJOBS")) + throw new Exception(); + mid = GetJobsMID(envelopeDocument); + Job job = new(_OIContextDataPendingPath, _OIContextDataResultsPath, _OIContextDataSearchPath, _LSL2SQLConnectionString, mid); + if (job.IsAreaSi) + { + IfxDoc sendReply = GetJobsReply(job); + ifxEnvelope.Transport.SendReply(ifxEnvelope, sendReply); + if (!string.IsNullOrEmpty(_FileConnectorConfiguration.TargetFileLocation)) + { + string directory = string.Concat(_FileConnectorConfiguration.TargetFileLocation, weekOfYearSegment); + if (!Directory.Exists(directory)) + _ = Directory.CreateDirectory(directory); + string fileName = string.Concat(directory, @"\", subject.Replace(".", "~"), " - ", DateTime.Now.Ticks, ".xml"); + try + { sendReply.SaveAsXml(fileName); } + catch (Exception) { } + } + } + if (sourceFiles is not null && !string.IsNullOrEmpty(pdsfFileLogistics)) + MoveSourceFiles(sourceFiles, pdsfFileLogistics, calendar); + } + catch (Exception exception) + { + subject = string.Concat("Exception:", _CellInstanceName, ":MainTransport_ReliableMessage"); + string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace); + try + { _SMTP.SendHighPriorityEmailMessage(subject, body); } + catch (Exception) { } + string directory = _FileConnectorConfiguration.ErrorTargetFileLocation; + if (!string.IsNullOrEmpty(directory) && Directory.Exists(directory)) + { + string fileName = string.Concat(directory, @"\", subject.Replace(".", "~"), " - ", DateTime.Now.Ticks, ".txt"); + try + { File.WriteAllLines(fileName, new string[] { exception.Message, string.Empty, string.Empty, exception.StackTrace }); } + catch (Exception) { } + } + } + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/ToArchive/FileRead.cs b/Adaptation/FileHandlers/ToArchive/FileRead.cs new file mode 100644 index 0000000..236f390 --- /dev/null +++ b/Adaptation/FileHandlers/ToArchive/FileRead.cs @@ -0,0 +1,140 @@ +using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared; +using Adaptation.Shared.Duplicator; +using Adaptation.Shared.Methods; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.Json; + +namespace Adaptation.FileHandlers.ToArchive; + +public class FileRead : Shared.FileRead, IFileRead +{ + + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : + base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + { + _MinFileLength = 10; + _NullData = string.Empty; + _Logistics = new Logistics(this); + if (_FileParameter is null) + throw new Exception(cellInstanceConnectionName); + if (_ModelObjectParameterDefinitions is null) + throw new Exception(cellInstanceConnectionName); + if (!_IsDuplicator) + throw new Exception(cellInstanceConnectionName); + } + + void IFileRead.Move(Tuple> extractResults, Exception exception) + { + bool isErrorFile = exception is not null; + if (!isErrorFile && !string.IsNullOrEmpty(_Logistics.ReportFullPath)) + { + FileInfo fileInfo = new(_Logistics.ReportFullPath); + if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) + File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime); + } + Move(extractResults, exception); + } + + void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); + + string IFileRead.GetEventDescription() + { + string result = _Description.GetEventDescription(); + return result; + } + + List IFileRead.GetHeaderNames() + { + List results = _Description.GetHeaderNames(); + return results; + } + + string[] IFileRead.Move(Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception) + { + string[] results = Move(extractResults, to, from, resolvedFileLocation, exception); + return results; + } + + JsonProperty[] IFileRead.GetDefault() + { + JsonProperty[] results = _Description.GetDefault(this, _Logistics); + return results; + } + + Dictionary IFileRead.GetDisplayNamesJsonElement() + { + Dictionary results = _Description.GetDisplayNamesJsonElement(this); + return results; + } + + List IFileRead.GetDescriptions(IFileRead fileRead, List tests, IProcessData processData) + { + List results = _Description.GetDescriptions(fileRead, _Logistics, tests, processData); + return results; + } + + Tuple> IFileRead.GetExtractResult(string reportFullPath, string eventName) + { + Tuple> results; + if (string.IsNullOrEmpty(eventName)) + throw new Exception(); + _ReportFullPath = reportFullPath; + DateTime dateTime = DateTime.Now; + results = GetExtractResult(reportFullPath, dateTime); + if (results.Item3 is null) + results = new Tuple>(results.Item1, Array.Empty(), JsonSerializer.Deserialize("[]"), results.Item4); + if (results.Item3.Length > 0 && _IsEAFHosted) + WritePDSF(this, results.Item3); + UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks); + return results; + } + + Tuple> IFileRead.ReExtract() + { + Tuple> results; + List headerNames = _Description.GetHeaderNames(); + Dictionary keyValuePairs = _Description.GetDisplayNamesJsonElement(this); + results = ReExtract(this, headerNames, keyValuePairs); + return results; + } + + void IFileRead.CheckTests(Test[] tests, bool extra) + { + if (_Description is not Description) + throw new Exception(); + } + + void IFileRead.Callback(object state) => throw new Exception(string.Concat("Not ", nameof(_IsDuplicator))); + + private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) + { + if (dateTime == DateTime.MinValue) + { } + Tuple> results = new(string.Empty, null, null, new List()); + _Logistics = new Logistics(this, reportFullPath, useSplitForMID: true); + SetFileParameterLotIDToLogisticsMID(); + + string[] segments = Path.GetFileNameWithoutExtension(reportFullPath).Split('_'); + string duplicateDirectory = string.Concat(_FileConnectorConfiguration.TargetFileLocation, @"\", segments[0]); + if (segments.Length > 2) + duplicateDirectory = string.Concat(duplicateDirectory, @"-", segments[2]); + if (!Directory.Exists(duplicateDirectory)) + _ = Directory.CreateDirectory(duplicateDirectory); + + string logisticsSequence = _Logistics.Sequence.ToString(); + bool isDummyRun = _DummyRuns.Any() && _DummyRuns.ContainsKey(_Logistics.JobID) && _DummyRuns[_Logistics.JobID].Any() && (from l in _DummyRuns[_Logistics.JobID] where l == _Logistics.Sequence select 1).Any(); + + List> tuples = new(); + + string destinationDirectory = WriteScopeInfo(_ProgressPath, _Logistics, dateTime, duplicateDirectory, tuples); + if (isDummyRun) + Shared0607(reportFullPath, duplicateDirectory, logisticsSequence, destinationDirectory); + return results; + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/txt/Description.cs b/Adaptation/FileHandlers/txt/Description.cs new file mode 100644 index 0000000..2fcc9b3 --- /dev/null +++ b/Adaptation/FileHandlers/txt/Description.cs @@ -0,0 +1,1445 @@ +using Adaptation.Shared; +using Adaptation.Shared.Methods; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; + +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; } + // + public string EventName { get; set; } + public string NullData { get; set; } + public string JobID { get; set; } + public string Sequence { get; set; } + public string MesEntity { get; set; } + public string ReportFullPath { get; set; } + public string ProcessJobID { get; set; } + public string MID { get; set; } + // + public string Date { get; set; } + public string Employee { get; set; } + public string Lot { get; set; } + public string PSN { get; set; } + public string Reactor { get; set; } + public string Recipe { get; set; } + // + 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; } + public string UniqueId { get; set; } + 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; } + + string IDescription.GetEventDescription() => "File Has been read and parsed"; + + List IDescription.GetNames(IFileRead fileRead, Logistics logistics) + { + List results = new(); + IDescription description = GetDefault(fileRead, logistics); + string json = JsonSerializer.Serialize(description, description.GetType()); + object @object = JsonSerializer.Deserialize(json); + if (@object is not JsonElement jsonElement) + throw new Exception(); + foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) + results.Add(jsonProperty.Name); + return results; + } + + List IDescription.GetDetailNames() + { + List results = new() + { + nameof(Grade), + nameof(HeaderUniqueId), + nameof(RDS), + nameof(Session), + nameof(Side), + nameof(SrcDest), + nameof(UniqueId), + nameof(WaferID) + }; + return results; + } + + List IDescription.GetHeaderNames() + { + List results = new() + { + nameof(Date), + nameof(Employee), + nameof(Lot), + nameof(PSN), + nameof(Reactor), + nameof(Recipe) + }; + return results; + } + + IDescription IDescription.GetDisplayNames() + { + Description result = GetDisplayNames(); + return result; + } + + List IDescription.GetParameterNames() + { + List results = new() + { + nameof(DcnAllMax), + nameof(DcnAllMean), + nameof(DcnAllMin), + nameof(DcnAllStdDev), + nameof(DcnAreaCountMax), + nameof(DcnAreaCountMean), + nameof(DcnAreaCountMin), + nameof(DcnAreaCountStdDev), + nameof(DcnAreaMax), + nameof(DcnAreaMean), + nameof(DcnAreaMin), + nameof(DcnAreaStdDev), + nameof(DcnBin1Max), + nameof(DcnBin1Mean), + nameof(DcnBin1Min), + nameof(DcnBin1StdDev), + nameof(DcnBin2Max), + nameof(DcnBin2Mean), + nameof(DcnBin2Min), + nameof(DcnBin2StdDev), + nameof(DcnBin3Max), + nameof(DcnBin3Mean), + nameof(DcnBin3Min), + nameof(DcnBin3StdDev), + nameof(DcnBin4Max), + nameof(DcnBin4Mean), + nameof(DcnBin4Min), + nameof(DcnBin4StdDev), + nameof(DcnBin5Max), + nameof(DcnBin5Mean), + nameof(DcnBin5Min), + nameof(DcnBin5StdDev), + nameof(DcnBin6Max), + nameof(DcnBin6Mean), + nameof(DcnBin6Min), + nameof(DcnBin6StdDev), + nameof(DcnBin7Max), + nameof(DcnBin7Mean), + nameof(DcnBin7Min), + nameof(DcnBin7StdDev), + nameof(DcnBin8Max), + nameof(DcnBin8Mean), + nameof(DcnBin8Min), + nameof(DcnBin8StdDev), + nameof(DcnHazeAvgMax), + nameof(DcnHazeAvgMean), + nameof(DcnHazeAvgMin), + nameof(DcnHazeAvgStdDev), + nameof(DcnHazeMedianMax), + nameof(DcnHazeMedianMean), + nameof(DcnHazeMedianMin), + nameof(DcnHazeMedianStdDev), + nameof(DcnHazeStdDevMax), + nameof(DcnHazeStdDevMean), + nameof(DcnHazeStdDevMin), + nameof(DcnHazeStdDevStdDev), + nameof(DcnLpdESMax), + nameof(DcnLpdESMean), + nameof(DcnLpdESMin), + nameof(DcnLpdESStdDev), + nameof(DcnLpdMax), + nameof(DcnLpdMean), + nameof(DcnLpdMin), + nameof(DcnLpdNMax), + nameof(DcnLpdNMean), + nameof(DcnLpdNMin), + nameof(DcnLpdNStdDev), + nameof(DcnLpdStdDev), + nameof(DcnMicroScrMax), + nameof(DcnMicroScrMean), + nameof(DcnMicroScrMin), + nameof(DcnMicroScrStdDev), + nameof(DcnScrMax), + nameof(DcnScrMean), + nameof(DcnScrMin), + nameof(DcnScrStdDev), + nameof(DcnSlipMax), + nameof(DcnSlipMean), + nameof(DcnSlipMin), + nameof(DcnSlipStdDev), + nameof(DnnAllMax), + nameof(DnnAllMean), + nameof(DnnAllMin), + nameof(DnnAllStdDev), + nameof(DnnAreaCountMax), + nameof(DnnAreaCountMean), + nameof(DnnAreaCountMin), + nameof(DnnAreaCountStdDev), + nameof(DnnAreaMax), + nameof(DnnAreaMean), + nameof(DnnAreaMin), + nameof(DnnAreaStdDev), + nameof(DnnBin1Max), + nameof(DnnBin1Mean), + nameof(DnnBin1Min), + nameof(DnnBin1StdDev), + nameof(DnnBin2Max), + nameof(DnnBin2Mean), + nameof(DnnBin2Min), + nameof(DnnBin2StdDev), + nameof(DnnBin3Max), + nameof(DnnBin3Mean), + nameof(DnnBin3Min), + nameof(DnnBin3StdDev), + nameof(DnnBin4Max), + nameof(DnnBin4Mean), + nameof(DnnBin4Min), + nameof(DnnBin4StdDev), + nameof(DnnBin5Max), + nameof(DnnBin5Mean), + nameof(DnnBin5Min), + nameof(DnnBin5StdDev), + nameof(DnnBin6Max), + nameof(DnnBin6Mean), + nameof(DnnBin6Min), + nameof(DnnBin6StdDev), + nameof(DnnBin7Max), + nameof(DnnBin7Mean), + nameof(DnnBin7Min), + nameof(DnnBin7StdDev), + nameof(DnnBin8Max), + nameof(DnnBin8Mean), + nameof(DnnBin8Min), + nameof(DnnBin8StdDev), + nameof(DnnHazeAvgMax), + nameof(DnnHazeAvgMean), + nameof(DnnHazeAvgMin), + nameof(DnnHazeAvgStdDev), + nameof(DnnHazeMedianMax), + nameof(DnnHazeMedianMean), + nameof(DnnHazeMedianMin), + nameof(DnnHazeMedianStdDev), + nameof(DnnHazeStdDevMax), + nameof(DnnHazeStdDevMean), + nameof(DnnHazeStdDevMin), + nameof(DnnHazeStdDevStdDev), + nameof(DnnLpdESMax), + nameof(DnnLpdESMean), + nameof(DnnLpdESMin), + nameof(DnnLpdESStdDev), + nameof(DnnLpdMax), + nameof(DnnLpdMean), + nameof(DnnLpdMin), + nameof(DnnLpdNMax), + nameof(DnnLpdNMean), + nameof(DnnLpdNMin), + nameof(DnnLpdNStdDev), + nameof(DnnLpdStdDev), + nameof(DnnMicroScrMax), + nameof(DnnMicroScrMean), + nameof(DnnMicroScrMin), + nameof(DnnMicroScrStdDev), + nameof(DnnScrMax), + nameof(DnnScrMean), + nameof(DnnScrMin), + nameof(DnnScrStdDev), + nameof(DnnSlipMax), + nameof(DnnSlipMean), + nameof(DnnSlipMin), + nameof(DnnSlipStdDev), + nameof(DwnAllMax), + nameof(DwnAllMean), + nameof(DwnAllMin), + nameof(DwnAllStdDev), + nameof(DwnAreaCountMax), + nameof(DwnAreaCountMean), + nameof(DwnAreaCountMin), + nameof(DwnAreaCountStdDev), + nameof(DwnAreaMax), + nameof(DwnAreaMean), + nameof(DwnAreaMin), + nameof(DwnAreaStdDev), + nameof(DwnBin1Max), + nameof(DwnBin1Mean), + nameof(DwnBin1Min), + nameof(DwnBin1StdDev), + nameof(DwnBin2Max), + nameof(DwnBin2Mean), + nameof(DwnBin2Min), + nameof(DwnBin2StdDev), + nameof(DwnBin3Max), + nameof(DwnBin3Mean), + nameof(DwnBin3Min), + nameof(DwnBin3StdDev), + nameof(DwnBin4Max), + nameof(DwnBin4Mean), + nameof(DwnBin4Min), + nameof(DwnBin4StdDev), + nameof(DwnBin5Max), + nameof(DwnBin5Mean), + nameof(DwnBin5Min), + nameof(DwnBin5StdDev), + nameof(DwnBin6Max), + nameof(DwnBin6Mean), + nameof(DwnBin6Min), + nameof(DwnBin6StdDev), + nameof(DwnBin7Max), + nameof(DwnBin7Mean), + nameof(DwnBin7Min), + nameof(DwnBin7StdDev), + nameof(DwnBin8Max), + nameof(DwnBin8Mean), + nameof(DwnBin8Min), + nameof(DwnBin8StdDev), + nameof(DwnHazeAvgMax), + nameof(DwnHazeAvgMean), + nameof(DwnHazeAvgMin), + nameof(DwnHazeAvgStdDev), + nameof(DwnHazeMedianMax), + nameof(DwnHazeMedianMean), + nameof(DwnHazeMedianMin), + nameof(DwnHazeMedianStdDev), + nameof(DwnHazeStdDevMax), + nameof(DwnHazeStdDevMean), + nameof(DwnHazeStdDevMin), + nameof(DwnHazeStdDevStdDev), + nameof(DwnLpdESMax), + nameof(DwnLpdESMean), + nameof(DwnLpdESMin), + nameof(DwnLpdESStdDev), + nameof(DwnLpdMax), + nameof(DwnLpdMean), + nameof(DwnLpdMin), + nameof(DwnLpdNMax), + nameof(DwnLpdNMean), + nameof(DwnLpdNMin), + nameof(DwnLpdNStdDev), + nameof(DwnLpdStdDev), + nameof(DwnMicroScrMax), + nameof(DwnMicroScrMean), + nameof(DwnMicroScrMin), + nameof(DwnMicroScrStdDev), + nameof(DwnScrMax), + nameof(DwnScrMean), + nameof(DwnScrMin), + nameof(DwnScrStdDev), + nameof(DwnSlipMax), + nameof(DwnSlipMean), + nameof(DwnSlipMin), + nameof(DwnSlipStdDev), + nameof(DcnAll), + nameof(DcnArea), + nameof(DcnAreaCount), + nameof(DcnBin1), + nameof(DcnBin2), + nameof(DcnBin3), + nameof(DcnBin4), + nameof(DcnBin5), + nameof(DcnBin6), + nameof(DcnBin7), + nameof(DcnBin8), + nameof(DcnHazeAvg), + nameof(DcnHazeMedian), + nameof(DcnHazeStdDev), + nameof(DcnLpd), + nameof(DcnLpdES), + nameof(DcnLpdN), + nameof(DcnMicroScr), + nameof(DcnScr), + nameof(DcnSlip), + nameof(DnnAll), + nameof(DnnArea), + nameof(DnnAreaCount), + nameof(DnnBin1), + nameof(DnnBin2), + nameof(DnnBin3), + nameof(DnnBin4), + nameof(DnnBin5), + nameof(DnnBin6), + nameof(DnnBin7), + nameof(DnnBin8), + nameof(DnnHazeAvg), + nameof(DnnHazeMedian), + nameof(DnnHazeStdDev), + nameof(DnnLpd), + nameof(DnnLpdES), + nameof(DnnLpdN), + nameof(DnnMicroScr), + nameof(DnnScr), + nameof(DnnSlip), + nameof(DwnAll), + nameof(DwnArea), + nameof(DwnAreaCount), + nameof(DwnBin1), + nameof(DwnBin2), + nameof(DwnBin3), + nameof(DwnBin4), + nameof(DwnBin5), + nameof(DwnBin6), + nameof(DwnBin7), + nameof(DwnBin8), + nameof(DwnHazeAvg), + nameof(DwnHazeMedian), + nameof(DwnHazeStdDev), + nameof(DwnLpd), + nameof(DwnLpdES), + nameof(DwnLpdN), + nameof(DwnMicroScr), + nameof(DwnScr), + nameof(DwnSlip) + }; + return results; + } + + JsonProperty[] IDescription.GetDefault(IFileRead fileRead, Logistics logistics) + { + JsonProperty[] results; + IDescription description = GetDefault(fileRead, logistics); + string json = JsonSerializer.Serialize(description, description.GetType()); + object @object = JsonSerializer.Deserialize(json); + results = ((JsonElement)@object).EnumerateObject().ToArray(); + return results; + } + + List IDescription.GetPairedParameterNames() + { + List results = new(); + return results; + } + + List IDescription.GetIgnoreParameterNames(Test test) + { + List results = new(); + return results; + } + + IDescription IDescription.GetDefaultDescription(IFileRead fileRead, Logistics logistics) + { + Description result = GetDefault(fileRead, logistics); + return result; + } + + Dictionary IDescription.GetDisplayNamesJsonElement(IFileRead fileRead) + { + Dictionary results = new(); + IDescription description = GetDisplayNames(); + string json = JsonSerializer.Serialize(description, description.GetType()); + JsonElement jsonElement = JsonSerializer.Deserialize(json); + foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) + { + if (!results.ContainsKey(jsonProperty.Name)) + results.Add(jsonProperty.Name, string.Empty); + if (jsonProperty.Value is JsonElement jsonPropertyValue) + results[jsonProperty.Name] = jsonPropertyValue.ToString(); + } + return results; + } + + List IDescription.GetDescriptions(IFileRead fileRead, Logistics logistics, List tests, IProcessData iProcessData) + { + List results = new(); + if (iProcessData is null || !iProcessData.Details.Any() || iProcessData is not ProcessData processData) + results.Add(GetDefault(fileRead, logistics)); + else + { + string nullData; + Description description; + object configDataNullData = fileRead.NullData; + if (configDataNullData is null) + nullData = string.Empty; + else + nullData = configDataNullData.ToString(); + for (int i = 0; i < iProcessData.Details.Count; i++) + { + if (iProcessData.Details[i] is not Detail detail) + continue; + description = new Description + { + Test = (int)tests[i], + Count = tests.Count, + Index = i, + // + EventName = fileRead.EventName, + NullData = nullData, + JobID = fileRead.CellInstanceName, + Sequence = logistics.Sequence.ToString(), + MesEntity = logistics.MesEntity, + ReportFullPath = logistics.ReportFullPath, + ProcessJobID = logistics.ProcessJobID, + MID = logistics.MID, + // + Date = processData.Date, + Employee = processData.Operator, + Lot = processData.Lot, + PSN = processData.PSN, + Reactor = processData.Reactor, + Recipe = processData.Recipe, + // + Grade = detail.Grade, + HeaderUniqueId = detail.HeaderUniqueID, + RDS = processData.RDS, + Session = processData.Session, + Side = detail.Side, + SrcDest = detail.SrcDest, + UniqueId = detail.UniqueID, + WaferID = detail.WaferID, + // + DcnAllMax = processData.DcnAllMax, + DcnAllMean = processData.DcnAllMean, + DcnAllMin = processData.DcnAllMin, + DcnAllStdDev = processData.DcnAllStdDev, + DcnAreaCountMax = processData.DcnAreaCountMax, + DcnAreaCountMean = processData.DcnAreaCountMean, + DcnAreaCountMin = processData.DcnAreaCountMin, + DcnAreaCountStdDev = processData.DcnAreaCountStdDev, + DcnAreaMax = processData.DcnAreaMax, + DcnAreaMean = processData.DcnAreaMean, + DcnAreaMin = processData.DcnAreaMin, + DcnAreaStdDev = processData.DcnAreaStdDev, + DcnBin1Max = processData.DcnBin1Max, + DcnBin1Mean = processData.DcnBin1Mean, + DcnBin1Min = processData.DcnBin1Min, + DcnBin1StdDev = processData.DcnBin1StdDev, + DcnBin2Max = processData.DcnBin2Max, + DcnBin2Mean = processData.DcnBin2Mean, + DcnBin2Min = processData.DcnBin2Min, + DcnBin2StdDev = processData.DcnBin2StdDev, + DcnBin3Max = processData.DcnBin3Max, + DcnBin3Mean = processData.DcnBin3Mean, + DcnBin3Min = processData.DcnBin3Min, + DcnBin3StdDev = processData.DcnBin3StdDev, + DcnBin4Max = processData.DcnBin4Max, + DcnBin4Mean = processData.DcnBin4Mean, + DcnBin4Min = processData.DcnBin4Min, + DcnBin4StdDev = processData.DcnBin4StdDev, + DcnBin5Max = processData.DcnBin5Max, + DcnBin5Mean = processData.DcnBin5Mean, + DcnBin5Min = processData.DcnBin5Min, + DcnBin5StdDev = processData.DcnBin5StdDev, + DcnBin6Max = processData.DcnBin6Max, + DcnBin6Mean = processData.DcnBin6Mean, + DcnBin6Min = processData.DcnBin6Min, + DcnBin6StdDev = processData.DcnBin6StdDev, + DcnBin7Max = processData.DcnBin7Max, + DcnBin7Mean = processData.DcnBin7Mean, + DcnBin7Min = processData.DcnBin7Min, + DcnBin7StdDev = processData.DcnBin7StdDev, + DcnBin8Max = processData.DcnBin8Max, + DcnBin8Mean = processData.DcnBin8Mean, + DcnBin8Min = processData.DcnBin8Min, + DcnBin8StdDev = processData.DcnBin8StdDev, + DcnHazeAvgMax = processData.DcnHazeAvgMax, + DcnHazeAvgMean = processData.DcnHazeAvgMean, + DcnHazeAvgMin = processData.DcnHazeAvgMin, + DcnHazeAvgStdDev = processData.DcnHazeAvgStdDev, + DcnHazeMedianMax = processData.DcnHazeMedianMax, + DcnHazeMedianMean = processData.DcnHazeMedianMean, + DcnHazeMedianMin = processData.DcnHazeMedianMin, + DcnHazeMedianStdDev = processData.DcnHazeMedianStdDev, + DcnHazeStdDevMax = processData.DcnHazeStdDevMax, + DcnHazeStdDevMean = processData.DcnHazeStdDevMean, + DcnHazeStdDevMin = processData.DcnHazeStdDevMin, + DcnHazeStdDevStdDev = processData.DcnHazeStdDevStdDev, + DcnLpdESMax = processData.DcnLpdESMax, + DcnLpdESMean = processData.DcnLpdESMean, + DcnLpdESMin = processData.DcnLpdESMin, + DcnLpdESStdDev = processData.DcnLpdESStdDev, + DcnLpdMax = processData.DcnLpdMax, + DcnLpdMean = processData.DcnLpdMean, + DcnLpdMin = processData.DcnLpdMin, + DcnLpdNMax = processData.DcnLpdNMax, + DcnLpdNMean = processData.DcnLpdNMean, + DcnLpdNMin = processData.DcnLpdNMin, + DcnLpdNStdDev = processData.DcnLpdNStdDev, + DcnLpdStdDev = processData.DcnLpdStdDev, + DcnMicroScrMax = processData.DcnMicroScrMax, + DcnMicroScrMean = processData.DcnMicroScrMean, + DcnMicroScrMin = processData.DcnMicroScrMin, + DcnMicroScrStdDev = processData.DcnMicroScrStdDev, + DcnScrMax = processData.DcnScrMax, + DcnScrMean = processData.DcnScrMean, + DcnScrMin = processData.DcnScrMin, + DcnScrStdDev = processData.DcnScrStdDev, + DcnSlipMax = processData.DcnSlipMax, + DcnSlipMean = processData.DcnSlipMean, + DcnSlipMin = processData.DcnSlipMin, + DcnSlipStdDev = processData.DcnSlipStdDev, + DnnAllMax = processData.DnnAllMax, + DnnAllMean = processData.DnnAllMean, + DnnAllMin = processData.DnnAllMin, + DnnAllStdDev = processData.DnnAllStdDev, + DnnAreaCountMax = processData.DnnAreaCountMax, + DnnAreaCountMean = processData.DnnAreaCountMean, + DnnAreaCountMin = processData.DnnAreaCountMin, + DnnAreaCountStdDev = processData.DnnAreaCountStdDev, + DnnAreaMax = processData.DnnAreaMax, + DnnAreaMean = processData.DnnAreaMean, + DnnAreaMin = processData.DnnAreaMin, + DnnAreaStdDev = processData.DnnAreaStdDev, + DnnBin1Max = processData.DnnBin1Max, + DnnBin1Mean = processData.DnnBin1Mean, + DnnBin1Min = processData.DnnBin1Min, + DnnBin1StdDev = processData.DnnBin1StdDev, + DnnBin2Max = processData.DnnBin2Max, + DnnBin2Mean = processData.DnnBin2Mean, + DnnBin2Min = processData.DnnBin2Min, + DnnBin2StdDev = processData.DnnBin2StdDev, + DnnBin3Max = processData.DnnBin3Max, + DnnBin3Mean = processData.DnnBin3Mean, + DnnBin3Min = processData.DnnBin3Min, + DnnBin3StdDev = processData.DnnBin3StdDev, + DnnBin4Max = processData.DnnBin4Max, + DnnBin4Mean = processData.DnnBin4Mean, + DnnBin4Min = processData.DnnBin4Min, + DnnBin4StdDev = processData.DnnBin4StdDev, + DnnBin5Max = processData.DnnBin5Max, + DnnBin5Mean = processData.DnnBin5Mean, + DnnBin5Min = processData.DnnBin5Min, + DnnBin5StdDev = processData.DnnBin5StdDev, + DnnBin6Max = processData.DnnBin6Max, + DnnBin6Mean = processData.DnnBin6Mean, + DnnBin6Min = processData.DnnBin6Min, + DnnBin6StdDev = processData.DnnBin6StdDev, + DnnBin7Max = processData.DnnBin7Max, + DnnBin7Mean = processData.DnnBin7Mean, + DnnBin7Min = processData.DnnBin7Min, + DnnBin7StdDev = processData.DnnBin7StdDev, + DnnBin8Max = processData.DnnBin8Max, + DnnBin8Mean = processData.DnnBin8Mean, + DnnBin8Min = processData.DnnBin8Min, + DnnBin8StdDev = processData.DnnBin8StdDev, + DnnHazeAvgMax = processData.DnnHazeAvgMax, + DnnHazeAvgMean = processData.DnnHazeAvgMean, + DnnHazeAvgMin = processData.DnnHazeAvgMin, + DnnHazeAvgStdDev = processData.DnnHazeAvgStdDev, + DnnHazeMedianMax = processData.DnnHazeMedianMax, + DnnHazeMedianMean = processData.DnnHazeMedianMean, + DnnHazeMedianMin = processData.DnnHazeMedianMin, + DnnHazeMedianStdDev = processData.DnnHazeMedianStdDev, + DnnHazeStdDevMax = processData.DnnHazeStdDevMax, + DnnHazeStdDevMean = processData.DnnHazeStdDevMean, + DnnHazeStdDevMin = processData.DnnHazeStdDevMin, + DnnHazeStdDevStdDev = processData.DnnHazeStdDevStdDev, + DnnLpdESMax = processData.DnnLpdESMax, + DnnLpdESMean = processData.DnnLpdESMean, + DnnLpdESMin = processData.DnnLpdESMin, + DnnLpdESStdDev = processData.DnnLpdESStdDev, + DnnLpdMax = processData.DnnLpdMax, + DnnLpdMean = processData.DnnLpdMean, + DnnLpdMin = processData.DnnLpdMin, + DnnLpdNMax = processData.DnnLpdNMax, + DnnLpdNMean = processData.DnnLpdNMean, + DnnLpdNMin = processData.DnnLpdNMin, + DnnLpdNStdDev = processData.DnnLpdNStdDev, + DnnLpdStdDev = processData.DnnLpdStdDev, + DnnMicroScrMax = processData.DnnMicroScrMax, + DnnMicroScrMean = processData.DnnMicroScrMean, + DnnMicroScrMin = processData.DnnMicroScrMin, + DnnMicroScrStdDev = processData.DnnMicroScrStdDev, + DnnScrMax = processData.DnnScrMax, + DnnScrMean = processData.DnnScrMean, + DnnScrMin = processData.DnnScrMin, + DnnScrStdDev = processData.DnnScrStdDev, + DnnSlipMax = processData.DnnSlipMax, + DnnSlipMean = processData.DnnSlipMean, + DnnSlipMin = processData.DnnSlipMin, + DnnSlipStdDev = processData.DnnSlipStdDev, + DwnAllMax = processData.DwnAllMax, + DwnAllMean = processData.DwnAllMean, + DwnAllMin = processData.DwnAllMin, + DwnAllStdDev = processData.DwnAllStdDev, + DwnAreaCountMax = processData.DwnAreaCountMax, + DwnAreaCountMean = processData.DwnAreaCountMean, + DwnAreaCountMin = processData.DwnAreaCountMin, + DwnAreaCountStdDev = processData.DwnAreaCountStdDev, + DwnAreaMax = processData.DwnAreaMax, + DwnAreaMean = processData.DwnAreaMean, + DwnAreaMin = processData.DwnAreaMin, + DwnAreaStdDev = processData.DwnAreaStdDev, + DwnBin1Max = processData.DwnBin1Max, + DwnBin1Mean = processData.DwnBin1Mean, + DwnBin1Min = processData.DwnBin1Min, + DwnBin1StdDev = processData.DwnBin1StdDev, + DwnBin2Max = processData.DwnBin2Max, + DwnBin2Mean = processData.DwnBin2Mean, + DwnBin2Min = processData.DwnBin2Min, + DwnBin2StdDev = processData.DwnBin2StdDev, + DwnBin3Max = processData.DwnBin3Max, + DwnBin3Mean = processData.DwnBin3Mean, + DwnBin3Min = processData.DwnBin3Min, + DwnBin3StdDev = processData.DwnBin3StdDev, + DwnBin4Max = processData.DwnBin4Max, + DwnBin4Mean = processData.DwnBin4Mean, + DwnBin4Min = processData.DwnBin4Min, + DwnBin4StdDev = processData.DwnBin4StdDev, + DwnBin5Max = processData.DwnBin5Max, + DwnBin5Mean = processData.DwnBin5Mean, + DwnBin5Min = processData.DwnBin5Min, + DwnBin5StdDev = processData.DwnBin5StdDev, + DwnBin6Max = processData.DwnBin6Max, + DwnBin6Mean = processData.DwnBin6Mean, + DwnBin6Min = processData.DwnBin6Min, + DwnBin6StdDev = processData.DwnBin6StdDev, + DwnBin7Max = processData.DwnBin7Max, + DwnBin7Mean = processData.DwnBin7Mean, + DwnBin7Min = processData.DwnBin7Min, + DwnBin7StdDev = processData.DwnBin7StdDev, + DwnBin8Max = processData.DwnBin8Max, + DwnBin8Mean = processData.DwnBin8Mean, + DwnBin8Min = processData.DwnBin8Min, + DwnBin8StdDev = processData.DwnBin8StdDev, + DwnHazeAvgMax = processData.DwnHazeAvgMax, + DwnHazeAvgMean = processData.DwnHazeAvgMean, + DwnHazeAvgMin = processData.DwnHazeAvgMin, + DwnHazeAvgStdDev = processData.DwnHazeAvgStdDev, + DwnHazeMedianMax = processData.DwnHazeMedianMax, + DwnHazeMedianMean = processData.DwnHazeMedianMean, + DwnHazeMedianMin = processData.DwnHazeMedianMin, + DwnHazeMedianStdDev = processData.DwnHazeMedianStdDev, + DwnHazeStdDevMax = processData.DwnHazeStdDevMax, + DwnHazeStdDevMean = processData.DwnHazeStdDevMean, + DwnHazeStdDevMin = processData.DwnHazeStdDevMin, + DwnHazeStdDevStdDev = processData.DwnHazeStdDevStdDev, + DwnLpdESMax = processData.DwnLpdESMax, + DwnLpdESMean = processData.DwnLpdESMean, + DwnLpdESMin = processData.DwnLpdESMin, + DwnLpdESStdDev = processData.DwnLpdESStdDev, + DwnLpdMax = processData.DwnLpdMax, + DwnLpdMean = processData.DwnLpdMean, + DwnLpdMin = processData.DwnLpdMin, + DwnLpdNMax = processData.DwnLpdNMax, + DwnLpdNMean = processData.DwnLpdNMean, + DwnLpdNMin = processData.DwnLpdNMin, + DwnLpdNStdDev = processData.DwnLpdNStdDev, + DwnLpdStdDev = processData.DwnLpdStdDev, + DwnMicroScrMax = processData.DwnMicroScrMax, + DwnMicroScrMean = processData.DwnMicroScrMean, + DwnMicroScrMin = processData.DwnMicroScrMin, + DwnMicroScrStdDev = processData.DwnMicroScrStdDev, + DwnScrMax = processData.DwnScrMax, + DwnScrMean = processData.DwnScrMean, + DwnScrMin = processData.DwnScrMin, + DwnScrStdDev = processData.DwnScrStdDev, + DwnSlipMax = processData.DwnSlipMax, + DwnSlipMean = processData.DwnSlipMean, + DwnSlipMin = processData.DwnSlipMin, + DwnSlipStdDev = processData.DwnSlipStdDev, + DcnAll = detail.DcnAll, + DcnArea = detail.DcnArea, + DcnAreaCount = detail.DcnAreaCount, + DcnBin1 = detail.DcnBin1, + DcnBin2 = detail.DcnBin2, + DcnBin3 = detail.DcnBin3, + DcnBin4 = detail.DcnBin4, + DcnBin5 = detail.DcnBin5, + DcnBin6 = detail.DcnBin6, + DcnBin7 = detail.DcnBin7, + DcnBin8 = detail.DcnBin8, + DcnHazeAvg = detail.DcnHazeAvg, + DcnHazeMedian = detail.DcnHazeMedian, + DcnHazeStdDev = detail.DcnHazeStdDev, + DcnLpd = detail.DcnLpd, + DcnLpdES = detail.DcnLpdES, + DcnLpdN = detail.DcnLpdN, + DcnMicroScr = detail.DcnMicroScr, + DcnScr = detail.DcnScr, + DcnSlip = detail.DcnSlip, + DnnAll = detail.DnnAll, + DnnArea = detail.DnnArea, + DnnAreaCount = detail.DnnAreaCount, + DnnBin1 = detail.DnnBin1, + DnnBin2 = detail.DnnBin2, + DnnBin3 = detail.DnnBin3, + DnnBin4 = detail.DnnBin4, + DnnBin5 = detail.DnnBin5, + DnnBin6 = detail.DnnBin6, + DnnBin7 = detail.DnnBin7, + DnnBin8 = detail.DnnBin8, + DnnHazeAvg = detail.DnnHazeAvg, + DnnHazeMedian = detail.DnnHazeMedian, + DnnHazeStdDev = detail.DnnHazeStdDev, + DnnLpd = detail.DnnLpd, + DnnLpdES = detail.DnnLpdES, + DnnLpdN = detail.DnnLpdN, + DnnMicroScr = detail.DnnMicroScr, + DnnScr = detail.DnnScr, + DnnSlip = detail.DnnSlip, + DwnAll = detail.DwnAll, + DwnArea = detail.DwnArea, + DwnAreaCount = detail.DwnAreaCount, + DwnBin1 = detail.DwnBin1, + DwnBin2 = detail.DwnBin2, + DwnBin3 = detail.DwnBin3, + DwnBin4 = detail.DwnBin4, + DwnBin5 = detail.DwnBin5, + DwnBin6 = detail.DwnBin6, + DwnBin7 = detail.DwnBin7, + DwnBin8 = detail.DwnBin8, + DwnHazeAvg = detail.DwnHazeAvg, + DwnHazeMedian = detail.DwnHazeMedian, + DwnHazeStdDev = detail.DwnHazeStdDev, + DwnLpd = detail.DwnLpd, + DwnLpdES = detail.DwnLpdES, + DwnLpdN = detail.DwnLpdN, + DwnMicroScr = detail.DwnMicroScr, + DwnScr = detail.DwnScr, + DwnSlip = detail.DwnSlip + }; + results.Add(description); + } + } + return results; + } + + private static Description GetDisplayNames() + { + Description result = new(); + return result; + } + + private Description GetDefault(IFileRead fileRead, Logistics logistics) + { + Description result = new() + { + Test = -1, + Count = 0, + Index = -1, + // + EventName = fileRead.EventName, + NullData = fileRead.NullData, + JobID = fileRead.CellInstanceName, + Sequence = logistics.Sequence.ToString(), + MesEntity = fileRead.MesEntity, + ReportFullPath = logistics.ReportFullPath, + ProcessJobID = logistics.ProcessJobID, + MID = logistics.MID, + // + Date = nameof(Date), + Employee = nameof(Employee), + Lot = nameof(Lot), + PSN = nameof(PSN), + Reactor = nameof(Reactor), + Recipe = nameof(Recipe), + // + Grade = nameof(Grade), + HeaderUniqueId = nameof(HeaderUniqueId), + RDS = nameof(RDS), + Session = nameof(Session), + Side = nameof(Side), + SrcDest = nameof(SrcDest), + UniqueId = nameof(UniqueId), + WaferID = nameof(WaferID), + // + DcnAllMax = nameof(DcnAllMax), + DcnAllMean = nameof(DcnAllMean), + DcnAllMin = nameof(DcnAllMin), + DcnAllStdDev = nameof(DcnAllStdDev), + DcnAreaCountMax = nameof(DcnAreaCountMax), + DcnAreaCountMean = nameof(DcnAreaCountMean), + DcnAreaCountMin = nameof(DcnAreaCountMin), + DcnAreaCountStdDev = nameof(DcnAreaCountStdDev), + DcnAreaMax = nameof(DcnAreaMax), + DcnAreaMean = nameof(DcnAreaMean), + DcnAreaMin = nameof(DcnAreaMin), + DcnAreaStdDev = nameof(DcnAreaStdDev), + DcnBin1Max = nameof(DcnBin1Max), + DcnBin1Mean = nameof(DcnBin1Mean), + DcnBin1Min = nameof(DcnBin1Min), + DcnBin1StdDev = nameof(DcnBin1StdDev), + DcnBin2Max = nameof(DcnBin2Max), + DcnBin2Mean = nameof(DcnBin2Mean), + DcnBin2Min = nameof(DcnBin2Min), + DcnBin2StdDev = nameof(DcnBin2StdDev), + DcnBin3Max = nameof(DcnBin3Max), + DcnBin3Mean = nameof(DcnBin3Mean), + DcnBin3Min = nameof(DcnBin3Min), + DcnBin3StdDev = nameof(DcnBin3StdDev), + DcnBin4Max = nameof(DcnBin4Max), + DcnBin4Mean = nameof(DcnBin4Mean), + DcnBin4Min = nameof(DcnBin4Min), + DcnBin4StdDev = nameof(DcnBin4StdDev), + DcnBin5Max = nameof(DcnBin5Max), + DcnBin5Mean = nameof(DcnBin5Mean), + DcnBin5Min = nameof(DcnBin5Min), + DcnBin5StdDev = nameof(DcnBin5StdDev), + DcnBin6Max = nameof(DcnBin6Max), + DcnBin6Mean = nameof(DcnBin6Mean), + DcnBin6Min = nameof(DcnBin6Min), + DcnBin6StdDev = nameof(DcnBin6StdDev), + DcnBin7Max = nameof(DcnBin7Max), + DcnBin7Mean = nameof(DcnBin7Mean), + DcnBin7Min = nameof(DcnBin7Min), + DcnBin7StdDev = nameof(DcnBin7StdDev), + DcnBin8Max = nameof(DcnBin8Max), + DcnBin8Mean = nameof(DcnBin8Mean), + DcnBin8Min = nameof(DcnBin8Min), + DcnBin8StdDev = nameof(DcnBin8StdDev), + DcnHazeAvgMax = nameof(DcnHazeAvgMax), + DcnHazeAvgMean = nameof(DcnHazeAvgMean), + DcnHazeAvgMin = nameof(DcnHazeAvgMin), + DcnHazeAvgStdDev = nameof(DcnHazeAvgStdDev), + DcnHazeMedianMax = nameof(DcnHazeMedianMax), + DcnHazeMedianMean = nameof(DcnHazeMedianMean), + DcnHazeMedianMin = nameof(DcnHazeMedianMin), + DcnHazeMedianStdDev = nameof(DcnHazeMedianStdDev), + DcnHazeStdDevMax = nameof(DcnHazeStdDevMax), + DcnHazeStdDevMean = nameof(DcnHazeStdDevMean), + DcnHazeStdDevMin = nameof(DcnHazeStdDevMin), + DcnHazeStdDevStdDev = nameof(DcnHazeStdDevStdDev), + DcnLpdESMax = nameof(DcnLpdESMax), + DcnLpdESMean = nameof(DcnLpdESMean), + DcnLpdESMin = nameof(DcnLpdESMin), + DcnLpdESStdDev = nameof(DcnLpdESStdDev), + DcnLpdMax = nameof(DcnLpdMax), + DcnLpdMean = nameof(DcnLpdMean), + DcnLpdMin = nameof(DcnLpdMin), + DcnLpdNMax = nameof(DcnLpdNMax), + DcnLpdNMean = nameof(DcnLpdNMean), + DcnLpdNMin = nameof(DcnLpdNMin), + DcnLpdNStdDev = nameof(DcnLpdNStdDev), + DcnLpdStdDev = nameof(DcnLpdStdDev), + DcnMicroScrMax = nameof(DcnMicroScrMax), + DcnMicroScrMean = nameof(DcnMicroScrMean), + DcnMicroScrMin = nameof(DcnMicroScrMin), + DcnMicroScrStdDev = nameof(DcnMicroScrStdDev), + DcnScrMax = nameof(DcnScrMax), + DcnScrMean = nameof(DcnScrMean), + DcnScrMin = nameof(DcnScrMin), + DcnScrStdDev = nameof(DcnScrStdDev), + DcnSlipMax = nameof(DcnSlipMax), + DcnSlipMean = nameof(DcnSlipMean), + DcnSlipMin = nameof(DcnSlipMin), + DcnSlipStdDev = nameof(DcnSlipStdDev), + DnnAllMax = nameof(DnnAllMax), + DnnAllMean = nameof(DnnAllMean), + DnnAllMin = nameof(DnnAllMin), + DnnAllStdDev = nameof(DnnAllStdDev), + DnnAreaCountMax = nameof(DnnAreaCountMax), + DnnAreaCountMean = nameof(DnnAreaCountMean), + DnnAreaCountMin = nameof(DnnAreaCountMin), + DnnAreaCountStdDev = nameof(DnnAreaCountStdDev), + DnnAreaMax = nameof(DnnAreaMax), + DnnAreaMean = nameof(DnnAreaMean), + DnnAreaMin = nameof(DnnAreaMin), + DnnAreaStdDev = nameof(DnnAreaStdDev), + DnnBin1Max = nameof(DnnBin1Max), + DnnBin1Mean = nameof(DnnBin1Mean), + DnnBin1Min = nameof(DnnBin1Min), + DnnBin1StdDev = nameof(DnnBin1StdDev), + DnnBin2Max = nameof(DnnBin2Max), + DnnBin2Mean = nameof(DnnBin2Mean), + DnnBin2Min = nameof(DnnBin2Min), + DnnBin2StdDev = nameof(DnnBin2StdDev), + DnnBin3Max = nameof(DnnBin3Max), + DnnBin3Mean = nameof(DnnBin3Mean), + DnnBin3Min = nameof(DnnBin3Min), + DnnBin3StdDev = nameof(DnnBin3StdDev), + DnnBin4Max = nameof(DnnBin4Max), + DnnBin4Mean = nameof(DnnBin4Mean), + DnnBin4Min = nameof(DnnBin4Min), + DnnBin4StdDev = nameof(DnnBin4StdDev), + DnnBin5Max = nameof(DnnBin5Max), + DnnBin5Mean = nameof(DnnBin5Mean), + DnnBin5Min = nameof(DnnBin5Min), + DnnBin5StdDev = nameof(DnnBin5StdDev), + DnnBin6Max = nameof(DnnBin6Max), + DnnBin6Mean = nameof(DnnBin6Mean), + DnnBin6Min = nameof(DnnBin6Min), + DnnBin6StdDev = nameof(DnnBin6StdDev), + DnnBin7Max = nameof(DnnBin7Max), + DnnBin7Mean = nameof(DnnBin7Mean), + DnnBin7Min = nameof(DnnBin7Min), + DnnBin7StdDev = nameof(DnnBin7StdDev), + DnnBin8Max = nameof(DnnBin8Max), + DnnBin8Mean = nameof(DnnBin8Mean), + DnnBin8Min = nameof(DnnBin8Min), + DnnBin8StdDev = nameof(DnnBin8StdDev), + DnnHazeAvgMax = nameof(DnnHazeAvgMax), + DnnHazeAvgMean = nameof(DnnHazeAvgMean), + DnnHazeAvgMin = nameof(DnnHazeAvgMin), + DnnHazeAvgStdDev = nameof(DnnHazeAvgStdDev), + DnnHazeMedianMax = nameof(DnnHazeMedianMax), + DnnHazeMedianMean = nameof(DnnHazeMedianMean), + DnnHazeMedianMin = nameof(DnnHazeMedianMin), + DnnHazeMedianStdDev = nameof(DnnHazeMedianStdDev), + DnnHazeStdDevMax = nameof(DnnHazeStdDevMax), + DnnHazeStdDevMean = nameof(DnnHazeStdDevMean), + DnnHazeStdDevMin = nameof(DnnHazeStdDevMin), + DnnHazeStdDevStdDev = nameof(DnnHazeStdDevStdDev), + DnnLpdESMax = nameof(DnnLpdESMax), + DnnLpdESMean = nameof(DnnLpdESMean), + DnnLpdESMin = nameof(DnnLpdESMin), + DnnLpdESStdDev = nameof(DnnLpdESStdDev), + DnnLpdMax = nameof(DnnLpdMax), + DnnLpdMean = nameof(DnnLpdMean), + DnnLpdMin = nameof(DnnLpdMin), + DnnLpdNMax = nameof(DnnLpdNMax), + DnnLpdNMean = nameof(DnnLpdNMean), + DnnLpdNMin = nameof(DnnLpdNMin), + DnnLpdNStdDev = nameof(DnnLpdNStdDev), + DnnLpdStdDev = nameof(DnnLpdStdDev), + DnnMicroScrMax = nameof(DnnMicroScrMax), + DnnMicroScrMean = nameof(DnnMicroScrMean), + DnnMicroScrMin = nameof(DnnMicroScrMin), + DnnMicroScrStdDev = nameof(DnnMicroScrStdDev), + DnnScrMax = nameof(DnnScrMax), + DnnScrMean = nameof(DnnScrMean), + DnnScrMin = nameof(DnnScrMin), + DnnScrStdDev = nameof(DnnScrStdDev), + DnnSlipMax = nameof(DnnSlipMax), + DnnSlipMean = nameof(DnnSlipMean), + DnnSlipMin = nameof(DnnSlipMin), + DnnSlipStdDev = nameof(DnnSlipStdDev), + DwnAllMax = nameof(DwnAllMax), + DwnAllMean = nameof(DwnAllMean), + DwnAllMin = nameof(DwnAllMin), + DwnAllStdDev = nameof(DwnAllStdDev), + DwnAreaCountMax = nameof(DwnAreaCountMax), + DwnAreaCountMean = nameof(DwnAreaCountMean), + DwnAreaCountMin = nameof(DwnAreaCountMin), + DwnAreaCountStdDev = nameof(DwnAreaCountStdDev), + DwnAreaMax = nameof(DwnAreaMax), + DwnAreaMean = nameof(DwnAreaMean), + DwnAreaMin = nameof(DwnAreaMin), + DwnAreaStdDev = nameof(DwnAreaStdDev), + DwnBin1Max = nameof(DwnBin1Max), + DwnBin1Mean = nameof(DwnBin1Mean), + DwnBin1Min = nameof(DwnBin1Min), + DwnBin1StdDev = nameof(DwnBin1StdDev), + DwnBin2Max = nameof(DwnBin2Max), + DwnBin2Mean = nameof(DwnBin2Mean), + DwnBin2Min = nameof(DwnBin2Min), + DwnBin2StdDev = nameof(DwnBin2StdDev), + DwnBin3Max = nameof(DwnBin3Max), + DwnBin3Mean = nameof(DwnBin3Mean), + DwnBin3Min = nameof(DwnBin3Min), + DwnBin3StdDev = nameof(DwnBin3StdDev), + DwnBin4Max = nameof(DwnBin4Max), + DwnBin4Mean = nameof(DwnBin4Mean), + DwnBin4Min = nameof(DwnBin4Min), + DwnBin4StdDev = nameof(DwnBin4StdDev), + DwnBin5Max = nameof(DwnBin5Max), + DwnBin5Mean = nameof(DwnBin5Mean), + DwnBin5Min = nameof(DwnBin5Min), + DwnBin5StdDev = nameof(DwnBin5StdDev), + DwnBin6Max = nameof(DwnBin6Max), + DwnBin6Mean = nameof(DwnBin6Mean), + DwnBin6Min = nameof(DwnBin6Min), + DwnBin6StdDev = nameof(DwnBin6StdDev), + DwnBin7Max = nameof(DwnBin7Max), + DwnBin7Mean = nameof(DwnBin7Mean), + DwnBin7Min = nameof(DwnBin7Min), + DwnBin7StdDev = nameof(DwnBin7StdDev), + DwnBin8Max = nameof(DwnBin8Max), + DwnBin8Mean = nameof(DwnBin8Mean), + DwnBin8Min = nameof(DwnBin8Min), + DwnBin8StdDev = nameof(DwnBin8StdDev), + DwnHazeAvgMax = nameof(DwnHazeAvgMax), + DwnHazeAvgMean = nameof(DwnHazeAvgMean), + DwnHazeAvgMin = nameof(DwnHazeAvgMin), + DwnHazeAvgStdDev = nameof(DwnHazeAvgStdDev), + DwnHazeMedianMax = nameof(DwnHazeMedianMax), + DwnHazeMedianMean = nameof(DwnHazeMedianMean), + DwnHazeMedianMin = nameof(DwnHazeMedianMin), + DwnHazeMedianStdDev = nameof(DwnHazeMedianStdDev), + DwnHazeStdDevMax = nameof(DwnHazeStdDevMax), + DwnHazeStdDevMean = nameof(DwnHazeStdDevMean), + DwnHazeStdDevMin = nameof(DwnHazeStdDevMin), + DwnHazeStdDevStdDev = nameof(DwnHazeStdDevStdDev), + DwnLpdESMax = nameof(DwnLpdESMax), + DwnLpdESMean = nameof(DwnLpdESMean), + DwnLpdESMin = nameof(DwnLpdESMin), + DwnLpdESStdDev = nameof(DwnLpdESStdDev), + DwnLpdMax = nameof(DwnLpdMax), + DwnLpdMean = nameof(DwnLpdMean), + DwnLpdMin = nameof(DwnLpdMin), + DwnLpdNMax = nameof(DwnLpdNMax), + DwnLpdNMean = nameof(DwnLpdNMean), + DwnLpdNMin = nameof(DwnLpdNMin), + DwnLpdNStdDev = nameof(DwnLpdNStdDev), + DwnLpdStdDev = nameof(DwnLpdStdDev), + DwnMicroScrMax = nameof(DwnMicroScrMax), + DwnMicroScrMean = nameof(DwnMicroScrMean), + DwnMicroScrMin = nameof(DwnMicroScrMin), + DwnMicroScrStdDev = nameof(DwnMicroScrStdDev), + DwnScrMax = nameof(DwnScrMax), + DwnScrMean = nameof(DwnScrMean), + DwnScrMin = nameof(DwnScrMin), + DwnScrStdDev = nameof(DwnScrStdDev), + DwnSlipMax = nameof(DwnSlipMax), + DwnSlipMean = nameof(DwnSlipMean), + DwnSlipMin = nameof(DwnSlipMin), + DwnSlipStdDev = nameof(DwnSlipStdDev), + DcnAll = nameof(DcnAll), + DcnArea = nameof(DcnArea), + DcnAreaCount = nameof(DcnAreaCount), + DcnBin1 = nameof(DcnBin1), + DcnBin2 = nameof(DcnBin2), + DcnBin3 = nameof(DcnBin3), + DcnBin4 = nameof(DcnBin4), + DcnBin5 = nameof(DcnBin5), + DcnBin6 = nameof(DcnBin6), + DcnBin7 = nameof(DcnBin7), + DcnBin8 = nameof(DcnBin8), + DcnHazeAvg = nameof(DcnHazeAvg), + DcnHazeMedian = nameof(DcnHazeMedian), + DcnHazeStdDev = nameof(DcnHazeStdDev), + DcnLpd = nameof(DcnLpd), + DcnLpdES = nameof(DcnLpdES), + DcnLpdN = nameof(DcnLpdN), + DcnMicroScr = nameof(DcnMicroScr), + DcnScr = nameof(DcnScr), + DcnSlip = nameof(DcnSlip), + DnnAll = nameof(DnnAll), + DnnArea = nameof(DnnArea), + DnnAreaCount = nameof(DnnAreaCount), + DnnBin1 = nameof(DnnBin1), + DnnBin2 = nameof(DnnBin2), + DnnBin3 = nameof(DnnBin3), + DnnBin4 = nameof(DnnBin4), + DnnBin5 = nameof(DnnBin5), + DnnBin6 = nameof(DnnBin6), + DnnBin7 = nameof(DnnBin7), + DnnBin8 = nameof(DnnBin8), + DnnHazeAvg = nameof(DnnHazeAvg), + DnnHazeMedian = nameof(DnnHazeMedian), + DnnHazeStdDev = nameof(DnnHazeStdDev), + DnnLpd = nameof(DnnLpd), + DnnLpdES = nameof(DnnLpdES), + DnnLpdN = nameof(DnnLpdN), + DnnMicroScr = nameof(DnnMicroScr), + DnnScr = nameof(DnnScr), + DnnSlip = nameof(DnnSlip), + DwnAll = nameof(DwnAll), + DwnArea = nameof(DwnArea), + DwnAreaCount = nameof(DwnAreaCount), + DwnBin1 = nameof(DwnBin1), + DwnBin2 = nameof(DwnBin2), + DwnBin3 = nameof(DwnBin3), + DwnBin4 = nameof(DwnBin4), + DwnBin5 = nameof(DwnBin5), + DwnBin6 = nameof(DwnBin6), + DwnBin7 = nameof(DwnBin7), + DwnBin8 = nameof(DwnBin8), + DwnHazeAvg = nameof(DwnHazeAvg), + DwnHazeMedian = nameof(DwnHazeMedian), + DwnHazeStdDev = nameof(DwnHazeStdDev), + DwnLpd = nameof(DwnLpd), + DwnLpdES = nameof(DwnLpdES), + DwnLpdN = nameof(DwnLpdN), + DwnMicroScr = nameof(DwnMicroScr), + DwnScr = nameof(DwnScr), + DwnSlip = nameof(DwnSlip), + }; + return result; + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/txt/Detail.cs b/Adaptation/FileHandlers/txt/Detail.cs new file mode 100644 index 0000000..912ce90 --- /dev/null +++ b/Adaptation/FileHandlers/txt/Detail.cs @@ -0,0 +1,76 @@ +namespace Adaptation.FileHandlers.txt; + +public class Detail +{ + + public string Grade { get; set; } + public string HeaderUniqueID { get; set; } + public string Side { get; set; } + public string SrcDest { get; set; } + public string UniqueID { get; set; } + 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; } + + public Detail() => Data = "*Data*"; + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/txt/FileRead.cs b/Adaptation/FileHandlers/txt/FileRead.cs new file mode 100644 index 0000000..7ee08a7 --- /dev/null +++ b/Adaptation/FileHandlers/txt/FileRead.cs @@ -0,0 +1,125 @@ +using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared; +using Adaptation.Shared.Methods; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.Json; +using System.Text.RegularExpressions; + +namespace Adaptation.FileHandlers.txt; + +public class FileRead : Shared.FileRead, IFileRead +{ + + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : + base(new Description(), true, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) + { + _MinFileLength = 10; + _NullData = string.Empty; + _Logistics = new Logistics(this); + if (_FileParameter is null) + throw new Exception(cellInstanceConnectionName); + if (_ModelObjectParameterDefinitions is null) + throw new Exception(cellInstanceConnectionName); + if (_IsDuplicator) + throw new Exception(cellInstanceConnectionName); + } + + void IFileRead.Move(Tuple> extractResults, Exception exception) => Move(extractResults, exception); + + void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); + + string IFileRead.GetEventDescription() + { + string result = _Description.GetEventDescription(); + return result; + } + + List IFileRead.GetHeaderNames() + { + List results = _Description.GetHeaderNames(); + return results; + } + + string[] IFileRead.Move(Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception) + { + string[] results = Move(extractResults, to, from, resolvedFileLocation, exception); + return results; + } + + JsonProperty[] IFileRead.GetDefault() + { + JsonProperty[] results = _Description.GetDefault(this, _Logistics); + return results; + } + + Dictionary IFileRead.GetDisplayNamesJsonElement() + { + Dictionary results = _Description.GetDisplayNamesJsonElement(this); + return results; + } + + List IFileRead.GetDescriptions(IFileRead fileRead, List tests, IProcessData processData) + { + List results = _Description.GetDescriptions(fileRead, _Logistics, tests, processData); + return results; + } + + Tuple> IFileRead.GetExtractResult(string reportFullPath, string eventName) + { + Tuple> results; + if (string.IsNullOrEmpty(eventName)) + throw new Exception(); + _ReportFullPath = reportFullPath; + DateTime dateTime = DateTime.Now; + results = GetExtractResult(reportFullPath, dateTime); + if (results.Item3 is null) + results = new Tuple>(results.Item1, Array.Empty(), JsonSerializer.Deserialize("[]"), results.Item4); + if (results.Item3.Length > 0 && _IsEAFHosted) + WritePDSF(this, results.Item3); + UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks); + return results; + } + + Tuple> IFileRead.ReExtract() + { + Tuple> results; + List headerNames = _Description.GetHeaderNames(); + Dictionary keyValuePairs = _Description.GetDisplayNamesJsonElement(this); + results = ReExtract(this, headerNames, keyValuePairs); + return results; + } + + void IFileRead.CheckTests(Test[] tests, bool extra) => throw new Exception(string.Concat("Not ", nameof(_IsDuplicator))); + + void IFileRead.Callback(object state) => throw new Exception(string.Concat("Not ", nameof(_IsDuplicator))); + + private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) + { + Tuple> results = new(string.Empty, null, null, new List()); + _Logistics = new Logistics(this, reportFullPath, useSplitForMID: true); + SetFileParameterLotIDToLogisticsMID(); + if (reportFullPath.Length < _MinFileLength) + results.Item4.Add(new FileInfo(reportFullPath)); + else + { + IProcessData iProcessData = new ProcessData(this, _Logistics, results.Item4); + if (iProcessData is ProcessData processData) + { + string mid = string.Concat(processData.Reactor, "-", processData.RDS, "-", processData.PSN); + mid = Regex.Replace(mid, @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]", "_").Split('\r')[0].Split('\n')[0]; + _Logistics.MID = mid; + SetFileParameterLotID(mid); + _Logistics.ProcessJobID = processData.Reactor; + } + if (!iProcessData.Details.Any()) + throw new Exception(string.Concat("No Data - ", dateTime.Ticks)); + results = iProcessData.GetResults(this, _Logistics, results.Item4); + } + return results; + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/txt/ProcessData.cs b/Adaptation/FileHandlers/txt/ProcessData.cs new file mode 100644 index 0000000..596e402 --- /dev/null +++ b/Adaptation/FileHandlers/txt/ProcessData.cs @@ -0,0 +1,906 @@ +using Adaptation.Shared; +using Adaptation.Shared.Methods; +using log4net; +using System; +using System.Collections.Generic; +using System.Data; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Text.RegularExpressions; + +namespace Adaptation.FileHandlers.txt; + +public class ProcessData : IProcessData +{ + + private int _I; + private string _Data; + + private readonly ILog _Log; + private readonly List _Details; + + public string JobID { get; set; } + public string MesEntity { get; set; } + public string Date { get; set; } + public string Lot { get; set; } + public string Operator { get; set; } + public string PSN { get; set; } + public string RDS { get; set; } + public string Reactor { get; set; } + 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 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; } + + List Shared.Properties.IProcessData.Details => _Details; + + public ProcessData(IFileRead fileRead, Logistics logistics, List fileInfoCollection) + { + fileInfoCollection.Clear(); + _Details = new List(); + _I = 0; + _Data = string.Empty; + JobID = logistics.JobID; + MesEntity = logistics.MesEntity; + Date = DateTime.Now.ToString(); + _Log = LogManager.GetLogger(typeof(ProcessData)); + Parse(fileRead, logistics, fileInfoCollection); + } + + string IProcessData.GetCurrentReactor(IFileRead fileRead, Logistics logistics, Dictionary reactors) => throw new Exception(string.Concat("See ", nameof(Parse))); + + Tuple> IProcessData.GetResults(IFileRead fileRead, Logistics logistics, List fileInfoCollection) + { + Tuple> results; + List tests = new(); + foreach (object item in _Details) + tests.Add(Test.SP1); + List descriptions = fileRead.GetDescriptions(fileRead, tests, this); + if (tests.Count != descriptions.Count) + throw new Exception(); + for (int i = 0; i < tests.Count; i++) + { + if (descriptions[i] is not Description description) + throw new Exception(); + if (description.Test != (int)tests[i]) + throw new Exception(); + } + List fileReadDescriptions = (from l in descriptions select (Description)l).ToList(); + string json = JsonSerializer.Serialize(fileReadDescriptions, fileReadDescriptions.GetType()); + JsonElement[] jsonElements = JsonSerializer.Deserialize(json); + results = new Tuple>(logistics.Logistics1[0], tests.ToArray(), jsonElements, fileInfoCollection); + return results; + } + + private void ScanPast(string text) + { + int num = _Data.IndexOf(text, _I); + if (num > -1) + _I = num + text.Length; + else + _I = _Data.Length; + } + + private string GetBefore(string text) + { + int num = _Data.IndexOf(text, _I); + if (num > -1) + { + string str = _Data.Substring(_I, num - _I); + _I = num + text.Length; + return str.Trim(); + } + string str1 = _Data.Substring(_I); + _I = _Data.Length; + return str1.Trim(); + } + + private string GetBefore(string text, bool trim) + { + if (trim) + return GetBefore(text); + int num = _Data.IndexOf(text, _I); + if (num > -1) + { + string str = _Data.Substring(_I, num - _I); + _I = num + text.Length; + return str; + } + string str1 = _Data.Substring(_I); + _I = _Data.Length; + return str1; + } + + private static bool IsNullOrWhiteSpace(string text) + { + for (int index = 0; index < text.Length; ++index) + { + if (!char.IsWhiteSpace(text[index])) + return false; + } + return true; + } + + private bool IsBlankLine() + { + int num = _Data.IndexOf("\n", _I); + return IsNullOrWhiteSpace(num > -1 ? _Data.Substring(_I, num - _I) : _Data.Substring(_I)); + } + + private string GetToEOL() => GetBefore("\n"); + + private string GetToEOL(bool trim) + { + if (trim) + return GetToEOL(); + return GetBefore("\n", false); + } + + private string GetToText(string text) => _Data.Substring(_I, _Data.IndexOf(text, _I) - _I).Trim(); + + private string GetToken() + { + while (_I < _Data.Length && IsNullOrWhiteSpace(_Data.Substring(_I, 1))) + ++_I; + int j = _I; + while (j < _Data.Length && !IsNullOrWhiteSpace(_Data.Substring(j, 1))) + ++j; + string str = _Data.Substring(_I, j - _I); + _I = j; + return str.Trim(); + } + + private string PeekNextLine() + { + int j = _I; + string toEol = GetToEOL(); + _I = j; + return toEol; + } + + private void GetWaferSummaryInfo(List waferSummaryInfos, string whichInfo) + { + ScanPast(whichInfo); + _ = GetToEOL(); + _ = GetToEOL(); + _ = GetToEOL(); + _ = GetToEOL(); + string[] segments; + WaferSummaryInfo waferSummaryInfo; + const string grade = "F Grade"; + const string reject = "F Reject"; + const string overLoad = "F OverLoad"; + for (string line = PeekNextLine(); line[0] != '-'; line = PeekNextLine()) + { + line = GetToEOL(); + waferSummaryInfo = new WaferSummaryInfo(); + if (line.StartsWith(grade)) + line = line.Replace(grade, string.Concat("F -1", grade.Substring(4))); + else if (line.StartsWith(reject)) + line = line.Replace(reject, string.Concat("F -1", reject.Substring(4))); + else if (line.StartsWith(overLoad)) + line = line.Replace(overLoad, string.Concat("F -1", overLoad.Substring(4))); + segments = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + waferSummaryInfo.Side = segments[0]; + waferSummaryInfo.WaferID = segments[1]; + waferSummaryInfo.Grade = segments[2]; + waferSummaryInfo.SrcDest = segments[3]; + if (segments.Length > 4) + { + waferSummaryInfo.Lpd = segments[5]; + waferSummaryInfo.LpdN = segments[6]; + waferSummaryInfo.LpdES = segments[7]; + waferSummaryInfo.MicroScr = segments[8]; + waferSummaryInfo.Scr = segments[9]; + waferSummaryInfo.Slip = segments[10]; + waferSummaryInfo.AreaNum = segments[11]; + waferSummaryInfo.Area = segments[12]; + waferSummaryInfo.HazeAvg = segments[13]; + waferSummaryInfo.HazeMedian = segments[14]; + waferSummaryInfo.HazeStdDev = segments[15]; + waferSummaryInfo.Bin1 = segments[16]; + waferSummaryInfo.Bin2 = segments[17]; + waferSummaryInfo.Bin3 = segments[18]; + waferSummaryInfo.Bin4 = segments[19]; + waferSummaryInfo.Bin5 = segments[20]; + waferSummaryInfo.Bin6 = segments[21]; + waferSummaryInfo.Bin7 = segments[22]; + waferSummaryInfo.Bin8 = segments[23]; + } + if (waferSummaryInfo.WaferID == "-1") + { + segments = waferSummaryInfo.SrcDest.Split('-')[0].Split('/'); + waferSummaryInfo.WaferID = segments[segments.Length - 1]; + } + waferSummaryInfos.Add(waferSummaryInfo); + } + } + + private void ParseHeader(ILogistics logistics, List dcnTotals, List dwnTotals, List dnnTotals) + { + _I = 0; + _Data = string.Empty; + string summaryReportText = File.ReadAllText(logistics.ReportFullPath); + if (!string.IsNullOrEmpty(summaryReportText)) + { + _Log.Debug("HeaderFile() - Beginning"); + _I = 0; + _Data = summaryReportText; + ScanPast("Long Wafer Summary"); + _ = GetToEOL(); + ScanPast("Session:"); + string toEOL = GetToEOL(true); + string str = toEOL; + Recipe = toEOL; + Session = str; + ScanPast("Lot ID:"); + Lot = GetToEOL(true); + // Remove illegal characters \/:*?"<>| found in the Lot. + Lot = Regex.Replace(Lot, @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]", "_").Split('\r')[0].Split('\n')[0]; + string[] segments = Lot.Split(new char[] { '-' }); + _Log.Debug("HeaderFile() - Debug A"); + if (segments.Length > 1) + { + Reactor = segments[0]; + RDS = segments[1]; + if (segments.Length > 2) + { + PSN = segments[2]; + if (segments.Length > 3) + Operator = segments[3]; + } + } + _Log.Debug("HeaderFile() - Debug B"); + _I = 0; + _Data = summaryReportText; + GetWaferSummaryInfo(dcnTotals, "DCN Totals"); + ScanPast("Min"); + segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + DcnAllMin = segments[0]; + DcnLpdMin = segments[1]; + DcnLpdNMin = segments[2]; + DcnLpdESMin = segments[3]; + DcnMicroScrMin = segments[4]; + DcnScrMin = segments[5]; + DcnSlipMin = segments[6]; + DcnAreaCountMin = segments[7]; + DcnAreaMin = segments[8]; + DcnHazeAvgMin = segments[9]; + DcnHazeMedianMin = segments[10]; + DcnHazeStdDevMin = segments[11]; + DcnBin1Min = segments[12]; + DcnBin2Min = segments[13]; + DcnBin3Min = segments[14]; + DcnBin4Min = segments[15]; + DcnBin5Min = segments[16]; + DcnBin6Min = segments[17]; + DcnBin7Min = segments[18]; + DcnBin8Min = segments[19]; + ScanPast("Max"); + segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + DcnAllMax = segments[0]; + DcnLpdMax = segments[1]; + DcnLpdNMax = segments[2]; + DcnLpdESMax = segments[3]; + DcnMicroScrMax = segments[4]; + DcnScrMax = segments[5]; + DcnSlipMax = segments[6]; + DcnAreaCountMax = segments[7]; + DcnAreaMax = segments[8]; + DcnHazeAvgMax = segments[9]; + DcnHazeMedianMax = segments[10]; + DcnHazeStdDevMax = segments[11]; + DcnBin1Max = segments[12]; + DcnBin2Max = segments[13]; + DcnBin3Max = segments[14]; + DcnBin4Max = segments[15]; + DcnBin5Max = segments[16]; + DcnBin6Max = segments[17]; + DcnBin7Max = segments[18]; + DcnBin8Max = segments[19]; + ScanPast("Mean"); + segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + DcnAllMean = segments[0]; + DcnLpdMean = segments[1]; + DcnLpdNMean = segments[2]; + DcnLpdESMean = segments[3]; + DcnMicroScrMean = segments[4]; + DcnScrMean = segments[5]; + DcnSlipMean = segments[6]; + DcnAreaCountMean = segments[7]; + DcnAreaMean = segments[8]; + DcnHazeAvgMean = segments[9]; + DcnHazeMedianMean = segments[10]; + DcnHazeStdDevMean = segments[11]; + DcnBin1Mean = segments[12]; + DcnBin2Mean = segments[13]; + DcnBin3Mean = segments[14]; + DcnBin4Mean = segments[15]; + DcnBin5Mean = segments[16]; + DcnBin6Mean = segments[17]; + DcnBin7Mean = segments[18]; + DcnBin8Mean = segments[19]; + ScanPast("Std. Dev."); + segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + DcnAllStdDev = segments[0]; + DcnLpdStdDev = segments[1]; + DcnLpdNStdDev = segments[2]; + DcnLpdESStdDev = segments[3]; + DcnMicroScrStdDev = segments[4]; + DcnScrStdDev = segments[5]; + DcnSlipStdDev = segments[6]; + DcnAreaCountStdDev = segments[7]; + DcnAreaStdDev = segments[8]; + DcnHazeAvgStdDev = segments[9]; + DcnHazeMedianStdDev = segments[10]; + DcnHazeStdDevStdDev = segments[11]; + DcnBin1StdDev = segments[12]; + DcnBin2StdDev = segments[13]; + DcnBin3StdDev = segments[14]; + DcnBin4StdDev = segments[15]; + DcnBin5StdDev = segments[16]; + DcnBin6StdDev = segments[17]; + DcnBin7StdDev = segments[18]; + DcnBin8StdDev = segments[19]; + _I = 0; + _Data = summaryReportText; + _Log.Debug("HeaderFile() - Debug C"); + if (!_Data.Contains("DWN Totals")) + { + for (int i = 0; i < dcnTotals.Count; i++) + dwnTotals.Add(new WaferSummaryInfo()); + } + else + { + GetWaferSummaryInfo(dwnTotals, "DWN Totals"); + ScanPast("Min"); + segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + DwnAllMin = segments[0]; + DwnLpdMin = segments[1]; + DwnLpdNMin = segments[2]; + DwnLpdESMin = segments[3]; + DwnMicroScrMin = segments[4]; + DwnScrMin = segments[5]; + DwnSlipMin = segments[6]; + DwnAreaCountMin = segments[7]; + DwnAreaMin = segments[8]; + DwnHazeAvgMin = segments[9]; + DwnHazeMedianMin = segments[10]; + DwnHazeStdDevMin = segments[11]; + DwnBin1Min = segments[12]; + DwnBin2Min = segments[13]; + DwnBin3Min = segments[14]; + DwnBin4Min = segments[15]; + DwnBin5Min = segments[16]; + DwnBin6Min = segments[17]; + DwnBin7Min = segments[18]; + DwnBin8Min = segments[19]; + ScanPast("Max"); + segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + DwnAllMax = segments[0]; + DwnLpdMax = segments[1]; + DwnLpdNMax = segments[2]; + DwnLpdESMax = segments[3]; + DwnMicroScrMax = segments[4]; + DwnScrMax = segments[5]; + DwnSlipMax = segments[6]; + DwnAreaCountMax = segments[7]; + DwnAreaMax = segments[8]; + DwnHazeAvgMax = segments[9]; + DwnHazeMedianMax = segments[10]; + DwnHazeStdDevMax = segments[11]; + DwnBin1Max = segments[12]; + DwnBin2Max = segments[13]; + DwnBin3Max = segments[14]; + DwnBin4Max = segments[15]; + DwnBin5Max = segments[16]; + DwnBin6Max = segments[17]; + DwnBin7Max = segments[18]; + DwnBin8Max = segments[19]; + ScanPast("Mean"); + segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + DwnAllMean = segments[0]; + DwnLpdMean = segments[1]; + DwnLpdNMean = segments[2]; + DwnLpdESMean = segments[3]; + DwnMicroScrMean = segments[4]; + DwnScrMean = segments[5]; + DwnSlipMean = segments[6]; + DwnAreaCountMean = segments[7]; + DwnAreaMean = segments[8]; + DwnHazeAvgMean = segments[9]; + DwnHazeMedianMean = segments[10]; + DwnHazeStdDevMean = segments[11]; + DwnBin1Mean = segments[12]; + DwnBin2Mean = segments[13]; + DwnBin3Mean = segments[14]; + DwnBin4Mean = segments[15]; + DwnBin5Mean = segments[16]; + DwnBin6Mean = segments[17]; + DwnBin7Mean = segments[18]; + DwnBin8Mean = segments[19]; + ScanPast("Std. Dev."); + segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + DwnAllStdDev = segments[0]; + DwnLpdStdDev = segments[1]; + DwnLpdNStdDev = segments[2]; + DwnLpdESStdDev = segments[3]; + DwnMicroScrStdDev = segments[4]; + DwnScrStdDev = segments[5]; + DwnSlipStdDev = segments[6]; + DwnAreaCountStdDev = segments[7]; + DwnAreaStdDev = segments[8]; + DwnHazeAvgStdDev = segments[9]; + DwnHazeMedianStdDev = segments[10]; + DwnHazeStdDevStdDev = segments[11]; + DwnBin1StdDev = segments[12]; + DwnBin2StdDev = segments[13]; + DwnBin3StdDev = segments[14]; + DwnBin4StdDev = segments[15]; + DwnBin5StdDev = segments[16]; + DwnBin6StdDev = segments[17]; + DwnBin7StdDev = segments[18]; + DwnBin8StdDev = segments[19]; + } + _I = 0; + _Data = summaryReportText; + _Log.Debug("HeaderFile() - Debug D"); + if (!_Data.Contains("DNN Totals")) + { + for (int i = 0; i < dcnTotals.Count; i++) + dnnTotals.Add(new WaferSummaryInfo()); + } + else + { + GetWaferSummaryInfo(dnnTotals, "DNN Totals"); + ScanPast("Min"); + segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + DnnAllMin = segments[0]; + DnnLpdMin = segments[1]; + DnnLpdNMin = segments[2]; + DnnLpdESMin = segments[3]; + DnnMicroScrMin = segments[4]; + DnnScrMin = segments[5]; + DnnSlipMin = segments[6]; + DnnAreaCountMin = segments[7]; + DnnAreaMin = segments[8]; + DnnHazeAvgMin = segments[9]; + DnnHazeMedianMin = segments[10]; + DnnHazeStdDevMin = segments[11]; + DnnBin1Min = segments[12]; + DnnBin2Min = segments[13]; + DnnBin3Min = segments[14]; + DnnBin4Min = segments[15]; + DnnBin5Min = segments[16]; + DnnBin6Min = segments[17]; + DnnBin7Min = segments[18]; + DnnBin8Min = segments[19]; + ScanPast("Max"); + segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + DnnAllMax = segments[0]; + DnnLpdMax = segments[1]; + DnnLpdNMax = segments[2]; + DnnLpdESMax = segments[3]; + DnnMicroScrMax = segments[4]; + DnnScrMax = segments[5]; + DnnSlipMax = segments[6]; + DnnAreaCountMax = segments[7]; + DnnAreaMax = segments[8]; + DnnHazeAvgMax = segments[9]; + DnnHazeMedianMax = segments[10]; + DnnHazeStdDevMax = segments[11]; + DnnBin1Max = segments[12]; + DnnBin2Max = segments[13]; + DnnBin3Max = segments[14]; + DnnBin4Max = segments[15]; + DnnBin5Max = segments[16]; + DnnBin6Max = segments[17]; + DnnBin7Max = segments[18]; + DnnBin8Max = segments[19]; + ScanPast("Mean"); + segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + DnnAllMean = segments[0]; + DnnLpdMean = segments[1]; + DnnLpdNMean = segments[2]; + DnnLpdESMean = segments[3]; + DnnMicroScrMean = segments[4]; + DnnScrMean = segments[5]; + DnnSlipMean = segments[6]; + DnnAreaCountMean = segments[7]; + DnnAreaMean = segments[8]; + DnnHazeAvgMean = segments[9]; + DnnHazeMedianMean = segments[10]; + DnnHazeStdDevMean = segments[11]; + DnnBin1Mean = segments[12]; + DnnBin2Mean = segments[13]; + DnnBin3Mean = segments[14]; + DnnBin4Mean = segments[15]; + DnnBin5Mean = segments[16]; + DnnBin6Mean = segments[17]; + DnnBin7Mean = segments[18]; + DnnBin8Mean = segments[19]; + ScanPast("Std. Dev."); + segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + DnnAllStdDev = segments[0]; + DnnLpdStdDev = segments[1]; + DnnLpdNStdDev = segments[2]; + DnnLpdESStdDev = segments[3]; + DnnMicroScrStdDev = segments[4]; + DnnScrStdDev = segments[5]; + DnnSlipStdDev = segments[6]; + DnnAreaCountStdDev = segments[7]; + DnnAreaStdDev = segments[8]; + DnnHazeAvgStdDev = segments[9]; + DnnHazeMedianStdDev = segments[10]; + DnnHazeStdDevStdDev = segments[11]; + DnnBin1StdDev = segments[12]; + DnnBin2StdDev = segments[13]; + DnnBin3StdDev = segments[14]; + DnnBin4StdDev = segments[15]; + DnnBin5StdDev = segments[16]; + DnnBin6StdDev = segments[17]; + DnnBin7StdDev = segments[18]; + DnnBin8StdDev = segments[19]; + } + } + //UniqueID = string.Format("{0}_{1}_Summary_{2}", logistics.JobID, Lot, Date); + UniqueID = string.Format("{0}_{1}_{2}", logistics.JobID, Lot, Path.GetFileNameWithoutExtension(logistics.ReportFullPath)); + } + + /// + /// Parse the wafer summary data + /// + /// wafer data + /// wafer index + /// + private Detail ParseWaferSummary(int i, List dcnTotals, List dwnTotals, List dnnTotals) + { + Detail result = new() + { + // NOTE: get the UniqueID during DataCalculation in order to retrieve the SPCToolID from the cell component Tag field. + // id + //runData.UniqueID = string.Format("{0}_{1}", sp1Header.UniqueId, i + 1); + //runData.HeaderUniqueID = sp1Header.UniqueId; + + // General Wafer Info + Side = dcnTotals[i].Side, + WaferID = dcnTotals[i].WaferID, + Grade = dcnTotals[i].Grade, + SrcDest = dcnTotals[i].SrcDest, + + // Dcn Info + DcnAll = dcnTotals[i].All ?? string.Empty, + DcnLpd = dcnTotals[i].Lpd ?? string.Empty, + DcnLpdN = dcnTotals[i].LpdN ?? string.Empty, + DcnLpdES = dcnTotals[i].LpdES ?? string.Empty, + DcnMicroScr = dcnTotals[i].MicroScr ?? string.Empty, + DcnScr = dcnTotals[i].Scr ?? string.Empty, + DcnSlip = dcnTotals[i].Slip ?? string.Empty, + DcnAreaCount = dcnTotals[i].AreaNum ?? string.Empty, + DcnArea = dcnTotals[i].Area ?? string.Empty, + DcnHazeAvg = dcnTotals[i].HazeAvg ?? string.Empty, + DcnHazeMedian = dcnTotals[i].HazeMedian ?? string.Empty, + DcnHazeStdDev = dcnTotals[i].HazeStdDev ?? string.Empty, + DcnBin1 = dcnTotals[i].Bin1 ?? string.Empty, + DcnBin2 = dcnTotals[i].Bin2 ?? string.Empty, + DcnBin3 = dcnTotals[i].Bin3 ?? string.Empty, + DcnBin4 = dcnTotals[i].Bin4 ?? string.Empty, + DcnBin5 = dcnTotals[i].Bin5 ?? string.Empty, + DcnBin6 = dcnTotals[i].Bin6 ?? string.Empty, + DcnBin7 = dcnTotals[i].Bin7 ?? string.Empty, + DcnBin8 = dcnTotals[i].Bin8 ?? string.Empty, + + // Dwn Info + DwnAll = dwnTotals[i].All ?? string.Empty, + DwnLpd = dwnTotals[i].Lpd ?? string.Empty, + DwnLpdN = dwnTotals[i].LpdN ?? string.Empty, + DwnLpdES = dwnTotals[i].LpdES ?? string.Empty, + DwnMicroScr = dwnTotals[i].MicroScr ?? string.Empty, + DwnScr = dwnTotals[i].Scr ?? string.Empty, + DwnSlip = dwnTotals[i].Slip ?? string.Empty, + DwnAreaCount = dwnTotals[i].AreaNum ?? string.Empty, + DwnArea = dwnTotals[i].Area ?? string.Empty, + DwnHazeAvg = dwnTotals[i].HazeAvg ?? string.Empty, + DwnHazeMedian = dwnTotals[i].HazeMedian ?? string.Empty, + DwnHazeStdDev = dwnTotals[i].HazeStdDev ?? string.Empty, + DwnBin1 = dwnTotals[i].Bin1 ?? string.Empty, + DwnBin2 = dwnTotals[i].Bin2 ?? string.Empty, + DwnBin3 = dwnTotals[i].Bin3 ?? string.Empty, + DwnBin4 = dwnTotals[i].Bin4 ?? string.Empty, + DwnBin5 = dwnTotals[i].Bin5 ?? string.Empty, + DwnBin6 = dwnTotals[i].Bin6 ?? string.Empty, + DwnBin7 = dwnTotals[i].Bin7 ?? string.Empty, + DwnBin8 = dwnTotals[i].Bin8 ?? string.Empty, + + // Dnn Info + DnnAll = dnnTotals[i].All ?? string.Empty, + DnnLpd = dnnTotals[i].Lpd ?? string.Empty, + DnnLpdN = dnnTotals[i].LpdN ?? string.Empty, + DnnLpdES = dnnTotals[i].LpdES ?? string.Empty, + DnnMicroScr = dnnTotals[i].MicroScr ?? string.Empty, + DnnScr = dnnTotals[i].Scr ?? string.Empty, + DnnSlip = dnnTotals[i].Slip ?? string.Empty, + DnnAreaCount = dnnTotals[i].AreaNum ?? string.Empty, + DnnArea = dnnTotals[i].Area ?? string.Empty, + DnnHazeAvg = dnnTotals[i].HazeAvg ?? string.Empty, + DnnHazeMedian = dnnTotals[i].HazeMedian ?? string.Empty, + DnnHazeStdDev = dnnTotals[i].HazeStdDev ?? string.Empty, + DnnBin1 = dnnTotals[i].Bin1 ?? string.Empty, + DnnBin2 = dnnTotals[i].Bin2 ?? string.Empty, + DnnBin3 = dnnTotals[i].Bin3 ?? string.Empty, + DnnBin4 = dnnTotals[i].Bin4 ?? string.Empty, + DnnBin5 = dnnTotals[i].Bin5 ?? string.Empty, + DnnBin6 = dnnTotals[i].Bin6 ?? string.Empty, + DnnBin7 = dnnTotals[i].Bin7 ?? string.Empty, + DnnBin8 = dnnTotals[i].Bin8 ?? string.Empty + }; + //result.HeaderUniqueID = string.Concat(MesEntity, "_", Lot, "_Summary_", Date); + result.HeaderUniqueID = UniqueID; + result.UniqueID = string.Concat(result.HeaderUniqueID, "_", result.WaferID.PadLeft(2, '0')); + return result; + } + + private void Parse(IFileRead fileRead, Logistics logistics, List fileInfoCollection) + { + if (fileRead is null) + { } + Detail dataFile; + foreach (string file in Directory.GetFiles(Path.GetDirectoryName(logistics.ReportFullPath), "WaferMap*.prn", SearchOption.TopDirectoryOnly)) + fileInfoCollection.Add(new FileInfo(file)); + List dcnTotals = new(); + List dwnTotals = new(); + List dnnTotals = new(); + ParseHeader(logistics, dcnTotals, dwnTotals, dnnTotals); + _Log.Debug($"Number of wafers: {dcnTotals.Count}"); + for (int i = 0; i < dcnTotals.Count; i++) + { + _Log.Debug($"****ParseData - Parsing wafer summary: {i}"); + dataFile = ParseWaferSummary(i, dcnTotals, dwnTotals, dnnTotals); + _Details.Add(dataFile); + } + fileInfoCollection.Add(new FileInfo(logistics.ReportFullPath)); + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/txt/WaferSummaryInfo.cs b/Adaptation/FileHandlers/txt/WaferSummaryInfo.cs new file mode 100644 index 0000000..822b58f --- /dev/null +++ b/Adaptation/FileHandlers/txt/WaferSummaryInfo.cs @@ -0,0 +1,31 @@ +namespace Adaptation.FileHandlers.txt; + +public class WaferSummaryInfo +{ + + public string All { get; set; } + public string Area { get; set; } + public string AreaNum { get; set; } + public string Bin1 { get; set; } + public string Bin2 { get; set; } + public string Bin3 { get; set; } + public string Bin4 { get; set; } + public string Bin5 { get; set; } + public string Bin6 { get; set; } + public string Bin7 { get; set; } + public string Bin8 { get; set; } + public string Grade { get; set; } + public string HazeAvg { get; set; } + public string HazeMedian { get; set; } + public string HazeStdDev { get; set; } + public string Lpd { get; set; } + public string LpdES { get; set; } + public string LpdN { get; set; } + public string MicroScr { get; set; } + public string Scr { get; set; } + public string Side { get; set; } + public string Slip { get; set; } + public string SrcDest { get; set; } + public string WaferID { get; set; } + +} \ No newline at end of file diff --git a/Adaptation/Helpers/ConfigData.Level.cs b/Adaptation/Helpers/ConfigData.Level.cs deleted file mode 100644 index 3c0e814..0000000 --- a/Adaptation/Helpers/ConfigData.Level.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Adaptation.Helpers -{ - - public partial class ConfigData - { - public enum Level - { - IsXToOpenInsightMetrologyViewer, //MetrologyWS.SendData(logic, string.Concat("http://", serverName, "/api/inbound/TencorSP1"), headerAttachments, detailAttachments); - IsXToIQSSi, //bool WriteFileSPC(Dictionary - IsXToOpenInsight, //bool WriteFileOpenInsight(Dictionary - IsXToOpenInsightMetrologyViewerAttachments, //Site-Two - IsXToAPC, - IsXToSPaCe, - IsXToArchive, - IsArchive, - IsDummy, - IsNaEDA - } - - public static List> LevelTuples - { - get - { - return new List> - { - new Tuple(0, Level.IsNaEDA, @"\EC_EDA\Staging\Traces\~\Source"), - new Tuple(15, Level.IsXToOpenInsightMetrologyViewer, @"\EC_EAFLog\TracesMES\~\Source"), - new Tuple(36, Level.IsXToIQSSi, @"\EC_SPC_Si\Traces\~\PollPath"), - new Tuple(36, Level.IsXToOpenInsight, @"\\messa01ec.ec.local\APPS\Metrology\~\Source"), - new Tuple(36, Level.IsXToOpenInsightMetrologyViewerAttachments, @"\EC_Characterization_Si\In Process\~\Source"), - new Tuple(360, Level.IsXToAPC, @"\EC_APC\Staging\Traces\~\PollPath"), - new Tuple(-36, Level.IsXToSPaCe, @"\EC_SPC_Si\Traces\~\Source"), - new Tuple(180, Level.IsXToArchive, @"\EC_EAFLog\TracesArchive\~\Source"), - new Tuple(36, Level.IsArchive, @"\EC_Characterization_Si\Processed") - //new Tuple("IsDummy" - }; - } - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Helpers/ConfigData.cs b/Adaptation/Helpers/ConfigData.cs deleted file mode 100644 index 7802f1f..0000000 --- a/Adaptation/Helpers/ConfigData.cs +++ /dev/null @@ -1,520 +0,0 @@ -using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; -using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; -using Adaptation.Shared; -using Adaptation.Shared.Metrology; -using Infineon.Monitoring.MonA; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Globalization; -using System.IO; -using System.IO.Compression; -using System.Linq; -using System.Reflection; -using System.Text.Json; -using System.Threading; - -namespace Adaptation.Helpers -{ - - public partial class ConfigData : ConfigDataBase - { - - internal const object NullData = null; - internal const int MinFileLength = 100; - - public string IqsFile { get; private set; } - public string TracePath { get; private set; } - public Level? Duplicator { get; private set; } - public string MemoryPath { get; private set; } - public string VillachPath { get; private set; } - public string ProgressPath { get; private set; } - public string IqsQueryFilter { get; private set; } - public string GhostPCLFileName { get; private set; } - public string OpenInsightSiViewer { get; private set; } - public string OpenInsightFilePattern { get; private set; } - public string OpenInsightMetrogyViewerAPI { get; private set; } - public static Dictionary> DummyRuns { get; private set; } - - private Timer _Timer; - private int _LastDummyRunIndex; - private readonly Calendar _Calendar; - private readonly string _ReportFullPath; - - public ConfigData(ILogic logic, string cellName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, IList modelObjectParameterDefinitions, string parameterizedModelObjectDefinitionType, bool isEAFHosted) : - base(cellName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, isEAFHosted) - { - _LastDummyRunIndex = -1; - UseCyclicalForDescription = false; - CultureInfo cultureInfo = new CultureInfo("en-US"); - _Calendar = cultureInfo.Calendar; - string firstSourceFileFilter = fileConnectorConfiguration.SourceFileFilter.Split('|')[0]; - if (DummyRuns is null) - DummyRuns = new Dictionary>(); - bool isDuplicator = cellInstanceConnectionName.StartsWith(cellName); - int level = (cellInstanceConnectionName.Length - cellInstanceConnectionName.Replace("-", string.Empty).Length); - if (!isDuplicator) - Duplicator = null; - else - { - CellNames.Add(cellName, cellName); - MesEntities.Add(cellName, cellName); - Duplicator = (Level)level; - } - if (isDuplicator) - ProcessDataDescription = new Duplicator.Description(); - else - ProcessDataDescription = new ProcessData.FileRead.Description(); - if (!isDuplicator) - { - //Verify(fileConnectorConfiguration, cellInstanceConnectionName); - if (!EafHosted) - VerifyProcessDataDescription(logic); - else - WriteExportAliases(logic, cellName, cellInstanceConnectionName); - } - GhostPCLFileName = string.Concat(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), @"\gpcl6win64.exe"); - if (EafHosted && Duplicator.HasValue && Duplicator.Value == Level.IsXToOpenInsightMetrologyViewerAttachments && !File.Exists(GhostPCLFileName)) - throw new Exception("Ghost PCL FileName doesn't Exist!"); - //LincPDFCFileName = string.Concat(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), @"\LincPDFC.exe"); - if (!modelObjectParameterDefinitions.Any()) - { - CellNames.Add(cellName, "****"); - MesEntities.Add(cellName, "****"); - } - else - { - int index; - string key; - string variable = string.Empty; - Dictionary iqsSection = new Dictionary(); - Dictionary pathSection = new Dictionary(); - Dictionary commonSection = new Dictionary(); - Dictionary openInsightSection = new Dictionary(); - foreach (ModelObjectParameterDefinition modelObjectParameterDefinition in modelObjectParameterDefinitions) - { - if (!modelObjectParameterDefinition.Name.Contains('.')) - continue; - else if (modelObjectParameterDefinition.Name.StartsWith("Description.") && (modelObjectParameterDefinition.Name.EndsWith(".EventName") || modelObjectParameterDefinition.Name.EndsWith(".EquipmentType"))) - continue; - index = modelObjectParameterDefinition.Name.IndexOf("."); - if (index <= -1) - continue; - key = modelObjectParameterDefinition.Name.Substring(0, index); - variable = modelObjectParameterDefinition.Name.Substring(index + 1); - if (key == "COMMON") - commonSection.Add(variable, modelObjectParameterDefinition.Value); - //else if (key == "CONNECTION STRINGS") - // connectionStringsSection.Add(variable, modelObjectParameterDefinition.Value); - else if (key == "IQS") - iqsSection.Add(variable, modelObjectParameterDefinition.Value); - else if (key == "OpenInsight") - openInsightSection.Add(variable, modelObjectParameterDefinition.Value); - else if (key == "PATH") - pathSection.Add(variable, modelObjectParameterDefinition.Value); - //else if (key == "REACTOR") - // reactorTuples.Add(new Tuple(variable, modelObjectParameterDefinition.Value)); - //else if (key == "TIBCO") - // tibcoSection.Add(variable, modelObjectParameterDefinition.Value); - else - throw new Exception(cellInstanceConnectionName); - } - if (!iqsSection.Any()) - throw new Exception("IQS section is missing from configuration"); - else - { - key = "FILE"; - if (iqsSection.ContainsKey(key)) - IqsFile = iqsSection[key]; - else - throw new Exception(string.Concat("Missing IQS Configuration entry for ", key)); - if (string.IsNullOrEmpty(IqsFile)) - throw new Exception(string.Format("IQS key {0} is empty", key)); - key = "QUERY"; - if (iqsSection.ContainsKey(key)) - IqsQueryFilter = iqsSection[key]; - else - throw new Exception(string.Concat("Missing IQS Configuration entry for ", key)); - if (string.IsNullOrEmpty(IqsQueryFilter)) - throw new Exception(string.Format("IQS key {0} is empty", key)); - } - if (!pathSection.Any()) - throw new Exception("Path section is missing from configuration"); - else - { - key = "TRACE"; - if (pathSection.ContainsKey(key) && pathSection[key].StartsWith(@"\\")) - TracePath = pathSection[key]; - if (!string.IsNullOrEmpty(TracePath) && !Directory.Exists(TracePath)) - Directory.CreateDirectory(TracePath); - key = "VILLACH"; - if (pathSection.ContainsKey(key) && pathSection[key].StartsWith(@"\\")) - VillachPath = pathSection[key]; - if (!string.IsNullOrEmpty(VillachPath) && !Directory.Exists(VillachPath)) - Directory.CreateDirectory(VillachPath); - key = "Progress"; - if (pathSection.ContainsKey(key) && pathSection[key].StartsWith(@"\\")) - ProgressPath = pathSection[key]; - if (!string.IsNullOrEmpty(ProgressPath) && Directory.Exists(Path.GetPathRoot(ProgressPath)) && !Directory.Exists(ProgressPath)) - Directory.CreateDirectory(ProgressPath); - key = "Memory"; - if (pathSection.ContainsKey(key) && pathSection[key].StartsWith(@"\\")) - MemoryPath = pathSection[key]; - if (!string.IsNullOrEmpty(MemoryPath) && !Directory.Exists(MemoryPath)) - Directory.CreateDirectory(MemoryPath); - } - if (!commonSection.Any()) - throw new Exception("Common section is missing from configuration"); - else - { - key = "CELL_NAMES"; - if (!commonSection.ContainsKey(key) || !commonSection[key].Contains(';') || !commonSection[key].Contains(':')) - throw new Exception(cellInstanceConnectionName); - else - { - string[] segments; - string[] cellNames = commonSection[key].Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); - foreach (string item in cellNames) - { - segments = item.Split(':'); - CellNames.Add(segments[0].Trim(), segments[1].Trim()); - } - } - if (!string.IsNullOrEmpty(cellName) && !CellNames.ContainsKey(cellName)) - throw new Exception(cellInstanceConnectionName); - key = "MES_ENTITIES"; - if (!commonSection.ContainsKey(key) || !commonSection[key].Contains(';') || !commonSection[key].Contains(':')) - throw new Exception(cellInstanceConnectionName); - else - { - string[] segments; - string[] mesEntity = commonSection[key].Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); - foreach (string item in mesEntity) - { - segments = item.Split(':'); - MesEntities.Add(segments[0].Trim(), segments[1].Trim()); - } - } - if (!string.IsNullOrEmpty(cellName) && !MesEntities.ContainsKey(cellName)) - throw new Exception(cellInstanceConnectionName); - } - if (!MesEntities.Any()) - throw new Exception(cellInstanceConnectionName); - if (!openInsightSection.Any()) - throw new Exception("OpenInsight section is missing from configuration"); - else - { - key = "MetrologyViewerAPI"; - if (openInsightSection.ContainsKey(key)) - OpenInsightMetrogyViewerAPI = openInsightSection[key]; - if (string.IsNullOrEmpty(OpenInsightMetrogyViewerAPI)) - throw new Exception(string.Format("OpenInsight key {0} is empty", key)); - if (!OpenInsightMetrogyViewerAPI.Contains(":") || !OpenInsightMetrogyViewerAPI.Contains(".")) - throw new Exception(string.Format("OpenInsight key {0} is invalid", key)); - key = "SiViewer"; - if (openInsightSection.ContainsKey(key)) - OpenInsightSiViewer = openInsightSection[key]; - if (string.IsNullOrEmpty(OpenInsightSiViewer)) - throw new Exception(string.Format("OpenInsight key {0} is empty", key)); - if (!OpenInsightSiViewer.Contains(":") || !OpenInsightSiViewer.Contains(".")) - throw new Exception(string.Format("OpenInsight key {0} is invalid", key)); - key = "FilePattern"; - if (openInsightSection.ContainsKey(key)) - OpenInsightFilePattern = openInsightSection[key]; - else - throw new Exception(string.Concat("Missing OpenInsight Configuration entry for ", key)); - if (string.IsNullOrEmpty(OpenInsightFilePattern)) - throw new Exception(string.Format("OpenInsight key {0} is empty", key)); - } - if (IsSourceTimer || IsDatabaseExportToIPDSF || (Duplicator.HasValue && Duplicator.Value == Level.IsDummy)) - { - if (!Directory.Exists(fileConnectorConfiguration.SourceFileLocation)) - Directory.CreateDirectory(fileConnectorConfiguration.SourceFileLocation); - _ReportFullPath = string.Concat(fileConnectorConfiguration.SourceFileLocation, firstSourceFileFilter.Replace("*", @"\")); - if (Debugger.IsAttached || fileConnectorConfiguration.PreProcessingMode == FileConnectorConfiguration.PreProcessingModeEnum.Process) - Callback(null); - else - { - int milliSeconds; - milliSeconds = (int)((fileConnectorConfiguration.FileScanningIntervalInSeconds * 1000) / 2); - _Timer = new Timer(Callback, null, milliSeconds, Timeout.Infinite); - milliSeconds += 2000; - } - } - } - } - - public void CheckProcessDataDescription(Dictionary> results, bool extra) - { - foreach (Test test in results.Keys) - { - if (test == Test.SP1) - { - if (!(ProcessDataDescription is ProcessData.FileRead.Description)) - ProcessDataDescription = new ProcessData.FileRead.Description(); - } - else - throw new Exception(); - } - } - - private void CallbackIsDummy(string traceDummyFile, List> tuples, bool fileConnectorConfigurationIncludeSubDirectories, bool includeSubDirectoriesExtra) - { - int fileCount; - string[] files; - string monARessource; - string checkDirectory; - string sourceArchiveFile; - string inProcessDirectory; - const string site = "sjc"; - const string monInURL = "http://moninhttp.sjc.infineon.com/input/text"; - MonIn monIn = MonIn.GetInstance(monInURL); - string stateName = string.Concat("Dummy_", _EventName); - foreach (Tuple item in tuples) - { - monARessource = item.Item1; - sourceArchiveFile = item.Item2; - inProcessDirectory = item.Item3; - checkDirectory = item.Item4; - fileCount = item.Item5; - try - { - if (fileCount > 0 || string.IsNullOrEmpty(checkDirectory)) - { - File.AppendAllLines(traceDummyFile, new string[] { site, monARessource, stateName, State.Warning.ToString() }); - monIn.SendStatus(site, monARessource, stateName, State.Warning); - for (int i = 1; i < 12; i++) - Thread.Sleep(500); - } - else if (inProcessDirectory == checkDirectory) - continue; - if (!EafHosted) - continue; - if (!File.Exists(sourceArchiveFile)) - continue; - if (!long.TryParse(Path.GetFileNameWithoutExtension(sourceArchiveFile).Replace("x", string.Empty), out long sequence)) - continue; - ZipFile.ExtractToDirectory(sourceArchiveFile, inProcessDirectory); - if (fileConnectorConfigurationIncludeSubDirectories && includeSubDirectoriesExtra) - { - if (_EventName == EventName.FileRead) - checkDirectory = string.Concat(checkDirectory, @"\", sequence); - else if (_EventName == EventName.FileReadDaily) - checkDirectory = string.Concat(checkDirectory, @"\Source\", sequence); - else - throw new Exception(); - } - if (fileConnectorConfigurationIncludeSubDirectories) - files = Directory.GetFiles(inProcessDirectory, "*", SearchOption.AllDirectories); - else - files = Directory.GetFiles(inProcessDirectory, "*", SearchOption.TopDirectoryOnly); - if (files.Length > 250) - throw new Exception("Safety net!"); - foreach (string file in files) - File.SetLastWriteTime(file, new DateTime(sequence)); - if (!fileConnectorConfigurationIncludeSubDirectories) - { - foreach (string file in files) - File.Move(file, string.Concat(checkDirectory, @"\", Path.GetFileName(file))); - } - else - { - string[] directories = Directory.GetDirectories(inProcessDirectory, "*", SearchOption.AllDirectories); - foreach (string directory in directories) - Directory.CreateDirectory(string.Concat(checkDirectory, directory.Substring(inProcessDirectory.Length))); - foreach (string file in files) - File.Move(file, string.Concat(checkDirectory, file.Substring(inProcessDirectory.Length))); - } - File.AppendAllLines(traceDummyFile, new string[] { site, monARessource, stateName, State.Ok.ToString() }); - monIn.SendStatus(site, monARessource, stateName, State.Ok); - } - catch (Exception exception) - { - File.AppendAllLines(traceDummyFile, new string[] { site, monARessource, stateName, State.Critical.ToString(), exception.Message, exception.StackTrace }); - monIn.SendStatus(site, monARessource, stateName, State.Critical); - try - { - Eaf.Core.Smtp.ISmtp smtp = Eaf.Core.Backbone.Instance.GetBackboneComponentsOfType().SingleOrDefault(); - Eaf.Core.Smtp.EmailMessage emailMessage = new Eaf.Core.Smtp.EmailMessage(string.Concat("Exception:", EquipmentElementName), string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace), Eaf.Core.Smtp.MailPriority.High); - smtp.Send(emailMessage); - } - catch (Exception) { } - } - } - } - - private void CallbackIsDummy() - { - DateTime dateTime = DateTime.Now; - bool check = (dateTime.Hour > 7 && dateTime.Hour < 18 && dateTime.DayOfWeek != DayOfWeek.Sunday && dateTime.DayOfWeek != DayOfWeek.Saturday); - if (check) - { - int fileCount; - string[] files; - string monARessource; - string checkDirectory; - string sourceArchiveFile; - string sourceFileLocation; - string targetFileLocation; - string inProcessDirectory; - string weekOfYear = _Calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); - string traceDummyDirectory = string.Concat(Path.GetPathRoot(TracePath), @"\TracesDummy\", CellName, @"\Source\", dateTime.ToString("yyyy"), "___Week_", weekOfYear); - if (!Directory.Exists(traceDummyDirectory)) - Directory.CreateDirectory(traceDummyDirectory); - string traceDummyFile = string.Concat(traceDummyDirectory, @"\", dateTime.Ticks, " - ", CellName, ".txt"); - File.AppendAllText(traceDummyFile, string.Empty); - List> tuples = new List>(); - foreach (var keyValuePair in CellNames) - { - monARessource = keyValuePair.Key; - if (!keyValuePair.Value.Contains(@"\")) - continue; - foreach (string sourceFileFilter in FileConnectorConfiguration.SourceFileFilter.Split('|')) - { - if (sourceFileFilter.ToLower().StartsWith(keyValuePair.Value.Replace(@"\", string.Empty))) - sourceFileLocation = Path.GetFullPath(FileConnectorConfiguration.SourceFileLocation); - else if (FileConnectorConfiguration.SourceFileLocation.ToLower().EndsWith(keyValuePair.Value)) - sourceFileLocation = Path.GetFullPath(FileConnectorConfiguration.SourceFileLocation); - else - sourceFileLocation = Path.GetFullPath(string.Concat(FileConnectorConfiguration.SourceFileLocation, @"\", keyValuePair.Value)); - sourceArchiveFile = Path.GetFullPath(string.Concat(sourceFileLocation, @"\", sourceFileFilter)); - targetFileLocation = Path.GetFullPath(string.Concat(FileConnectorConfiguration.TargetFileLocation, @"\", keyValuePair.Value)); - if (!File.Exists(sourceArchiveFile)) - continue; - if (!DummyRuns.ContainsKey(monARessource)) - DummyRuns.Add(monARessource, new List()); - tuples.Add(new Tuple(monARessource, sourceFileLocation, targetFileLocation, sourceArchiveFile, 0)); - } - } - File.AppendAllLines(traceDummyFile, from l in tuples select l.Item4); - if (tuples.Any()) - { - _LastDummyRunIndex += 1; - if (_LastDummyRunIndex >= tuples.Count) - _LastDummyRunIndex = 0; - monARessource = tuples[_LastDummyRunIndex].Item1; - sourceFileLocation = tuples[_LastDummyRunIndex].Item2; - targetFileLocation = tuples[_LastDummyRunIndex].Item3; - sourceArchiveFile = tuples[_LastDummyRunIndex].Item4; - //fileCount = tuples[_LastDummyRunIndex].Item5; - tuples.Clear(); - if (long.TryParse(Path.GetFileNameWithoutExtension(sourceArchiveFile).Replace("x", string.Empty), out long sequence)) - { - if (!DummyRuns[monARessource].Contains(sequence)) - DummyRuns[monARessource].Add(sequence); - inProcessDirectory = string.Concat(ProgressPath, @"\", monARessource, @"\Dummy_in process\", sequence); - checkDirectory = inProcessDirectory; - if (!Directory.Exists(checkDirectory)) - Directory.CreateDirectory(checkDirectory); - files = Directory.GetFiles(checkDirectory, "*", SearchOption.AllDirectories); - fileCount = files.Length; - if (files.Any()) - { - if (files.Length > 250) - throw new Exception("Safety net!"); - try - { - foreach (string file in files) - File.Delete(file); - } - catch (Exception) { } - } - tuples.Add(new Tuple(monARessource, sourceArchiveFile, inProcessDirectory, checkDirectory, fileCount)); - checkDirectory = targetFileLocation; - files = Directory.GetFiles(checkDirectory, string.Concat("*", sequence, "*"), SearchOption.TopDirectoryOnly); - fileCount = files.Length; - tuples.Add(new Tuple(monARessource, sourceArchiveFile, inProcessDirectory, checkDirectory, fileCount)); - } - } - if (tuples.Any()) - CallbackIsDummy(traceDummyFile, tuples, FileConnectorConfiguration.IncludeSubDirectories.Value, includeSubDirectoriesExtra: false); - } - } - - private void Callback(object state) - { - try - { - if (Duplicator is null) - { - if (File.Exists(_ReportFullPath)) - File.Delete(_ReportFullPath); - File.WriteAllText(_ReportFullPath, string.Empty); - } - else if (Duplicator.Value == Level.IsDummy) - CallbackIsDummy(); - else - throw new Exception(); - } - catch (Exception exception) - { - try - { - Eaf.Core.Smtp.ISmtp smtp = Eaf.Core.Backbone.Instance.GetBackboneComponentsOfType().SingleOrDefault(); - Eaf.Core.Smtp.EmailMessage emailMessage = new Eaf.Core.Smtp.EmailMessage(string.Concat("Exception:", EquipmentElementName), string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace), Eaf.Core.Smtp.MailPriority.High); - smtp.Send(emailMessage); - } - catch (Exception) { } - } - try - { - TimeSpan timeSpan; - if (IsDatabaseExportToIPDSF) - timeSpan = new TimeSpan(DateTime.Now.AddMinutes(1).Ticks - DateTime.Now.Ticks); - else if (IsSourceTimer) - timeSpan = new TimeSpan(DateTime.Now.AddMinutes(15).Ticks - DateTime.Now.Ticks); - else if (Duplicator.HasValue && Duplicator.Value == Level.IsDummy) - timeSpan = new TimeSpan(DateTime.Now.AddSeconds(FileConnectorConfiguration.FileScanningIntervalInSeconds.Value).Ticks - DateTime.Now.Ticks); - else if (Duplicator.HasValue) - timeSpan = new TimeSpan(DateTime.Now.AddSeconds(30).Ticks - DateTime.Now.Ticks); - else - timeSpan = new TimeSpan(DateTime.Now.AddDays(.5).Ticks - DateTime.Now.Ticks); - if (!(_Timer is null)) - _Timer.Change((long)timeSpan.TotalMilliseconds, Timeout.Infinite); - else - _Timer = new Timer(Callback, null, (long)timeSpan.TotalMilliseconds, Timeout.Infinite); - } - catch (Exception exception) - { - try - { - Eaf.Core.Smtp.ISmtp smtp = Eaf.Core.Backbone.Instance.GetBackboneComponentsOfType().SingleOrDefault(); - Eaf.Core.Smtp.EmailMessage emailMessage = new Eaf.Core.Smtp.EmailMessage(string.Concat("Exception:", EquipmentElementName), string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace), Eaf.Core.Smtp.MailPriority.High); - smtp.Send(emailMessage); - } - catch (Exception) { } - } - } - - public Tuple> IsManualOIEntry(string reportFullPath) - { - Tuple> results; - string monARessource; - const string site = "sjc"; - string equipment = string.Empty; - string description = string.Empty; - string stateName = "MANUAL_OI_ENTRY"; - string json = File.ReadAllText(reportFullPath); - JsonElement jsonElement = JsonSerializer.Deserialize(json); - results = new Tuple>(string.Empty, jsonElement, new List()); - foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) - { - if (jsonProperty.Name == "Equipment") - equipment = jsonProperty.Value.ToString(); - else if (jsonProperty.Name == "Description") - description = jsonProperty.Value.ToString(); - } - if (string.IsNullOrEmpty(equipment)) - monARessource = CellName; - else - monARessource = equipment; - const string monInURL = "http://moninhttp.sjc.infineon.com/input/text"; - MonIn monIn = MonIn.GetInstance(monInURL); - if (EafHosted) - monIn.SendStatus(site, monARessource, stateName, State.Warning, description); - return results; - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Helpers/ProcessData.DataFile.cs b/Adaptation/Helpers/ProcessData.DataFile.cs deleted file mode 100644 index ae82a4d..0000000 --- a/Adaptation/Helpers/ProcessData.DataFile.cs +++ /dev/null @@ -1,86 +0,0 @@ -namespace Adaptation.Helpers -{ - - public partial class ProcessData - { - public class DataFile - { - - public string Grade { get; set; } - public string HeaderUniqueID { get; set; } - public string Side { get; set; } - public string SrcDest { get; set; } - public string UniqueID { get; set; } - 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; } - - public DataFile() - { - Data = "*Data*"; - } - - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Helpers/ProcessData.FileRead.Description.cs b/Adaptation/Helpers/ProcessData.FileRead.Description.cs deleted file mode 100644 index cce0fab..0000000 --- a/Adaptation/Helpers/ProcessData.FileRead.Description.cs +++ /dev/null @@ -1,1418 +0,0 @@ -using Adaptation.Shared; -using Adaptation.Shared.Metrology; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text.Json; - -namespace Adaptation.Helpers -{ - - public partial class ProcessData - { - - public class FileRead - { - - public class Description : IProcessDataDescription - { - - public int Test { get; set; } - public int Count { get; set; } - public int Index { get; set; } - // - public string EventName { get; set; } - public string NullData { get; set; } - public string JobID { get; set; } - public string Sequence { get; set; } - public string MesEntity { get; set; } - public string ReportFullPath { get; set; } - public string ProcessJobID { get; set; } - public string MID { get; set; } - // - public string Date { get; set; } - public string Employee { get; set; } - public string Lot { get; set; } - public string PSN { get; set; } - public string Reactor { get; set; } - public string Recipe { get; set; } - // - 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; } - public string UniqueId { get; set; } - 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; } - - public string GetEventDescription() { return "File Has been read and parsed"; } - - public List GetHeaderNames(ILogic logic, ConfigDataBase configDataBase) - { - List results = new List - { - nameof(Date), - nameof(Employee), - nameof(Lot), - nameof(PSN), - nameof(Reactor), - nameof(Recipe) - }; - return results; - } - - public List GetDetailNames(ILogic logic, ConfigDataBase configDataBase) - { - List results = new List - { - nameof(Grade), - nameof(HeaderUniqueId), - nameof(RDS), - nameof(Session), - nameof(Side), - nameof(SrcDest), - nameof(UniqueId), - nameof(WaferID) - }; - return results; - } - - public List GetParameterNames(ILogic logic, ConfigDataBase configDataBase) - { - List results = new List - { - nameof(DcnAllMax), - nameof(DcnAllMean), - nameof(DcnAllMin), - nameof(DcnAllStdDev), - nameof(DcnAreaCountMax), - nameof(DcnAreaCountMean), - nameof(DcnAreaCountMin), - nameof(DcnAreaCountStdDev), - nameof(DcnAreaMax), - nameof(DcnAreaMean), - nameof(DcnAreaMin), - nameof(DcnAreaStdDev), - nameof(DcnBin1Max), - nameof(DcnBin1Mean), - nameof(DcnBin1Min), - nameof(DcnBin1StdDev), - nameof(DcnBin2Max), - nameof(DcnBin2Mean), - nameof(DcnBin2Min), - nameof(DcnBin2StdDev), - nameof(DcnBin3Max), - nameof(DcnBin3Mean), - nameof(DcnBin3Min), - nameof(DcnBin3StdDev), - nameof(DcnBin4Max), - nameof(DcnBin4Mean), - nameof(DcnBin4Min), - nameof(DcnBin4StdDev), - nameof(DcnBin5Max), - nameof(DcnBin5Mean), - nameof(DcnBin5Min), - nameof(DcnBin5StdDev), - nameof(DcnBin6Max), - nameof(DcnBin6Mean), - nameof(DcnBin6Min), - nameof(DcnBin6StdDev), - nameof(DcnBin7Max), - nameof(DcnBin7Mean), - nameof(DcnBin7Min), - nameof(DcnBin7StdDev), - nameof(DcnBin8Max), - nameof(DcnBin8Mean), - nameof(DcnBin8Min), - nameof(DcnBin8StdDev), - nameof(DcnHazeAvgMax), - nameof(DcnHazeAvgMean), - nameof(DcnHazeAvgMin), - nameof(DcnHazeAvgStdDev), - nameof(DcnHazeMedianMax), - nameof(DcnHazeMedianMean), - nameof(DcnHazeMedianMin), - nameof(DcnHazeMedianStdDev), - nameof(DcnHazeStdDevMax), - nameof(DcnHazeStdDevMean), - nameof(DcnHazeStdDevMin), - nameof(DcnHazeStdDevStdDev), - nameof(DcnLpdESMax), - nameof(DcnLpdESMean), - nameof(DcnLpdESMin), - nameof(DcnLpdESStdDev), - nameof(DcnLpdMax), - nameof(DcnLpdMean), - nameof(DcnLpdMin), - nameof(DcnLpdNMax), - nameof(DcnLpdNMean), - nameof(DcnLpdNMin), - nameof(DcnLpdNStdDev), - nameof(DcnLpdStdDev), - nameof(DcnMicroScrMax), - nameof(DcnMicroScrMean), - nameof(DcnMicroScrMin), - nameof(DcnMicroScrStdDev), - nameof(DcnScrMax), - nameof(DcnScrMean), - nameof(DcnScrMin), - nameof(DcnScrStdDev), - nameof(DcnSlipMax), - nameof(DcnSlipMean), - nameof(DcnSlipMin), - nameof(DcnSlipStdDev), - nameof(DnnAllMax), - nameof(DnnAllMean), - nameof(DnnAllMin), - nameof(DnnAllStdDev), - nameof(DnnAreaCountMax), - nameof(DnnAreaCountMean), - nameof(DnnAreaCountMin), - nameof(DnnAreaCountStdDev), - nameof(DnnAreaMax), - nameof(DnnAreaMean), - nameof(DnnAreaMin), - nameof(DnnAreaStdDev), - nameof(DnnBin1Max), - nameof(DnnBin1Mean), - nameof(DnnBin1Min), - nameof(DnnBin1StdDev), - nameof(DnnBin2Max), - nameof(DnnBin2Mean), - nameof(DnnBin2Min), - nameof(DnnBin2StdDev), - nameof(DnnBin3Max), - nameof(DnnBin3Mean), - nameof(DnnBin3Min), - nameof(DnnBin3StdDev), - nameof(DnnBin4Max), - nameof(DnnBin4Mean), - nameof(DnnBin4Min), - nameof(DnnBin4StdDev), - nameof(DnnBin5Max), - nameof(DnnBin5Mean), - nameof(DnnBin5Min), - nameof(DnnBin5StdDev), - nameof(DnnBin6Max), - nameof(DnnBin6Mean), - nameof(DnnBin6Min), - nameof(DnnBin6StdDev), - nameof(DnnBin7Max), - nameof(DnnBin7Mean), - nameof(DnnBin7Min), - nameof(DnnBin7StdDev), - nameof(DnnBin8Max), - nameof(DnnBin8Mean), - nameof(DnnBin8Min), - nameof(DnnBin8StdDev), - nameof(DnnHazeAvgMax), - nameof(DnnHazeAvgMean), - nameof(DnnHazeAvgMin), - nameof(DnnHazeAvgStdDev), - nameof(DnnHazeMedianMax), - nameof(DnnHazeMedianMean), - nameof(DnnHazeMedianMin), - nameof(DnnHazeMedianStdDev), - nameof(DnnHazeStdDevMax), - nameof(DnnHazeStdDevMean), - nameof(DnnHazeStdDevMin), - nameof(DnnHazeStdDevStdDev), - nameof(DnnLpdESMax), - nameof(DnnLpdESMean), - nameof(DnnLpdESMin), - nameof(DnnLpdESStdDev), - nameof(DnnLpdMax), - nameof(DnnLpdMean), - nameof(DnnLpdMin), - nameof(DnnLpdNMax), - nameof(DnnLpdNMean), - nameof(DnnLpdNMin), - nameof(DnnLpdNStdDev), - nameof(DnnLpdStdDev), - nameof(DnnMicroScrMax), - nameof(DnnMicroScrMean), - nameof(DnnMicroScrMin), - nameof(DnnMicroScrStdDev), - nameof(DnnScrMax), - nameof(DnnScrMean), - nameof(DnnScrMin), - nameof(DnnScrStdDev), - nameof(DnnSlipMax), - nameof(DnnSlipMean), - nameof(DnnSlipMin), - nameof(DnnSlipStdDev), - nameof(DwnAllMax), - nameof(DwnAllMean), - nameof(DwnAllMin), - nameof(DwnAllStdDev), - nameof(DwnAreaCountMax), - nameof(DwnAreaCountMean), - nameof(DwnAreaCountMin), - nameof(DwnAreaCountStdDev), - nameof(DwnAreaMax), - nameof(DwnAreaMean), - nameof(DwnAreaMin), - nameof(DwnAreaStdDev), - nameof(DwnBin1Max), - nameof(DwnBin1Mean), - nameof(DwnBin1Min), - nameof(DwnBin1StdDev), - nameof(DwnBin2Max), - nameof(DwnBin2Mean), - nameof(DwnBin2Min), - nameof(DwnBin2StdDev), - nameof(DwnBin3Max), - nameof(DwnBin3Mean), - nameof(DwnBin3Min), - nameof(DwnBin3StdDev), - nameof(DwnBin4Max), - nameof(DwnBin4Mean), - nameof(DwnBin4Min), - nameof(DwnBin4StdDev), - nameof(DwnBin5Max), - nameof(DwnBin5Mean), - nameof(DwnBin5Min), - nameof(DwnBin5StdDev), - nameof(DwnBin6Max), - nameof(DwnBin6Mean), - nameof(DwnBin6Min), - nameof(DwnBin6StdDev), - nameof(DwnBin7Max), - nameof(DwnBin7Mean), - nameof(DwnBin7Min), - nameof(DwnBin7StdDev), - nameof(DwnBin8Max), - nameof(DwnBin8Mean), - nameof(DwnBin8Min), - nameof(DwnBin8StdDev), - nameof(DwnHazeAvgMax), - nameof(DwnHazeAvgMean), - nameof(DwnHazeAvgMin), - nameof(DwnHazeAvgStdDev), - nameof(DwnHazeMedianMax), - nameof(DwnHazeMedianMean), - nameof(DwnHazeMedianMin), - nameof(DwnHazeMedianStdDev), - nameof(DwnHazeStdDevMax), - nameof(DwnHazeStdDevMean), - nameof(DwnHazeStdDevMin), - nameof(DwnHazeStdDevStdDev), - nameof(DwnLpdESMax), - nameof(DwnLpdESMean), - nameof(DwnLpdESMin), - nameof(DwnLpdESStdDev), - nameof(DwnLpdMax), - nameof(DwnLpdMean), - nameof(DwnLpdMin), - nameof(DwnLpdNMax), - nameof(DwnLpdNMean), - nameof(DwnLpdNMin), - nameof(DwnLpdNStdDev), - nameof(DwnLpdStdDev), - nameof(DwnMicroScrMax), - nameof(DwnMicroScrMean), - nameof(DwnMicroScrMin), - nameof(DwnMicroScrStdDev), - nameof(DwnScrMax), - nameof(DwnScrMean), - nameof(DwnScrMin), - nameof(DwnScrStdDev), - nameof(DwnSlipMax), - nameof(DwnSlipMean), - nameof(DwnSlipMin), - nameof(DwnSlipStdDev), - nameof(DcnAll), - nameof(DcnArea), - nameof(DcnAreaCount), - nameof(DcnBin1), - nameof(DcnBin2), - nameof(DcnBin3), - nameof(DcnBin4), - nameof(DcnBin5), - nameof(DcnBin6), - nameof(DcnBin7), - nameof(DcnBin8), - nameof(DcnHazeAvg), - nameof(DcnHazeMedian), - nameof(DcnHazeStdDev), - nameof(DcnLpd), - nameof(DcnLpdES), - nameof(DcnLpdN), - nameof(DcnMicroScr), - nameof(DcnScr), - nameof(DcnSlip), - nameof(DnnAll), - nameof(DnnArea), - nameof(DnnAreaCount), - nameof(DnnBin1), - nameof(DnnBin2), - nameof(DnnBin3), - nameof(DnnBin4), - nameof(DnnBin5), - nameof(DnnBin6), - nameof(DnnBin7), - nameof(DnnBin8), - nameof(DnnHazeAvg), - nameof(DnnHazeMedian), - nameof(DnnHazeStdDev), - nameof(DnnLpd), - nameof(DnnLpdES), - nameof(DnnLpdN), - nameof(DnnMicroScr), - nameof(DnnScr), - nameof(DnnSlip), - nameof(DwnAll), - nameof(DwnArea), - nameof(DwnAreaCount), - nameof(DwnBin1), - nameof(DwnBin2), - nameof(DwnBin3), - nameof(DwnBin4), - nameof(DwnBin5), - nameof(DwnBin6), - nameof(DwnBin7), - nameof(DwnBin8), - nameof(DwnHazeAvg), - nameof(DwnHazeMedian), - nameof(DwnHazeStdDev), - nameof(DwnLpd), - nameof(DwnLpdES), - nameof(DwnLpdN), - nameof(DwnMicroScr), - nameof(DwnScr), - nameof(DwnSlip) - }; - return results; - } - - public List GetPairedParameterNames(ILogic logic, ConfigDataBase configDataBase) - { - List results = new List(); - return results; - } - - public List GetIgnoreParameterNames(ILogic logic, ConfigDataBase configDataBase, Test test) - { - List results = new List(); - return results; - } - - public List GetNames(ILogic logic, ConfigDataBase configDataBase) - { - List results = new List(); - IProcessDataDescription processDataDescription = GetDefault(logic, configDataBase); - string json = JsonSerializer.Serialize(processDataDescription, processDataDescription.GetType()); - object @object = JsonSerializer.Deserialize(json); - if (!(@object is JsonElement jsonElement)) - throw new Exception(); - foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) - results.Add(jsonProperty.Name); - return results; - } - - public IProcessDataDescription GetDisplayNames(ILogic logic, ConfigDataBase configDataBase) - { - Description result = new Description(); - return result; - } - - public IProcessDataDescription GetDefault(ILogic logic, ConfigDataBase configDataBase) - { - Description result = new Description - { - Test = -1, - Count = 0, - Index = -1, - // - EventName = configDataBase.GetEventName(), - NullData = string.Empty, - JobID = logic.Logistics.JobID, - Sequence = logic.Logistics.Sequence.ToString(), - MesEntity = logic.Logistics.MesEntity, - ReportFullPath = logic.Logistics.ReportFullPath, - ProcessJobID = logic.Logistics.ProcessJobID, - MID = logic.Logistics.MID, - // - Date = nameof(Date), - Employee = nameof(Employee), - Lot = nameof(Lot), - PSN = nameof(PSN), - Reactor = nameof(Reactor), - Recipe = nameof(Recipe), - // - Grade = nameof(Grade), - HeaderUniqueId = nameof(HeaderUniqueId), - RDS = nameof(RDS), - Session = nameof(Session), - Side = nameof(Side), - SrcDest = nameof(SrcDest), - UniqueId = nameof(UniqueId), - WaferID = nameof(WaferID), - // - DcnAllMax = nameof(DcnAllMax), - DcnAllMean = nameof(DcnAllMean), - DcnAllMin = nameof(DcnAllMin), - DcnAllStdDev = nameof(DcnAllStdDev), - DcnAreaCountMax = nameof(DcnAreaCountMax), - DcnAreaCountMean = nameof(DcnAreaCountMean), - DcnAreaCountMin = nameof(DcnAreaCountMin), - DcnAreaCountStdDev = nameof(DcnAreaCountStdDev), - DcnAreaMax = nameof(DcnAreaMax), - DcnAreaMean = nameof(DcnAreaMean), - DcnAreaMin = nameof(DcnAreaMin), - DcnAreaStdDev = nameof(DcnAreaStdDev), - DcnBin1Max = nameof(DcnBin1Max), - DcnBin1Mean = nameof(DcnBin1Mean), - DcnBin1Min = nameof(DcnBin1Min), - DcnBin1StdDev = nameof(DcnBin1StdDev), - DcnBin2Max = nameof(DcnBin2Max), - DcnBin2Mean = nameof(DcnBin2Mean), - DcnBin2Min = nameof(DcnBin2Min), - DcnBin2StdDev = nameof(DcnBin2StdDev), - DcnBin3Max = nameof(DcnBin3Max), - DcnBin3Mean = nameof(DcnBin3Mean), - DcnBin3Min = nameof(DcnBin3Min), - DcnBin3StdDev = nameof(DcnBin3StdDev), - DcnBin4Max = nameof(DcnBin4Max), - DcnBin4Mean = nameof(DcnBin4Mean), - DcnBin4Min = nameof(DcnBin4Min), - DcnBin4StdDev = nameof(DcnBin4StdDev), - DcnBin5Max = nameof(DcnBin5Max), - DcnBin5Mean = nameof(DcnBin5Mean), - DcnBin5Min = nameof(DcnBin5Min), - DcnBin5StdDev = nameof(DcnBin5StdDev), - DcnBin6Max = nameof(DcnBin6Max), - DcnBin6Mean = nameof(DcnBin6Mean), - DcnBin6Min = nameof(DcnBin6Min), - DcnBin6StdDev = nameof(DcnBin6StdDev), - DcnBin7Max = nameof(DcnBin7Max), - DcnBin7Mean = nameof(DcnBin7Mean), - DcnBin7Min = nameof(DcnBin7Min), - DcnBin7StdDev = nameof(DcnBin7StdDev), - DcnBin8Max = nameof(DcnBin8Max), - DcnBin8Mean = nameof(DcnBin8Mean), - DcnBin8Min = nameof(DcnBin8Min), - DcnBin8StdDev = nameof(DcnBin8StdDev), - DcnHazeAvgMax = nameof(DcnHazeAvgMax), - DcnHazeAvgMean = nameof(DcnHazeAvgMean), - DcnHazeAvgMin = nameof(DcnHazeAvgMin), - DcnHazeAvgStdDev = nameof(DcnHazeAvgStdDev), - DcnHazeMedianMax = nameof(DcnHazeMedianMax), - DcnHazeMedianMean = nameof(DcnHazeMedianMean), - DcnHazeMedianMin = nameof(DcnHazeMedianMin), - DcnHazeMedianStdDev = nameof(DcnHazeMedianStdDev), - DcnHazeStdDevMax = nameof(DcnHazeStdDevMax), - DcnHazeStdDevMean = nameof(DcnHazeStdDevMean), - DcnHazeStdDevMin = nameof(DcnHazeStdDevMin), - DcnHazeStdDevStdDev = nameof(DcnHazeStdDevStdDev), - DcnLpdESMax = nameof(DcnLpdESMax), - DcnLpdESMean = nameof(DcnLpdESMean), - DcnLpdESMin = nameof(DcnLpdESMin), - DcnLpdESStdDev = nameof(DcnLpdESStdDev), - DcnLpdMax = nameof(DcnLpdMax), - DcnLpdMean = nameof(DcnLpdMean), - DcnLpdMin = nameof(DcnLpdMin), - DcnLpdNMax = nameof(DcnLpdNMax), - DcnLpdNMean = nameof(DcnLpdNMean), - DcnLpdNMin = nameof(DcnLpdNMin), - DcnLpdNStdDev = nameof(DcnLpdNStdDev), - DcnLpdStdDev = nameof(DcnLpdStdDev), - DcnMicroScrMax = nameof(DcnMicroScrMax), - DcnMicroScrMean = nameof(DcnMicroScrMean), - DcnMicroScrMin = nameof(DcnMicroScrMin), - DcnMicroScrStdDev = nameof(DcnMicroScrStdDev), - DcnScrMax = nameof(DcnScrMax), - DcnScrMean = nameof(DcnScrMean), - DcnScrMin = nameof(DcnScrMin), - DcnScrStdDev = nameof(DcnScrStdDev), - DcnSlipMax = nameof(DcnSlipMax), - DcnSlipMean = nameof(DcnSlipMean), - DcnSlipMin = nameof(DcnSlipMin), - DcnSlipStdDev = nameof(DcnSlipStdDev), - DnnAllMax = nameof(DnnAllMax), - DnnAllMean = nameof(DnnAllMean), - DnnAllMin = nameof(DnnAllMin), - DnnAllStdDev = nameof(DnnAllStdDev), - DnnAreaCountMax = nameof(DnnAreaCountMax), - DnnAreaCountMean = nameof(DnnAreaCountMean), - DnnAreaCountMin = nameof(DnnAreaCountMin), - DnnAreaCountStdDev = nameof(DnnAreaCountStdDev), - DnnAreaMax = nameof(DnnAreaMax), - DnnAreaMean = nameof(DnnAreaMean), - DnnAreaMin = nameof(DnnAreaMin), - DnnAreaStdDev = nameof(DnnAreaStdDev), - DnnBin1Max = nameof(DnnBin1Max), - DnnBin1Mean = nameof(DnnBin1Mean), - DnnBin1Min = nameof(DnnBin1Min), - DnnBin1StdDev = nameof(DnnBin1StdDev), - DnnBin2Max = nameof(DnnBin2Max), - DnnBin2Mean = nameof(DnnBin2Mean), - DnnBin2Min = nameof(DnnBin2Min), - DnnBin2StdDev = nameof(DnnBin2StdDev), - DnnBin3Max = nameof(DnnBin3Max), - DnnBin3Mean = nameof(DnnBin3Mean), - DnnBin3Min = nameof(DnnBin3Min), - DnnBin3StdDev = nameof(DnnBin3StdDev), - DnnBin4Max = nameof(DnnBin4Max), - DnnBin4Mean = nameof(DnnBin4Mean), - DnnBin4Min = nameof(DnnBin4Min), - DnnBin4StdDev = nameof(DnnBin4StdDev), - DnnBin5Max = nameof(DnnBin5Max), - DnnBin5Mean = nameof(DnnBin5Mean), - DnnBin5Min = nameof(DnnBin5Min), - DnnBin5StdDev = nameof(DnnBin5StdDev), - DnnBin6Max = nameof(DnnBin6Max), - DnnBin6Mean = nameof(DnnBin6Mean), - DnnBin6Min = nameof(DnnBin6Min), - DnnBin6StdDev = nameof(DnnBin6StdDev), - DnnBin7Max = nameof(DnnBin7Max), - DnnBin7Mean = nameof(DnnBin7Mean), - DnnBin7Min = nameof(DnnBin7Min), - DnnBin7StdDev = nameof(DnnBin7StdDev), - DnnBin8Max = nameof(DnnBin8Max), - DnnBin8Mean = nameof(DnnBin8Mean), - DnnBin8Min = nameof(DnnBin8Min), - DnnBin8StdDev = nameof(DnnBin8StdDev), - DnnHazeAvgMax = nameof(DnnHazeAvgMax), - DnnHazeAvgMean = nameof(DnnHazeAvgMean), - DnnHazeAvgMin = nameof(DnnHazeAvgMin), - DnnHazeAvgStdDev = nameof(DnnHazeAvgStdDev), - DnnHazeMedianMax = nameof(DnnHazeMedianMax), - DnnHazeMedianMean = nameof(DnnHazeMedianMean), - DnnHazeMedianMin = nameof(DnnHazeMedianMin), - DnnHazeMedianStdDev = nameof(DnnHazeMedianStdDev), - DnnHazeStdDevMax = nameof(DnnHazeStdDevMax), - DnnHazeStdDevMean = nameof(DnnHazeStdDevMean), - DnnHazeStdDevMin = nameof(DnnHazeStdDevMin), - DnnHazeStdDevStdDev = nameof(DnnHazeStdDevStdDev), - DnnLpdESMax = nameof(DnnLpdESMax), - DnnLpdESMean = nameof(DnnLpdESMean), - DnnLpdESMin = nameof(DnnLpdESMin), - DnnLpdESStdDev = nameof(DnnLpdESStdDev), - DnnLpdMax = nameof(DnnLpdMax), - DnnLpdMean = nameof(DnnLpdMean), - DnnLpdMin = nameof(DnnLpdMin), - DnnLpdNMax = nameof(DnnLpdNMax), - DnnLpdNMean = nameof(DnnLpdNMean), - DnnLpdNMin = nameof(DnnLpdNMin), - DnnLpdNStdDev = nameof(DnnLpdNStdDev), - DnnLpdStdDev = nameof(DnnLpdStdDev), - DnnMicroScrMax = nameof(DnnMicroScrMax), - DnnMicroScrMean = nameof(DnnMicroScrMean), - DnnMicroScrMin = nameof(DnnMicroScrMin), - DnnMicroScrStdDev = nameof(DnnMicroScrStdDev), - DnnScrMax = nameof(DnnScrMax), - DnnScrMean = nameof(DnnScrMean), - DnnScrMin = nameof(DnnScrMin), - DnnScrStdDev = nameof(DnnScrStdDev), - DnnSlipMax = nameof(DnnSlipMax), - DnnSlipMean = nameof(DnnSlipMean), - DnnSlipMin = nameof(DnnSlipMin), - DnnSlipStdDev = nameof(DnnSlipStdDev), - DwnAllMax = nameof(DwnAllMax), - DwnAllMean = nameof(DwnAllMean), - DwnAllMin = nameof(DwnAllMin), - DwnAllStdDev = nameof(DwnAllStdDev), - DwnAreaCountMax = nameof(DwnAreaCountMax), - DwnAreaCountMean = nameof(DwnAreaCountMean), - DwnAreaCountMin = nameof(DwnAreaCountMin), - DwnAreaCountStdDev = nameof(DwnAreaCountStdDev), - DwnAreaMax = nameof(DwnAreaMax), - DwnAreaMean = nameof(DwnAreaMean), - DwnAreaMin = nameof(DwnAreaMin), - DwnAreaStdDev = nameof(DwnAreaStdDev), - DwnBin1Max = nameof(DwnBin1Max), - DwnBin1Mean = nameof(DwnBin1Mean), - DwnBin1Min = nameof(DwnBin1Min), - DwnBin1StdDev = nameof(DwnBin1StdDev), - DwnBin2Max = nameof(DwnBin2Max), - DwnBin2Mean = nameof(DwnBin2Mean), - DwnBin2Min = nameof(DwnBin2Min), - DwnBin2StdDev = nameof(DwnBin2StdDev), - DwnBin3Max = nameof(DwnBin3Max), - DwnBin3Mean = nameof(DwnBin3Mean), - DwnBin3Min = nameof(DwnBin3Min), - DwnBin3StdDev = nameof(DwnBin3StdDev), - DwnBin4Max = nameof(DwnBin4Max), - DwnBin4Mean = nameof(DwnBin4Mean), - DwnBin4Min = nameof(DwnBin4Min), - DwnBin4StdDev = nameof(DwnBin4StdDev), - DwnBin5Max = nameof(DwnBin5Max), - DwnBin5Mean = nameof(DwnBin5Mean), - DwnBin5Min = nameof(DwnBin5Min), - DwnBin5StdDev = nameof(DwnBin5StdDev), - DwnBin6Max = nameof(DwnBin6Max), - DwnBin6Mean = nameof(DwnBin6Mean), - DwnBin6Min = nameof(DwnBin6Min), - DwnBin6StdDev = nameof(DwnBin6StdDev), - DwnBin7Max = nameof(DwnBin7Max), - DwnBin7Mean = nameof(DwnBin7Mean), - DwnBin7Min = nameof(DwnBin7Min), - DwnBin7StdDev = nameof(DwnBin7StdDev), - DwnBin8Max = nameof(DwnBin8Max), - DwnBin8Mean = nameof(DwnBin8Mean), - DwnBin8Min = nameof(DwnBin8Min), - DwnBin8StdDev = nameof(DwnBin8StdDev), - DwnHazeAvgMax = nameof(DwnHazeAvgMax), - DwnHazeAvgMean = nameof(DwnHazeAvgMean), - DwnHazeAvgMin = nameof(DwnHazeAvgMin), - DwnHazeAvgStdDev = nameof(DwnHazeAvgStdDev), - DwnHazeMedianMax = nameof(DwnHazeMedianMax), - DwnHazeMedianMean = nameof(DwnHazeMedianMean), - DwnHazeMedianMin = nameof(DwnHazeMedianMin), - DwnHazeMedianStdDev = nameof(DwnHazeMedianStdDev), - DwnHazeStdDevMax = nameof(DwnHazeStdDevMax), - DwnHazeStdDevMean = nameof(DwnHazeStdDevMean), - DwnHazeStdDevMin = nameof(DwnHazeStdDevMin), - DwnHazeStdDevStdDev = nameof(DwnHazeStdDevStdDev), - DwnLpdESMax = nameof(DwnLpdESMax), - DwnLpdESMean = nameof(DwnLpdESMean), - DwnLpdESMin = nameof(DwnLpdESMin), - DwnLpdESStdDev = nameof(DwnLpdESStdDev), - DwnLpdMax = nameof(DwnLpdMax), - DwnLpdMean = nameof(DwnLpdMean), - DwnLpdMin = nameof(DwnLpdMin), - DwnLpdNMax = nameof(DwnLpdNMax), - DwnLpdNMean = nameof(DwnLpdNMean), - DwnLpdNMin = nameof(DwnLpdNMin), - DwnLpdNStdDev = nameof(DwnLpdNStdDev), - DwnLpdStdDev = nameof(DwnLpdStdDev), - DwnMicroScrMax = nameof(DwnMicroScrMax), - DwnMicroScrMean = nameof(DwnMicroScrMean), - DwnMicroScrMin = nameof(DwnMicroScrMin), - DwnMicroScrStdDev = nameof(DwnMicroScrStdDev), - DwnScrMax = nameof(DwnScrMax), - DwnScrMean = nameof(DwnScrMean), - DwnScrMin = nameof(DwnScrMin), - DwnScrStdDev = nameof(DwnScrStdDev), - DwnSlipMax = nameof(DwnSlipMax), - DwnSlipMean = nameof(DwnSlipMean), - DwnSlipMin = nameof(DwnSlipMin), - DwnSlipStdDev = nameof(DwnSlipStdDev), - DcnAll = nameof(DcnAll), - DcnArea = nameof(DcnArea), - DcnAreaCount = nameof(DcnAreaCount), - DcnBin1 = nameof(DcnBin1), - DcnBin2 = nameof(DcnBin2), - DcnBin3 = nameof(DcnBin3), - DcnBin4 = nameof(DcnBin4), - DcnBin5 = nameof(DcnBin5), - DcnBin6 = nameof(DcnBin6), - DcnBin7 = nameof(DcnBin7), - DcnBin8 = nameof(DcnBin8), - DcnHazeAvg = nameof(DcnHazeAvg), - DcnHazeMedian = nameof(DcnHazeMedian), - DcnHazeStdDev = nameof(DcnHazeStdDev), - DcnLpd = nameof(DcnLpd), - DcnLpdES = nameof(DcnLpdES), - DcnLpdN = nameof(DcnLpdN), - DcnMicroScr = nameof(DcnMicroScr), - DcnScr = nameof(DcnScr), - DcnSlip = nameof(DcnSlip), - DnnAll = nameof(DnnAll), - DnnArea = nameof(DnnArea), - DnnAreaCount = nameof(DnnAreaCount), - DnnBin1 = nameof(DnnBin1), - DnnBin2 = nameof(DnnBin2), - DnnBin3 = nameof(DnnBin3), - DnnBin4 = nameof(DnnBin4), - DnnBin5 = nameof(DnnBin5), - DnnBin6 = nameof(DnnBin6), - DnnBin7 = nameof(DnnBin7), - DnnBin8 = nameof(DnnBin8), - DnnHazeAvg = nameof(DnnHazeAvg), - DnnHazeMedian = nameof(DnnHazeMedian), - DnnHazeStdDev = nameof(DnnHazeStdDev), - DnnLpd = nameof(DnnLpd), - DnnLpdES = nameof(DnnLpdES), - DnnLpdN = nameof(DnnLpdN), - DnnMicroScr = nameof(DnnMicroScr), - DnnScr = nameof(DnnScr), - DnnSlip = nameof(DnnSlip), - DwnAll = nameof(DwnAll), - DwnArea = nameof(DwnArea), - DwnAreaCount = nameof(DwnAreaCount), - DwnBin1 = nameof(DwnBin1), - DwnBin2 = nameof(DwnBin2), - DwnBin3 = nameof(DwnBin3), - DwnBin4 = nameof(DwnBin4), - DwnBin5 = nameof(DwnBin5), - DwnBin6 = nameof(DwnBin6), - DwnBin7 = nameof(DwnBin7), - DwnBin8 = nameof(DwnBin8), - DwnHazeAvg = nameof(DwnHazeAvg), - DwnHazeMedian = nameof(DwnHazeMedian), - DwnHazeStdDev = nameof(DwnHazeStdDev), - DwnLpd = nameof(DwnLpd), - DwnLpdES = nameof(DwnLpdES), - DwnLpdN = nameof(DwnLpdN), - DwnMicroScr = nameof(DwnMicroScr), - DwnScr = nameof(DwnScr), - DwnSlip = nameof(DwnSlip), - }; - return result; - } - - public List GetDescription(ILogic logic, ConfigDataBase configDataBase, List tests, IProcessData iProcessData) - { - List results = new List(); - if (iProcessData is null || !(iProcessData is ProcessData processData) || processData.Header is null || !processData.Details.Any()) - results.Add(GetDefault(logic, configDataBase)); - else - { - string nullData; - Description description; - object configDataNullData = ConfigData.NullData; - if (configDataNullData is null) - nullData = string.Empty; - else - nullData = configDataNullData.ToString(); - for (int i = 0; i < processData.Details.Count; i++) - { - description = new Description - { - Test = (int)tests[i], - Count = tests.Count, - Index = i, - // - EventName = configDataBase.GetEventName(), - NullData = nullData, - JobID = logic.Logistics.JobID, - Sequence = logic.Logistics.Sequence.ToString(), - MesEntity = logic.Logistics.MesEntity, - ReportFullPath = logic.Logistics.ReportFullPath, - ProcessJobID = logic.Logistics.ProcessJobID, - MID = logic.Logistics.MID, - // - Date = processData.Header.Date, - Employee = processData.Header.Operator, - Lot = processData.Header.Lot, - PSN = processData.Header.PSN, - Reactor = processData.Header.Reactor, - Recipe = processData.Header.Recipe, - // - Grade = processData.Details[i].Grade, - HeaderUniqueId = processData.Details[i].HeaderUniqueID, - RDS = processData.Header.RDS, - Session = processData.Header.Session, - Side = processData.Details[i].Side, - SrcDest = processData.Details[i].SrcDest, - UniqueId = processData.Details[i].UniqueID, - WaferID = processData.Details[i].WaferID, - // - DcnAllMax = processData.Header.DcnAllMax, - DcnAllMean = processData.Header.DcnAllMean, - DcnAllMin = processData.Header.DcnAllMin, - DcnAllStdDev = processData.Header.DcnAllStdDev, - DcnAreaCountMax = processData.Header.DcnAreaCountMax, - DcnAreaCountMean = processData.Header.DcnAreaCountMean, - DcnAreaCountMin = processData.Header.DcnAreaCountMin, - DcnAreaCountStdDev = processData.Header.DcnAreaCountStdDev, - DcnAreaMax = processData.Header.DcnAreaMax, - DcnAreaMean = processData.Header.DcnAreaMean, - DcnAreaMin = processData.Header.DcnAreaMin, - DcnAreaStdDev = processData.Header.DcnAreaStdDev, - DcnBin1Max = processData.Header.DcnBin1Max, - DcnBin1Mean = processData.Header.DcnBin1Mean, - DcnBin1Min = processData.Header.DcnBin1Min, - DcnBin1StdDev = processData.Header.DcnBin1StdDev, - DcnBin2Max = processData.Header.DcnBin2Max, - DcnBin2Mean = processData.Header.DcnBin2Mean, - DcnBin2Min = processData.Header.DcnBin2Min, - DcnBin2StdDev = processData.Header.DcnBin2StdDev, - DcnBin3Max = processData.Header.DcnBin3Max, - DcnBin3Mean = processData.Header.DcnBin3Mean, - DcnBin3Min = processData.Header.DcnBin3Min, - DcnBin3StdDev = processData.Header.DcnBin3StdDev, - DcnBin4Max = processData.Header.DcnBin4Max, - DcnBin4Mean = processData.Header.DcnBin4Mean, - DcnBin4Min = processData.Header.DcnBin4Min, - DcnBin4StdDev = processData.Header.DcnBin4StdDev, - DcnBin5Max = processData.Header.DcnBin5Max, - DcnBin5Mean = processData.Header.DcnBin5Mean, - DcnBin5Min = processData.Header.DcnBin5Min, - DcnBin5StdDev = processData.Header.DcnBin5StdDev, - DcnBin6Max = processData.Header.DcnBin6Max, - DcnBin6Mean = processData.Header.DcnBin6Mean, - DcnBin6Min = processData.Header.DcnBin6Min, - DcnBin6StdDev = processData.Header.DcnBin6StdDev, - DcnBin7Max = processData.Header.DcnBin7Max, - DcnBin7Mean = processData.Header.DcnBin7Mean, - DcnBin7Min = processData.Header.DcnBin7Min, - DcnBin7StdDev = processData.Header.DcnBin7StdDev, - DcnBin8Max = processData.Header.DcnBin8Max, - DcnBin8Mean = processData.Header.DcnBin8Mean, - DcnBin8Min = processData.Header.DcnBin8Min, - DcnBin8StdDev = processData.Header.DcnBin8StdDev, - DcnHazeAvgMax = processData.Header.DcnHazeAvgMax, - DcnHazeAvgMean = processData.Header.DcnHazeAvgMean, - DcnHazeAvgMin = processData.Header.DcnHazeAvgMin, - DcnHazeAvgStdDev = processData.Header.DcnHazeAvgStdDev, - DcnHazeMedianMax = processData.Header.DcnHazeMedianMax, - DcnHazeMedianMean = processData.Header.DcnHazeMedianMean, - DcnHazeMedianMin = processData.Header.DcnHazeMedianMin, - DcnHazeMedianStdDev = processData.Header.DcnHazeMedianStdDev, - DcnHazeStdDevMax = processData.Header.DcnHazeStdDevMax, - DcnHazeStdDevMean = processData.Header.DcnHazeStdDevMean, - DcnHazeStdDevMin = processData.Header.DcnHazeStdDevMin, - DcnHazeStdDevStdDev = processData.Header.DcnHazeStdDevStdDev, - DcnLpdESMax = processData.Header.DcnLpdESMax, - DcnLpdESMean = processData.Header.DcnLpdESMean, - DcnLpdESMin = processData.Header.DcnLpdESMin, - DcnLpdESStdDev = processData.Header.DcnLpdESStdDev, - DcnLpdMax = processData.Header.DcnLpdMax, - DcnLpdMean = processData.Header.DcnLpdMean, - DcnLpdMin = processData.Header.DcnLpdMin, - DcnLpdNMax = processData.Header.DcnLpdNMax, - DcnLpdNMean = processData.Header.DcnLpdNMean, - DcnLpdNMin = processData.Header.DcnLpdNMin, - DcnLpdNStdDev = processData.Header.DcnLpdNStdDev, - DcnLpdStdDev = processData.Header.DcnLpdStdDev, - DcnMicroScrMax = processData.Header.DcnMicroScrMax, - DcnMicroScrMean = processData.Header.DcnMicroScrMean, - DcnMicroScrMin = processData.Header.DcnMicroScrMin, - DcnMicroScrStdDev = processData.Header.DcnMicroScrStdDev, - DcnScrMax = processData.Header.DcnScrMax, - DcnScrMean = processData.Header.DcnScrMean, - DcnScrMin = processData.Header.DcnScrMin, - DcnScrStdDev = processData.Header.DcnScrStdDev, - DcnSlipMax = processData.Header.DcnSlipMax, - DcnSlipMean = processData.Header.DcnSlipMean, - DcnSlipMin = processData.Header.DcnSlipMin, - DcnSlipStdDev = processData.Header.DcnSlipStdDev, - DnnAllMax = processData.Header.DnnAllMax, - DnnAllMean = processData.Header.DnnAllMean, - DnnAllMin = processData.Header.DnnAllMin, - DnnAllStdDev = processData.Header.DnnAllStdDev, - DnnAreaCountMax = processData.Header.DnnAreaCountMax, - DnnAreaCountMean = processData.Header.DnnAreaCountMean, - DnnAreaCountMin = processData.Header.DnnAreaCountMin, - DnnAreaCountStdDev = processData.Header.DnnAreaCountStdDev, - DnnAreaMax = processData.Header.DnnAreaMax, - DnnAreaMean = processData.Header.DnnAreaMean, - DnnAreaMin = processData.Header.DnnAreaMin, - DnnAreaStdDev = processData.Header.DnnAreaStdDev, - DnnBin1Max = processData.Header.DnnBin1Max, - DnnBin1Mean = processData.Header.DnnBin1Mean, - DnnBin1Min = processData.Header.DnnBin1Min, - DnnBin1StdDev = processData.Header.DnnBin1StdDev, - DnnBin2Max = processData.Header.DnnBin2Max, - DnnBin2Mean = processData.Header.DnnBin2Mean, - DnnBin2Min = processData.Header.DnnBin2Min, - DnnBin2StdDev = processData.Header.DnnBin2StdDev, - DnnBin3Max = processData.Header.DnnBin3Max, - DnnBin3Mean = processData.Header.DnnBin3Mean, - DnnBin3Min = processData.Header.DnnBin3Min, - DnnBin3StdDev = processData.Header.DnnBin3StdDev, - DnnBin4Max = processData.Header.DnnBin4Max, - DnnBin4Mean = processData.Header.DnnBin4Mean, - DnnBin4Min = processData.Header.DnnBin4Min, - DnnBin4StdDev = processData.Header.DnnBin4StdDev, - DnnBin5Max = processData.Header.DnnBin5Max, - DnnBin5Mean = processData.Header.DnnBin5Mean, - DnnBin5Min = processData.Header.DnnBin5Min, - DnnBin5StdDev = processData.Header.DnnBin5StdDev, - DnnBin6Max = processData.Header.DnnBin6Max, - DnnBin6Mean = processData.Header.DnnBin6Mean, - DnnBin6Min = processData.Header.DnnBin6Min, - DnnBin6StdDev = processData.Header.DnnBin6StdDev, - DnnBin7Max = processData.Header.DnnBin7Max, - DnnBin7Mean = processData.Header.DnnBin7Mean, - DnnBin7Min = processData.Header.DnnBin7Min, - DnnBin7StdDev = processData.Header.DnnBin7StdDev, - DnnBin8Max = processData.Header.DnnBin8Max, - DnnBin8Mean = processData.Header.DnnBin8Mean, - DnnBin8Min = processData.Header.DnnBin8Min, - DnnBin8StdDev = processData.Header.DnnBin8StdDev, - DnnHazeAvgMax = processData.Header.DnnHazeAvgMax, - DnnHazeAvgMean = processData.Header.DnnHazeAvgMean, - DnnHazeAvgMin = processData.Header.DnnHazeAvgMin, - DnnHazeAvgStdDev = processData.Header.DnnHazeAvgStdDev, - DnnHazeMedianMax = processData.Header.DnnHazeMedianMax, - DnnHazeMedianMean = processData.Header.DnnHazeMedianMean, - DnnHazeMedianMin = processData.Header.DnnHazeMedianMin, - DnnHazeMedianStdDev = processData.Header.DnnHazeMedianStdDev, - DnnHazeStdDevMax = processData.Header.DnnHazeStdDevMax, - DnnHazeStdDevMean = processData.Header.DnnHazeStdDevMean, - DnnHazeStdDevMin = processData.Header.DnnHazeStdDevMin, - DnnHazeStdDevStdDev = processData.Header.DnnHazeStdDevStdDev, - DnnLpdESMax = processData.Header.DnnLpdESMax, - DnnLpdESMean = processData.Header.DnnLpdESMean, - DnnLpdESMin = processData.Header.DnnLpdESMin, - DnnLpdESStdDev = processData.Header.DnnLpdESStdDev, - DnnLpdMax = processData.Header.DnnLpdMax, - DnnLpdMean = processData.Header.DnnLpdMean, - DnnLpdMin = processData.Header.DnnLpdMin, - DnnLpdNMax = processData.Header.DnnLpdNMax, - DnnLpdNMean = processData.Header.DnnLpdNMean, - DnnLpdNMin = processData.Header.DnnLpdNMin, - DnnLpdNStdDev = processData.Header.DnnLpdNStdDev, - DnnLpdStdDev = processData.Header.DnnLpdStdDev, - DnnMicroScrMax = processData.Header.DnnMicroScrMax, - DnnMicroScrMean = processData.Header.DnnMicroScrMean, - DnnMicroScrMin = processData.Header.DnnMicroScrMin, - DnnMicroScrStdDev = processData.Header.DnnMicroScrStdDev, - DnnScrMax = processData.Header.DnnScrMax, - DnnScrMean = processData.Header.DnnScrMean, - DnnScrMin = processData.Header.DnnScrMin, - DnnScrStdDev = processData.Header.DnnScrStdDev, - DnnSlipMax = processData.Header.DnnSlipMax, - DnnSlipMean = processData.Header.DnnSlipMean, - DnnSlipMin = processData.Header.DnnSlipMin, - DnnSlipStdDev = processData.Header.DnnSlipStdDev, - DwnAllMax = processData.Header.DwnAllMax, - DwnAllMean = processData.Header.DwnAllMean, - DwnAllMin = processData.Header.DwnAllMin, - DwnAllStdDev = processData.Header.DwnAllStdDev, - DwnAreaCountMax = processData.Header.DwnAreaCountMax, - DwnAreaCountMean = processData.Header.DwnAreaCountMean, - DwnAreaCountMin = processData.Header.DwnAreaCountMin, - DwnAreaCountStdDev = processData.Header.DwnAreaCountStdDev, - DwnAreaMax = processData.Header.DwnAreaMax, - DwnAreaMean = processData.Header.DwnAreaMean, - DwnAreaMin = processData.Header.DwnAreaMin, - DwnAreaStdDev = processData.Header.DwnAreaStdDev, - DwnBin1Max = processData.Header.DwnBin1Max, - DwnBin1Mean = processData.Header.DwnBin1Mean, - DwnBin1Min = processData.Header.DwnBin1Min, - DwnBin1StdDev = processData.Header.DwnBin1StdDev, - DwnBin2Max = processData.Header.DwnBin2Max, - DwnBin2Mean = processData.Header.DwnBin2Mean, - DwnBin2Min = processData.Header.DwnBin2Min, - DwnBin2StdDev = processData.Header.DwnBin2StdDev, - DwnBin3Max = processData.Header.DwnBin3Max, - DwnBin3Mean = processData.Header.DwnBin3Mean, - DwnBin3Min = processData.Header.DwnBin3Min, - DwnBin3StdDev = processData.Header.DwnBin3StdDev, - DwnBin4Max = processData.Header.DwnBin4Max, - DwnBin4Mean = processData.Header.DwnBin4Mean, - DwnBin4Min = processData.Header.DwnBin4Min, - DwnBin4StdDev = processData.Header.DwnBin4StdDev, - DwnBin5Max = processData.Header.DwnBin5Max, - DwnBin5Mean = processData.Header.DwnBin5Mean, - DwnBin5Min = processData.Header.DwnBin5Min, - DwnBin5StdDev = processData.Header.DwnBin5StdDev, - DwnBin6Max = processData.Header.DwnBin6Max, - DwnBin6Mean = processData.Header.DwnBin6Mean, - DwnBin6Min = processData.Header.DwnBin6Min, - DwnBin6StdDev = processData.Header.DwnBin6StdDev, - DwnBin7Max = processData.Header.DwnBin7Max, - DwnBin7Mean = processData.Header.DwnBin7Mean, - DwnBin7Min = processData.Header.DwnBin7Min, - DwnBin7StdDev = processData.Header.DwnBin7StdDev, - DwnBin8Max = processData.Header.DwnBin8Max, - DwnBin8Mean = processData.Header.DwnBin8Mean, - DwnBin8Min = processData.Header.DwnBin8Min, - DwnBin8StdDev = processData.Header.DwnBin8StdDev, - DwnHazeAvgMax = processData.Header.DwnHazeAvgMax, - DwnHazeAvgMean = processData.Header.DwnHazeAvgMean, - DwnHazeAvgMin = processData.Header.DwnHazeAvgMin, - DwnHazeAvgStdDev = processData.Header.DwnHazeAvgStdDev, - DwnHazeMedianMax = processData.Header.DwnHazeMedianMax, - DwnHazeMedianMean = processData.Header.DwnHazeMedianMean, - DwnHazeMedianMin = processData.Header.DwnHazeMedianMin, - DwnHazeMedianStdDev = processData.Header.DwnHazeMedianStdDev, - DwnHazeStdDevMax = processData.Header.DwnHazeStdDevMax, - DwnHazeStdDevMean = processData.Header.DwnHazeStdDevMean, - DwnHazeStdDevMin = processData.Header.DwnHazeStdDevMin, - DwnHazeStdDevStdDev = processData.Header.DwnHazeStdDevStdDev, - DwnLpdESMax = processData.Header.DwnLpdESMax, - DwnLpdESMean = processData.Header.DwnLpdESMean, - DwnLpdESMin = processData.Header.DwnLpdESMin, - DwnLpdESStdDev = processData.Header.DwnLpdESStdDev, - DwnLpdMax = processData.Header.DwnLpdMax, - DwnLpdMean = processData.Header.DwnLpdMean, - DwnLpdMin = processData.Header.DwnLpdMin, - DwnLpdNMax = processData.Header.DwnLpdNMax, - DwnLpdNMean = processData.Header.DwnLpdNMean, - DwnLpdNMin = processData.Header.DwnLpdNMin, - DwnLpdNStdDev = processData.Header.DwnLpdNStdDev, - DwnLpdStdDev = processData.Header.DwnLpdStdDev, - DwnMicroScrMax = processData.Header.DwnMicroScrMax, - DwnMicroScrMean = processData.Header.DwnMicroScrMean, - DwnMicroScrMin = processData.Header.DwnMicroScrMin, - DwnMicroScrStdDev = processData.Header.DwnMicroScrStdDev, - DwnScrMax = processData.Header.DwnScrMax, - DwnScrMean = processData.Header.DwnScrMean, - DwnScrMin = processData.Header.DwnScrMin, - DwnScrStdDev = processData.Header.DwnScrStdDev, - DwnSlipMax = processData.Header.DwnSlipMax, - DwnSlipMean = processData.Header.DwnSlipMean, - DwnSlipMin = processData.Header.DwnSlipMin, - DwnSlipStdDev = processData.Header.DwnSlipStdDev, - DcnAll = processData.Details[i].DcnAll, - DcnArea = processData.Details[i].DcnArea, - DcnAreaCount = processData.Details[i].DcnAreaCount, - DcnBin1 = processData.Details[i].DcnBin1, - DcnBin2 = processData.Details[i].DcnBin2, - DcnBin3 = processData.Details[i].DcnBin3, - DcnBin4 = processData.Details[i].DcnBin4, - DcnBin5 = processData.Details[i].DcnBin5, - DcnBin6 = processData.Details[i].DcnBin6, - DcnBin7 = processData.Details[i].DcnBin7, - DcnBin8 = processData.Details[i].DcnBin8, - DcnHazeAvg = processData.Details[i].DcnHazeAvg, - DcnHazeMedian = processData.Details[i].DcnHazeMedian, - DcnHazeStdDev = processData.Details[i].DcnHazeStdDev, - DcnLpd = processData.Details[i].DcnLpd, - DcnLpdES = processData.Details[i].DcnLpdES, - DcnLpdN = processData.Details[i].DcnLpdN, - DcnMicroScr = processData.Details[i].DcnMicroScr, - DcnScr = processData.Details[i].DcnScr, - DcnSlip = processData.Details[i].DcnSlip, - DnnAll = processData.Details[i].DnnAll, - DnnArea = processData.Details[i].DnnArea, - DnnAreaCount = processData.Details[i].DnnAreaCount, - DnnBin1 = processData.Details[i].DnnBin1, - DnnBin2 = processData.Details[i].DnnBin2, - DnnBin3 = processData.Details[i].DnnBin3, - DnnBin4 = processData.Details[i].DnnBin4, - DnnBin5 = processData.Details[i].DnnBin5, - DnnBin6 = processData.Details[i].DnnBin6, - DnnBin7 = processData.Details[i].DnnBin7, - DnnBin8 = processData.Details[i].DnnBin8, - DnnHazeAvg = processData.Details[i].DnnHazeAvg, - DnnHazeMedian = processData.Details[i].DnnHazeMedian, - DnnHazeStdDev = processData.Details[i].DnnHazeStdDev, - DnnLpd = processData.Details[i].DnnLpd, - DnnLpdES = processData.Details[i].DnnLpdES, - DnnLpdN = processData.Details[i].DnnLpdN, - DnnMicroScr = processData.Details[i].DnnMicroScr, - DnnScr = processData.Details[i].DnnScr, - DnnSlip = processData.Details[i].DnnSlip, - DwnAll = processData.Details[i].DwnAll, - DwnArea = processData.Details[i].DwnArea, - DwnAreaCount = processData.Details[i].DwnAreaCount, - DwnBin1 = processData.Details[i].DwnBin1, - DwnBin2 = processData.Details[i].DwnBin2, - DwnBin3 = processData.Details[i].DwnBin3, - DwnBin4 = processData.Details[i].DwnBin4, - DwnBin5 = processData.Details[i].DwnBin5, - DwnBin6 = processData.Details[i].DwnBin6, - DwnBin7 = processData.Details[i].DwnBin7, - DwnBin8 = processData.Details[i].DwnBin8, - DwnHazeAvg = processData.Details[i].DwnHazeAvg, - DwnHazeMedian = processData.Details[i].DwnHazeMedian, - DwnHazeStdDev = processData.Details[i].DwnHazeStdDev, - DwnLpd = processData.Details[i].DwnLpd, - DwnLpdES = processData.Details[i].DwnLpdES, - DwnLpdN = processData.Details[i].DwnLpdN, - DwnMicroScr = processData.Details[i].DwnMicroScr, - DwnScr = processData.Details[i].DwnScr, - DwnSlip = processData.Details[i].DwnSlip - }; - results.Add(description); - } - } - return results; - } - - } - - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Helpers/ProcessData.HeaderFile.cs b/Adaptation/Helpers/ProcessData.HeaderFile.cs deleted file mode 100644 index 9ed6bfa..0000000 --- a/Adaptation/Helpers/ProcessData.HeaderFile.cs +++ /dev/null @@ -1,267 +0,0 @@ -using System.Collections.Generic; - -namespace Adaptation.Helpers -{ - - public partial class ProcessData - { - public class HeaderFile - { - - public string JobID { get; set; } - public string MesEntity { get; set; } - public string Date { get; set; } - public string Lot { get; set; } - public string Operator { get; set; } - public string PSN { get; set; } - public string RDS { get; set; } - public string Reactor { get; set; } - 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 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; } - - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Helpers/ProcessData.WSRequest.cs b/Adaptation/Helpers/ProcessData.WSRequest.cs deleted file mode 100644 index 2723b28..0000000 --- a/Adaptation/Helpers/ProcessData.WSRequest.cs +++ /dev/null @@ -1,612 +0,0 @@ -using Adaptation.Shared.Metrology; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Adaptation.Helpers -{ - - public partial class ProcessData - { - public class WSRequest - { - public bool SentToMetrology { get; set; } - public bool SentToSPC { get; set; } - // - - public string CellName { get; set; } - public string Date { get; set; } - public string LotID { get; set; } - public string Operator { get; set; } - public string PSN { get; set; } - public string RDS { get; set; } - public string Reactor { get; set; } - 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; } - public string DcnAreaMin { get; set; } - public string DcnAreaStDev { get; set; } - public string DcnBin1Max { get; set; } - public string DcnBin1Mean { get; set; } - public string DcnBin1Min { get; set; } - public string DcnBin1StDev { get; set; } - public string DcnBin2Max { get; set; } - public string DcnBin2Mean { get; set; } - public string DcnBin2Min { get; set; } - public string DcnBin2StDev { get; set; } - public string DcnBin3Max { get; set; } - public string DcnBin3Mean { get; set; } - public string DcnBin3Min { get; set; } - public string DcnBin3StDev { get; set; } - public string DcnBin4Max { get; set; } - public string DcnBin4Mean { get; set; } - public string DcnBin4Min { get; set; } - public string DcnBin4StDev { get; set; } - public string DcnBin5Max { get; set; } - public string DcnBin5Mean { get; set; } - public string DcnBin5Min { get; set; } - public string DcnBin5StDev { get; set; } - public string DcnBin6Max { get; set; } - public string DcnBin6Mean { get; set; } - public string DcnBin6Min { get; set; } - public string DcnBin6StDev { get; set; } - public string DcnBin7Max { get; set; } - public string DcnBin7Mean { get; set; } - public string DcnBin7Min { get; set; } - public string DcnBin7StDev { get; set; } - public string DcnBin8Max { get; set; } - public string DcnBin8Mean { get; set; } - public string DcnBin8Min { get; set; } - public string DcnBin8StDev { get; set; } - public string DcnHazeAvgMax { get; set; } - public string DcnHazeAvgMean { get; set; } - public string DcnHazeAvgMin { get; set; } - public string DcnHazeAvgStDev { get; set; } - public string DcnHazeMedMax { get; set; } - public string DcnHazeMedMean { get; set; } - public string DcnHazeMedMin { get; set; } - public string DcnHazeMedStDev { get; set; } - public string DcnHazeStDevMax { get; set; } - public string DcnHazeStDevMean { get; set; } - public string DcnHazeStDevMin { get; set; } - public string DcnHazeStDevStDev { get; set; } - public string DcnLpdESMax { get; set; } - public string DcnLpdESMean { get; set; } - public string DcnLpdESMin { get; set; } - public string DcnLpdESStDev { 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 DcnLpdNStDev { get; set; } - public string DcnLpdStDev { get; set; } - public string DcnMicroScrMax { get; set; } - public string DcnMicroScrMean { get; set; } - public string DcnMicroScrMin { get; set; } - public string DcnMicroScrStDev { get; set; } - public string DcnScrMax { get; set; } - public string DcnScrMean { get; set; } - public string DcnScrMin { get; set; } - public string DcnScrStDev { get; set; } - public string DcnSlipMax { get; set; } - public string DcnSlipMean { get; set; } - public string DcnSlipMin { get; set; } - public string DcnSlipStDev { get; set; } - public string DnnAllMax { get; set; } - public string DnnAllMean { get; set; } - public string DnnAllMin { get; set; } - public string DnnAllStDev { get; set; } - public string DnnAreaCntMax { get; set; } - public string DnnAreaCntMean { get; set; } - public string DnnAreaCntMin { get; set; } - public string DnnAreaCntStDev { get; set; } - public string DnnAreaMax { get; set; } - public string DnnAreaMean { get; set; } - public string DnnAreaMin { get; set; } - public string DnnAreaStDev { get; set; } - public string DnnBin1Max { get; set; } - public string DnnBin1Mean { get; set; } - public string DnnBin1Min { get; set; } - public string DnnBin1StDev { get; set; } - public string DnnBin2Max { get; set; } - public string DnnBin2Mean { get; set; } - public string DnnBin2Min { get; set; } - public string DnnBin2StDev { get; set; } - public string DnnBin3Max { get; set; } - public string DnnBin3Mean { get; set; } - public string DnnBin3Min { get; set; } - public string DnnBin3StDev { get; set; } - public string DnnBin4Max { get; set; } - public string DnnBin4Mean { get; set; } - public string DnnBin4Min { get; set; } - public string DnnBin4StDev { get; set; } - public string DnnBin5Max { get; set; } - public string DnnBin5Mean { get; set; } - public string DnnBin5Min { get; set; } - public string DnnBin5StDev { get; set; } - public string DnnBin6Max { get; set; } - public string DnnBin6Mean { get; set; } - public string DnnBin6Min { get; set; } - public string DnnBin6StDev { get; set; } - public string DnnBin7Max { get; set; } - public string DnnBin7Mean { get; set; } - public string DnnBin7Min { get; set; } - public string DnnBin7StDev { get; set; } - public string DnnBin8Max { get; set; } - public string DnnBin8Mean { get; set; } - public string DnnBin8Min { get; set; } - public string DnnBin8StDev { get; set; } - public string DnnHazeAvgMax { get; set; } - public string DnnHazeAvgMean { get; set; } - public string DnnHazeAvgMin { get; set; } - public string DnnHazeAvgStDev { get; set; } - public string DnnHazeMedMax { get; set; } - public string DnnHazeMedMean { get; set; } - public string DnnHazeMedMin { get; set; } - public string DnnHazeMedStDev { get; set; } - public string DnnHazeStDevMax { get; set; } - public string DnnHazeStDevMean { get; set; } - public string DnnHazeStDevMin { get; set; } - public string DnnHazeStDevStDev { get; set; } - public string DnnLpdESMax { get; set; } - public string DnnLpdESMean { get; set; } - public string DnnLpdESMin { get; set; } - public string DnnLpdESStDev { 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 DnnLpdNStDev { get; set; } - public string DnnLpdStDev { get; set; } - public string DnnMicroScrMax { get; set; } - public string DnnMicroScrMean { get; set; } - public string DnnMicroScrMin { get; set; } - public string DnnMicroScrStDev { get; set; } - public string DnnScrMax { get; set; } - public string DnnScrMean { get; set; } - public string DnnScrMin { get; set; } - public string DnnScrStDev { get; set; } - public string DnnSlipMax { get; set; } - public string DnnSlipMean { get; set; } - public string DnnSlipMin { get; set; } - public string DnnSlipStDev { get; set; } - public string DwnAllMax { get; set; } - public string DwnAllMean { get; set; } - public string DwnAllMin { get; set; } - public string DwnAllStDev { get; set; } - public string DwnAreaCntMax { get; set; } - public string DwnAreaCntMean { get; set; } - public string DwnAreaCntMin { get; set; } - public string DwnAreaCntStDev { get; set; } - public string DwnAreaMax { get; set; } - public string DwnAreaMean { get; set; } - public string DwnAreaMin { get; set; } - public string DwnAreaStDev { get; set; } - public string DwnBin1Max { get; set; } - public string DwnBin1Mean { get; set; } - public string DwnBin1Min { get; set; } - public string DwnBin1StDev { get; set; } - public string DwnBin2Max { get; set; } - public string DwnBin2Mean { get; set; } - public string DwnBin2Min { get; set; } - public string DwnBin2StDev { get; set; } - public string DwnBin3Max { get; set; } - public string DwnBin3Mean { get; set; } - public string DwnBin3Min { get; set; } - public string DwnBin3StDev { get; set; } - public string DwnBin4Max { get; set; } - public string DwnBin4Mean { get; set; } - public string DwnBin4Min { get; set; } - public string DwnBin4StDev { get; set; } - public string DwnBin5Max { get; set; } - public string DwnBin5Mean { get; set; } - public string DwnBin5Min { get; set; } - public string DwnBin5StDev { get; set; } - public string DwnBin6Max { get; set; } - public string DwnBin6Mean { get; set; } - public string DwnBin6Min { get; set; } - public string DwnBin6StDev { get; set; } - public string DwnBin7Max { get; set; } - public string DwnBin7Mean { get; set; } - public string DwnBin7Min { get; set; } - public string DwnBin7StDev { get; set; } - public string DwnBin8Max { get; set; } - public string DwnBin8Mean { get; set; } - public string DwnBin8Min { get; set; } - public string DwnBin8StDev { get; set; } - public string DwnHazeAvgMax { get; set; } - public string DwnHazeAvgMean { get; set; } - public string DwnHazeAvgMin { get; set; } - public string DwnHazeAvgStDev { get; set; } - public string DwnHazeMedMax { get; set; } - public string DwnHazeMedMean { get; set; } - public string DwnHazeMedMin { get; set; } - public string DwnHazeMedStDev { get; set; } - public string DwnHazeStDevMax { get; set; } - public string DwnHazeStDevMean { get; set; } - public string DwnHazeStDevMin { get; set; } - public string DwnHazeStDevStDev { get; set; } - public string DwnLpdESMax { get; set; } - public string DwnLpdESMean { get; set; } - public string DwnLpdESMin { get; set; } - public string DwnLpdESStDev { 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 DwnLpdNStDev { get; set; } - public string DwnLpdStDev { get; set; } - public string DwnMicroScrMax { get; set; } - public string DwnMicroScrMean { get; set; } - public string DwnMicroScrMin { get; set; } - public string DwnMicroScrStDev { get; set; } - public string DwnScrMax { get; set; } - public string DwnScrMean { get; set; } - public string DwnScrMin { get; set; } - public string DwnScrStDev { get; set; } - public string DwnSlipMax { get; set; } - public string DwnSlipMean { get; set; } - public string DwnSlipMin { get; set; } - public string DwnSlipStDev { get; set; } - public List Details { get; protected set; } - - [Obsolete("For json")] public WSRequest() { } - - internal WSRequest(ILogic logic, List descriptions) - { - Details = new List(); - CellName = logic.Logistics.MesEntity; - FileRead.Description x = descriptions[0]; - //Header - { - UniqueID = x.UniqueId; - Date = x.Date; - Reactor = x.Reactor; - LotID = x.Lot; - Session = x.Session; - DcnAllMin = x.DcnAllMin; - DcnAllMax = x.DcnAllMax; - DcnAllMean = x.DcnAllMean; - DcnAllStDev = x.DcnAllStdDev; - DcnLpdMin = x.DcnLpdMin; - DcnLpdMax = x.DcnLpdMax; - DcnLpdMean = x.DcnLpdMean; - DcnLpdStDev = x.DcnLpdStdDev; - DcnLpdNMin = x.DcnLpdNMin; - DcnLpdNMax = x.DcnLpdNMax; - DcnLpdNMean = x.DcnLpdNMean; - DcnLpdNStDev = x.DcnLpdNStdDev; - DcnLpdESMin = x.DcnLpdESMin; - DcnLpdESMax = x.DcnLpdESMax; - DcnLpdESMean = x.DcnLpdESMean; - DcnLpdESStDev = x.DcnLpdESStdDev; - DcnMicroScrMin = x.DcnMicroScrMin; - DcnMicroScrMax = x.DcnMicroScrMax; - DcnMicroScrMean = x.DcnMicroScrMean; - DcnMicroScrStDev = x.DcnMicroScrStdDev; - DcnScrMin = x.DcnScrMin; - DcnScrMax = x.DcnScrMax; - DcnScrMean = x.DcnScrMean; - DcnScrStDev = x.DcnScrStdDev; - DcnSlipMin = x.DcnSlipMin; - DcnSlipMax = x.DcnSlipMax; - DcnSlipMean = x.DcnSlipMean; - DcnSlipStDev = x.DcnSlipStdDev; - DcnAreaCntMin = x.DcnAreaCountMin; - DcnAreaCntMax = x.DcnAreaCountMax; - DcnAreaCntMean = x.DcnAreaCountMean; - DcnAreaCntStDev = x.DcnAreaCountStdDev; - DcnAreaMin = x.DcnAreaMin; - DcnAreaMax = x.DcnAreaMax; - DcnAreaMean = x.DcnAreaMean; - DcnAreaStDev = x.DcnAreaStdDev; - 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; - DcnBin1Min = x.DcnBin1Min; - DcnBin1Max = x.DcnBin1Max; - DcnBin1Mean = x.DcnBin1Mean; - DcnBin1StDev = x.DcnBin1StdDev; - DcnBin2Min = x.DcnBin2Min; - DcnBin2Max = x.DcnBin2Max; - DcnBin2Mean = x.DcnBin2Mean; - DcnBin2StDev = x.DcnBin2StdDev; - DcnBin3Min = x.DcnBin3Min; - DcnBin3Max = x.DcnBin3Max; - DcnBin3Mean = x.DcnBin3Mean; - DcnBin3StDev = x.DcnBin3StdDev; - DcnBin4Min = x.DcnBin4Min; - DcnBin4Max = x.DcnBin4Max; - DcnBin4Mean = x.DcnBin4Mean; - DcnBin4StDev = x.DcnBin4StdDev; - DcnBin5Min = x.DcnBin5Min; - DcnBin5Max = x.DcnBin5Max; - DcnBin5Mean = x.DcnBin5Mean; - DcnBin5StDev = x.DcnBin5StdDev; - DcnBin6Min = x.DcnBin6Min; - DcnBin6Max = x.DcnBin6Max; - DcnBin6Mean = x.DcnBin6Mean; - DcnBin6StDev = x.DcnBin6StdDev; - DcnBin7Min = x.DcnBin7Min; - DcnBin7Max = x.DcnBin7Max; - DcnBin7Mean = x.DcnBin7Mean; - DcnBin7StDev = x.DcnBin7StdDev; - DcnBin8Min = x.DcnBin8Min; - DcnBin8Max = x.DcnBin8Max; - DcnBin8Mean = x.DcnBin8Mean; - DcnBin8StDev = x.DcnBin8StdDev; - DwnAllMin = x.DwnAllMin; - DwnAllMax = x.DwnAllMax; - DwnAllMean = x.DwnAllMean; - DwnAllStDev = x.DwnAllStdDev; - DwnLpdMin = x.DwnLpdMin; - DwnLpdMax = x.DwnLpdMax; - DwnLpdMean = x.DwnLpdMean; - DwnLpdStDev = x.DwnLpdStdDev; - DwnLpdNMin = x.DwnLpdNMin; - DwnLpdNMax = x.DwnLpdNMax; - DwnLpdNMean = x.DwnLpdNMean; - DwnLpdNStDev = x.DwnLpdNStdDev; - DwnLpdESMin = x.DwnLpdESMin; - DwnLpdESMax = x.DwnLpdESMax; - DwnLpdESMean = x.DwnLpdESMean; - DwnLpdESStDev = x.DwnLpdESStdDev; - DwnMicroScrMin = x.DwnMicroScrMin; - DwnMicroScrMax = x.DwnMicroScrMax; - DwnMicroScrMean = x.DwnMicroScrMean; - DwnMicroScrStDev = x.DwnMicroScrStdDev; - DwnScrMin = x.DwnScrMin; - DwnScrMax = x.DwnScrMax; - DwnScrMean = x.DwnScrMean; - DwnScrStDev = x.DwnScrStdDev; - DwnSlipMin = x.DwnSlipMin; - DwnSlipMax = x.DwnSlipMax; - DwnSlipMean = x.DwnSlipMean; - DwnSlipStDev = x.DwnSlipStdDev; - DwnAreaCntMin = x.DwnAreaCountMin; - DwnAreaCntMax = x.DwnAreaCountMax; - DwnAreaCntMean = x.DwnAreaCountMean; - DwnAreaCntStDev = x.DwnAreaCountStdDev; - DwnAreaMin = x.DwnAreaMin; - DwnAreaMax = x.DwnAreaMax; - DwnAreaMean = x.DwnAreaMean; - DwnAreaStDev = x.DwnAreaStdDev; - 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; - DwnBin1Min = x.DwnBin1Min; - DwnBin1Max = x.DwnBin1Max; - DwnBin1Mean = x.DwnBin1Mean; - DwnBin1StDev = x.DwnBin1StdDev; - DwnBin2Min = x.DwnBin2Min; - DwnBin2Max = x.DwnBin2Max; - DwnBin2Mean = x.DwnBin2Mean; - DwnBin2StDev = x.DwnBin2StdDev; - DwnBin3Min = x.DwnBin3Min; - DwnBin3Max = x.DwnBin3Max; - DwnBin3Mean = x.DwnBin3Mean; - DwnBin3StDev = x.DwnBin3StdDev; - DwnBin4Min = x.DwnBin4Min; - DwnBin4Max = x.DwnBin4Max; - DwnBin4Mean = x.DwnBin4Mean; - DwnBin4StDev = x.DwnBin4StdDev; - DwnBin5Min = x.DwnBin5Min; - DwnBin5Max = x.DwnBin5Max; - DwnBin5Mean = x.DwnBin5Mean; - DwnBin5StDev = x.DwnBin5StdDev; - DwnBin6Min = x.DwnBin6Min; - DwnBin6Max = x.DwnBin6Max; - DwnBin6Mean = x.DwnBin6Mean; - DwnBin6StDev = x.DwnBin6StdDev; - DwnBin7Min = x.DwnBin7Min; - DwnBin7Max = x.DwnBin7Max; - DwnBin7Mean = x.DwnBin7Mean; - DwnBin7StDev = x.DwnBin7StdDev; - DwnBin8Min = x.DwnBin8Min; - DwnBin8Max = x.DwnBin8Max; - DwnBin8Mean = x.DwnBin8Mean; - DwnBin8StDev = x.DwnBin8StdDev; - DnnAllMin = x.DnnAllMin; - DnnAllMax = x.DnnAllMax; - DnnAllMean = x.DnnAllMean; - DnnAllStDev = x.DnnAllStdDev; - DnnLpdMin = x.DnnLpdMin; - DnnLpdMax = x.DnnLpdMax; - DnnLpdMean = x.DnnLpdMean; - DnnLpdStDev = x.DnnLpdStdDev; - DnnLpdNMin = x.DnnLpdNMin; - DnnLpdNMax = x.DnnLpdNMax; - DnnLpdNMean = x.DnnLpdNMean; - DnnLpdNStDev = x.DnnLpdNStdDev; - DnnLpdESMin = x.DnnLpdESMin; - DnnLpdESMax = x.DnnLpdESMax; - DnnLpdESMean = x.DnnLpdESMean; - DnnLpdESStDev = x.DnnLpdESStdDev; - DnnMicroScrMin = x.DnnMicroScrMin; - DnnMicroScrMax = x.DnnMicroScrMax; - DnnMicroScrMean = x.DnnMicroScrMean; - DnnMicroScrStDev = x.DnnMicroScrStdDev; - DnnScrMin = x.DnnScrMin; - DnnScrMax = x.DnnScrMax; - DnnScrMean = x.DnnScrMean; - DnnScrStDev = x.DnnScrStdDev; - DnnSlipMin = x.DnnSlipMin; - DnnSlipMax = x.DnnSlipMax; - DnnSlipMean = x.DnnSlipMean; - DnnSlipStDev = x.DnnSlipStdDev; - DnnAreaCntMin = x.DnnAreaCountMin; - DnnAreaCntMax = x.DnnAreaCountMax; - DnnAreaCntMean = x.DnnAreaCountMean; - DnnAreaCntStDev = x.DnnAreaCountStdDev; - DnnAreaMin = x.DnnAreaMin; - DnnAreaMax = x.DnnAreaMax; - DnnAreaMean = x.DnnAreaMean; - DnnAreaStDev = x.DnnAreaStdDev; - 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; - DnnBin1Min = x.DnnBin1Min; - DnnBin1Max = x.DnnBin1Max; - DnnBin1Mean = x.DnnBin1Mean; - DnnBin1StDev = x.DnnBin1StdDev; - DnnBin2Min = x.DnnBin2Min; - DnnBin2Max = x.DnnBin2Max; - DnnBin2Mean = x.DnnBin2Mean; - DnnBin2StDev = x.DnnBin2StdDev; - DnnBin3Min = x.DnnBin3Min; - DnnBin3Max = x.DnnBin3Max; - DnnBin3Mean = x.DnnBin3Mean; - DnnBin3StDev = x.DnnBin3StdDev; - DnnBin4Min = x.DnnBin4Min; - DnnBin4Max = x.DnnBin4Max; - DnnBin4Mean = x.DnnBin4Mean; - DnnBin4StDev = x.DnnBin4StdDev; - DnnBin5Min = x.DnnBin5Min; - DnnBin5Max = x.DnnBin5Max; - DnnBin5Mean = x.DnnBin5Mean; - DnnBin5StDev = x.DnnBin5StdDev; - DnnBin6Min = x.DnnBin6Min; - DnnBin6Max = x.DnnBin6Max; - DnnBin6Mean = x.DnnBin6Mean; - DnnBin6StDev = x.DnnBin6StdDev; - DnnBin7Min = x.DnnBin7Min; - DnnBin7Max = x.DnnBin7Max; - DnnBin7Mean = x.DnnBin7Mean; - DnnBin7StDev = x.DnnBin7StdDev; - DnnBin8Min = x.DnnBin8Min; - DnnBin8Max = x.DnnBin8Max; - DnnBin8Mean = x.DnnBin8Mean; - DnnBin8StDev = x.DnnBin8StdDev; - RDS = x.RDS; - PSN = x.PSN; - Recipe = x.Recipe; - Operator = x.Employee; - } - DataFile dataFile; - foreach (FileRead.Description description in descriptions) - { - dataFile = new DataFile - { - Grade = description.Grade, - HeaderUniqueID = description.HeaderUniqueId, - Side = description.Side, - SrcDest = description.SrcDest, - UniqueID = description.UniqueId, - WaferID = description.WaferID, - Data = "*Data*", - DcnAll = description.DcnAll, - DcnArea = description.DcnArea, - DcnAreaCount = description.DcnAreaCount, - DcnBin1 = description.DcnBin1, - DcnBin2 = description.DcnBin2, - DcnBin3 = description.DcnBin3, - DcnBin4 = description.DcnBin4, - DcnBin5 = description.DcnBin5, - DcnBin6 = description.DcnBin6, - DcnBin7 = description.DcnBin7, - DcnBin8 = description.DcnBin8, - DcnHazeAvg = description.DcnHazeAvg, - DcnHazeMedian = description.DcnHazeMedian, - DcnHazeStdDev = description.DcnHazeStdDev, - DcnLpd = description.DcnLpd, - DcnLpdES = description.DcnLpdES, - DcnLpdN = description.DcnLpdN, - DcnMicroScr = description.DcnMicroScr, - DcnScr = description.DcnScr, - DcnSlip = description.DcnSlip, - DnnAll = description.DnnAll, - DnnArea = description.DnnArea, - DnnAreaCount = description.DnnAreaCount, - DnnBin1 = description.DnnBin1, - DnnBin2 = description.DnnBin2, - DnnBin3 = description.DnnBin3, - DnnBin4 = description.DnnBin4, - DnnBin5 = description.DnnBin5, - DnnBin6 = description.DnnBin6, - DnnBin7 = description.DnnBin7, - DnnBin8 = description.DnnBin8, - DnnHazeAvg = description.DnnHazeAvg, - DnnHazeMedian = description.DnnHazeMedian, - DnnHazeStdDev = description.DnnHazeStdDev, - DnnLpd = description.DnnLpd, - DnnLpdES = description.DnnLpdES, - DnnLpdN = description.DnnLpdN, - DnnMicroScr = description.DnnMicroScr, - DnnScr = description.DnnScr, - DnnSlip = description.DnnSlip, - DwnAll = description.DwnAll, - DwnArea = description.DwnArea, - DwnAreaCount = description.DwnAreaCount, - DwnBin1 = description.DwnBin1, - DwnBin2 = description.DwnBin2, - DwnBin3 = description.DwnBin3, - DwnBin4 = description.DwnBin4, - DwnBin5 = description.DwnBin5, - DwnBin6 = description.DwnBin6, - DwnBin7 = description.DwnBin7, - DwnBin8 = description.DwnBin8, - DwnHazeAvg = description.DwnHazeAvg, - DwnHazeMedian = description.DwnHazeMedian, - DwnHazeStdDev = description.DwnHazeStdDev, - DwnLpd = description.DwnLpd, - DwnLpdES = description.DwnLpdES, - DwnLpdN = description.DwnLpdN, - DwnMicroScr = description.DwnMicroScr, - DwnScr = description.DwnScr, - DwnSlip = description.DwnSlip - }; - Details.Add(dataFile); - } - Date = logic.Logistics.DateTimeFromSequence.ToString(); - if (UniqueID is null && Details.Any()) - UniqueID = Details[0].HeaderUniqueID; - } - - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Helpers/ProcessData.WaferSummaryInfo.cs b/Adaptation/Helpers/ProcessData.WaferSummaryInfo.cs deleted file mode 100644 index 6c7fb12..0000000 --- a/Adaptation/Helpers/ProcessData.WaferSummaryInfo.cs +++ /dev/null @@ -1,38 +0,0 @@ -namespace Adaptation.Helpers -{ - - public partial class ProcessData - { - public class WaferSummaryInfo - { - - public string All { get; set; } - public string Area { get; set; } - public string AreaNum { get; set; } - public string Bin1 { get; set; } - public string Bin2 { get; set; } - public string Bin3 { get; set; } - public string Bin4 { get; set; } - public string Bin5 { get; set; } - public string Bin6 { get; set; } - public string Bin7 { get; set; } - public string Bin8 { get; set; } - public string Grade { get; set; } - public string HazeAvg { get; set; } - public string HazeMedian { get; set; } - public string HazeStdDev { get; set; } - public string Lpd { get; set; } - public string LpdES { get; set; } - public string LpdN { get; set; } - public string MicroScr { get; set; } - public string Scr { get; set; } - public string Side { get; set; } - public string Slip { get; set; } - public string SrcDest { get; set; } - public string WaferID { get; set; } - - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Helpers/ProcessData.cs b/Adaptation/Helpers/ProcessData.cs deleted file mode 100644 index cff2453..0000000 --- a/Adaptation/Helpers/ProcessData.cs +++ /dev/null @@ -1,819 +0,0 @@ -using Adaptation.Shared; -using Adaptation.Shared.Metrology; -using log4net; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Text; -using System.Text.Json; -using System.Text.RegularExpressions; - -namespace Adaptation.Helpers -{ - - public partial class ProcessData : IProcessData - { - - public HeaderFile Header { get; private set; } - public List Details { get; private set; } - - private int _I; - private readonly ILog _Log; - private string _Data; - - public ProcessData(ILogic logic, ConfigData configData, List fileInfoCollection) - { - Header = null; - fileInfoCollection.Clear(); - _I = 0; - _Data = string.Empty; - _Log = LogManager.GetLogger(typeof(ProcessData)); - Details = new List(); - Tuple> tuple = Parse(logic, fileInfoCollection); - Details.AddRange(tuple.Item2); - Header = tuple.Item1; - } - - public Tuple> GetResults(ILogic logic, ConfigDataBase configDataBase, List fileInfoCollection) - { - Tuple> results; - if (!(configDataBase is ConfigData configData)) - throw new Exception(); - List tests = new List(); - List descriptions; - EventName eventName = configData.GetEventNameValue(); - if (eventName == EventName.FileRead && Details.Any()) - { - foreach (var item in Details) - tests.Add(Test.SP1); - descriptions = configData.GetDescription(logic, tests, this); - } - else - throw new Exception(); - if (!configData.EafHosted) - { - new FileRead.Description().GetDescription(logic, configData, tests, this); - } - if (tests.Count != descriptions.Count) - throw new Exception(); - for (int i = 0; i < tests.Count; i++) - { - if (descriptions[i].Test != (int)tests[i]) - throw new Exception(); - } - string json; - if (descriptions[0] is Duplicator.Description) - { - List duplicatorDescriptions = (from l in descriptions select (Duplicator.Description)l).ToList(); - json = JsonSerializer.Serialize(duplicatorDescriptions, duplicatorDescriptions.GetType()); - } - else if (descriptions[0] is FileRead.Description) - { - List fileReadDescriptions = (from l in descriptions select (FileRead.Description)l).ToList(); - json = JsonSerializer.Serialize(fileReadDescriptions, fileReadDescriptions.GetType()); - } - else - throw new Exception(); - object @object = JsonSerializer.Deserialize(json); - if (!(@object is JsonElement jsonElement)) - throw new Exception(); - results = new Tuple>(logic.Logistics.Logistics1[0], jsonElement, fileInfoCollection); - return results; - } - - public static Dictionary> GetKeyValuePairs(ConfigData configData, JsonElement jsonElement, List processDataDescriptions, bool extra = false) - { - Dictionary> results = configData.GetKeyValuePairs(processDataDescriptions); - configData.CheckProcessDataDescription(results, extra); - return results; - } - - public static List GetProcessDataFileReadDescriptions(ConfigData configData, JsonElement jsonElement) - { - List results = new List(); - List processDataDescriptions = configData.GetIProcessDataDescriptions(jsonElement); - foreach (IProcessDataDescription processDataDescription in processDataDescriptions) - { - if (!(processDataDescription is FileRead.Description description)) - continue; - results.Add(description); - } - return results; - } - - public static Tuple GetLines(ILogic logic, List descriptions) - { - char del = '\t'; - StringBuilder result = new StringBuilder(); - FileRead.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(logic.Logistics.MesEntity).Append(del). // 043 - - Append(x.DcnAreaMean).Append(del). // 044 - DCN MM2 - AppendLine(); - return new Tuple(result.ToString(), x.Date); - } - - internal static void PostOpenInsightMetrologyViewerAttachments(ILog log, ConfigData configData, Logistics logistics, DateTime dateTime, string logisticsSequenceMemoryDirectory, List descriptions, string matchDirectory) - { - string[] summaryFiles = Directory.GetFiles(matchDirectory, "*.txt", SearchOption.TopDirectoryOnly); - if (summaryFiles.Length != 1) - throw new Exception("Invalid summary file count!"); - string wsResultsMemoryFile = string.Concat(logisticsSequenceMemoryDirectory, @"\", nameof(WS.Results), ".json"); - if (!File.Exists(wsResultsMemoryFile)) - throw new Exception(string.Concat("Memory file <", wsResultsMemoryFile, "> doesn't exist!")); - string json = File.ReadAllText(wsResultsMemoryFile); - WS.Results metrologyWSRequest = JsonSerializer.Deserialize(json); - long wsResultsHeaderID = metrologyWSRequest.HeaderID; - string[] prnFiles = Directory.GetFiles(matchDirectory, "WaferMap*.prn", SearchOption.TopDirectoryOnly); - if (prnFiles.Length == 0 || prnFiles.Length != descriptions.Count) - log.Debug("Invalid WaferMap*.prn file count!"); - List pdfFiles = new List(); - foreach (string prnFile in prnFiles.OrderBy(l => l)) - pdfFiles.Add(ConvertSourceFileToPdf(configData, prnFile)); - if (pdfFiles.Count == 0 || pdfFiles.Count != descriptions.Count) - log.Debug("Invalid *.pdf file count!"); - List dataAttachments = new List(); - List headerAttachments = new List { new WS.Attachment(descriptions[0].HeaderUniqueId, "Data.txt", summaryFiles[0]) }; - int count; - if (pdfFiles.Count < descriptions.Count) - count = pdfFiles.Count; - else - count = descriptions.Count; - for (int i = 0; i < count; i++) - { - if (!string.IsNullOrEmpty(pdfFiles[i])) - dataAttachments.Add(new WS.Attachment(descriptions[i].UniqueId, "Image.pdf", pdfFiles[i])); - } - if (dataAttachments.Count == 0 || dataAttachments.Count != descriptions.Count) - log.Debug("Invalid attachment count!"); - WS.AttachFiles(configData.OpenInsightMetrogyViewerAPI, wsResultsHeaderID, headerAttachments, dataAttachments); - } - - private void ScanPast(string text) - { - int num = _Data.IndexOf(text, _I); - if (num > -1) - _I = num + text.Length; - else - _I = _Data.Length; - } - - private string GetBefore(string text) - { - int num = _Data.IndexOf(text, _I); - if (num > -1) - { - string str = _Data.Substring(_I, num - _I); - _I = num + text.Length; - return str.Trim(); - } - string str1 = _Data.Substring(_I); - _I = _Data.Length; - return str1.Trim(); - } - - private string GetBefore(string text, bool trim) - { - if (trim) - return GetBefore(text); - int num = _Data.IndexOf(text, _I); - if (num > -1) - { - string str = _Data.Substring(_I, num - _I); - _I = num + text.Length; - return str; - } - string str1 = _Data.Substring(_I); - _I = _Data.Length; - return str1; - } - - private bool IsNullOrWhiteSpace(string text) - { - for (int index = 0; index < text.Length; ++index) - { - if (!char.IsWhiteSpace(text[index])) - return false; - } - return true; - } - - private bool IsBlankLine() - { - int num = _Data.IndexOf("\n", _I); - return IsNullOrWhiteSpace(num > -1 ? _Data.Substring(_I, num - _I) : _Data.Substring(_I)); - } - - private string GetToEOL() - { - return GetBefore("\n"); - } - - private string GetToEOL(bool trim) - { - if (trim) - return GetToEOL(); - return GetBefore("\n", false); - } - - private string GetToText(string text) - { - return _Data.Substring(_I, _Data.IndexOf(text, _I) - _I).Trim(); - } - - private string GetToken() - { - while (_I < _Data.Length && IsNullOrWhiteSpace(_Data.Substring(_I, 1))) - ++_I; - int j = _I; - while (j < _Data.Length && !IsNullOrWhiteSpace(_Data.Substring(j, 1))) - ++j; - string str = _Data.Substring(_I, j - _I); - _I = j; - return str.Trim(); - } - - private string PeekNextLine() - { - int j = _I; - string toEol = GetToEOL(); - _I = j; - return toEol; - } - - private void GetWaferSummaryInfo(List waferSummaryInfos, string whichInfo) - { - ScanPast(whichInfo); - GetToEOL(); - GetToEOL(); - GetToEOL(); - GetToEOL(); - string[] segments; - WaferSummaryInfo waferSummaryInfo; - const string grade = "F Grade"; - const string rejct = "F Reject"; - const string overLoad = "F OverLoad"; - for (string line = PeekNextLine(); line[0] != '-'; line = PeekNextLine()) - { - line = GetToEOL(); - waferSummaryInfo = new WaferSummaryInfo(); - if (line.StartsWith(grade)) - line = line.Replace(grade, string.Concat("F -1", grade.Substring(4))); - else if (line.StartsWith(rejct)) - line = line.Replace(rejct, string.Concat("F -1", rejct.Substring(4))); - else if (line.StartsWith(overLoad)) - line = line.Replace(overLoad, string.Concat("F -1", overLoad.Substring(4))); - segments = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - waferSummaryInfo.Side = segments[0]; - waferSummaryInfo.WaferID = segments[1]; - waferSummaryInfo.Grade = segments[2]; - waferSummaryInfo.SrcDest = segments[3]; - if (segments.Length > 4) - { - waferSummaryInfo.Lpd = segments[5]; - waferSummaryInfo.LpdN = segments[6]; - waferSummaryInfo.LpdES = segments[7]; - waferSummaryInfo.MicroScr = segments[8]; - waferSummaryInfo.Scr = segments[9]; - waferSummaryInfo.Slip = segments[10]; - waferSummaryInfo.AreaNum = segments[11]; - waferSummaryInfo.Area = segments[12]; - waferSummaryInfo.HazeAvg = segments[13]; - waferSummaryInfo.HazeMedian = segments[14]; - waferSummaryInfo.HazeStdDev = segments[15]; - waferSummaryInfo.Bin1 = segments[16]; - waferSummaryInfo.Bin2 = segments[17]; - waferSummaryInfo.Bin3 = segments[18]; - waferSummaryInfo.Bin4 = segments[19]; - waferSummaryInfo.Bin5 = segments[20]; - waferSummaryInfo.Bin6 = segments[21]; - waferSummaryInfo.Bin7 = segments[22]; - waferSummaryInfo.Bin8 = segments[23]; - } - if (waferSummaryInfo.WaferID == "-1") - { - segments = waferSummaryInfo.SrcDest.Split('-')[0].Split('/'); - waferSummaryInfo.WaferID = segments[segments.Length - 1]; - } - waferSummaryInfos.Add(waferSummaryInfo); - } - } - - private HeaderFile ParseHeader(ILogic logic, List dcnTotals, List dwnTotals, List dnnTotals) - { - HeaderFile result = new HeaderFile { JobID = logic.Logistics.JobID, MesEntity = logic.Logistics.MesEntity, Date = DateTime.Now.ToString() }; - _I = 0; - _Data = string.Empty; - string h = string.Empty; - string summaryReportText = File.ReadAllText(logic.Logistics.ReportFullPath); - if (!string.IsNullOrEmpty(summaryReportText)) - { - _Log.Debug("HeaderFile() - Beginning"); - _I = 0; - _Data = summaryReportText; - ScanPast("Long Wafer Summary"); - GetToEOL(); - ScanPast("Session:"); - string toEOL = GetToEOL(true); - string str = toEOL; - result.Recipe = toEOL; - result.Session = str; - ScanPast("Lot ID:"); - result.Lot = GetToEOL(true); - // Remove illegal characters \/:*?"<>| found in the Lot. - result.Lot = Regex.Replace(result.Lot, @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]", "_").Split('\r')[0].Split('\n')[0]; - string[] segments = result.Lot.Split(new char[] { '-' }); - _Log.Debug("HeaderFile() - Debug A"); - if (segments.Length > 1) - { - result.Reactor = segments[0]; - result.RDS = segments[1]; - if (segments.Length > 2) - { - result.PSN = segments[2]; - if (segments.Length > 3) - result.Operator = segments[3]; - } - } - _Log.Debug("HeaderFile() - Debug B"); - _I = 0; - _Data = summaryReportText; - GetWaferSummaryInfo(dcnTotals, "DCN Totals"); - ScanPast("Min"); - segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - result.DcnAllMin = segments[0]; - result.DcnLpdMin = segments[1]; - result.DcnLpdNMin = segments[2]; - result.DcnLpdESMin = segments[3]; - result.DcnMicroScrMin = segments[4]; - result.DcnScrMin = segments[5]; - result.DcnSlipMin = segments[6]; - result.DcnAreaCountMin = segments[7]; - result.DcnAreaMin = segments[8]; - result.DcnHazeAvgMin = segments[9]; - result.DcnHazeMedianMin = segments[10]; - result.DcnHazeStdDevMin = segments[11]; - result.DcnBin1Min = segments[12]; - result.DcnBin2Min = segments[13]; - result.DcnBin3Min = segments[14]; - result.DcnBin4Min = segments[15]; - result.DcnBin5Min = segments[16]; - result.DcnBin6Min = segments[17]; - result.DcnBin7Min = segments[18]; - result.DcnBin8Min = segments[19]; - ScanPast("Max"); - segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - result.DcnAllMax = segments[0]; - result.DcnLpdMax = segments[1]; - result.DcnLpdNMax = segments[2]; - result.DcnLpdESMax = segments[3]; - result.DcnMicroScrMax = segments[4]; - result.DcnScrMax = segments[5]; - result.DcnSlipMax = segments[6]; - result.DcnAreaCountMax = segments[7]; - result.DcnAreaMax = segments[8]; - result.DcnHazeAvgMax = segments[9]; - result.DcnHazeMedianMax = segments[10]; - result.DcnHazeStdDevMax = segments[11]; - result.DcnBin1Max = segments[12]; - result.DcnBin2Max = segments[13]; - result.DcnBin3Max = segments[14]; - result.DcnBin4Max = segments[15]; - result.DcnBin5Max = segments[16]; - result.DcnBin6Max = segments[17]; - result.DcnBin7Max = segments[18]; - result.DcnBin8Max = segments[19]; - ScanPast("Mean"); - segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - result.DcnAllMean = segments[0]; - result.DcnLpdMean = segments[1]; - result.DcnLpdNMean = segments[2]; - result.DcnLpdESMean = segments[3]; - result.DcnMicroScrMean = segments[4]; - result.DcnScrMean = segments[5]; - result.DcnSlipMean = segments[6]; - result.DcnAreaCountMean = segments[7]; - result.DcnAreaMean = segments[8]; - result.DcnHazeAvgMean = segments[9]; - result.DcnHazeMedianMean = segments[10]; - result.DcnHazeStdDevMean = segments[11]; - result.DcnBin1Mean = segments[12]; - result.DcnBin2Mean = segments[13]; - result.DcnBin3Mean = segments[14]; - result.DcnBin4Mean = segments[15]; - result.DcnBin5Mean = segments[16]; - result.DcnBin6Mean = segments[17]; - result.DcnBin7Mean = segments[18]; - result.DcnBin8Mean = segments[19]; - ScanPast("Std. Dev."); - segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - result.DcnAllStdDev = segments[0]; - result.DcnLpdStdDev = segments[1]; - result.DcnLpdNStdDev = segments[2]; - result.DcnLpdESStdDev = segments[3]; - result.DcnMicroScrStdDev = segments[4]; - result.DcnScrStdDev = segments[5]; - result.DcnSlipStdDev = segments[6]; - result.DcnAreaCountStdDev = segments[7]; - result.DcnAreaStdDev = segments[8]; - result.DcnHazeAvgStdDev = segments[9]; - result.DcnHazeMedianStdDev = segments[10]; - result.DcnHazeStdDevStdDev = segments[11]; - result.DcnBin1StdDev = segments[12]; - result.DcnBin2StdDev = segments[13]; - result.DcnBin3StdDev = segments[14]; - result.DcnBin4StdDev = segments[15]; - result.DcnBin5StdDev = segments[16]; - result.DcnBin6StdDev = segments[17]; - result.DcnBin7StdDev = segments[18]; - result.DcnBin8StdDev = segments[19]; - _I = 0; - _Data = summaryReportText; - _Log.Debug("HeaderFile() - Debug C"); - if (!_Data.Contains("DWN Totals")) - { - foreach (WaferSummaryInfo dcnTotal in dcnTotals) - dwnTotals.Add(new WaferSummaryInfo()); - } - else - { - GetWaferSummaryInfo(dwnTotals, "DWN Totals"); - ScanPast("Min"); - segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - result.DwnAllMin = segments[0]; - result.DwnLpdMin = segments[1]; - result.DwnLpdNMin = segments[2]; - result.DwnLpdESMin = segments[3]; - result.DwnMicroScrMin = segments[4]; - result.DwnScrMin = segments[5]; - result.DwnSlipMin = segments[6]; - result.DwnAreaCountMin = segments[7]; - result.DwnAreaMin = segments[8]; - result.DwnHazeAvgMin = segments[9]; - result.DwnHazeMedianMin = segments[10]; - result.DwnHazeStdDevMin = segments[11]; - result.DwnBin1Min = segments[12]; - result.DwnBin2Min = segments[13]; - result.DwnBin3Min = segments[14]; - result.DwnBin4Min = segments[15]; - result.DwnBin5Min = segments[16]; - result.DwnBin6Min = segments[17]; - result.DwnBin7Min = segments[18]; - result.DwnBin8Min = segments[19]; - ScanPast("Max"); - segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - result.DwnAllMax = segments[0]; - result.DwnLpdMax = segments[1]; - result.DwnLpdNMax = segments[2]; - result.DwnLpdESMax = segments[3]; - result.DwnMicroScrMax = segments[4]; - result.DwnScrMax = segments[5]; - result.DwnSlipMax = segments[6]; - result.DwnAreaCountMax = segments[7]; - result.DwnAreaMax = segments[8]; - result.DwnHazeAvgMax = segments[9]; - result.DwnHazeMedianMax = segments[10]; - result.DwnHazeStdDevMax = segments[11]; - result.DwnBin1Max = segments[12]; - result.DwnBin2Max = segments[13]; - result.DwnBin3Max = segments[14]; - result.DwnBin4Max = segments[15]; - result.DwnBin5Max = segments[16]; - result.DwnBin6Max = segments[17]; - result.DwnBin7Max = segments[18]; - result.DwnBin8Max = segments[19]; - ScanPast("Mean"); - segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - result.DwnAllMean = segments[0]; - result.DwnLpdMean = segments[1]; - result.DwnLpdNMean = segments[2]; - result.DwnLpdESMean = segments[3]; - result.DwnMicroScrMean = segments[4]; - result.DwnScrMean = segments[5]; - result.DwnSlipMean = segments[6]; - result.DwnAreaCountMean = segments[7]; - result.DwnAreaMean = segments[8]; - result.DwnHazeAvgMean = segments[9]; - result.DwnHazeMedianMean = segments[10]; - result.DwnHazeStdDevMean = segments[11]; - result.DwnBin1Mean = segments[12]; - result.DwnBin2Mean = segments[13]; - result.DwnBin3Mean = segments[14]; - result.DwnBin4Mean = segments[15]; - result.DwnBin5Mean = segments[16]; - result.DwnBin6Mean = segments[17]; - result.DwnBin7Mean = segments[18]; - result.DwnBin8Mean = segments[19]; - ScanPast("Std. Dev."); - segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - result.DwnAllStdDev = segments[0]; - result.DwnLpdStdDev = segments[1]; - result.DwnLpdNStdDev = segments[2]; - result.DwnLpdESStdDev = segments[3]; - result.DwnMicroScrStdDev = segments[4]; - result.DwnScrStdDev = segments[5]; - result.DwnSlipStdDev = segments[6]; - result.DwnAreaCountStdDev = segments[7]; - result.DwnAreaStdDev = segments[8]; - result.DwnHazeAvgStdDev = segments[9]; - result.DwnHazeMedianStdDev = segments[10]; - result.DwnHazeStdDevStdDev = segments[11]; - result.DwnBin1StdDev = segments[12]; - result.DwnBin2StdDev = segments[13]; - result.DwnBin3StdDev = segments[14]; - result.DwnBin4StdDev = segments[15]; - result.DwnBin5StdDev = segments[16]; - result.DwnBin6StdDev = segments[17]; - result.DwnBin7StdDev = segments[18]; - result.DwnBin8StdDev = segments[19]; - } - _I = 0; - _Data = summaryReportText; - _Log.Debug("HeaderFile() - Debug D"); - if (!_Data.Contains("DNN Totals")) - { - foreach (WaferSummaryInfo waferSummaryInfo in dcnTotals) - dnnTotals.Add(new WaferSummaryInfo()); - } - else - { - GetWaferSummaryInfo(dnnTotals, "DNN Totals"); - ScanPast("Min"); - segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - result.DnnAllMin = segments[0]; - result.DnnLpdMin = segments[1]; - result.DnnLpdNMin = segments[2]; - result.DnnLpdESMin = segments[3]; - result.DnnMicroScrMin = segments[4]; - result.DnnScrMin = segments[5]; - result.DnnSlipMin = segments[6]; - result.DnnAreaCountMin = segments[7]; - result.DnnAreaMin = segments[8]; - result.DnnHazeAvgMin = segments[9]; - result.DnnHazeMedianMin = segments[10]; - result.DnnHazeStdDevMin = segments[11]; - result.DnnBin1Min = segments[12]; - result.DnnBin2Min = segments[13]; - result.DnnBin3Min = segments[14]; - result.DnnBin4Min = segments[15]; - result.DnnBin5Min = segments[16]; - result.DnnBin6Min = segments[17]; - result.DnnBin7Min = segments[18]; - result.DnnBin8Min = segments[19]; - ScanPast("Max"); - segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - result.DnnAllMax = segments[0]; - result.DnnLpdMax = segments[1]; - result.DnnLpdNMax = segments[2]; - result.DnnLpdESMax = segments[3]; - result.DnnMicroScrMax = segments[4]; - result.DnnScrMax = segments[5]; - result.DnnSlipMax = segments[6]; - result.DnnAreaCountMax = segments[7]; - result.DnnAreaMax = segments[8]; - result.DnnHazeAvgMax = segments[9]; - result.DnnHazeMedianMax = segments[10]; - result.DnnHazeStdDevMax = segments[11]; - result.DnnBin1Max = segments[12]; - result.DnnBin2Max = segments[13]; - result.DnnBin3Max = segments[14]; - result.DnnBin4Max = segments[15]; - result.DnnBin5Max = segments[16]; - result.DnnBin6Max = segments[17]; - result.DnnBin7Max = segments[18]; - result.DnnBin8Max = segments[19]; - ScanPast("Mean"); - segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - result.DnnAllMean = segments[0]; - result.DnnLpdMean = segments[1]; - result.DnnLpdNMean = segments[2]; - result.DnnLpdESMean = segments[3]; - result.DnnMicroScrMean = segments[4]; - result.DnnScrMean = segments[5]; - result.DnnSlipMean = segments[6]; - result.DnnAreaCountMean = segments[7]; - result.DnnAreaMean = segments[8]; - result.DnnHazeAvgMean = segments[9]; - result.DnnHazeMedianMean = segments[10]; - result.DnnHazeStdDevMean = segments[11]; - result.DnnBin1Mean = segments[12]; - result.DnnBin2Mean = segments[13]; - result.DnnBin3Mean = segments[14]; - result.DnnBin4Mean = segments[15]; - result.DnnBin5Mean = segments[16]; - result.DnnBin6Mean = segments[17]; - result.DnnBin7Mean = segments[18]; - result.DnnBin8Mean = segments[19]; - ScanPast("Std. Dev."); - segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - result.DnnAllStdDev = segments[0]; - result.DnnLpdStdDev = segments[1]; - result.DnnLpdNStdDev = segments[2]; - result.DnnLpdESStdDev = segments[3]; - result.DnnMicroScrStdDev = segments[4]; - result.DnnScrStdDev = segments[5]; - result.DnnSlipStdDev = segments[6]; - result.DnnAreaCountStdDev = segments[7]; - result.DnnAreaStdDev = segments[8]; - result.DnnHazeAvgStdDev = segments[9]; - result.DnnHazeMedianStdDev = segments[10]; - result.DnnHazeStdDevStdDev = segments[11]; - result.DnnBin1StdDev = segments[12]; - result.DnnBin2StdDev = segments[13]; - result.DnnBin3StdDev = segments[14]; - result.DnnBin4StdDev = segments[15]; - result.DnnBin5StdDev = segments[16]; - result.DnnBin6StdDev = segments[17]; - result.DnnBin7StdDev = segments[18]; - result.DnnBin8StdDev = segments[19]; - } - } - //result.UniqueID = string.Format("{0}_{1}_Summary_{2}", logic.Logistics.JobID, result.Lot, result.Date); - result.UniqueID = string.Format("{0}_{1}_{2}", logic.Logistics.JobID, result.Lot, Path.GetFileNameWithoutExtension(logic.Logistics.ReportFullPath)); - return result; - } - - /// - /// Parse the wafer summary data - /// - /// wafer data - /// wafer index - /// - private DataFile ParseWaferSummary(HeaderFile headerFile, int i, List dcnTotals, List dwnTotals, List dnnTotals) - { - DataFile result = new DataFile() - { - // NOTE: get the UniqueID during DataCalculation in order to retrieve the SPCToolID from the cell component Tag field. - // id - //runData.UniqueID = string.Format("{0}_{1}", sp1Header.UniqueId, i + 1); - //runData.HeaderUniqueID = sp1Header.UniqueId; - - // General Wafer Info - Side = dcnTotals[i].Side, - WaferID = dcnTotals[i].WaferID, - Grade = dcnTotals[i].Grade, - SrcDest = dcnTotals[i].SrcDest, - - // Dcn Info - DcnAll = dcnTotals[i].All ?? string.Empty, - DcnLpd = dcnTotals[i].Lpd ?? string.Empty, - DcnLpdN = dcnTotals[i].LpdN ?? string.Empty, - DcnLpdES = dcnTotals[i].LpdES ?? string.Empty, - DcnMicroScr = dcnTotals[i].MicroScr ?? string.Empty, - DcnScr = dcnTotals[i].Scr ?? string.Empty, - DcnSlip = dcnTotals[i].Slip ?? string.Empty, - DcnAreaCount = dcnTotals[i].AreaNum ?? string.Empty, - DcnArea = dcnTotals[i].Area ?? string.Empty, - DcnHazeAvg = dcnTotals[i].HazeAvg ?? string.Empty, - DcnHazeMedian = dcnTotals[i].HazeMedian ?? string.Empty, - DcnHazeStdDev = dcnTotals[i].HazeStdDev ?? string.Empty, - DcnBin1 = dcnTotals[i].Bin1 ?? string.Empty, - DcnBin2 = dcnTotals[i].Bin2 ?? string.Empty, - DcnBin3 = dcnTotals[i].Bin3 ?? string.Empty, - DcnBin4 = dcnTotals[i].Bin4 ?? string.Empty, - DcnBin5 = dcnTotals[i].Bin5 ?? string.Empty, - DcnBin6 = dcnTotals[i].Bin6 ?? string.Empty, - DcnBin7 = dcnTotals[i].Bin7 ?? string.Empty, - DcnBin8 = dcnTotals[i].Bin8 ?? string.Empty, - - // Dwn Info - DwnAll = dwnTotals[i].All ?? string.Empty, - DwnLpd = dwnTotals[i].Lpd ?? string.Empty, - DwnLpdN = dwnTotals[i].LpdN ?? string.Empty, - DwnLpdES = dwnTotals[i].LpdES ?? string.Empty, - DwnMicroScr = dwnTotals[i].MicroScr ?? string.Empty, - DwnScr = dwnTotals[i].Scr ?? string.Empty, - DwnSlip = dwnTotals[i].Slip ?? string.Empty, - DwnAreaCount = dwnTotals[i].AreaNum ?? string.Empty, - DwnArea = dwnTotals[i].Area ?? string.Empty, - DwnHazeAvg = dwnTotals[i].HazeAvg ?? string.Empty, - DwnHazeMedian = dwnTotals[i].HazeMedian ?? string.Empty, - DwnHazeStdDev = dwnTotals[i].HazeStdDev ?? string.Empty, - DwnBin1 = dwnTotals[i].Bin1 ?? string.Empty, - DwnBin2 = dwnTotals[i].Bin2 ?? string.Empty, - DwnBin3 = dwnTotals[i].Bin3 ?? string.Empty, - DwnBin4 = dwnTotals[i].Bin4 ?? string.Empty, - DwnBin5 = dwnTotals[i].Bin5 ?? string.Empty, - DwnBin6 = dwnTotals[i].Bin6 ?? string.Empty, - DwnBin7 = dwnTotals[i].Bin7 ?? string.Empty, - DwnBin8 = dwnTotals[i].Bin8 ?? string.Empty, - - // Dnn Info - DnnAll = dnnTotals[i].All ?? string.Empty, - DnnLpd = dnnTotals[i].Lpd ?? string.Empty, - DnnLpdN = dnnTotals[i].LpdN ?? string.Empty, - DnnLpdES = dnnTotals[i].LpdES ?? string.Empty, - DnnMicroScr = dnnTotals[i].MicroScr ?? string.Empty, - DnnScr = dnnTotals[i].Scr ?? string.Empty, - DnnSlip = dnnTotals[i].Slip ?? string.Empty, - DnnAreaCount = dnnTotals[i].AreaNum ?? string.Empty, - DnnArea = dnnTotals[i].Area ?? string.Empty, - DnnHazeAvg = dnnTotals[i].HazeAvg ?? string.Empty, - DnnHazeMedian = dnnTotals[i].HazeMedian ?? string.Empty, - DnnHazeStdDev = dnnTotals[i].HazeStdDev ?? string.Empty, - DnnBin1 = dnnTotals[i].Bin1 ?? string.Empty, - DnnBin2 = dnnTotals[i].Bin2 ?? string.Empty, - DnnBin3 = dnnTotals[i].Bin3 ?? string.Empty, - DnnBin4 = dnnTotals[i].Bin4 ?? string.Empty, - DnnBin5 = dnnTotals[i].Bin5 ?? string.Empty, - DnnBin6 = dnnTotals[i].Bin6 ?? string.Empty, - DnnBin7 = dnnTotals[i].Bin7 ?? string.Empty, - DnnBin8 = dnnTotals[i].Bin8 ?? string.Empty - }; - //result.HeaderUniqueID = string.Concat(headerFile.MesEntity, "_", headerFile.Lot, "_Summary_", headerFile.Date); - result.HeaderUniqueID = headerFile.UniqueID; - result.UniqueID = string.Concat(result.HeaderUniqueID, "_", result.WaferID.PadLeft(2, '0')); - return result; - } - - /// - /// Convert the raw data file to parsable file format - in this case from PRN to PDF - /// - /// source file to be converted to PDF - /// - private static string ConvertSourceFileToPdf(ConfigData configData, string sourceFile) - { - string result = Path.ChangeExtension(sourceFile, ".pdf"); - if (!File.Exists(result)) - { - //string arguments = string.Concat("-i \"", sourceFile, "\" -o \"", result, "\""); - string arguments = string.Concat("-dSAFER -dBATCH -dNOPAUSE -sOutputFile=\"", result, "\" -sDEVICE=pdfwrite \"", sourceFile, "\""); - //Process process = Process.Start(configData.LincPDFCFileName, arguments); - Process process = Process.Start(configData.GhostPCLFileName, arguments); - process.WaitForExit(30000); - if (!File.Exists(result)) - throw new Exception("PDF file wasn't created"); - } - return result; - } - - private Tuple> Parse(ILogic logic, List fileInfoCollection) - { - Tuple> result; - DataFile dataFile; - HeaderFile headerFile; - foreach (string file in Directory.GetFiles(Path.GetDirectoryName(logic.Logistics.ReportFullPath), "WaferMap*.prn", SearchOption.TopDirectoryOnly)) - fileInfoCollection.Add(new FileInfo(file)); - List dcnTotals = new List(); - List dwnTotals = new List(); - List dnnTotals = new List(); - headerFile = ParseHeader(logic, dcnTotals, dwnTotals, dnnTotals); - List details = new List(); - _Log.Debug($"Number of wafers: {dcnTotals.Count}"); - for (int i = 0; i < dcnTotals.Count; i++) - { - _Log.Debug($"****ParseData - Parsing wafer summary: {i}"); - dataFile = ParseWaferSummary(headerFile, i, dcnTotals, dwnTotals, dnnTotals); - details.Add(dataFile); - } - fileInfoCollection.Add(new FileInfo(logic.Logistics.ReportFullPath)); - result = new Tuple>(headerFile, details); - return result; - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs b/Adaptation/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs index b6cb4b8..8cf469f 100644 --- a/Adaptation/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs +++ b/Adaptation/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs @@ -1,13 +1,17 @@ -namespace Adaptation.Ifx.Eaf.Common.Configuration -{ - [System.Runtime.Serialization.DataContractAttribute] - public class ConnectionSetting - { - public ConnectionSetting(string name, string value) { } +namespace Adaptation.Ifx.Eaf.Common.Configuration; + +[System.Runtime.Serialization.DataContractAttribute] +public class ConnectionSetting +{ + +#pragma warning disable CA2254 +#pragma warning disable IDE0060 + + public ConnectionSetting(string name, string value) { } + + [System.Runtime.Serialization.DataMemberAttribute] + public string Name { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string Value { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string Name { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string Value { get; set; } - } } \ No newline at end of file diff --git a/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/File.cs b/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/File.cs index 4726692..1e5d6eb 100644 --- a/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/File.cs +++ b/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/File.cs @@ -1,19 +1,23 @@ using System; using System.Collections.Generic; -namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.Component +namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.Component; + +public class File { - public class File - { - public File(string filePath) { throw new NotImplementedException(); } - public File(string filePath, DateTime timeFileFound) { throw new NotImplementedException(); } - public string Path { get; } - public DateTime TimeFound { get; } - public bool IsErrorFile { get; } - public Dictionary ContentParameters { get; } +#pragma warning disable CA2254 +#pragma warning disable IDE0060 + + public File(string filePath) => throw new NotImplementedException(); + public File(string filePath, DateTime timeFileFound) => throw new NotImplementedException(); + + public string Path { get; } + public DateTime TimeFound { get; } + public bool IsErrorFile { get; } + public Dictionary ContentParameters { get; } + + public File UpdateContentParameters(Dictionary contentParameters) => throw new NotImplementedException(); + public File UpdateParsingStatus(bool isErrorFile) => throw new NotImplementedException(); - public File UpdateContentParameters(Dictionary contentParameters) { throw new NotImplementedException(); } - public File UpdateParsingStatus(bool isErrorFile) { throw new NotImplementedException(); } - } } \ No newline at end of file diff --git a/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/FilePathGenerator.cs b/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/FilePathGenerator.cs index 561725e..5ab689e 100644 --- a/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/FilePathGenerator.cs +++ b/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/FilePathGenerator.cs @@ -2,34 +2,39 @@ using System; using System.Collections.Generic; -namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.Component +namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.Component; + +public class FilePathGenerator { - public class FilePathGenerator - { - public const char PLACEHOLDER_IDENTIFIER = '%'; - public const char PLACEHOLDER_SEPARATOR = ':'; - public const string PLACEHOLDER_NOT_AVAILABLE = "NA"; - public const string PLACEHOLDER_ORIGINAL_FILE_NAME = "OriginalFileName"; - public const string PLACEHOLDER_ORIGINAL_FILE_EXTENSION = "OriginalFileExtension"; - public const string PLACEHOLDER_DATE_TIME = "DateTime"; - public const string PLACEHOLDER_SUB_FOLDER = "SubFolder"; - public const string PLACEHOLDER_CELL_NAME = "CellName"; - public FilePathGenerator(FileConnectorConfiguration config, Dictionary customPattern = null) { throw new NotImplementedException(); } - public FilePathGenerator(FileConnectorConfiguration config, File file, bool isErrorFile = false, Dictionary customPattern = null) { throw new NotImplementedException(); } - public FilePathGenerator(FileConnectorConfiguration config, string sourceFilePath, bool isErrorFile = false, Dictionary customPattern = null) { throw new NotImplementedException(); } +#pragma warning disable CA1822 +#pragma warning disable CA2254 +#pragma warning disable IDE0060 - protected string SubFolderPath { get; } - protected FileConnectorConfiguration Configuration { get; } - protected File File { get; } - protected bool IsErrorFile { get; } - protected string DefaultPlaceHolderValue { get; } + public const char PLACEHOLDER_IDENTIFIER = '%'; + public const char PLACEHOLDER_SEPARATOR = ':'; + public const string PLACEHOLDER_NOT_AVAILABLE = "NA"; + public const string PLACEHOLDER_ORIGINAL_FILE_NAME = "OriginalFileName"; + public const string PLACEHOLDER_ORIGINAL_FILE_EXTENSION = "OriginalFileExtension"; + public const string PLACEHOLDER_DATE_TIME = "DateTime"; + public const string PLACEHOLDER_SUB_FOLDER = "SubFolder"; + public const string PLACEHOLDER_CELL_NAME = "CellName"; + + public FilePathGenerator(FileConnectorConfiguration config, Dictionary customPattern = null) => throw new NotImplementedException(); + public FilePathGenerator(FileConnectorConfiguration config, File file, bool isErrorFile = false, Dictionary customPattern = null) => throw new NotImplementedException(); + public FilePathGenerator(FileConnectorConfiguration config, string sourceFilePath, bool isErrorFile = false, Dictionary customPattern = null) => throw new NotImplementedException(); + + protected string SubFolderPath { get; } + protected FileConnectorConfiguration Configuration { get; } + protected File File { get; } + protected bool IsErrorFile { get; } + protected string DefaultPlaceHolderValue { get; } + + public string GetFullTargetPath() => throw new NotImplementedException(); + public virtual string GetTargetFileName() => throw new NotImplementedException(); + public string GetTargetFolder(bool throwExceptionIfNotExist = true) => throw new NotImplementedException(); + protected virtual string GetSubFolder(string folderPattern, string subFolderPath) => throw new NotImplementedException(); + protected virtual string PrepareFolderPath(string targetFolderPath, string subFolderPath) => throw new NotImplementedException(); + protected string ReplacePlaceholder(string inputPath) => throw new NotImplementedException(); - public string GetFullTargetPath() { throw new NotImplementedException(); } - public virtual string GetTargetFileName() { throw new NotImplementedException(); } - public string GetTargetFolder(bool throwExceptionIfNotExist = true) { throw new NotImplementedException(); } - protected virtual string GetSubFolder(string folderPattern, string subFolderPath) { throw new NotImplementedException(); } - protected virtual string PrepareFolderPath(string targetFolderPath, string subFolderPath) { throw new NotImplementedException(); } - protected string ReplacePlaceholder(string inputPath) { throw new NotImplementedException(); } - } } \ No newline at end of file diff --git a/Adaptation/Ifx/Eaf/EquipmentConnector/File/Configuration/FileConnectorConfiguration.cs b/Adaptation/Ifx/Eaf/EquipmentConnector/File/Configuration/FileConnectorConfiguration.cs index 5eafd1c..4e4aa83 100644 --- a/Adaptation/Ifx/Eaf/EquipmentConnector/File/Configuration/FileConnectorConfiguration.cs +++ b/Adaptation/Ifx/Eaf/EquipmentConnector/File/Configuration/FileConnectorConfiguration.cs @@ -2,134 +2,133 @@ using System; using System.Collections.Generic; -namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration +namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; + +[System.Runtime.Serialization.DataContractAttribute] +public class FileConnectorConfiguration { - [System.Runtime.Serialization.DataContractAttribute] - public class FileConnectorConfiguration + public const ulong IDLE_EVENT_WAIT_TIME_DEFAULT = 360; + public const ulong FILE_HANDLE_TIMEOUT_DEFAULT = 15; + + [System.Runtime.Serialization.DataMemberAttribute] + public virtual bool? TriggerOnChanged { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long? PostProcessingRetries { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual bool? CopySourceFolderStructure { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public IfPostProcessingFailsEnum? IfPostProcessingFailsAction { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string AlternateTargetFolder { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public long? FileHandleTimeout { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public bool? DeleteEmptySourceSubFolders { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public long? IdleEventWaitTimeInSeconds { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string FileAgeThreshold { get; set; } + public bool? FolderAgeCheckIndividualSubFolders { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual ZipModeEnum? ZipMode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public FileAgeFilterEnum? FileAgeFilterMode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string ZipTargetFileName { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string ZipErrorTargetFileName { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public long? ZipFileSubFolderLevel { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string DefaultPlaceHolderValue { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public bool? UseZip64Mode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public List ConnectionSettings { get; set; } + public string SourceDirectoryCloaking { get; set; } + public string FolderAgeThreshold { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long? FileScanningIntervalInSeconds { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual bool? TriggerOnCreated { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long? ZipFileTime { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string SourceFileLocation { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string SourceFileFilter { get; set; } + public List SourceFileFilters { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual bool? IncludeSubDirectories { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual FileScanningOptionEnum? FileScanningOption { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string TargetFileLocation { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string ErrorTargetFileLocation { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string TargetFileName { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long? FileHandleWaitTime { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public IfFileExistEnum? IfFileExistAction { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public long? ConnectionRetryInterval { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public PreProcessingModeEnum? PreProcessingMode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public PostProcessingModeEnum? PostProcessingMode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public PostProcessingModeEnum? ErrorPostProcessingMode { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public virtual long? ZipFileAmount { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string ErrorTargetFileName { get; set; } + + public void Initialize() => throw new NotImplementedException(); + + public enum PostProcessingModeEnum { - public const ulong IDLE_EVENT_WAIT_TIME_DEFAULT = 360; - public const ulong FILE_HANDLE_TIMEOUT_DEFAULT = 15; - - [System.Runtime.Serialization.DataMemberAttribute] - public virtual bool? TriggerOnChanged { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long? PostProcessingRetries { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual bool? CopySourceFolderStructure { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public IfPostProcessingFailsEnum? IfPostProcessingFailsAction { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string AlternateTargetFolder { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public long? FileHandleTimeout { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public bool? DeleteEmptySourceSubFolders { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public long? IdleEventWaitTimeInSeconds { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string FileAgeThreshold { get; set; } - public bool? FolderAgeCheckIndividualSubFolders { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual ZipModeEnum? ZipMode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public FileAgeFilterEnum? FileAgeFilterMode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string ZipTargetFileName { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string ZipErrorTargetFileName { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public long? ZipFileSubFolderLevel { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string DefaultPlaceHolderValue { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public bool? UseZip64Mode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public List ConnectionSettings { get; set; } - public string SourceDirectoryCloaking { get; set; } - public string FolderAgeThreshold { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long? FileScanningIntervalInSeconds { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual bool? TriggerOnCreated { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long? ZipFileTime { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string SourceFileLocation { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string SourceFileFilter { get; set; } - public List SourceFileFilters { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual bool? IncludeSubDirectories { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual FileScanningOptionEnum? FileScanningOption { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string TargetFileLocation { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string ErrorTargetFileLocation { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string TargetFileName { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long? FileHandleWaitTime { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public IfFileExistEnum? IfFileExistAction { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public long? ConnectionRetryInterval { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public PreProcessingModeEnum? PreProcessingMode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public PostProcessingModeEnum? PostProcessingMode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public PostProcessingModeEnum? ErrorPostProcessingMode { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public virtual long? ZipFileAmount { get; set; } - [System.Runtime.Serialization.DataMemberAttribute] - public string ErrorTargetFileName { get; set; } - - public void Initialize() { throw new NotImplementedException(); } - - public enum PostProcessingModeEnum - { - None = 0, - Move = 1, - Copy = 2, - Rename = 3, - Zip = 4, - Delete = 5, - MoveFolder = 6, - CopyFolder = 7, - DeleteFolder = 8 - } - public enum PreProcessingModeEnum - { - None = 0, - Process = 1 - } - public enum IfFileExistEnum - { - Overwrite = 0, - LeaveFiles = 1, - Delete = 2 - } - public enum IfPostProcessingFailsEnum - { - LeaveFiles = 0, - Delete = 1 - } - public enum FileScanningOptionEnum - { - FileWatcher = 0, - TimeBased = 1 - } - public enum ZipModeEnum - { - ZipByAmountOrTime = 0, - ZipByFileName = 1, - ZipBySubFolderName = 2 - } - public enum FileAgeFilterEnum - { - IgnoreNewer = 0, - IgnoreOlder = 1 - } + None = 0, + Move = 1, + Copy = 2, + Rename = 3, + Zip = 4, + Delete = 5, + MoveFolder = 6, + CopyFolder = 7, + DeleteFolder = 8 + } + public enum PreProcessingModeEnum + { + None = 0, + Process = 1 + } + public enum IfFileExistEnum + { + Overwrite = 0, + LeaveFiles = 1, + Delete = 2 + } + public enum IfPostProcessingFailsEnum + { + LeaveFiles = 0, + Delete = 1 + } + public enum FileScanningOptionEnum + { + FileWatcher = 0, + TimeBased = 1 + } + public enum ZipModeEnum + { + ZipByAmountOrTime = 0, + ZipByFileName = 1, + ZipBySubFolderName = 2 + } + public enum FileAgeFilterEnum + { + IgnoreNewer = 0, + IgnoreOlder = 1 } } \ No newline at end of file diff --git a/Adaptation/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs b/Adaptation/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs index 55d81fd..9d9aa53 100644 --- a/Adaptation/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs +++ b/Adaptation/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs @@ -2,13 +2,18 @@ using System; using System.Collections.Generic; -namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.SelfDescription -{ - public class FileConnectorParameterTypeDefinitionProvider - { - public FileConnectorParameterTypeDefinitionProvider() { } +namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.SelfDescription; + +public class FileConnectorParameterTypeDefinitionProvider +{ + +#pragma warning disable CA1822 +#pragma warning disable CA2254 +#pragma warning disable IDE0060 + + public FileConnectorParameterTypeDefinitionProvider() { } + + public IEnumerable GetAllParameterTypeDefinition() => null; + public ParameterTypeDefinition GetParameterTypeDefinition(string name) => null; - public IEnumerable GetAllParameterTypeDefinition() { return null; } - public ParameterTypeDefinition GetParameterTypeDefinition(string name) { return null; } - } } \ No newline at end of file diff --git a/Adaptation/MET08DDUPSP1TBI.Tests.csproj b/Adaptation/MET08DDUPSP1TBI.Tests.csproj index 1f4bbbc..ee20c75 100644 --- a/Adaptation/MET08DDUPSP1TBI.Tests.csproj +++ b/Adaptation/MET08DDUPSP1TBI.Tests.csproj @@ -6,12 +6,12 @@ SAK - net5.0 + net6.0 false trx - ../../../Trunk/MET08DDUPSP1TBI/05_TestResults/TestResults + ../../../../MET08DDUPSP1TBI/05_TestResults/TestResults true @@ -28,38 +28,68 @@ Linux - - NU1701 - NU1701 - NU1701 - NU1701 - NU1701 - NU1701 - NU1701 - NU1701 - NU1701 - NU1701 - NU1701 - NU1701 - - - - - - - - - - - - - - NU1701 + + + + + + + + + + + + + + + + + + + + + + NU1701 + + + NU1701 + + + NU1701 + + + NU1701 + + + NU1701 + + + + + NU1701 + + + NU1701 + + + NU1701 + + + NU1701 + + + NU1701 + + + NU1701 + + + NU1701 + + + NU1701 + - - - - diff --git a/Adaptation/PeerGroup/GCL/Annotations/NotNullAttribute.cs b/Adaptation/PeerGroup/GCL/Annotations/NotNullAttribute.cs index c4e64f0..e32df4c 100644 --- a/Adaptation/PeerGroup/GCL/Annotations/NotNullAttribute.cs +++ b/Adaptation/PeerGroup/GCL/Annotations/NotNullAttribute.cs @@ -1,10 +1,9 @@ using System; -namespace Adaptation.PeerGroup.GCL.Annotations +namespace Adaptation.PeerGroup.GCL.Annotations; + +[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.Delegate, AllowMultiple = false, Inherited = true)] +public sealed class NotNullAttribute : Attribute { - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.Delegate, AllowMultiple = false, Inherited = true)] - public sealed class NotNullAttribute : Attribute - { - public NotNullAttribute() { } - } + public NotNullAttribute() { } } \ No newline at end of file diff --git a/Adaptation/PeerGroup/GCL/SecsDriver/HsmsConnectionMode.cs b/Adaptation/PeerGroup/GCL/SecsDriver/HsmsConnectionMode.cs index 82138e2..af1ea65 100644 --- a/Adaptation/PeerGroup/GCL/SecsDriver/HsmsConnectionMode.cs +++ b/Adaptation/PeerGroup/GCL/SecsDriver/HsmsConnectionMode.cs @@ -1,8 +1,7 @@ -namespace Adaptation.PeerGroup.GCL.SecsDriver +namespace Adaptation.PeerGroup.GCL.SecsDriver; + +public enum HsmsConnectionMode { - public enum HsmsConnectionMode - { - Active = 0, - Passive = 1 - } + Active = 0, + Passive = 1 } \ No newline at end of file diff --git a/Adaptation/PeerGroup/GCL/SecsDriver/HsmsSessionMode.cs b/Adaptation/PeerGroup/GCL/SecsDriver/HsmsSessionMode.cs index b52c7a3..eecd8b7 100644 --- a/Adaptation/PeerGroup/GCL/SecsDriver/HsmsSessionMode.cs +++ b/Adaptation/PeerGroup/GCL/SecsDriver/HsmsSessionMode.cs @@ -1,8 +1,7 @@ -namespace Adaptation.PeerGroup.GCL.SecsDriver +namespace Adaptation.PeerGroup.GCL.SecsDriver; + +public enum HsmsSessionMode { - public enum HsmsSessionMode - { - MultiSession = 0, - SingleSession = 1 - } + MultiSession = 0, + SingleSession = 1 } \ No newline at end of file diff --git a/Adaptation/PeerGroup/GCL/SecsDriver/SecsTransportType.cs b/Adaptation/PeerGroup/GCL/SecsDriver/SecsTransportType.cs index 81181f0..5e68d64 100644 --- a/Adaptation/PeerGroup/GCL/SecsDriver/SecsTransportType.cs +++ b/Adaptation/PeerGroup/GCL/SecsDriver/SecsTransportType.cs @@ -1,8 +1,7 @@ -namespace Adaptation.PeerGroup.GCL.SecsDriver +namespace Adaptation.PeerGroup.GCL.SecsDriver; + +public enum SecsTransportType { - public enum SecsTransportType - { - HSMS = 0, - Serial = 1 - } + HSMS = 0, + Serial = 1 } \ No newline at end of file diff --git a/Adaptation/PeerGroup/GCL/SecsDriver/SerialBaudRate.cs b/Adaptation/PeerGroup/GCL/SecsDriver/SerialBaudRate.cs index 4511319..a5bd2c3 100644 --- a/Adaptation/PeerGroup/GCL/SecsDriver/SerialBaudRate.cs +++ b/Adaptation/PeerGroup/GCL/SecsDriver/SerialBaudRate.cs @@ -1,16 +1,15 @@ -namespace Adaptation.PeerGroup.GCL.SecsDriver +namespace Adaptation.PeerGroup.GCL.SecsDriver; + +public enum SerialBaudRate { - public enum SerialBaudRate - { - Baud9600 = 0, - Baud19200 = 1, - Baud4800 = 2, - Baud2400 = 3, - Baud1200 = 4, - Baud300 = 5, - Baud150 = 6, - Baud38400 = 7, - Baud57600 = 8, - Baud115200 = 9 - } + Baud9600 = 0, + Baud19200 = 1, + Baud4800 = 2, + Baud2400 = 3, + Baud1200 = 4, + Baud300 = 5, + Baud150 = 6, + Baud38400 = 7, + Baud57600 = 8, + Baud115200 = 9 } \ No newline at end of file diff --git a/Adaptation/Shared/Deposition/Test.cs b/Adaptation/Shared/Deposition/Test.cs deleted file mode 100644 index 2bfa2fd..0000000 --- a/Adaptation/Shared/Deposition/Test.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace Adaptation.Shared.Deposition -{ - - public enum Test - { - AFMRoughness = -1, - GRATXTCenter = 0, - GRATXTEdge = 1, - GRAXMLCenter = 2, - GRAXMLEdgeN = 3, - Health = 4, - Temps = 5, - ToolTime = 6 - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Description.cs b/Adaptation/Shared/Description.cs deleted file mode 100644 index c63a405..0000000 --- a/Adaptation/Shared/Description.cs +++ /dev/null @@ -1,192 +0,0 @@ -using Adaptation.Eaf.Core; -using Adaptation.Eaf.EquipmentCore.Control; -using Adaptation.Eaf.EquipmentCore.DataCollection.Reporting; -using Adaptation.Eaf.EquipmentCore.SelfDescription.ElementDescription; -using Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes; -using Adaptation.Ifx.Eaf.EquipmentConnector.File.SelfDescription; -using Adaptation.Shared.Metrology; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text.Json; - -namespace Adaptation.Shared -{ - - public class Description - { - - public enum RowColumn - { - Test = 1000, - Count, - Index - } - - public enum LogisticsColumn - { - EventName = 2000, - NullData, - JobID, - Sequence, - MesEntity, - ReportFullPath, - ProcessJobID, - MID - } - - public enum Param - { - String = 0, - Integer = 2, - Double = 3, - Boolean = 4, - StructuredType = 5 - } - - internal const string FileFound = "FileFound"; - - - public List EquipmentParameters { get; private set; } - public List ParameterTypeDefinitions { get; private set; } - - private readonly bool _UseCyclical; - private readonly List _HeaderNames; - private readonly Dictionary _KeyIndexPairs; - private readonly ParameterTypeDefinition _StructuredType; - private readonly FileConnectorParameterTypeDefinitionProvider _FileConnectorParameterTypeDefinitionProvider; - - public Description(ILogic logic, ConfigDataBase configDataBase, IEquipmentControl equipmentControl) - { - _KeyIndexPairs = new Dictionary(); - _HeaderNames = configDataBase.GetHeaderNames(logic); - _UseCyclical = configDataBase.UseCyclicalForDescription; - _StructuredType = new StructuredType(nameof(StructuredType), string.Empty, new List()); - _FileConnectorParameterTypeDefinitionProvider = new FileConnectorParameterTypeDefinitionProvider(); - EquipmentParameters = new List(); - ParameterTypeDefinitions = new List { _StructuredType }; - Dictionary>> keyValuePairsCollection = configDataBase.GetParameterInfo(logic, allowNull: false); - List results = GetParameterValues(equipmentControl, keyValuePairsCollection); - } - - private List GetParameterValues(IEquipmentControl equipmentControl, Dictionary>> keyValuePairsCollection) - { - List results = new List(); - Enum param; - object value; - Enum[] @params; - string description; - List list; - EquipmentParameter equipmentParameter; - ParameterTypeDefinition parameterTypeDefinition; - bool addToEquipmentParameters = !EquipmentParameters.Any(); - foreach (KeyValuePair>> keyValuePair in keyValuePairsCollection) - { - if (!addToEquipmentParameters && !_KeyIndexPairs.ContainsKey(keyValuePair.Key)) - continue; - @params = (from l in keyValuePair.Value select l.Item1).Distinct().ToArray(); - if (@params.Length != 1) - throw new Exception(); - if (keyValuePair.Value[0].Item2 != keyValuePair.Key) - throw new Exception(); - param = @params[0]; - if (!addToEquipmentParameters) - equipmentParameter = EquipmentParameters[_KeyIndexPairs[keyValuePair.Key]]; - else - { - description = keyValuePair.Value[0].Item3; - _KeyIndexPairs.Add(keyValuePair.Key, EquipmentParameters.Count()); - if (param is Param.StructuredType || (_UseCyclical && !_HeaderNames.Contains(keyValuePair.Key))) - parameterTypeDefinition = _StructuredType; - else - parameterTypeDefinition = _FileConnectorParameterTypeDefinitionProvider.GetParameterTypeDefinition(param.ToString()); - equipmentParameter = new EquipmentParameter(keyValuePair.Key, parameterTypeDefinition, description); - EquipmentParameters.Add(equipmentParameter); - } - if (!_UseCyclical || _HeaderNames.Contains(keyValuePair.Key)) - value = keyValuePair.Value[0].Item4; - else - { - list = new List(); - for (int i = 0; i < keyValuePair.Value.Count; i++) - list.Add(new object[] { i, keyValuePair.Value[i].Item4 }); - value = list; - } - if (equipmentControl is null || !(param is Param.StructuredType)) - results.Add(new ParameterValue(equipmentParameter, value, DateTime.Now)); - else - results.Add(equipmentControl.DataCollection.CreateParameterValue(equipmentParameter, value)); - } - return results; - } - - public List GetParameterValues(ILogic logic, IEquipmentControl equipmentControl, JsonElement jsonElement, int? i = null, Dictionary keyValuePairs = null) - { - List results = new List(); - if (_UseCyclical && (i is null || i.Value > 0)) - throw new Exception(); - if (jsonElement.ValueKind != JsonValueKind.Array) - throw new Exception(); - Enum param; - Tuple tuple; - JsonElement[] jsonElements = jsonElement.EnumerateArray().ToArray(); - Dictionary>> keyValuePairsCollection = new Dictionary>>(); - for (int r = i.Value; r < jsonElements.Length; r++) - { - foreach (JsonProperty jsonProperty in jsonElement[r].EnumerateObject()) - { - if (jsonProperty.Value.ValueKind == JsonValueKind.Object || jsonProperty.Value.ValueKind == JsonValueKind.Array) - { - param = Param.StructuredType; - //jValue = jObject.Value("Item1"); - throw new NotImplementedException("Item1"); - } - else - { - switch (jsonProperty.Value.ValueKind) - { - case JsonValueKind.String: - param = Param.String; - break; - case JsonValueKind.Number: - param = Param.Double; - break; - case JsonValueKind.True: - case JsonValueKind.False: - param = Param.Boolean; - break; - case JsonValueKind.Null: - param = Param.String; - break; - default: - param = Param.StructuredType; - break; - } - } - tuple = new Tuple(param, jsonProperty.Name, string.Empty, jsonProperty.Value.ToString()); - if (!keyValuePairsCollection.ContainsKey(jsonProperty.Name)) - keyValuePairsCollection.Add(jsonProperty.Name, new List>()); - keyValuePairsCollection[jsonProperty.Name].Add(tuple); - } - if (!_UseCyclical) - break; - } - results = GetParameterValues(equipmentControl, keyValuePairsCollection); - return results; - } - - public static string GetCellName() - { - string result; - if (Backbone.Instance?.CellName is null) - result = string.Empty; - else - result = Backbone.Instance.CellName; - if (result.Contains("-IO")) - result = result.Replace("-IO", string.Empty); - return result; - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Duplicator/Description.cs b/Adaptation/Shared/Duplicator/Description.cs new file mode 100644 index 0000000..abbb7a4 --- /dev/null +++ b/Adaptation/Shared/Duplicator/Description.cs @@ -0,0 +1,142 @@ +using Adaptation.Shared.Methods; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; + +namespace Adaptation.Shared.Duplicator; + +public class Description : IDescription, Properties.IDescription +{ + + public int Test { get; set; } + public int Count { get; set; } + public int Index { get; set; } + // + public string EventName { get; set; } + public string NullData { get; set; } + public string JobID { get; set; } + public string Sequence { get; set; } + public string MesEntity { get; set; } + public string ReportFullPath { get; set; } + public string ProcessJobID { get; set; } + public string MID { get; set; } + public string Date { get; set; } //2021-10-23 + + string IDescription.GetEventDescription() => "File Has been read and parsed"; + + List IDescription.GetNames(IFileRead fileRead, Logistics logistics) + { + List results = new(); + IDescription description = GetDefault(fileRead, logistics); + string json = JsonSerializer.Serialize(description, description.GetType()); + object @object = JsonSerializer.Deserialize(json); + if (@object is not JsonElement jsonElement) + throw new Exception(); + foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) + results.Add(jsonProperty.Name); + return results; + } + + List IDescription.GetDetailNames() + { + List results = new(); + return results; + } + + List IDescription.GetHeaderNames() + { + List results = new(); + return results; + } + + IDescription IDescription.GetDisplayNames() + { + Description result = GetDisplayNames(); + return result; + } + + List IDescription.GetParameterNames() + { + List results = new(); + return results; + } + + JsonProperty[] IDescription.GetDefault(IFileRead fileRead, Logistics logistics) + { + JsonProperty[] results; + IDescription description = GetDefault(fileRead, logistics); + string json = JsonSerializer.Serialize(description, description.GetType()); + object @object = JsonSerializer.Deserialize(json); + results = ((JsonElement)@object).EnumerateObject().ToArray(); + return results; + } + + List IDescription.GetPairedParameterNames() + { + List results = new(); + return results; + } + + List IDescription.GetIgnoreParameterNames(Test test) + { + List results = new(); + return results; + } + + IDescription IDescription.GetDefaultDescription(IFileRead fileRead, Logistics logistics) + { + Description result = GetDefault(fileRead, logistics); + return result; + } + + Dictionary IDescription.GetDisplayNamesJsonElement(IFileRead fileRead) + { + Dictionary results = new(); + IDescription description = GetDisplayNames(); + string json = JsonSerializer.Serialize(description, description.GetType()); + JsonElement jsonElement = JsonSerializer.Deserialize(json); + foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) + { + if (!results.ContainsKey(jsonProperty.Name)) + results.Add(jsonProperty.Name, string.Empty); + if (jsonProperty.Value is JsonElement jsonPropertyValue) + results[jsonProperty.Name] = jsonPropertyValue.ToString(); + } + return results; + } + + List IDescription.GetDescriptions(IFileRead fileRead, Logistics logistics, List tests, IProcessData iProcessData) + { + List results = new(); + return results; + } + + private static Description GetDisplayNames() + { + Description result = new(); + return result; + } + + private static Description GetDefault(IFileRead fileRead, Logistics logistics) + { + Description result = new() + { + Test = -1, + Count = 0, + Index = -1, + // + EventName = fileRead.EventName, + NullData = fileRead.NullData, + JobID = fileRead.CellInstanceName, + Sequence = logistics.Sequence.ToString(), + MesEntity = fileRead.MesEntity, + ReportFullPath = logistics.ReportFullPath, + ProcessJobID = logistics.ProcessJobID, + MID = logistics.MID, + Date = logistics.DateTimeFromSequence.ToUniversalTime().ToString("MM/dd/yyyy HH:mm:ss") + }; + return result; + } + +} \ No newline at end of file diff --git a/Adaptation/Shared/EquipmentType.cs b/Adaptation/Shared/EquipmentType.cs deleted file mode 100644 index 12db24d..0000000 --- a/Adaptation/Shared/EquipmentType.cs +++ /dev/null @@ -1,53 +0,0 @@ -namespace Adaptation.Shared -{ - - public enum EquipmentType - { - FileEquipment, - SemiEquipment, - // - DEP08EGANAIXG5, - // - MET08ANLYSDIFAAST230_Semi, - MET08DDUPSFS6420, - MET08DDUPSP1TBI, - MET08RESIHGCV, - MET08RESIMAPCDE, - MET08THFTIRQS408M, - MET08THFTIRSTRATUS, - // - MET08AFMD3100, - MET08BVHGPROBE, - MET08CVHGPROBE802B150, - MET08CVHGPROBE802B150_Monthly, - MET08CVHGPROBE802B150_Weekly, - MET08DDINCAN8620, - MET08DDINCAN8620_Daily, - MET08EBEAMINTEGRITY26, - MET08HALLHL5580, - MET08HALLHL5580_Monthly, - MET08HALLHL5580_Weekly, - MET08MESMICROSCOPE, - MET08NDFRESIMAP151C, - MET08NDFRESIMAP151C_Verification, - MET08PLMAPRPM, - MET08PLMAPRPM_Daily, - MET08PLMAPRPM_Verification, - MET08PLMPPLATO, - MET08PRFUSB4000, - MET08PRFUSB4000_Daily, - MET08PRFUSB4000_Monthly, - MET08PRFUSB4000_Weekly, - MET08PRFUSB4000_Verification, - MET08PRFUSB4000_Villach, - MET08UVH44GS100M, - MET08VPDSUBCON, - MET08WGEOMX203641Q, - MET08WGEOMX203641Q_Verification, - MET08XRDXPERTPROMRDXL, - MET08XRDXPERTPROMRDXL_Monthly, - MET08XRDXPERTPROMRDXL_Weekly, - METBRXRAYJV7300L - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/FileRead.cs b/Adaptation/Shared/FileRead.cs new file mode 100644 index 0000000..c30ebf5 --- /dev/null +++ b/Adaptation/Shared/FileRead.cs @@ -0,0 +1,813 @@ +using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared.Methods; +using log4net; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Threading; + +namespace Adaptation.Shared; + +public class FileRead : Properties.IFileRead +{ + + protected string _NullData; + protected readonly ILog _Log; + protected long _MinFileLength; + protected Logistics _Logistics; + protected readonly ISMTP _SMTP; + protected readonly int _Hyphens; + protected readonly bool _IsEvent; + protected string _ReportFullPath; + protected long _LastTicksDuration; + protected readonly bool _IsEAFHosted; + protected readonly string _EventName; + protected readonly string _MesEntity; + protected readonly string _TracePath; + protected readonly bool _IsDuplicator; + protected readonly Calendar _Calendar; + protected readonly bool _IsSourceTimer; + protected readonly string _VillachPath; + protected readonly string _ProgressPath; + protected readonly string _EquipmentType; + protected readonly long _BreakAfterSeconds; + protected readonly string _ExceptionSubject; + protected readonly string _CellInstanceName; + protected readonly string _EventNameFileRead; + protected readonly IDescription _Description; + protected readonly bool _UseCyclicalForDescription; + protected readonly string _CellInstanceConnectionName; + protected readonly string _CellInstanceConnectionNameBase; + protected readonly Dictionary> _DummyRuns; + protected readonly Dictionary _FileParameter; + protected readonly string _ParameterizedModelObjectDefinitionType; + protected readonly FileConnectorConfiguration _FileConnectorConfiguration; + protected readonly IList _ModelObjectParameterDefinitions; + + bool Properties.IFileRead.IsEvent => _IsEvent; + string Properties.IFileRead.NullData => _NullData; + string Properties.IFileRead.EventName => _EventName; + string Properties.IFileRead.MesEntity => _MesEntity; + bool Properties.IFileRead.IsEAFHosted => _IsEAFHosted; + string Properties.IFileRead.EquipmentType => _EquipmentType; + string Properties.IFileRead.ReportFullPath => _ReportFullPath; + string Properties.IFileRead.CellInstanceName => _CellInstanceName; + string Properties.IFileRead.ExceptionSubject => _ExceptionSubject; + bool Properties.IFileRead.UseCyclicalForDescription => _UseCyclicalForDescription; + string Properties.IFileRead.CellInstanceConnectionName => _CellInstanceConnectionName; + string Properties.IFileRead.ParameterizedModelObjectDefinitionType => _ParameterizedModelObjectDefinitionType; + + public FileRead(IDescription description, bool isEvent, ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) + { + _SMTP = smtp; + _IsEvent = isEvent; + _DummyRuns = dummyRuns; + _LastTicksDuration = 0; + _IsEAFHosted = isEAFHosted; + _Description = description; + _FileParameter = fileParameter; + _ReportFullPath = string.Empty; + _CellInstanceName = cellInstanceName; + _Calendar = new CultureInfo("en-US").Calendar; + _Log = LogManager.GetLogger(typeof(FileRead)); + _UseCyclicalForDescription = useCyclicalForDescription; + _CellInstanceConnectionName = cellInstanceConnectionName; + _ModelObjectParameterDefinitions = modelObjectParameters; + _FileConnectorConfiguration = fileConnectorConfiguration; + _ParameterizedModelObjectDefinitionType = parameterizedModelObjectDefinitionType; + _IsSourceTimer = fileConnectorConfiguration.SourceFileFilter.StartsWith("*Timer.txt"); + string cellInstanceConnectionNameBase = cellInstanceConnectionName.Replace("-", string.Empty); + _Hyphens = cellInstanceConnectionName.Length - cellInstanceConnectionNameBase.Length; + _ExceptionSubject = string.Concat("Exception:", _CellInstanceConnectionName, _FileConnectorConfiguration?.SourceDirectoryCloaking); + string suffix; + string[] segments = _ParameterizedModelObjectDefinitionType.Split('.'); + string @namespace = segments[0]; + string eventNameFileRead = "FileRead"; + string eventName = segments[segments.Length - 1]; + bool isDuplicator = segments[0] == cellInstanceName; + _IsDuplicator = isDuplicator; + _CellInstanceConnectionNameBase = cellInstanceConnectionNameBase; + if (eventName == eventNameFileRead) + suffix = string.Empty; + else + suffix = string.Concat('_', eventName.Split(new string[] { eventNameFileRead }, StringSplitOptions.RemoveEmptyEntries)[1]); + string parameterizedModelObjectDefinitionTypeAppended = string.Concat(@namespace, suffix); + if (!isEAFHosted) + { + if (string.IsNullOrEmpty(equipmentTypeName) || equipmentTypeName != parameterizedModelObjectDefinitionTypeAppended) + throw new Exception(cellInstanceConnectionName); + if (string.IsNullOrEmpty(equipmentDictionaryName) && isEvent) + throw new Exception(cellInstanceConnectionName); + if (!string.IsNullOrEmpty(equipmentDictionaryName) && !isEvent) + throw new Exception(cellInstanceConnectionName); + // if (string.IsNullOrEmpty(equipmentDictionaryName) && !isEvent) + // throw new Exception(cellInstanceConnectionName); + // if (!string.IsNullOrEmpty(equipmentDictionaryName) && isEvent) + // throw new Exception(cellInstanceConnectionName); + } + ModelObjectParameterDefinition[] paths = GetProperties(cellInstanceConnectionName, modelObjectParameters, "Path."); + if (paths.Length < 4) + throw new Exception(cellInstanceConnectionName); + if (isDuplicator) + _MesEntity = string.Empty; + else + _MesEntity = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, string.Concat("CellInstance.", cellInstanceName, ".Alias")); + _TracePath = (from l in paths where l.Name.EndsWith("Trace") select l.Value).FirstOrDefault(); + _VillachPath = (from l in paths where l.Name.EndsWith("Villach") select l.Value).FirstOrDefault(); + _ProgressPath = (from l in paths where l.Name.EndsWith("Progress") select l.Value).FirstOrDefault(); + _EventName = eventName; + _EventNameFileRead = eventNameFileRead; + _EquipmentType = parameterizedModelObjectDefinitionTypeAppended; + long breakAfterSeconds; + if (_FileConnectorConfiguration is null) + breakAfterSeconds = 360; + else + { + if (_FileConnectorConfiguration.FileScanningOption == FileConnectorConfiguration.FileScanningOptionEnum.TimeBased) + breakAfterSeconds = 360; + else + breakAfterSeconds = Math.Abs(_FileConnectorConfiguration.FileScanningIntervalInSeconds.Value); + } + _BreakAfterSeconds = breakAfterSeconds; + UpdateLastTicksDuration(breakAfterSeconds * 10000000); + if (_IsDuplicator) + { + if (string.IsNullOrEmpty(_FileConnectorConfiguration.TargetFileLocation) || string.IsNullOrEmpty(_FileConnectorConfiguration.ErrorTargetFileLocation)) + throw new Exception("_Configuration is empty?"); + if (_FileConnectorConfiguration.TargetFileLocation.Contains('%') || _FileConnectorConfiguration.ErrorTargetFileLocation.Contains('%')) + throw new Exception("_Configuration is incorrect for a duplicator!"); + if (_FileConnectorConfiguration is not null) + { + if (string.IsNullOrEmpty(_FileConnectorConfiguration.SourceDirectoryCloaking)) + throw new Exception("SourceDirectoryCloaking is empty?"); + if (!_FileConnectorConfiguration.SourceDirectoryCloaking.StartsWith("~")) + throw new Exception("SourceDirectoryCloaking is incorrect for a duplicator!"); + } + } + } + + protected static string GetPropertyValue(string cellInstanceConnectionName, IList modelObjectParameters, string propertyName) + { + string result; + List results = (from l in modelObjectParameters where l.Name == propertyName select l.Value).ToList(); + if (results.Count != 1) + throw new Exception(cellInstanceConnectionName); + result = results[0]; + return result; + } + + protected static ModelObjectParameterDefinition[] GetProperties(string cellInstanceConnectionName, IList modelObjectParameters, string propertyNamePrefix) + { + ModelObjectParameterDefinition[] results = (from l in modelObjectParameters where l.Name.StartsWith(propertyNamePrefix) select l).ToArray(); + if (!results.Any()) + throw new Exception(cellInstanceConnectionName); + return results; + } + + protected static ModelObjectParameterDefinition[] GetProperties(string cellInstanceConnectionName, IList modelObjectParameters, string propertyNamePrefix, string propertyNameSuffix) + { + ModelObjectParameterDefinition[] results = (from l in modelObjectParameters where l.Name.StartsWith(propertyNamePrefix) && l.Name.EndsWith(propertyNameSuffix) select l).ToArray(); + if (!results.Any()) + throw new Exception(cellInstanceConnectionName); + return results; + } + + protected void UpdateLastTicksDuration(long ticksDuration) + { + if (ticksDuration < 50000000) + ticksDuration = 50000000; + _LastTicksDuration = (long)Math.Ceiling(ticksDuration * .667); + } + + protected void WaitForThread(Thread thread, List threadExceptions) + { + if (thread is not null) + { + ThreadState threadState; + for (short i = 0; i < short.MaxValue; i++) + { + if (thread is null) + break; + else + { + threadState = thread.ThreadState; + if (threadState is not ThreadState.Running and not ThreadState.WaitSleepJoin) + break; + } + Thread.Sleep(500); + } + lock (threadExceptions) + { + if (threadExceptions.Any()) + { + foreach (Exception item in threadExceptions) + _Log.Error(string.Concat(item.Message, Environment.NewLine, Environment.NewLine, item.StackTrace)); + Exception exception = threadExceptions[0]; + threadExceptions.Clear(); + throw exception; + } + } + } + } + + protected void CreateProgressDirectory(string[] exceptionLines) + { + string progressDirectory; + StringBuilder stringBuilder = new(); + if (_Hyphens == 0) + progressDirectory = Path.Combine(_ProgressPath, _CellInstanceConnectionName); + else + { + _ = stringBuilder.Clear(); + for (int i = 0; i < _Hyphens; i++) + { + if (i > 0 && (i % 2) == 0) + _ = stringBuilder.Append(' '); + _ = stringBuilder.Append('-'); + } + progressDirectory = string.Concat(_ProgressPath, @"\", (_Hyphens + 1).ToString().PadLeft(2, '0'), " ", stringBuilder).Trim(); + } + DateTime dateTime = DateTime.Now; + string weekOfYear = _Calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); + progressDirectory = string.Concat(progressDirectory, @"\", dateTime.ToString("yyyy"), "_Week_", weekOfYear, @"\", _Logistics.MID, "_", _Logistics.Sequence, "_", DateTime.Now.Ticks - _Logistics.Sequence); + if (!Directory.Exists(progressDirectory)) + _ = Directory.CreateDirectory(progressDirectory); + if (exceptionLines is not null) + { + string fileName = string.Concat(progressDirectory, @"\readme.txt"); + try + { File.WriteAllLines(fileName, exceptionLines); } + catch (Exception) { } + } + } + + protected string[] Move(Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception) + { + string[] results; + bool isErrorFile = exception is not null; + if (!to.EndsWith(@"\")) + _ = string.Concat(to, @"\"); + if (!isErrorFile) + results = Array.Empty(); + else + { + results = new string[] { _Logistics.Sequence.ToString(), _Logistics.ReportFullPath, from, resolvedFileLocation, to, string.Empty, string.Empty, exception.Message, string.Empty, string.Empty, exception.StackTrace }; + Shared0449(to, results); + } + if (extractResults is not null && extractResults.Item4 is not null && extractResults.Item4.Any()) + { + string itemFile; + List directories = new(); + foreach (FileInfo sourceFile in extractResults.Item4) + { + if (sourceFile.FullName != _Logistics.ReportFullPath) + { + itemFile = sourceFile.FullName.Replace(from, to); + Shared1880(itemFile, directories, sourceFile, isErrorFile); + } + else if (!isErrorFile && _Logistics is not null) + Shared1811(to, sourceFile); + } + Shared0231(directories); + } + return results; + } + + protected static IEnumerable GetDirectoriesRecursively(string path, string directoryNameSegment = null) + { + Queue queue = new(); + queue.Enqueue(path); + while (queue.Count > 0) + { + path = queue.Dequeue(); + foreach (string subDirectory in Directory.GetDirectories(path)) + { + queue.Enqueue(subDirectory); + if (string.IsNullOrEmpty(directoryNameSegment) || Path.GetFileName(subDirectory).Contains(directoryNameSegment)) + yield return subDirectory; + } + } + } + + protected string GetProcessedDirectory(string progressPath, Logistics logistics, DateTime dateTime, string duplicateDirectory) + { + string result = duplicateDirectory; + string logisticsSequence = logistics.Sequence.ToString(); + string[] matchDirectories; + if (!_IsEAFHosted) + matchDirectories = new string[] { Path.GetDirectoryName(Path.GetDirectoryName(logistics.ReportFullPath)) }; + else + matchDirectories = new string[] { GetDirectoriesRecursively(Path.GetDirectoryName(progressPath), logisticsSequence).FirstOrDefault() }; + if (matchDirectories.Length == 0 || string.IsNullOrEmpty(matchDirectories[0])) + matchDirectories = Directory.GetDirectories(duplicateDirectory, string.Concat('*', logisticsSequence, '*'), SearchOption.AllDirectories); + if ((matchDirectories is null) || matchDirectories.Length != 1) + throw new Exception("Didn't find directory by logistics sequence"); + if (!matchDirectories[0].Contains("_processed")) + { + result = string.Concat(matchDirectories[0].Split(new string[] { logisticsSequence }, StringSplitOptions.None)[0], logistics.DateTimeFromSequence.ToString("yyyy-MM-dd_hh;mm_tt_"), dateTime.Ticks - logistics.Sequence, "_processed"); + Directory.Move(matchDirectories[0], result); + result = string.Concat(result, @"\", logistics.Sequence); + if (!Directory.Exists(result)) + _ = Directory.CreateDirectory(result); + } + return result; + } + + protected string WriteScopeInfo(string progressPath, Logistics logistics, DateTime dateTime, string duplicateDirectory, List> tuples) + { + string result = GetProcessedDirectory(progressPath, logistics, dateTime, duplicateDirectory); + string tupleFile; + string fileName = Path.GetFileNameWithoutExtension(logistics.ReportFullPath); + string duplicateFile = string.Concat(result, @"\", fileName, ".pdsf"); + foreach (Tuple tuple in tuples) + { + if (tuple.Item1.FileName.StartsWith(@"\")) + tupleFile = tuple.Item1.FileName; + else + tupleFile = string.Concat(result, @"\", fileName, "_", tuple.Item1.FileNameWithoutExtension, ".pdsfc"); + File.WriteAllText(tupleFile, tuple.Item2); + } + File.Copy(logistics.ReportFullPath, duplicateFile, overwrite: true); + return result; + } + + protected static string GetTupleFile(Logistics logistics, Properties.IScopeInfo scopeInfo, string duplicateDirectory) + { + string result; + string rds; + string dateValue; + string datePlaceholder; + string[] segments = logistics.MID.Split('-'); + if (segments.Length < 2) + rds = "%RDS%"; + else + rds = segments[1]; + segments = scopeInfo.FileName.Split(new string[] { "DateTime:" }, StringSplitOptions.RemoveEmptyEntries); + if (segments.Length == 0) + result = string.Concat(duplicateDirectory, @"\", scopeInfo.FileNameWithoutExtension.Replace("%RDS%", rds)); + else + { + datePlaceholder = "%DateTime%"; + segments = segments[1].Split('%'); + dateValue = logistics.DateTimeFromSequence.ToString(segments[0]); + foreach (string segment in scopeInfo.FileName.Split('%')) + { + if (!segment.Contains(segments[0])) + continue; + datePlaceholder = string.Concat('%', segment, '%'); + } + result = string.Concat(duplicateDirectory, @"\", scopeInfo.FileName.Replace("%RDS%", rds).Replace(datePlaceholder, dateValue)); + } + if (result.Contains('%')) + throw new Exception("Placeholder exists!"); + return result; + } + + protected void WaitForFileConsumption(string sourceDirectoryCloaking, Logistics logistics, DateTime dateTime, string successDirectory, string duplicateDirectory, string duplicateFile, List> tuples) + { + bool check; + long preWait; + string tupleFile; + List consumedFileIndices = new(); + List duplicateFiles = new(); + bool moreThanAnHour = (_BreakAfterSeconds > 3600); + StringBuilder stringBuilder = new(); + long breakAfter = dateTime.AddSeconds(_BreakAfterSeconds).Ticks; + if (moreThanAnHour) + preWait = dateTime.AddSeconds(30).Ticks; + else + preWait = dateTime.AddTicks(_LastTicksDuration).Ticks; + if (!tuples.Any()) + duplicateFiles.Add(duplicateFile); + string fileName = Path.GetFileNameWithoutExtension(logistics.ReportFullPath); + string successFile = string.Concat(successDirectory, @"\", Path.GetFileName(logistics.ReportFullPath)); + foreach (Tuple tuple in tuples) + { + if (tuple.Item1.FileName.StartsWith(@"\")) + tupleFile = tuple.Item1.FileName; + else if (!tuple.Item1.FileName.Contains('%')) + tupleFile = string.Concat(duplicateDirectory, @"\", fileName, "_", tuple.Item1.FileNameWithoutExtension, ".pdsfc"); + else + tupleFile = GetTupleFile(logistics, tuple.Item1, duplicateDirectory); + duplicateFiles.Add(tupleFile); + File.WriteAllText(tupleFile, tuple.Item2); + } + for (short i = 0; i < short.MaxValue; i++) + { + if (DateTime.Now.Ticks > preWait) + break; + Thread.Sleep(500); + } + if (!moreThanAnHour) + { + for (short z = 0; z < short.MaxValue; z++) + { + try + { + check = (string.IsNullOrEmpty(successDirectory) || File.Exists(successFile)); + if (check) + { + consumedFileIndices.Clear(); + for (int i = 0; i < duplicateFiles.Count; i++) + { + if (!File.Exists(duplicateFiles[i])) + consumedFileIndices.Add(i); + } + if (consumedFileIndices.Count == duplicateFiles.Count) + break; + } + } + catch (Exception) { } + if (DateTime.Now.Ticks > breakAfter) + { + for (int i = 0; i < duplicateFiles.Count; i++) + { + if (File.Exists(duplicateFiles[i])) + { + try + { File.Delete(duplicateFiles[i]); } + catch (Exception) { } + _ = stringBuilder.Append('<').Append(duplicateFiles[i]).Append("> "); + } + } + throw new Exception(string.Concat("After {", _BreakAfterSeconds, "} seconds, right side of {", sourceDirectoryCloaking, "} didn't consume file(s) ", stringBuilder)); + } + Thread.Sleep(500); + } + } + } + + protected void SetFileParameter(string key, string value) + { + if (_FileConnectorConfiguration is null || _FileConnectorConfiguration.TargetFileLocation.Contains(string.Concat("%", key, "%")) || _FileConnectorConfiguration.ErrorTargetFileLocation.Contains(string.Concat("%", key, "%")) || _FileConnectorConfiguration.TargetFileName.Contains(string.Concat("%", key, "%")) || _FileConnectorConfiguration.ErrorTargetFileName.Contains(string.Concat("%", key, "%"))) + { + if (_FileParameter.ContainsKey(key)) + _FileParameter[key] = value; + else + _FileParameter.Add(key, value); + } + } + + protected void SetFileParameterLotIDToLogisticsMID(bool includeLogisticsSequence = true) + { + string key; + if (!includeLogisticsSequence) + key = "LotID"; + else + key = "LotIDWithLogisticsSequence"; + string value = string.Concat(_Logistics.MID, "_", _Logistics.Sequence, "_", DateTime.Now.Ticks - _Logistics.Sequence); + SetFileParameter(key, value); + } + + protected void SetFileParameterLotID(string value, bool includeLogisticsSequence = true) + { + string key; + if (!includeLogisticsSequence) + key = "LotID"; + else + { + key = "LotIDWithLogisticsSequence"; + value = string.Concat(value, "_", _Logistics.Sequence, "_", DateTime.Now.Ticks - _Logistics.Sequence); + } + SetFileParameter(key, value); + } + + protected void WritePDSF(IFileRead fileRead, JsonElement[] jsonElements) + { + string directory; + if (!_CellInstanceConnectionName.StartsWith(_CellInstanceName) && _CellInstanceConnectionNameBase == _EquipmentType) + directory = Path.Combine(_VillachPath, _EquipmentType, "Target"); + else + directory = Path.Combine(_TracePath, _EquipmentType, "Source", _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) { } + } + } + + protected void Move(Tuple> extractResults, Exception exception) + { + bool isErrorFile = exception is not null; + if (!isErrorFile && _IsDuplicator) + { + if (_IsEAFHosted && !string.IsNullOrEmpty(_ProgressPath)) + CreateProgressDirectory(exceptionLines: null); + } + if (!_IsEAFHosted) + { + string to; + if (!_FileConnectorConfiguration.TargetFileLocation.EndsWith(Path.DirectorySeparatorChar.ToString())) + to = _FileConnectorConfiguration.TargetFileLocation; + else + to = Path.GetDirectoryName(_FileConnectorConfiguration.TargetFileLocation); + foreach (KeyValuePair keyValuePair in _FileParameter) + to = to.Replace(string.Concat('%', keyValuePair.Key, '%'), keyValuePair.Value); + if (to.Contains('%')) + _Log.Debug("Can't debug without EAF Hosting"); + else + _ = Move(extractResults, to, _FileConnectorConfiguration.SourceFileLocation, resolvedFileLocation: string.Empty, exception: null); + } + } + + protected void TriggerEvents(Tuple> extractResults, List headerNames, Dictionary keyValuePairs) + { + object value; + string description; + List list; + for (int i = 0; i < extractResults.Item3.Length; i++) + { + _Log.Debug(string.Concat("TriggerEvent - {", _Logistics.ReportFullPath, "} ", i, " of ", extractResults.Item3.Length)); + foreach (JsonProperty jsonProperty in extractResults.Item3[i].EnumerateObject()) + { + if (jsonProperty.Value.ValueKind != JsonValueKind.String || !keyValuePairs.ContainsKey(jsonProperty.Name)) + description = string.Empty; + else + description = keyValuePairs[jsonProperty.Name].Split('|')[0]; + if (!_UseCyclicalForDescription || headerNames.Contains(jsonProperty.Name)) + value = jsonProperty.Value.ToString(); + else + { + list = new List(); + for (int z = 0; z < extractResults.Item3.Length; z++) + list.Add(new object[] { z, extractResults.Item3[z].GetProperty(jsonProperty.Name).ToString() }); + value = list; + } + } + if (_UseCyclicalForDescription) + break; + } + } + + protected Tuple> ReExtract(IFileRead fileRead, List headerNames, Dictionary keyValuePairs) + { + Tuple> results; + if (!Directory.Exists(_FileConnectorConfiguration.SourceFileLocation)) + results = null; + else + { + string[] segments; + string[] matches = null; + foreach (string subSourceFileFilter in _FileConnectorConfiguration.SourceFileFilters) + { + segments = subSourceFileFilter.Split('\\'); + if (_FileConnectorConfiguration.IncludeSubDirectories.Value) + matches = Directory.GetFiles(_FileConnectorConfiguration.SourceFileLocation, segments.Last(), SearchOption.AllDirectories); + else + matches = Directory.GetFiles(_FileConnectorConfiguration.SourceFileLocation, segments.Last(), SearchOption.TopDirectoryOnly); + if (matches.Any()) + break; + } + if (matches is null || !matches.Any()) + results = null; + else + { + _ReportFullPath = matches[0]; + results = fileRead.GetExtractResult(_ReportFullPath, _EventName); + if (!_IsEAFHosted) + TriggerEvents(results, headerNames, keyValuePairs); + } + } + return results; + } + + protected static Dictionary> GetKeyValuePairs(List descriptions) + { + Dictionary> results = new(); + Test testKey; + for (int i = 0; i < descriptions.Count; i++) + { + testKey = (Test)descriptions[i].Test; + if (!results.ContainsKey(testKey)) + results.Add(testKey, new List()); + results[testKey].Add(descriptions[i]); + } + return results; + } + + protected static List GetDuplicatorDescriptions(JsonElement[] jsonElements) + { + List results = new(); + 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(jsonElement.ToString(), jsonSerializerOptions); + results.Add(description); + } + return results; + } + + protected static Tuple>> GetTuple(IFileRead fileRead, IEnumerable descriptions, bool extra = false) + { + Tuple>> result; + Dictionary> keyValuePairs = GetKeyValuePairs(descriptions.ToList()); + Test[] tests = (from l in keyValuePairs select l.Key).ToArray(); + fileRead.CheckTests(tests, extra); + result = new Tuple>>(tests, keyValuePairs); + return result; + } + + protected void Shared0449(string to, string[] exceptionLines) + { + if (_IsDuplicator) + CreateProgressDirectory(exceptionLines: null); + else + { + string fileName = string.Concat(to, @"\readme.txt"); + try + { + if (!Directory.Exists(to)) + _ = Directory.CreateDirectory(to); + File.WriteAllLines(fileName, exceptionLines); + } + catch (Exception ex) { _Log.Error(ex.Message); } + } + } + + protected void Shared1880(string itemFile, List directories, FileInfo sourceFile, bool isErrorFile) + { + string itemDirectory; + directories.Add(Path.GetDirectoryName(sourceFile.FullName)); + itemDirectory = Path.GetDirectoryName(itemFile); + FileConnectorConfiguration.PostProcessingModeEnum processingModeEnum; + if (!isErrorFile) + processingModeEnum = _FileConnectorConfiguration.PostProcessingMode.Value; + else + processingModeEnum = _FileConnectorConfiguration.ErrorPostProcessingMode.Value; + if (processingModeEnum != FileConnectorConfiguration.PostProcessingModeEnum.Delete && !Directory.Exists(itemDirectory)) + { + _ = Directory.CreateDirectory(itemDirectory); + FileInfo fileInfo = new(_Logistics.ReportFullPath); + Directory.SetCreationTime(itemDirectory, fileInfo.LastWriteTime); + } + if (_IsEAFHosted) + { + switch (processingModeEnum) + { + case FileConnectorConfiguration.PostProcessingModeEnum.Move: + File.Move(sourceFile.FullName, itemFile); + break; + case FileConnectorConfiguration.PostProcessingModeEnum.Copy: + File.Copy(sourceFile.FullName, itemFile); + break; + case FileConnectorConfiguration.PostProcessingModeEnum.Delete: + File.Delete(sourceFile.FullName); + break; + default: + throw new Exception(); + } + } + } + + protected void Shared1811(string to, FileInfo sourceFile) + { + if (!_IsDuplicator && _FileConnectorConfiguration.SourceFileFilter != "*" && sourceFile.Exists && sourceFile.Length < _MinFileLength) + { + string directoryName = Path.GetFileName(to); + string jobIdDirectory = Path.GetDirectoryName(to); + DateTime dateTime = DateTime.Now.AddMinutes(-15); + string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); + string weekDirectory = string.Concat(_Logistics.DateTimeFromSequence.ToString("yyyy"), "_Week_", weekOfYear, @"\", _Logistics.DateTimeFromSequence.ToString("yyyy-MM-dd")); + string destinationDirectory = string.Concat(jobIdDirectory, @"\_ Ignore 100 bytes\", weekDirectory, @"\", directoryName); + if (!Directory.Exists(destinationDirectory)) + _ = Directory.CreateDirectory(destinationDirectory); + File.Move(sourceFile.FullName, string.Concat(destinationDirectory, @"\", sourceFile.Name)); + try + { + string[] checkDirectories = Directory.GetDirectories(jobIdDirectory, "*", SearchOption.TopDirectoryOnly); + foreach (string checkDirectory in checkDirectories) + { + if (!checkDirectory.Contains('_')) + continue; + if (Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly).Any()) + continue; + if (Directory.GetFiles(checkDirectory, "*", SearchOption.TopDirectoryOnly).Any()) + continue; + if (Directory.GetDirectories(checkDirectory, "*", SearchOption.AllDirectories).Any()) + continue; + if (Directory.GetFiles(checkDirectory, "*", SearchOption.AllDirectories).Any()) + continue; + if (new DirectoryInfo(checkDirectory).CreationTime > dateTime) + continue; + Directory.Delete(checkDirectory, recursive: false); + } + } + catch (Exception) { throw; } + } + } + + protected void Shared0231(List directories) + { + if (_FileConnectorConfiguration.PostProcessingMode != FileConnectorConfiguration.PostProcessingModeEnum.Copy) + { + foreach (string directory in (from l in directories orderby l.Split('\\').Length descending select l).Distinct()) + { + if (Directory.Exists(directory) && !Directory.GetFiles(directory).Any()) + Directory.Delete(directory); + } + } + } + + protected void Shared0413(DateTime dateTime, bool isDummyRun, string successDirectory, string duplicateDirectory, List> tuples, string duplicateFile) + { + if (!isDummyRun && _IsEAFHosted) + WaitForFileConsumption(_FileConnectorConfiguration.SourceDirectoryCloaking, _Logistics, dateTime, successDirectory, duplicateDirectory, duplicateFile, tuples); + else + { + long breakAfter = DateTime.Now.AddSeconds(_FileConnectorConfiguration.ConnectionRetryInterval.Value).Ticks; + for (short i = 0; i < short.MaxValue; i++) + { + if (!_IsEAFHosted || DateTime.Now.Ticks > breakAfter) + break; + Thread.Sleep(500); + } + } + } + + protected static void Shared0607(string reportFullPath, string duplicateDirectory, string logisticsSequence, string destinationDirectory) + { + if (destinationDirectory == duplicateDirectory) + throw new Exception("Check Target File Folder for %LotIDWithLogisticsSequence%_in process on CI (not Duplicator)"); + if (destinationDirectory.EndsWith(logisticsSequence)) + destinationDirectory = Path.GetDirectoryName(destinationDirectory); + string[] deleteFiles = Directory.GetFiles(destinationDirectory, "*", SearchOption.AllDirectories); + if (deleteFiles.Length > 250) + throw new Exception("Safety net!"); + foreach (string file in deleteFiles) + File.Delete(file); + Directory.Delete(destinationDirectory, recursive: true); + File.Delete(reportFullPath); + } + + protected string[] Shared1567(string reportFullPath, List> tuples) + { + string[] results; + string historicalText; + string logisticsSequence = _Logistics.Sequence.ToString(); + string jobIdDirectory = string.Concat(Path.GetDirectoryName(Path.GetDirectoryName(_FileConnectorConfiguration.TargetFileLocation)), @"\", _Logistics.JobID); + if (!Directory.Exists(jobIdDirectory)) + _ = Directory.CreateDirectory(jobIdDirectory); + string[] matchDirectories; + if (!_IsEAFHosted) + matchDirectories = new string[] { Path.GetDirectoryName(Path.GetDirectoryName(reportFullPath)) }; + else + matchDirectories = Directory.GetDirectories(jobIdDirectory, string.Concat(_Logistics.MID, '*', logisticsSequence, '*'), SearchOption.TopDirectoryOnly); + if ((matchDirectories is null) || matchDirectories.Length != 1) + throw new Exception("Didn't find directory by logistics sequence"); + string fileName = Path.GetFileNameWithoutExtension(reportFullPath); + string sequenceDirectory = string.Concat(matchDirectories[0], @"\", logisticsSequence); + if (!Directory.Exists(sequenceDirectory)) + _ = Directory.CreateDirectory(sequenceDirectory); + foreach (Tuple tuple in tuples) + { + fileName = string.Concat(sequenceDirectory, @"\", fileName, "_", tuple.Item1.FileNameWithoutExtension, ".pdsfc"); + if (_IsEAFHosted) + File.WriteAllText(fileName, tuple.Item2); + else + { + if (File.Exists(fileName)) + { + historicalText = File.ReadAllText(fileName); + if (tuple.Item2 != historicalText) + throw new Exception("File doesn't match historical!"); + } + } + } + results = matchDirectories; + return results; + } + + protected void Shared1277(string reportFullPath, string destinationDirectory, string logisticsSequence, string jobIdDirectory, string json) + { + string ecCharacterizationSi = Path.GetDirectoryName(Path.GetDirectoryName(jobIdDirectory)); + string destinationJobIdDirectory = string.Concat(ecCharacterizationSi, @"\Processed\", _Logistics.JobID); + if (!Directory.Exists(destinationJobIdDirectory)) + _ = Directory.CreateDirectory(destinationJobIdDirectory); + destinationJobIdDirectory = string.Concat(destinationJobIdDirectory, @"\", Path.GetFileName(destinationDirectory).Split(new string[] { logisticsSequence }, StringSplitOptions.None)[0], _Logistics.DateTimeFromSequence.ToString("yyyy-MM-dd_hh;mm_tt_"), DateTime.Now.Ticks - _Logistics.Sequence); + string sequenceDirectory = string.Concat(destinationJobIdDirectory, @"\", logisticsSequence); + string jsonFileName = string.Concat(sequenceDirectory, @"\", Path.GetFileNameWithoutExtension(reportFullPath), ".json"); + Directory.Move(destinationDirectory, destinationJobIdDirectory); + if (!Directory.Exists(sequenceDirectory)) + _ = Directory.CreateDirectory(sequenceDirectory); + File.Copy(reportFullPath, string.Concat(sequenceDirectory, @"\", Path.GetFileName(reportFullPath)), overwrite: true); + File.WriteAllText(jsonFileName, json); + } + +} + +// 2022-02-14 -> Shared - FileRead \ No newline at end of file diff --git a/Adaptation/Shared/IProcessData.cs b/Adaptation/Shared/IProcessData.cs deleted file mode 100644 index e2159b1..0000000 --- a/Adaptation/Shared/IProcessData.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Adaptation.Shared.Metrology; -using System; -using System.Collections.Generic; -using System.IO; -using System.Text.Json; - -namespace Adaptation.Shared -{ - public interface IProcessData - { - - Tuple> GetResults(ILogic logic, ConfigDataBase configData, List fileInfoCollection); - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/IProcessDataDescription.cs b/Adaptation/Shared/IProcessDataDescription.cs deleted file mode 100644 index 82b5a5c..0000000 --- a/Adaptation/Shared/IProcessDataDescription.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Adaptation.Shared.Metrology; -using System.Collections.Generic; - -namespace Adaptation.Shared -{ - - public interface IProcessDataDescription - { - - int Test { get; set; } - int Count { get; set; } - int Index { get; set; } - IProcessDataDescription GetDefault(ILogic logic, ConfigDataBase configDataBase); - IProcessDataDescription GetDisplayNames(ILogic logic, ConfigDataBase configDataBase); - List GetDescription(ILogic logic, ConfigDataBase configDataBase, List tests, IProcessData iProcessData); - List GetDetailNames(ILogic logic, ConfigDataBase configDataBase); - List GetHeaderNames(ILogic logic, ConfigDataBase configDataBase); - List GetIgnoreParameterNames(ILogic logic, ConfigDataBase configDataBase, Test test); - List GetNames(ILogic logic, ConfigDataBase configDataBase); - List GetPairedParameterNames(ILogic logic, ConfigDataBase configDataBase); - List GetParameterNames(ILogic logic, ConfigDataBase configDataBase); - string GetEventDescription(); - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/IScopeInfo.cs b/Adaptation/Shared/IScopeInfo.cs deleted file mode 100644 index 83b91dc..0000000 --- a/Adaptation/Shared/IScopeInfo.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; - -namespace Adaptation.Shared -{ - - public interface IScopeInfo - { - - Enum Enum { get; } - string HTML { get; } - string Title { get; } - string FileName { get; } - int TestValue { get; } - string Header { get; } - string QueryFilter { get; } - string FileNameWithoutExtension { get; } - EquipmentType EquipmentType { get; } - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/IsEnvironment.cs b/Adaptation/Shared/IsEnvironment.cs deleted file mode 100644 index c24b236..0000000 --- a/Adaptation/Shared/IsEnvironment.cs +++ /dev/null @@ -1,171 +0,0 @@ -using System; -using System.Diagnostics; -using System.Runtime.InteropServices; - -namespace Shared -{ - - public class IsEnvironment - { - - public enum Name - { - LinuxDevelopment, - LinuxProduction, - LinuxStaging, - OSXDevelopment, - OSXProduction, - OSXStaging, - WindowsDevelopment, - WindowsProduction, - WindowsStaging - } - - public bool DebuggerWasAttachedDuringConstructor { get; private set; } - public bool Development { get; private set; } - public bool Linux { get; private set; } - public bool OSX { get; private set; } - public bool Production { get; private set; } - public bool Staging { get; private set; } - public bool Windows { get; private set; } - public string Profile { get; private set; } - public string AppSettingsFileName { get; private set; } - public string ASPNetCoreEnvironment { get; private set; } - - public IsEnvironment(string testCategory) - { - if (testCategory.EndsWith(".json")) - { - Production = testCategory == "appsettings.json"; - Staging = testCategory.EndsWith(nameof(Staging)); - OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); - Development = testCategory.EndsWith(nameof(Development)); - Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); - DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; - Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); - ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - } - else - { - DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; - OSX = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(OSX)); - ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - Linux = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(Linux)); - Staging = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Staging)); - Windows = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(Windows)); - Production = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Production)); - Development = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Development)); - } - Profile = GetProfile(); - AppSettingsFileName = GetAppSettingsFileName(processesCount: null); - } - - public IsEnvironment(bool isDevelopment, bool isStaging, bool isProduction) - { - Staging = isStaging; - Production = isProduction; - Development = isDevelopment; - OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); - Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); - DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; - Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); - ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - Profile = GetProfile(); - AppSettingsFileName = GetAppSettingsFileName(processesCount: null); - } - - public IsEnvironment(int? processesCount, bool nullASPNetCoreEnvironmentIsDevelopment, bool nullASPNetCoreEnvironmentIsProduction) - { - OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); - Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); - DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; - Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); - ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - if (nullASPNetCoreEnvironmentIsDevelopment && nullASPNetCoreEnvironmentIsProduction) - throw new Exception(); - else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && nullASPNetCoreEnvironmentIsProduction) - Production = true; - else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && nullASPNetCoreEnvironmentIsDevelopment) - Development = true; - else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && !nullASPNetCoreEnvironmentIsDevelopment && !nullASPNetCoreEnvironmentIsProduction) - throw new Exception(); - else - { - Staging = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Staging)); - Production = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Production)); - Development = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Development)); - } - Profile = GetProfile(); - AppSettingsFileName = GetAppSettingsFileName(processesCount); - } - - private string GetProfile() - { - string result; - if (Windows && Production) - result = nameof(Production); - else if (Windows && Staging) - result = nameof(Staging); - else if (Windows && Development) - result = nameof(Development); - else if (Linux && Production) - result = nameof(Name.LinuxProduction); - else if (Linux && Staging) - result = nameof(Name.LinuxStaging); - else if (Linux && Development) - result = nameof(Name.LinuxDevelopment); - else if (OSX && Production) - result = nameof(Name.OSXProduction); - else if (OSX && Staging) - result = nameof(Name.OSXStaging); - else if (OSX && Development) - result = nameof(Name.OSXDevelopment); - else - throw new Exception(); - return result; - } - - private string GetAppSettingsFileName(int? processesCount) - { - string result; - if (Production) - { - if (processesCount is null) - result = "appsettings.json"; - else - result = $"appsettings.{processesCount}.json"; - } - else - { - string environment; - if (Staging) - environment = nameof(Staging); - else if (Development) - environment = nameof(Development); - else - throw new Exception(); - if (processesCount is null) - result = $"appsettings.{environment}.json"; - else - result = $"appsettings.{environment}.{processesCount}.json"; - } - return result; - } - - public static string GetEnvironmentName(IsEnvironment isEnvironment) - { - string result; - if (isEnvironment.Windows) - result = nameof(IsEnvironment.Windows); - else if (isEnvironment.Linux) - result = nameof(IsEnvironment.Linux); - else if (isEnvironment.OSX) - result = nameof(IsEnvironment.OSX); - else - throw new Exception(); - return result; - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Logistics.cs b/Adaptation/Shared/Logistics.cs index 89aacac..c441b3f 100644 --- a/Adaptation/Shared/Logistics.cs +++ b/Adaptation/Shared/Logistics.cs @@ -1,244 +1,208 @@ -using System; +using Adaptation.Shared.Methods; +using System; using System.Collections.Generic; using System.IO; using System.Linq; -namespace Adaptation.Shared +namespace Adaptation.Shared; + +public class Logistics : ILogistics { - public class Logistics + public object NullData { get; private set; } + public string JobID { get; private set; } //CellName + public long Sequence { get; private set; } //Ticks + public DateTime DateTimeFromSequence { get; private set; } + public double TotalSecondsSinceLastWriteTimeFromSequence { get; private set; } + public string MesEntity { get; private set; } //SPC + public string ReportFullPath { get; private set; } //Extract file + public string ProcessJobID { get; set; } //Reactor (duplicate but I want it in the logistics) + public string MID { get; set; } //Lot & Pocket || Lot + public List Tags { get; set; } + public List Logistics1 { get; set; } + public List Logistics2 { get; set; } + + public Logistics(IFileRead fileRead) { + DateTime dateTime = DateTime.Now; + NullData = null; + Sequence = dateTime.Ticks; + DateTimeFromSequence = dateTime; + JobID = fileRead.CellInstanceName; + TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTime).TotalSeconds; + MesEntity = DefaultMesEntity(dateTime); + ReportFullPath = string.Empty; + ProcessJobID = nameof(ProcessJobID); + MID = nameof(MID); + Tags = new List(); + Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); + Logistics2 = new List(); + } - public object NullData { get; private set; } - public string JobID { get; private set; } //CellName - public long Sequence { get; private set; } //Ticks - public DateTime DateTimeFromSequence { get; private set; } - public double TotalSecondsSinceLastWriteTimeFromSequence { get; private set; } - public string MesEntity { get; private set; } //SPC - public string ReportFullPath { get; private set; } //Extract file - public string ProcessJobID { get; internal set; } //Reactor (duplicate but I want it in the logistics) - public string MID { get; internal set; } //Lot & Pocket || Lot - public List Tags { get; internal set; } - public List Logistics1 { get; internal set; } - public List Logistics2 { get; internal set; } - - public Logistics() + public Logistics(IFileRead fileRead, string reportFullPath, bool useSplitForMID, int? fileInfoLength = null) + { + if (string.IsNullOrEmpty(fileRead.CellInstanceName)) + throw new Exception(); + if (string.IsNullOrEmpty(fileRead.MesEntity)) + throw new Exception(); + NullData = fileRead.NullData; + FileInfo fileInfo = new(reportFullPath); + DateTime dateTime = fileInfo.LastWriteTime; + if (fileInfoLength.HasValue && fileInfo.Length < fileInfoLength.Value) + dateTime = dateTime.AddTicks(-1); + JobID = fileRead.CellInstanceName; + Sequence = dateTime.Ticks; + DateTimeFromSequence = dateTime; + TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTime).TotalSeconds; + MesEntity = fileRead.MesEntity; + ReportFullPath = fileInfo.FullName; + ProcessJobID = nameof(ProcessJobID); + string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileInfo.FullName); + if (useSplitForMID) + { + if (fileNameWithoutExtension.IndexOf(".") > -1) + fileNameWithoutExtension = fileNameWithoutExtension.Split('.')[0].Trim(); + if (fileNameWithoutExtension.IndexOf("_") > -1) + fileNameWithoutExtension = fileNameWithoutExtension.Split('_')[0].Trim(); + if (fileNameWithoutExtension.IndexOf("-") > -1) + fileNameWithoutExtension = fileNameWithoutExtension.Split('-')[0].Trim(); + } + MID = string.Concat(fileNameWithoutExtension.Substring(0, 1).ToUpper(), fileNameWithoutExtension.Substring(1).ToLower()); + Tags = new List(); + Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); + Logistics2 = new List(); + } + + public Logistics(string reportFullPath, string logistics) + { + string key; + DateTime dateTime; + string[] segments; + Logistics1 = logistics.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList(); + if (!Logistics1.Any() || !Logistics1[0].StartsWith("LOGISTICS_1")) { - DateTime dateTime = DateTime.Now; NullData = null; - JobID = Description.GetCellName(); + JobID = "null"; + dateTime = new FileInfo(reportFullPath).LastWriteTime; Sequence = dateTime.Ticks; DateTimeFromSequence = dateTime; TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTime).TotalSeconds; MesEntity = DefaultMesEntity(dateTime); - ReportFullPath = string.Empty; - ProcessJobID = nameof(ProcessJobID); - MID = nameof(MID); + ReportFullPath = reportFullPath; + ProcessJobID = "R##"; + MID = "null"; Tags = new List(); Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); Logistics2 = new List(); } - - public Logistics(object nullData, Dictionary cellNames, Dictionary mesEntities, FileInfo fileInfo, bool useSplitForMID, int? fileInfoLength = null) + else { - NullData = nullData; - string mesEntity = string.Empty; - string jobID = Description.GetCellName(); - DateTime dateTime = fileInfo.LastWriteTime; - if (fileInfoLength.HasValue && fileInfo.Length < fileInfoLength.Value) - dateTime = dateTime.AddTicks(-1); - if (string.IsNullOrEmpty(jobID)) + string logistics1Line1 = Logistics1[0]; + key = "NULL_DATA="; + if (!logistics1Line1.Contains(key)) + NullData = null; + else { - if (cellNames.Count == 1) - jobID = cellNames.ElementAt(0).Key; - else - { - foreach (var element in cellNames) - { - if (fileInfo.FullName.IndexOf(element.Key, StringComparison.OrdinalIgnoreCase) > -1 || fileInfo.FullName.IndexOf(element.Value, StringComparison.OrdinalIgnoreCase) > -1) - { - jobID = element.Key; - break; - } - } - } + segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + NullData = segments[1].Split(';')[0]; + } + key = "JOBID="; + if (!logistics1Line1.Contains(key)) + JobID = "null"; + else + { + segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + JobID = segments[1].Split(';')[0]; + } + key = "SEQUENCE="; + if (!logistics1Line1.Contains(key)) + dateTime = new FileInfo(reportFullPath).LastWriteTime; + else + { + segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + if (!long.TryParse(segments[1].Split(';')[0].Split('.')[0], out long sequence) || sequence < new DateTime(1999, 1, 1).Ticks) + dateTime = new FileInfo(reportFullPath).LastWriteTime; + else + dateTime = new DateTime(sequence); } - if (string.IsNullOrEmpty(jobID)) - throw new Exception(); - if (mesEntities.ContainsKey(jobID)) - mesEntity = mesEntities[jobID]; - else if (mesEntities.Count == 1) - mesEntity = mesEntities.ElementAt(0).Value; - // - if (string.IsNullOrEmpty(mesEntity)) - throw new Exception(); - JobID = jobID; Sequence = dateTime.Ticks; DateTimeFromSequence = dateTime; TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTime).TotalSeconds; - MesEntity = mesEntity; - ReportFullPath = fileInfo.FullName; - ProcessJobID = nameof(ProcessJobID); - string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileInfo.FullName); - if (useSplitForMID) + DateTime lastWriteTime = new FileInfo(reportFullPath).LastWriteTime; + if (TotalSecondsSinceLastWriteTimeFromSequence > 600) { - if (fileNameWithoutExtension.IndexOf(".") > -1) - fileNameWithoutExtension = fileNameWithoutExtension.Split('.')[0].Trim(); - if (fileNameWithoutExtension.IndexOf("_") > -1) - fileNameWithoutExtension = fileNameWithoutExtension.Split('_')[0].Trim(); - if (fileNameWithoutExtension.IndexOf("-") > -1) - fileNameWithoutExtension = fileNameWithoutExtension.Split('-')[0].Trim(); + if (lastWriteTime != dateTime) + try + { File.SetLastWriteTime(reportFullPath, dateTime); } + catch (Exception) { } } - MID = string.Concat(fileNameWithoutExtension.Substring(0, 1).ToUpper(), fileNameWithoutExtension.Substring(1).ToLower()); - Tags = new List(); - Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); - Logistics2 = new List(); - } - - public Logistics(string reportFullPath, string logistics) - { - string key; - DateTime dateTime; - string[] segments; - Logistics1 = logistics.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList(); - if (!Logistics1.Any() || !Logistics1[0].StartsWith("LOGISTICS_1")) - { - NullData = null; - JobID = "null"; - dateTime = new FileInfo(reportFullPath).LastWriteTime; - Sequence = dateTime.Ticks; - DateTimeFromSequence = dateTime; - TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTime).TotalSeconds; + key = "MES_ENTITY="; + if (!logistics1Line1.Contains(key)) MesEntity = DefaultMesEntity(dateTime); - ReportFullPath = reportFullPath; - ProcessJobID = "R##"; - MID = "null"; - Tags = new List(); - Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); - Logistics2 = new List(); - } else { - string logistics1Line1 = Logistics1[0]; - key = "NULL_DATA="; - if (!logistics1Line1.Contains(key)) - NullData = null; - else - { - segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - NullData = segments[1].Split(';')[0]; - } - key = "JOBID="; - if (!logistics1Line1.Contains(key)) - JobID = "null"; - else - { - segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - JobID = segments[1].Split(';')[0]; - } - key = "SEQUENCE="; - if (!logistics1Line1.Contains(key)) - dateTime = new FileInfo(reportFullPath).LastWriteTime; - else - { - segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - if (!long.TryParse(segments[1].Split(';')[0].Split('.')[0], out long sequence) || sequence < new DateTime(1999, 1, 1).Ticks) - dateTime = new FileInfo(reportFullPath).LastWriteTime; - else - dateTime = new DateTime(sequence); - } - Sequence = dateTime.Ticks; - DateTimeFromSequence = dateTime; - TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTime).TotalSeconds; - DateTime lastWriteTime = new FileInfo(reportFullPath).LastWriteTime; - if (TotalSecondsSinceLastWriteTimeFromSequence > 600) - { - if (lastWriteTime != dateTime) - try - { File.SetLastWriteTime(reportFullPath, dateTime); } - catch (Exception) { } - } - key = "MES_ENTITY="; - if (!logistics1Line1.Contains(key)) - MesEntity = DefaultMesEntity(dateTime); - else - { - segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - MesEntity = segments[1].Split(';')[0]; - } - ReportFullPath = reportFullPath; - key = "PROCESS_JOBID="; - if (!logistics1Line1.Contains(key)) - ProcessJobID = "R##"; - else - { - segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - ProcessJobID = segments[1].Split(';')[0]; - } - key = "MID="; - if (!logistics1Line1.Contains(key)) - MID = "null"; - else - { - segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - MID = segments[1].Split(';')[0]; - } + segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + MesEntity = segments[1].Split(';')[0]; } - Logistics2 logistics2; - Tags = new List(); - Logistics2 = new List(); - for (int i = 1; i < Logistics1.Count(); i++) + ReportFullPath = reportFullPath; + key = "PROCESS_JOBID="; + if (!logistics1Line1.Contains(key)) + ProcessJobID = "R##"; + else { - if (Logistics1[i].StartsWith("LOGISTICS_2")) - { - logistics2 = new Logistics2(Logistics1[i]); - Logistics2.Add(logistics2); - } + segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + ProcessJobID = segments[1].Split(';')[0]; } - for (int i = Logistics1.Count() - 1; i > -1; i--) + key = "MID="; + if (!logistics1Line1.Contains(key)) + MID = "null"; + else { - if (Logistics1[i].StartsWith("LOGISTICS_2")) - Logistics1.RemoveAt(i); + segments = logistics1Line1.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + MID = segments[1].Split(';')[0]; } } - - public Logistics ShallowCopy() + Logistics2 logistics2; + Tags = new List(); + Logistics2 = new List(); + for (int i = 1; i < Logistics1.Count; i++) { - return (Logistics)MemberwiseClone(); + if (Logistics1[i].StartsWith("LOGISTICS_2")) + { + logistics2 = new Logistics2(Logistics1[i]); + Logistics2.Add(logistics2); + } } - - private string DefaultMesEntity(DateTime dateTime) + for (int i = Logistics1.Count - 1; i > -1; i--) { - return string.Concat(dateTime.Ticks, "_MES_ENTITY"); - } - - internal string GetLotViaMostCommonMethod() - { - return MID.Substring(0, MID.Length - 2); - } - - internal string GetPocketNumberViaMostCommonMethod() - { - return MID.Substring(MID.Length - 2); - } - - internal void Update(string dateTime, string processJobID, string mid) - { - if (!DateTime.TryParse(dateTime, out DateTime dateTimeCasted)) - dateTimeCasted = DateTime.Now; - NullData = null; - //JobID = Description.GetCellName(); - Sequence = dateTimeCasted.Ticks; - DateTimeFromSequence = dateTimeCasted; - TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTimeCasted).TotalSeconds; - //MesEntity = DefaultMesEntity(dateTime); - //ReportFullPath = string.Empty; - ProcessJobID = processJobID; - MID = mid; - Tags = new List(); - Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); - Logistics2 = new List(); + if (Logistics1[i].StartsWith("LOGISTICS_2")) + Logistics1.RemoveAt(i); } } + public Logistics ShallowCopy() => (Logistics)MemberwiseClone(); + + private static string DefaultMesEntity(DateTime dateTime) => string.Concat(dateTime.Ticks, "_MES_ENTITY"); + + internal string GetLotViaMostCommonMethod() => MID.Substring(0, MID.Length - 2); + + internal string GetPocketNumberViaMostCommonMethod() => MID.Substring(MID.Length - 2); + + internal void Update(string dateTime, string processJobID, string mid) + { + if (!DateTime.TryParse(dateTime, out DateTime dateTimeCasted)) + dateTimeCasted = DateTime.Now; + NullData = null; + //JobID = Description.GetCellName(); + Sequence = dateTimeCasted.Ticks; + DateTimeFromSequence = dateTimeCasted; + TotalSecondsSinceLastWriteTimeFromSequence = (DateTime.Now - dateTimeCasted).TotalSeconds; + //MesEntity = DefaultMesEntity(dateTime); + //ReportFullPath = string.Empty; + ProcessJobID = processJobID; + MID = mid; + Tags = new List(); + Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); + Logistics2 = new List(); + } } \ No newline at end of file diff --git a/Adaptation/Shared/Logistics2.cs b/Adaptation/Shared/Logistics2.cs index 0f0f2f2..a067258 100644 --- a/Adaptation/Shared/Logistics2.cs +++ b/Adaptation/Shared/Logistics2.cs @@ -1,80 +1,78 @@ using System; -namespace Adaptation.Shared +namespace Adaptation.Shared; + +public class Logistics2 : Methods.ILogistics2 { - public class Logistics2 + + public string MID { get; private set; } + public string RunNumber { get; private set; } + public string SatelliteGroup { get; private set; } + public string PartNumber { get; private set; } + public string PocketNumber { get; private set; } + public string WaferLot { get; private set; } + public string Recipe { get; private set; } + + public Logistics2(string logistics2) { - - public string MID { get; private set; } - public string RunNumber { get; private set; } - public string SatelliteGroup { get; private set; } - public string PartNumber { get; private set; } - public string PocketNumber { get; private set; } - public string WaferLot { get; private set; } - public string Recipe { get; private set; } - - public Logistics2(string logistics2) + string key; + string[] segments; + key = "JOBID="; + if (!logistics2.Contains(key)) + MID = "null"; + else { - string key; - string[] segments; - key = "JOBID="; - if (!logistics2.Contains(key)) - MID = "null"; - else - { - segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - MID = segments[1].Split(';')[0]; - } - key = "MID="; - if (!logistics2.Contains(key)) - RunNumber = "null"; - else - { - segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - RunNumber = segments[1].Split(';')[0]; - } - key = "INFO="; - if (!logistics2.Contains(key)) - SatelliteGroup = "null"; - else - { - segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - SatelliteGroup = segments[1].Split(';')[0]; - } - key = "PRODUCT="; - if (!logistics2.Contains(key)) - PartNumber = "null"; - else - { - segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - PartNumber = segments[1].Split(';')[0]; - } - key = "CHAMBER="; - if (!logistics2.Contains(key)) - PocketNumber = "null"; - else - { - segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - PocketNumber = segments[1].Split(';')[0]; - } - key = "WAFER_ID="; - if (!logistics2.Contains(key)) - WaferLot = "null"; - else - { - segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - WaferLot = segments[1].Split(';')[0]; - } - key = "PPID="; - if (!logistics2.Contains(key)) - Recipe = "null"; - else - { - segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); - Recipe = segments[1].Split(';')[0]; - } + segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + MID = segments[1].Split(';')[0]; + } + key = "MID="; + if (!logistics2.Contains(key)) + RunNumber = "null"; + else + { + segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + RunNumber = segments[1].Split(';')[0]; + } + key = "INFO="; + if (!logistics2.Contains(key)) + SatelliteGroup = "null"; + else + { + segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + SatelliteGroup = segments[1].Split(';')[0]; + } + key = "PRODUCT="; + if (!logistics2.Contains(key)) + PartNumber = "null"; + else + { + segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + PartNumber = segments[1].Split(';')[0]; + } + key = "CHAMBER="; + if (!logistics2.Contains(key)) + PocketNumber = "null"; + else + { + segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + PocketNumber = segments[1].Split(';')[0]; + } + key = "WAFER_ID="; + if (!logistics2.Contains(key)) + WaferLot = "null"; + else + { + segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + WaferLot = segments[1].Split(';')[0]; + } + key = "PPID="; + if (!logistics2.Contains(key)) + Recipe = "null"; + else + { + segments = logistics2.Split(new string[] { key }, StringSplitOptions.RemoveEmptyEntries); + Recipe = segments[1].Split(';')[0]; } - } } \ No newline at end of file diff --git a/Adaptation/Shared/Methods/IDescription.cs b/Adaptation/Shared/Methods/IDescription.cs new file mode 100644 index 0000000..30dc635 --- /dev/null +++ b/Adaptation/Shared/Methods/IDescription.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using System.Text.Json; + +namespace Adaptation.Shared.Methods; + +public interface IDescription +{ + + string GetEventDescription(); + List GetDetailNames(); + List GetHeaderNames(); + IDescription GetDisplayNames(); + List GetParameterNames(); + List GetPairedParameterNames(); + List GetIgnoreParameterNames(Test test); + List GetNames(IFileRead fileRead, Logistics logistics); + JsonProperty[] GetDefault(IFileRead fileRead, Logistics logistics); + Dictionary GetDisplayNamesJsonElement(IFileRead fileRead); + IDescription GetDefaultDescription(IFileRead fileRead, Logistics logistics); + List GetDescriptions(IFileRead fileRead, Logistics logistics, List tests, IProcessData iProcessData); + +} \ No newline at end of file diff --git a/Adaptation/Shared/Methods/IFileRead.cs b/Adaptation/Shared/Methods/IFileRead.cs new file mode 100644 index 0000000..13c2379 --- /dev/null +++ b/Adaptation/Shared/Methods/IFileRead.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.Json; + +namespace Adaptation.Shared.Methods; + +public interface IFileRead : Properties.IFileRead +{ + + void WaitForThread(); + JsonProperty[] GetDefault(); + void Callback(object state); + string GetEventDescription(); + List GetHeaderNames(); + void CheckTests(Test[] tests, bool extra); + Dictionary GetDisplayNamesJsonElement(); + Tuple> ReExtract(); + List GetDescriptions(IFileRead fileRead, List tests, IProcessData processData); + void Move(Tuple> extractResults, Exception exception = null); + Tuple> GetExtractResult(string reportFullPath, string eventName); + string[] Move(Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception); + +} \ No newline at end of file diff --git a/Adaptation/Shared/Methods/ILogistics.cs b/Adaptation/Shared/Methods/ILogistics.cs new file mode 100644 index 0000000..ea9ca27 --- /dev/null +++ b/Adaptation/Shared/Methods/ILogistics.cs @@ -0,0 +1,5 @@ +namespace Adaptation.Shared.Methods; + +public interface ILogistics : Properties.ILogistics +{ +} \ No newline at end of file diff --git a/Adaptation/Shared/Methods/ILogistics2.cs b/Adaptation/Shared/Methods/ILogistics2.cs new file mode 100644 index 0000000..35b9e57 --- /dev/null +++ b/Adaptation/Shared/Methods/ILogistics2.cs @@ -0,0 +1,5 @@ +namespace Adaptation.Shared.Methods; + +public interface ILogistics2 : Properties.ILogistics2 +{ +} \ No newline at end of file diff --git a/Adaptation/Shared/Methods/IProcessData.cs b/Adaptation/Shared/Methods/IProcessData.cs new file mode 100644 index 0000000..e3fdeab --- /dev/null +++ b/Adaptation/Shared/Methods/IProcessData.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.Json; + +namespace Adaptation.Shared.Methods; + +public interface IProcessData : Properties.IProcessData +{ + + string GetCurrentReactor(IFileRead fileRead, Logistics logistics, Dictionary reactors); + Tuple> GetResults(IFileRead fileRead, Logistics logistics, List fileInfoCollection); + +} \ No newline at end of file diff --git a/Adaptation/Shared/Methods/ISMTP.cs b/Adaptation/Shared/Methods/ISMTP.cs new file mode 100644 index 0000000..378da64 --- /dev/null +++ b/Adaptation/Shared/Methods/ISMTP.cs @@ -0,0 +1,8 @@ +namespace Adaptation.Shared.Methods; + +public interface ISMTP +{ + void SendLowPriorityEmailMessage(string subject, string body); + void SendHighPriorityEmailMessage(string subject, string body); + void SendNormalPriorityEmailMessage(string subject, string body); +} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/Column.cs b/Adaptation/Shared/Metrology/Column.cs deleted file mode 100644 index b03e6fe..0000000 --- a/Adaptation/Shared/Metrology/Column.cs +++ /dev/null @@ -1,1605 +0,0 @@ -using System; - -namespace Adaptation.Shared.Metrology -{ - - public static class ColumnGet - { - - public static string GetDiplayName(this Column column) - { - string results; - switch (column) - { - //case Column._8in_Total_Warp_Verification: results = "8in Total Warp Verification"; break; - //case Column.AFM_Monthly_Y: results = "AFM-Monthly Y"; break; - //case Column.AFM_Monthly: results = "AFM_Monthly"; break; - case Column.AFM_Pit_Count: - results = "AFM Pit Count"; - break; - case Column.AFM_Roughness: - results = "AFM Roughness"; - break; - //case Column.Adder_Bin_1: results = "Adder Bin 1"; break; - //case Column.Adder_Bin_2: results = "Adder Bin 2"; break; - //case Column.Adder_Bin_3: results = "Adder Bin 3"; break; - //case Column.Adder_Bin_4: results = "Adder Bin 4"; break; - //case Column.Adder_Bin_5: results = "Adder Bin 5"; break; - //case Column.Adder_Bin_6: results = "Adder Bin 6"; break; - //case Column.Adder_Bin_9: results = "Adder Bin 9"; break; - case Column.Al_B_B_WTAVG: - results = "Al% B.B. WTAVG"; - break; - case Column.Al_B_B_: - results = "Al% B.B."; - break; - case Column.Al_Barrier_WTAVG: - results = "Al% Barrier WTAVG"; - break; - case Column.Al_Barrier: - results = "Al% Barrier"; - break; - case Column.Al_SLS_WTAVG: - results = "Al% SLS WTAVG"; - break; - case Column.Al_SLS: - results = "Al% SLS"; - break; - case Column.Al_TL1_WTAVG: - results = "Al% TL1 WTAVG"; - break; - case Column.Al_TL1: - results = "Al% TL1"; - break; - case Column.Al_TL2_WTAVG: - results = "Al% TL2 WTAVG"; - break; - //case Column.BV_Resistance: results = "BV Resistance"; break; //BV Monthly Verification - case Column.BandEdge_V: - results = "BandEdge_V"; - break; - case Column.BandEdge_V_XY: - results = "BandEdge_V_XY"; - break; - case Column.BandEdge_nm: - results = "BandEdge_nm"; - break; - case Column.Barrier_Composition_RPM_XY: - results = "Barrier_Composition_RPM_XY"; - break; - case Column.Bow_Calibration: - results = "Bow Calibration"; - break; - case Column.Bow_Range: - results = "Bow Range"; - break; - case Column.Bow: - results = "Bow"; - break; - case Column.BowCenter: - results = "BowCenter"; - break; - case Column.BowX: - results = "BowX"; - break; - case Column.BowY: - results = "BowY"; - break; - case Column.Breakdown_Voltage_Edge: - results = "Breakdown Voltage - Edge"; - break; - case Column.Breakdown_VoltageMiddle: - results = "Breakdown Voltage - Middle"; - break; - case Column.Breakdown_Voltage: - results = "Breakdown Voltage"; - break; - case Column.CV_C_at_10V: - results = "CV C at -10V"; - break; - case Column.CV_Nd_Min: - results = "CV Nd Min"; - break; - //case Column.Candela_Large_LPD_Quarterly: results = "Candela Large LPD Quarterly"; break; - //case Column.Candela_Medium_LPD_Quarterly: results = "Candela Medium LPD Quarterly"; break; - //case Column.Candela_Small_LPD_Quarterly: results = "Candela Small LPD Quarterly"; break; - //case Column.Candela_Total_Quarterly: results = "Candela Total Quarterly"; break; - case Column.Candela_102_83nm: - results = "102-83nm"; - break; - case Column.Candela_1_1um: - results = "1.1um"; - break; - case Column.Candela_496nm: - results = "496nm"; - break; - case Column.Candela_600nm: - results = "600nm"; - break; - case Column.Candela_8620_Small: - results = "Candela 8620 Small"; - break; - case Column.Candela_Crack_Verification: - results = "Crack Verification"; - break; - case Column.Candela_Cracking: - results = "Candela Cracking"; - break; - case Column.Candela_Cracking_Acceptable: - results = "Candela Cracking Acceptable"; - break; - case Column.Candela_Crater: - results = "Candela Crater"; - break; - case Column.Candela_Crater_Verification: - results = "Crater verification"; - break; - case Column.Candela_Haze: - results = "Candela Haze"; - break; - case Column.Candela_LPD_Large: - results = "Candela LPD Large"; - break; - case Column.Candela_LPD_Medium: - results = "Candela LPD Medium"; - break; - case Column.Candela_LPD_Small: - results = "Candela LPD Small"; - break; - case Column.Candela_Large_Verification: - results = "Large Verification"; - break; - case Column.Candela_Medium_Verification: - results = "Medium Verification"; - break; - case Column.Candela_Pits: - results = "Candela Pits"; - break; - case Column.Candela_Pits_Verification: - results = "Pits verification"; - break; - case Column.Candela_SPE: - results = "Candela SPE"; - break; - case Column.Candela_SPE_Verification: - results = "SPE verification"; - break; - case Column.Candela_Slip: - results = "Candela Slip"; - break; - case Column.Candela_Small_Verification: - results = "Small Verification"; - break; - case Column.Candela_Spirals: - results = "Candela Spirals"; - break; - case Column.Candela_Spirals_Verification: - results = "Candela Spirals Verification"; - break; - case Column.Candela_Total_Defects: - results = "Candela Total Defects"; - break; - case Column.Candela_Total_PSL: - results = "Candela Total PSL"; - break; - case Column.Candela__1_1um: - results = ">1.1um"; - break; - //case Column.Comment: results = "Comment"; break; - //case Column.Conductivity: results = "Conductivity"; break; - case Column.Contact_Symmetry: - results = "Contact Symmetry"; - break; - //case Column.Cracking_verification: results = "Cracking verification"; break; - //case Column.Crater_verification: results = "Crater verification"; break; - case Column.Date: - results = "Date"; - break; - case Column.Denton_Crystal_Life: - results = "Denton_Crystal_Life"; - break; - case Column.Denton_Current_AVG: - results = "Denton_Current_AVG"; - break; - case Column.Denton_Current_STDEV: - results = "Denton_Current_STDEV"; - break; - case Column.Denton_Deposition_Power_AVG: - results = "Denton_Deposition_Power_AVG"; - break; - case Column.Denton_Deposition_Power_STDEV: - results = "Denton_Deposition_Power_STDEV"; - break; - case Column.Denton_Deposition_Rate_AVG: - results = "Denton_Deposition_Rate_AVG"; - break; - case Column.Denton_Deposition_Rate_STDEV: - results = "Denton_Deposition_Rate_STDEV"; - break; - case Column.Denton_Gun_Pocket: - results = "Denton_Gun_Pocket"; - break; - case Column.Denton_Pumpdown_Time: - results = "Denton_Pumpdown_Time"; - break; - case Column.Denton_Voltage_AVG: - results = "Denton_Voltage_AVG"; - break; - case Column.Denton_Voltage_STDEV: - results = "Denton_Voltage_STDEV"; - break; - case Column.Employee: - results = "Employee"; - break; - case Column.Epi_Thickness_Mean: - results = "Epi Thickness Mean"; - break; - case Column.Epi_Thickness_Mean_XY: - results = "Epi Thickness Mean_XY"; - break; - case Column.Epi_Thickness_Std_Dev_: - results = "Epi Thickness Std Dev %"; - break; - case Column.FWHM_006_WTAVG: - results = "FWHM 006 WTAVG"; - break; - case Column.FWHM_006: - results = "FWHM 006"; - break; - case Column.FWHM_105_WTAVG: - results = "FWHM 105 WTAVG"; - break; - case Column.FWHM_105: - results = "FWHM 105"; - break; - case Column.Hall_Rs: - results = "Hall Rs"; - break; - case Column.Hall_Mobility_verif_sample: - results = "Hall_Mobility_verif_sample"; - break; - case Column.Hall_Ns_verif_sample: - results = "Hall_Ns_verif_sample"; - break; - case Column.Hall_Rs_verif_sample: - results = "Hall_Rs_verif_sample"; - break; - case Column.Job: - results = "Job"; - break; - case Column.LEI_RS_Average_value: - results = "LEI RS Average value"; - break; - case Column.LEI_RS_Maximum_value: - results = "LEI RS Maximum value"; - break; - case Column.LEI_RS_Minimum_value: - results = "LEI RS Minimum value"; - break; - case Column.LEI_RS_STDEV: - results = "LEI RS STDEV"; - break; - case Column.LEI_RS_STDEV_: - results = "LEI RS STDEV%"; - break; - //case Column.Large_Adder_Sum: results = "Large Adder Sum"; break; - case Column.Lot: - results = "Lot"; - break; - //case Column.Medium_Adder_Sum: results = "Medium Adder Sum"; break; - case Column.Microscope_Center_5x: - results = "Microscope Center 5x"; - break; - case Column.Microscope_Center_50x: - results = "Microscope Center 50x"; - break; - case Column.Microscope_Middle_5x: - results = "Microscope Middle 5x"; - break; - case Column.Microscope_Middle_50x: - results = "Microscope Middle 50x"; - break; - case Column.Microscope_Edge_5x: - results = "Microscope Edge 5x"; - break; - case Column.Microscope_Edge_50x: - results = "Microscope Edge 50x"; - break; - case Column.Mobility_Verification: - results = "Mobility Verification"; - break; - case Column.Mobility: - results = "Mobility"; - break; - case Column.Ns_Verification: - results = "Ns Verification"; - break; - case Column.PL_Edge_Wavelength: - results = "PL Edge Wavelength"; - break; - case Column.PL_Ratio: - results = "PL Ratio"; - break; - case Column.PR_Barrier_Composition: - results = "PR Barrier Composition"; - break; - case Column.PR_Peak: - results = "PR Peak"; - break; - case Column.Part: - results = "Part"; - break; - //case Column.Particles_verification: results = "Particles verification"; break; - //case Column.Pits_verification: results = "Pits verification"; break; - //case Column.Pocket: results = "Pocket"; break; - //case Column.Post_Bin_1: results = "Post Bin 1"; break; - //case Column.Post_Bin_2: results = "Post Bin 2"; break; - //case Column.Post_Bin_3: results = "Post Bin 3"; break; - //case Column.Post_Bin_4: results = "Post Bin 4"; break; - //case Column.Post_Bin_5: results = "Post Bin 5"; break; - //case Column.Post_Bin_6: results = "Post Bin 6"; break; - //case Column.Post_Bin_9: results = "Post Bin 9"; break; - //case Column.Pre_Bin_1: results = "Pre Bin 1"; break; - //case Column.Pre_Bin_2: results = "Pre Bin 2"; break; - //case Column.Pre_Bin_3: results = "Pre Bin 3"; break; - //case Column.Pre_Bin_4: results = "Pre Bin 4"; break; - //case Column.Pre_Bin_5: results = "Pre Bin 5"; break; - //case Column.Pre_Bin_6: results = "Pre Bin 6"; break; - //case Column.Pre_Bin_9: results = "Pre Bin 9"; break; - case Column.Process: - results = "Process"; - break; - //case Column.RPM_verif_Thickness_1: results = "RPM_verif_Thickness_1"; break; - //case Column.RPM_verif_Thickness_2: results = "RPM_verif_Thickness_2"; break; - //case Column.RPM_verif_Thickness_3: results = "RPM_verif_Thickness_3"; break; - //case Column.RPM_verif_Thickness_Average: results = "RPM_verif_Thickness_Average"; break; - //case Column.RTA_oxide_Thk_Change: results = "RTA oxide Thk Change"; break; - //case Column.RTA_oxide_post_anneal_Thk: results = "RTA oxide post-anneal Thk"; break; - //case Column.RTA_oxide_pre_anneal_Thk: results = "RTA oxide pre-anneal Thk"; break; - case Column.Recipe: - results = "Recipe"; - break; - //case Column.Resistivity_2_ohm_cm: results = "Resistivity 2 ohm cm"; break; //LEI Weekly Verification - //case Column.Resistivity_600_ohm_cm: results = "Resistivity 600 ohm cm"; break; //LEI Weekly Verification - case Column.Rs_verification: - results = "Rs verification"; - break; - case Column.Rs_verif_100kohm: - results = "Rs_verif_100kohm"; - break; - case Column.Rs_verif_10ohm: - results = "Rs_verif_10ohm"; - break; - case Column.Rs_verif_1kohm: - results = "Rs_verif_1kohm"; - break; - case Column.SID: - results = "SID"; - break; - case Column.SL_Period_WTAVG: - results = "SL Period WTAVG"; - break; - case Column.SL_Period: - results = "SL Period"; - break; - //case Column.SPE_verification: results = "SPE verification"; break; - //case Column.Sample_ID: results = "Sample ID"; break; - case Column.Sheet_Concentration: - results = "Sheet Concentration"; - break; - //case Column.Size: results = "Size"; break; - //case Column.Small_Adder_Sum: results = "Small Adder Sum"; break; - //case Column.Spirals_verification: results = "Spirals verification"; break; - case Column.Time: - results = "Time"; - break; - case Column.Tool_ID: - results = "Tool ID"; - break; - //case Column.Total_LPD_Adder: results = "Total LPD Adder"; break; - //case Column.Total_Verification: results = "Total Verification"; break; - case Column.Total_Warp_Calibration: - results = "Total Warp Calibration"; - break; - case Column.UV_Broken: - results = "UV Broken"; - break; - case Column.UV_Chipping: - results = "UV Chipping"; - break; - case Column.UV_Cracking_0_3mm_: - results = "UV Cracking (0-3mm)"; - break; - case Column.UV_Cracking_3_7mm_: - results = "UV Cracking (3-7mm)"; - break; - case Column.UV_Cracking_7mm_: - results = "UV Cracking (>7mm)"; - break; - case Column.UV_Crazing: - results = "UV Crazing"; - break; - case Column.UV_Crazing_Acceptable: - results = "UV Crazing Acceptable"; - break; - case Column.UV_FULL_Characterization_Wafer: - results = "UV FULL Characterization Wafer"; - break; - case Column.UV_Haze_count_: - results = "UV Haze (count)"; - break; - case Column.UV_LIGHT_Characterization_Wafer: - results = "UV LIGHT Characterization Wafer"; - break; - case Column.UV_Non_rotation: - results = "UV Non-rotation"; - break; - case Column.UV_Other: - results = "UV Other"; - break; - case Column.UV_Scratch_count_: - results = "UV Scratch (count)"; - break; - case Column.UV_Slip_count_: - results = "UV Slip (count)"; - break; - case Column.UV_True_Haze: - results = "UV True Haze"; - break; - case Column.UV_True_Haze_Acceptable: - results = "UV True Haze Acceptable"; - break; - case Column.UV_SPE_1mm_count: - results = "UV-SPE (>1mm) count"; - break; - case Column.UV_SPE_count_: - results = "UV-SPE (count)"; - break; - case Column.Verification_Contact_Symmetry: - results = "Verification Contact Symmetry"; - break; - case Column.Vp_Pinch_Off_Voltage: - results = "Vp Pinch Off Voltage"; - break; - case Column.Wafer_ID: - results = "Wafer ID"; - break; - //case Column.Wafer_Pocket: results = "Wafer Pocket"; break; - case Column.Wafer_Region: - results = "Wafer Region"; - break; - case Column.Wafer_Scribe: - results = "Wafer Scribe"; - break; - case Column.WaferPocket_Candela: - results = "WaferPocket_Candela"; - break; - case Column.WaferPocket_Warp: - results = "WaferPocket_Warp"; - break; - case Column.WaferPosition_CV: - results = "WaferPosition_CV"; - break; - case Column.WaferPosition_BV: - results = "WaferPosition_BV"; - break; - case Column.WaferPosition_Hall: - results = "WaferPosition_Hall"; - break; - case Column.WaferPosition_PR: - results = "WaferPosition_PR"; - break; - case Column.Warp: - results = "Warp"; - break; - case Column.X_Coord: - results = "X-Coord"; - break; - case Column.XRD_2_Theta_Peak_002: - results = "XRD 2 Theta Peak 002"; - break; - case Column.XRD_2_Theta_Peak_101: - results = "XRD 2 Theta Peak 101"; - break; - case Column.XRD_2_Theta_Position: - results = "XRD 2-Theta Position"; - break; - case Column.XRD_2_Theta_Position_Si_1: - results = "XRD 2-Theta Position Si 1"; - break; - case Column.XRD_2_Theta_Position_Si_2: - results = "XRD 2-Theta Position Si 2"; - break; - case Column.XRD_2_Theta_Position_Si_3: - results = "XRD 2-Theta Position Si 3"; - break; - case Column.XRD_Peak_002_Intensity: - results = "XRD Peak 002 Intensity"; - break; - case Column.XRD_Peak_101_Intensity: - results = "XRD Peak 101 Intensity"; - break; - case Column.XRD_Weekly_AL_Center: - results = "XRD Weekly AL% Center"; - break; - case Column.XRD_Weekly_Back_Barrier_Al_: - results = "Back Barrier Al%"; - break; - case Column.XRD_Weekly_Barrier_Al_: - results = "Barrier Al%"; - break; - case Column.XRD_Weekly_FWHM_002: - results = "XRD Weekly FWHM 002"; - break; - case Column.XRD_Weekly_FWHM_101: - results = "XRD Weekly FWHM 101"; - break; - case Column.XRD_Weekly_FWHM_105: - results = "XRD Weekly FWHM 105"; - break; - case Column.XRD_Weekly_Fringe_thick_0_0_: - results = "XRD Weekly Fringe thick (0,0)"; - break; - case Column.XRD_Weekly_Fringe_thick_48_48_: - results = "XRD Weekly Fringe thick (48,48)"; - break; - case Column.XRD_Weekly_Intensity: - results = "XRD Weekly Intensity"; - break; - case Column.XRD_Weekly_Super_Lattice_Al_: - results = "Super Lattice Al%"; - break; - case Column.XRD_Weekly_Super_Lattice_period: - results = "Super Lattice period"; - break; - case Column.XRD_Weekly_Super_Lattice_tks: - results = "Super Lattice tks"; - break; - case Column.XRR_Thickness_nm_WTAVG: - results = "XRR Thickness (nm) WTAVG"; - break; - case Column.XRR_Thickness_nm_: - results = "XRR Thickness (nm)"; - break; - case Column.Y_Coord: - results = "Y-Coord"; - break; - case Column.YellowBand_Power_mW_: - results = "YellowBand_Power (mW)"; - break; - case Column.YellowBand_V: - results = "YellowBand_V"; - break; - case Column.YellowBand_V_XY: - results = "YellowBand_V_XY"; - break; - case Column.YellowBand_nm: - results = "YellowBand_nm"; - break; - //case Column.pH: results = "pH"; break; - case Column.Ag: - results = "Ag"; - break; - case Column.Al: - results = "Al"; - break; - case Column.As: - results = "As"; - break; - case Column.Au: - results = "Au"; - break; - case Column.B: - results = "B"; - break; - case Column.Ba: - results = "Ba"; - break; - case Column.Ca: - results = "Ca"; - break; - case Column.Ce: - results = "Ce"; - break; - case Column.Co: - results = "Co"; - break; - case Column.Cr: - results = "Cr"; - break; - case Column.Cu: - results = "Cu"; - break; - case Column.Fe: - results = "Fe"; - break; - case Column.Ga: - results = "Ga"; - break; - case Column.Ge: - results = "Ge"; - break; - case Column.Hf: - results = "Hf"; - break; - case Column.K: - results = "K"; - break; - case Column.Li: - results = "Li"; - break; - case Column.Mg: - results = "Mg"; - break; - case Column.Mn: - results = "Mn"; - break; - case Column.Mo: - results = "Mo"; - break; - case Column.Na: - results = "Na"; - break; - case Column.Ni: - results = "Ni"; - break; - case Column.P: - results = "P"; - break; - case Column.Pb: - results = "Pb"; - break; - case Column.Sn: - results = "Sn"; - break; - case Column.Ta: - results = "Ta"; - break; - case Column.Ti: - results = "Ti"; - break; - case Column.W: - results = "W"; - break; - case Column.Y: - results = "Y"; - break; - case Column.Zn: - results = "Zn"; - break; - default: - throw new Exception(); - } - return results; - } - - public static Description.Param GetParam(this Column column) - { - Description.Param results; - switch (column) - { - //case Column._8in_Total_Warp_Verification: results = Description.Param.String; break; - //case Column.AFM_Monthly_Y: results = Description.Param.String; break; - //case Column.AFM_Monthly: results = Description.Param.String; break; - case Column.AFM_Pit_Count: - results = Description.Param.String; - break; - case Column.AFM_Roughness: - results = Description.Param.String; - break; - //case Column.Adder_Bin_1: results = Description.Param.String; break; - //case Column.Adder_Bin_2: results = Description.Param.String; break; - //case Column.Adder_Bin_3: results = Description.Param.String; break; - //case Column.Adder_Bin_4: results = Description.Param.String; break; - //case Column.Adder_Bin_5: results = Description.Param.String; break; - //case Column.Adder_Bin_6: results = Description.Param.String; break; - //case Column.Adder_Bin_9: results = Description.Param.String; break; - case Column.Al_B_B_WTAVG: - results = Description.Param.String; - break; - case Column.Al_B_B_: - results = Description.Param.String; - break; - case Column.Al_Barrier_WTAVG: - results = Description.Param.String; - break; - case Column.Al_Barrier: - results = Description.Param.String; - break; - case Column.Al_SLS_WTAVG: - results = Description.Param.String; - break; - case Column.Al_SLS: - results = Description.Param.String; - break; - case Column.Al_TL1_WTAVG: - results = Description.Param.String; - break; - case Column.Al_TL1: - results = Description.Param.String; - break; - case Column.Al_TL2_WTAVG: - results = Description.Param.String; - break; - //case Column.BV_Resistance: results = Description.Param.String; break; - case Column.BandEdge_V: - results = Description.Param.String; - break; - case Column.BandEdge_V_XY: - results = Description.Param.String; - break; - case Column.BandEdge_nm: - results = Description.Param.String; - break; - case Column.Barrier_Composition_RPM_XY: - results = Description.Param.String; - break; - case Column.Bow_Calibration: - results = Description.Param.String; - break; - case Column.Bow_Range: - results = Description.Param.String; - break; - case Column.Bow: - results = Description.Param.String; - break; - case Column.BowCenter: - results = Description.Param.String; - break; - case Column.BowX: - results = Description.Param.String; - break; - case Column.BowY: - results = Description.Param.String; - break; - case Column.Breakdown_Voltage_Edge: - results = Description.Param.String; - break; - case Column.Breakdown_VoltageMiddle: - results = Description.Param.String; - break; - case Column.Breakdown_Voltage: - results = Description.Param.String; - break; - case Column.CV_C_at_10V: - results = Description.Param.String; - break; - case Column.CV_Nd_Min: - results = Description.Param.String; - break; - //case Column.Candela_Large_LPD_Quarterly: results = Description.Param.String; break; - //case Column.Candela_Medium_LPD_Quarterly: results = Description.Param.String; break; - //case Column.Candela_Small_LPD_Quarterly: results = Description.Param.String; break; - //case Column.Candela_Total_Quarterly: results = Description.Param.String; break; - case Column.Candela_102_83nm: - results = Description.Param.String; - break; - case Column.Candela_1_1um: - results = Description.Param.String; - break; - case Column.Candela_496nm: - results = Description.Param.String; - break; - case Column.Candela_600nm: - results = Description.Param.String; - break; - case Column.Candela_8620_Small: - results = Description.Param.String; - break; - case Column.Candela_Crack_Verification: - results = Description.Param.String; - break; - case Column.Candela_Cracking: - results = Description.Param.String; - break; - case Column.Candela_Cracking_Acceptable: - results = Description.Param.String; - break; - case Column.Candela_Crater: - results = Description.Param.String; - break; - case Column.Candela_Crater_Verification: - results = Description.Param.String; - break; - case Column.Candela_Haze: - results = Description.Param.String; - break; - case Column.Candela_LPD_Large: - results = Description.Param.String; - break; - case Column.Candela_LPD_Medium: - results = Description.Param.String; - break; - case Column.Candela_LPD_Small: - results = Description.Param.String; - break; - case Column.Candela_Large_Verification: - results = Description.Param.String; - break; - case Column.Candela_Medium_Verification: - results = Description.Param.String; - break; - case Column.Candela_Pits: - results = Description.Param.String; - break; - case Column.Candela_Pits_Verification: - results = Description.Param.String; - break; - case Column.Candela_SPE: - results = Description.Param.String; - break; - case Column.Candela_SPE_Verification: - results = Description.Param.String; - break; - case Column.Candela_Slip: - results = Description.Param.String; - break; - case Column.Candela_Small_Verification: - results = Description.Param.String; - break; - case Column.Candela_Spirals: - results = Description.Param.String; - break; - case Column.Candela_Spirals_Verification: - results = Description.Param.String; - break; - case Column.Candela_Total_Defects: - results = Description.Param.String; - break; - case Column.Candela_Total_PSL: - results = Description.Param.String; - break; - case Column.Candela__1_1um: - results = Description.Param.String; - break; - //case Column.Comment: results = Description.Param.String; break; - //case Column.Conductivity: results = Description.Param.String; break; - case Column.Contact_Symmetry: - results = Description.Param.String; - break; - //case Column.Cracking_verification: results = Description.Param.String; break; - //case Column.Crater_verification: results = Description.Param.String; break; - case Column.Date: - results = Description.Param.String; - break; - case Column.Denton_Crystal_Life: - results = Description.Param.String; - break; - case Column.Denton_Current_AVG: - results = Description.Param.String; - break; - case Column.Denton_Current_STDEV: - results = Description.Param.String; - break; - case Column.Denton_Deposition_Power_AVG: - results = Description.Param.String; - break; - case Column.Denton_Deposition_Power_STDEV: - results = Description.Param.String; - break; - case Column.Denton_Deposition_Rate_AVG: - results = Description.Param.String; - break; - case Column.Denton_Deposition_Rate_STDEV: - results = Description.Param.String; - break; - case Column.Denton_Gun_Pocket: - results = Description.Param.String; - break; - case Column.Denton_Pumpdown_Time: - results = Description.Param.String; - break; - case Column.Denton_Voltage_AVG: - results = Description.Param.String; - break; - case Column.Denton_Voltage_STDEV: - results = Description.Param.String; - break; - case Column.Employee: - results = Description.Param.String; - break; - case Column.Epi_Thickness_Mean: - results = Description.Param.String; - break; - case Column.Epi_Thickness_Mean_XY: - results = Description.Param.String; - break; - case Column.Epi_Thickness_Std_Dev_: - results = Description.Param.String; - break; - case Column.FWHM_006_WTAVG: - results = Description.Param.String; - break; - case Column.FWHM_006: - results = Description.Param.String; - break; - case Column.FWHM_105_WTAVG: - results = Description.Param.String; - break; - case Column.FWHM_105: - results = Description.Param.String; - break; - case Column.Hall_Rs: - results = Description.Param.String; - break; - case Column.Hall_Mobility_verif_sample: - results = Description.Param.String; - break; - case Column.Hall_Ns_verif_sample: - results = Description.Param.String; - break; - case Column.Hall_Rs_verif_sample: - results = Description.Param.String; - break; - case Column.Job: - results = Description.Param.String; - break; - case Column.LEI_RS_Average_value: - results = Description.Param.String; - break; - case Column.LEI_RS_Maximum_value: - results = Description.Param.String; - break; - case Column.LEI_RS_Minimum_value: - results = Description.Param.String; - break; - case Column.LEI_RS_STDEV: - results = Description.Param.String; - break; - case Column.LEI_RS_STDEV_: - results = Description.Param.String; - break; - //case Column.Large_Adder_Sum: results = Description.Param.String; break; - case Column.Lot: - results = Description.Param.String; - break; - //case Column.Medium_Adder_Sum: results = Description.Param.String; break; - case Column.Microscope_Center_5x: - results = Description.Param.String; - break; - case Column.Microscope_Center_50x: - results = Description.Param.String; - break; - case Column.Microscope_Middle_5x: - results = Description.Param.String; - break; - case Column.Microscope_Middle_50x: - results = Description.Param.String; - break; - case Column.Microscope_Edge_5x: - results = Description.Param.String; - break; - case Column.Microscope_Edge_50x: - results = Description.Param.String; - break; - case Column.Mobility_Verification: - results = Description.Param.String; - break; - case Column.Mobility: - results = Description.Param.String; - break; - case Column.Ns_Verification: - results = Description.Param.String; - break; - case Column.PL_Edge_Wavelength: - results = Description.Param.String; - break; - case Column.PL_Ratio: - results = Description.Param.String; - break; - case Column.PR_Barrier_Composition: - results = Description.Param.String; - break; - case Column.PR_Peak: - results = Description.Param.String; - break; - case Column.Part: - results = Description.Param.String; - break; - //case Column.Particles_verification: results = Description.Param.String; break; - //case Column.Pits_verification: results = Description.Param.String; break; - //case Column.Pocket: results = Description.Param.String; break; - //case Column.Post_Bin_1: results = Description.Param.String; break; - //case Column.Post_Bin_2: results = Description.Param.String; break; - //case Column.Post_Bin_3: results = Description.Param.String; break; - //case Column.Post_Bin_4: results = Description.Param.String; break; - //case Column.Post_Bin_5: results = Description.Param.String; break; - //case Column.Post_Bin_6: results = Description.Param.String; break; - //case Column.Post_Bin_9: results = Description.Param.String; break; - //case Column.Pre_Bin_1: results = Description.Param.String; break; - //case Column.Pre_Bin_2: results = Description.Param.String; break; - //case Column.Pre_Bin_3: results = Description.Param.String; break; - //case Column.Pre_Bin_4: results = Description.Param.String; break; - //case Column.Pre_Bin_5: results = Description.Param.String; break; - //case Column.Pre_Bin_6: results = Description.Param.String; break; - //case Column.Pre_Bin_9: results = Description.Param.String; break; - case Column.Process: - results = Description.Param.String; - break; - //case Column.RPM_verif_Thickness_1: results = Description.Param.String; break; - //case Column.RPM_verif_Thickness_2: results = Description.Param.String; break; - //case Column.RPM_verif_Thickness_3: results = Description.Param.String; break; - //case Column.RPM_verif_Thickness_Average: results = Description.Param.String; break; - //case Column.RTA_oxide_Thk_Change: results = Description.Param.String; break; - //case Column.RTA_oxide_post_anneal_Thk: results = Description.Param.String; break; - //case Column.RTA_oxide_pre_anneal_Thk: results = Description.Param.String; break; - case Column.Recipe: - results = Description.Param.String; - break; - //case Column.Resistivity_2_ohm_cm: results = Description.Param.String; break; - //case Column.Resistivity_600_ohm_cm: results = Description.Param.String; break; - case Column.Rs_verification: - results = Description.Param.String; - break; - case Column.Rs_verif_100kohm: - results = Description.Param.String; - break; - case Column.Rs_verif_10ohm: - results = Description.Param.String; - break; - case Column.Rs_verif_1kohm: - results = Description.Param.String; - break; - case Column.SID: - results = Description.Param.String; - break; - case Column.SL_Period_WTAVG: - results = Description.Param.String; - break; - case Column.SL_Period: - results = Description.Param.String; - break; - //case Column.SPE_verification: results = Description.Param.String; break; - //case Column.Sample_ID: results = Description.Param.String; break; - case Column.Sheet_Concentration: - results = Description.Param.String; - break; - //case Column.Size: results = Description.Param.String; break; - //case Column.Small_Adder_Sum: results = Description.Param.String; break; - //case Column.Spirals_verification: results = Description.Param.String; break; - case Column.Time: - results = Description.Param.String; - break; - case Column.Tool_ID: - results = Description.Param.String; - break; - //case Column.Total_LPD_Adder: results = Description.Param.String; break; - //case Column.Total_Verification: results = Description.Param.String; break; - case Column.Total_Warp_Calibration: - results = Description.Param.String; - break; - case Column.UV_Broken: - results = Description.Param.String; - break; - case Column.UV_Chipping: - results = Description.Param.String; - break; - case Column.UV_Cracking_0_3mm_: - results = Description.Param.String; - break; - case Column.UV_Cracking_3_7mm_: - results = Description.Param.String; - break; - case Column.UV_Cracking_7mm_: - results = Description.Param.String; - break; - case Column.UV_Crazing: - results = Description.Param.String; - break; - case Column.UV_Crazing_Acceptable: - results = Description.Param.String; - break; - case Column.UV_FULL_Characterization_Wafer: - results = Description.Param.String; - break; - case Column.UV_Haze_count_: - results = Description.Param.String; - break; - case Column.UV_LIGHT_Characterization_Wafer: - results = Description.Param.String; - break; - case Column.UV_Non_rotation: - results = Description.Param.String; - break; - case Column.UV_Other: - results = Description.Param.String; - break; - case Column.UV_Scratch_count_: - results = Description.Param.String; - break; - case Column.UV_Slip_count_: - results = Description.Param.String; - break; - case Column.UV_True_Haze: - results = Description.Param.String; - break; - case Column.UV_True_Haze_Acceptable: - results = Description.Param.String; - break; - case Column.UV_SPE_1mm_count: - results = Description.Param.String; - break; - case Column.UV_SPE_count_: - results = Description.Param.String; - break; - case Column.Verification_Contact_Symmetry: - results = Description.Param.String; - break; - case Column.Vp_Pinch_Off_Voltage: - results = Description.Param.String; - break; - case Column.Wafer_ID: - results = Description.Param.String; - break; - //case Column.Wafer_Pocket: results = Description.Param.String; break; - case Column.Wafer_Region: - results = Description.Param.String; - break; - case Column.Wafer_Scribe: - results = Description.Param.String; - break; - case Column.WaferPocket_Candela: - results = Description.Param.String; - break; - case Column.WaferPocket_Warp: - results = Description.Param.String; - break; - case Column.WaferPosition_CV: - results = Description.Param.String; - break; - case Column.WaferPosition_BV: - results = Description.Param.String; - break; - case Column.WaferPosition_Hall: - results = Description.Param.String; - break; - case Column.WaferPosition_PR: - results = Description.Param.String; - break; - case Column.Warp: - results = Description.Param.String; - break; - case Column.X_Coord: - results = Description.Param.String; - break; - case Column.XRD_2_Theta_Peak_002: - results = Description.Param.String; - break; - case Column.XRD_2_Theta_Peak_101: - results = Description.Param.String; - break; - case Column.XRD_2_Theta_Position: - results = Description.Param.String; - break; - case Column.XRD_2_Theta_Position_Si_1: - results = Description.Param.String; - break; - case Column.XRD_2_Theta_Position_Si_2: - results = Description.Param.String; - break; - case Column.XRD_2_Theta_Position_Si_3: - results = Description.Param.String; - break; - case Column.XRD_Peak_002_Intensity: - results = Description.Param.String; - break; - case Column.XRD_Peak_101_Intensity: - results = Description.Param.String; - break; - case Column.XRD_Weekly_AL_Center: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Back_Barrier_Al_: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Barrier_Al_: - results = Description.Param.String; - break; - case Column.XRD_Weekly_FWHM_002: - results = Description.Param.String; - break; - case Column.XRD_Weekly_FWHM_101: - results = Description.Param.String; - break; - case Column.XRD_Weekly_FWHM_105: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Fringe_thick_0_0_: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Fringe_thick_48_48_: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Intensity: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Super_Lattice_Al_: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Super_Lattice_period: - results = Description.Param.String; - break; - case Column.XRD_Weekly_Super_Lattice_tks: - results = Description.Param.String; - break; - case Column.XRR_Thickness_nm_WTAVG: - results = Description.Param.String; - break; - case Column.XRR_Thickness_nm_: - results = Description.Param.String; - break; - case Column.Y_Coord: - results = Description.Param.String; - break; - case Column.YellowBand_Power_mW_: - results = Description.Param.String; - break; - case Column.YellowBand_V: - results = Description.Param.String; - break; - case Column.YellowBand_V_XY: - results = Description.Param.String; - break; - case Column.YellowBand_nm: - results = Description.Param.String; - break; - //case Column.pH: results = Description.Param.String; break; - case Column.Ag: - results = Description.Param.String; - break; - case Column.Al: - results = Description.Param.String; - break; - case Column.As: - results = Description.Param.String; - break; - case Column.Au: - results = Description.Param.String; - break; - case Column.B: - results = Description.Param.String; - break; - case Column.Ba: - results = Description.Param.String; - break; - case Column.Ca: - results = Description.Param.String; - break; - case Column.Ce: - results = Description.Param.String; - break; - case Column.Co: - results = Description.Param.String; - break; - case Column.Cr: - results = Description.Param.String; - break; - case Column.Cu: - results = Description.Param.String; - break; - case Column.Fe: - results = Description.Param.String; - break; - case Column.Ga: - results = Description.Param.String; - break; - case Column.Ge: - results = Description.Param.String; - break; - case Column.Hf: - results = Description.Param.String; - break; - case Column.K: - results = Description.Param.String; - break; - case Column.Li: - results = Description.Param.String; - break; - case Column.Mg: - results = Description.Param.String; - break; - case Column.Mn: - results = Description.Param.String; - break; - case Column.Mo: - results = Description.Param.String; - break; - case Column.Na: - results = Description.Param.String; - break; - case Column.Ni: - results = Description.Param.String; - break; - case Column.P: - results = Description.Param.String; - break; - case Column.Pb: - results = Description.Param.String; - break; - case Column.Sn: - results = Description.Param.String; - break; - case Column.Ta: - results = Description.Param.String; - break; - case Column.Ti: - results = Description.Param.String; - break; - case Column.W: - results = Description.Param.String; - break; - case Column.Y: - results = Description.Param.String; - break; - case Column.Zn: - results = Description.Param.String; - break; - default: - throw new Exception(); - } - return results; - } - - } - - public enum Column - { - //_8in_Total_Warp_Verification, - //AFM_Monthly_Y, - //AFM_Monthly, - AFM_Pit_Count, - AFM_Roughness, - //Adder_Bin_1, - //Adder_Bin_2, - //Adder_Bin_3, - //Adder_Bin_4, - //Adder_Bin_5, - //Adder_Bin_6, - //Adder_Bin_9, - Al_B_B_WTAVG, - Al_B_B_, - Al_Barrier_WTAVG, - Al_Barrier, - Al_SLS_WTAVG, - Al_SLS, - Al_TL1_WTAVG, - Al_TL1, - Al_TL2_WTAVG, - //BV_Resistance, - BandEdge_V, - BandEdge_V_XY, - BandEdge_nm, - Barrier_Composition_RPM_XY, - Bow_Calibration, - Bow_Range, - Bow, - BowCenter, - BowX, - BowY, - Breakdown_Voltage_Edge, - Breakdown_VoltageMiddle, - Breakdown_Voltage, - CV_C_at_10V, - CV_Nd_Min, - //Candela_Large_LPD_Quarterly, - //Candela_Medium_LPD_Quarterly, - //Candela_Small_LPD_Quarterly, - //Candela_Total_Quarterly, - Candela_102_83nm, - Candela_1_1um, - Candela_496nm, - Candela_600nm, - Candela_8620_Small, - Candela_Crack_Verification, - Candela_Cracking, - Candela_Cracking_Acceptable, - Candela_Crater, - Candela_Crater_Verification, - Candela_Haze, - Candela_LPD_Large, - Candela_LPD_Medium, - Candela_LPD_Small, - Candela_Large_Verification, - Candela_Medium_Verification, - Candela_Pits, - Candela_Pits_Verification, - Candela_SPE, - Candela_SPE_Verification, - Candela_Slip, - Candela_Small_Verification, - Candela_Spirals, - Candela_Spirals_Verification, - Candela_Total_Defects, - Candela_Total_PSL, - Candela__1_1um, - //Comment, - //Conductivity, - Contact_Symmetry, - //Cracking_verification, - //Crater_verification, - Date, - Denton_Crystal_Life, - Denton_Current_AVG, - Denton_Current_STDEV, - Denton_Deposition_Power_AVG, - Denton_Deposition_Power_STDEV, - Denton_Deposition_Rate_AVG, - Denton_Deposition_Rate_STDEV, - Denton_Gun_Pocket, - Denton_Pumpdown_Time, - Denton_Voltage_AVG, - Denton_Voltage_STDEV, - Employee, - Epi_Thickness_Mean, - Epi_Thickness_Mean_XY, - Epi_Thickness_Std_Dev_, - FWHM_006_WTAVG, - FWHM_006, - FWHM_105_WTAVG, - FWHM_105, - Hall_Rs, - Hall_Mobility_verif_sample, - Hall_Ns_verif_sample, - Hall_Rs_verif_sample, - Job, - LEI_RS_Average_value, - LEI_RS_Maximum_value, - LEI_RS_Minimum_value, - LEI_RS_STDEV, - LEI_RS_STDEV_, - //Large_Adder_Sum, - Lot, - //Medium_Adder_Sum, - Microscope_Center_50x, - Microscope_Center_5x, - Microscope_Edge_50x, - Microscope_Edge_5x, - Microscope_Middle_50x, - Microscope_Middle_5x, - Mobility_Verification, - Mobility, - Ns_Verification, - PL_Edge_Wavelength, - PL_Ratio, - PR_Barrier_Composition, - PR_Peak, - Part, - //Particles_verification, - //Pits_verification, - //Pocket, - //Post_Bin_1, - //Post_Bin_2, - //Post_Bin_3, - //Post_Bin_4, - //Post_Bin_5, - //Post_Bin_6, - //Post_Bin_9, - //Pre_Bin_1, - //Pre_Bin_2, - //Pre_Bin_3, - //Pre_Bin_4, - //Pre_Bin_5, - //Pre_Bin_6, - //Pre_Bin_9, - Process, - //RPM_verif_Thickness_1, - //RPM_verif_Thickness_2, - //RPM_verif_Thickness_3, - //RPM_verif_Thickness_Average, - //RTA_oxide_Thk_Change, - //RTA_oxide_post_anneal_Thk, - //RTA_oxide_pre_anneal_Thk, - Recipe, - //Resistivity_2_ohm_cm, - //Resistivity_600_ohm_cm, - Rs_verification, - Rs_verif_100kohm, - Rs_verif_10ohm, - Rs_verif_1kohm, - SID, - SL_Period_WTAVG, - SL_Period, - //SPE_verification, - //Sample_ID, - Sheet_Concentration, - //Size, - //Small_Adder_Sum, - //Spirals_verification, - Time, - Tool_ID, - //Total_LPD_Adder, - //Total_Verification, - Total_Warp_Calibration, - UV_Broken, - UV_Chipping, - UV_Cracking_0_3mm_, - UV_Cracking_3_7mm_, - UV_Cracking_7mm_, - UV_Crazing, - UV_Crazing_Acceptable, - UV_FULL_Characterization_Wafer, - UV_Haze_count_, - UV_LIGHT_Characterization_Wafer, - UV_Non_rotation, - UV_Other, - UV_Scratch_count_, - UV_Slip_count_, - UV_True_Haze, - UV_True_Haze_Acceptable, - UV_SPE_1mm_count, - UV_SPE_count_, - Verification_Contact_Symmetry, - Vp_Pinch_Off_Voltage, - Wafer_ID, - //Wafer_Pocket, - Wafer_Region, - Wafer_Scribe, - WaferPocket_Candela, - WaferPocket_Warp, - WaferPosition_CV, - WaferPosition_BV, - WaferPosition_Hall, - WaferPosition_PR, - Warp, - X_Coord, - XRD_2_Theta_Peak_002, - XRD_2_Theta_Peak_101, - XRD_2_Theta_Position, - XRD_2_Theta_Position_Si_1, - XRD_2_Theta_Position_Si_2, - XRD_2_Theta_Position_Si_3, - XRD_Peak_002_Intensity, - XRD_Peak_101_Intensity, - XRD_Weekly_AL_Center, - XRD_Weekly_Back_Barrier_Al_, - XRD_Weekly_Barrier_Al_, - XRD_Weekly_FWHM_002, - XRD_Weekly_FWHM_101, - XRD_Weekly_FWHM_105, - XRD_Weekly_Fringe_thick_0_0_, - XRD_Weekly_Fringe_thick_48_48_, - XRD_Weekly_Intensity, - XRD_Weekly_Super_Lattice_Al_, - XRD_Weekly_Super_Lattice_period, - XRD_Weekly_Super_Lattice_tks, - XRR_Thickness_nm_, - XRR_Thickness_nm_WTAVG, - Y_Coord, - YellowBand_Power_mW_, - YellowBand_V, - YellowBand_V_XY, - YellowBand_nm, - //pH, - Ag, - Al, - As, - Au, - B, - Ba, - Ca, - Ce, - Co, - Cr, - Cu, - Fe, - Ga, - Ge, - Hf, - K, - Li, - Mg, - Mn, - Mo, - Na, - Ni, - P, - Pb, - Sn, - Ta, - Ti, - W, - Y, - Zn - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/ConfigDataBase.cs b/Adaptation/Shared/Metrology/ConfigDataBase.cs deleted file mode 100644 index d89d907..0000000 --- a/Adaptation/Shared/Metrology/ConfigDataBase.cs +++ /dev/null @@ -1,419 +0,0 @@ -using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace Adaptation.Shared.Metrology -{ - - public class ConfigDataBase - { - - public bool UseCyclicalForDescription { get; protected set; } - public Dictionary CellNames { get; protected set; } - public Dictionary MesEntities { get; protected set; } - public IProcessDataDescription ProcessDataDescription { get; protected set; } - - public bool IsEvent { get; private set; } - public bool EafHosted { get; private set; } - public string CellName { get; private set; } - public bool IsSourceTimer { get; private set; } - public EquipmentType EquipmentType => _EquipmentType; - public string EquipmentElementName { get; private set; } - public bool IsDatabaseExportToIPDSF { get; private set; } - public EquipmentType? EquipmentConnection => _EquipmentConnection; - public FileConnectorConfiguration FileConnectorConfiguration { get; private set; } - - protected readonly EventName _EventName; - protected readonly EquipmentType _EquipmentType; - protected readonly EquipmentType? _EquipmentConnection; - protected readonly Dictionary _Reactors; - - public ConfigDataBase(string cellName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, bool isEAFHosted) - { - CellName = cellName; - EafHosted = isEAFHosted; - EquipmentType equipmentTypeValue; - _Reactors = new Dictionary(); - CellNames = new Dictionary(); - MesEntities = new Dictionary(); - EquipmentElementName = cellInstanceConnectionName; - FileConnectorConfiguration = fileConnectorConfiguration; - string[] segments = parameterizedModelObjectDefinitionType.Split('.'); - IsSourceTimer = (fileConnectorConfiguration.SourceFileFilter.StartsWith("*Timer.txt")); - string cellInstanceConnectionNameBase = cellInstanceConnectionName.Replace("-", string.Empty); - IsDatabaseExportToIPDSF = (fileConnectorConfiguration.SourceFileLocation.Contains("DatabaseExport")); - if (!Enum.TryParse(segments[segments.Length - 1], out EventName eventNameValue)) - throw new Exception(cellInstanceConnectionName); - if (!Enum.TryParse(cellInstanceConnectionNameBase, out equipmentTypeValue)) - _EquipmentConnection = null; - else - _EquipmentConnection = equipmentTypeValue; - string suffix; - switch (eventNameValue) - { - case EventName.FileRead: - suffix = string.Empty; - break; - case EventName.FileReadDaily: - suffix = "_Daily"; - break; - case EventName.FileReadWeekly: - suffix = "_Weekly"; - break; - case EventName.FileReadMonthly: - suffix = "_Monthly"; - break; - case EventName.FileReadVerification: - suffix = "_Verification"; - break; - default: - throw new Exception(cellInstanceConnectionName); - } - string parameterizedModelObjectDefinitionTypeAppended = string.Concat(segments[0], suffix); - IsEvent = cellInstanceConnectionNameBase != parameterizedModelObjectDefinitionTypeAppended; - _EventName = eventNameValue; - if (!Enum.TryParse(parameterizedModelObjectDefinitionTypeAppended, out equipmentTypeValue)) - throw new Exception(cellInstanceConnectionName); - _EquipmentType = equipmentTypeValue; - if (!isEAFHosted && equipmentTypeName != parameterizedModelObjectDefinitionTypeAppended) - throw new Exception(cellInstanceConnectionName); - } - - public string GetEventName() - { - string result = _EventName.ToString(); - return result; - } - - public EventName GetEventNameValue() - { - EventName result = _EventName; - return result; - } - - public string GetEquipmentType() - { - string result; - if (_EquipmentConnection is null) - result = _EquipmentType.ToString(); - else - result = _EquipmentConnection.Value.ToString(); - return result; - } - - public string GetEventDescription() - { - string result = ProcessDataDescription.GetEventDescription(); - return result; - } - - public IProcessDataDescription GetDefault(ILogic logic) - { - IProcessDataDescription result = ProcessDataDescription.GetDefault(logic, this); - return result; - } - - public IProcessDataDescription GetDisplayNames(ILogic logic) - { - IProcessDataDescription result = ProcessDataDescription.GetDisplayNames(logic, this); - return result; - } - - public List GetDetailNames(ILogic logic) - { - List results = ProcessDataDescription.GetDetailNames(logic, this); - return results; - } - - public List GetHeaderNames(ILogic logic) - { - List results = ProcessDataDescription.GetHeaderNames(logic, this); - return results; - } - - public List GetNames(ILogic logic) - { - List results = ProcessDataDescription.GetNames(logic, this); - return results; - } - - public List GetPairedParameterNames(ILogic logic) - { - List results = ProcessDataDescription.GetPairedParameterNames(logic, this); - return results; - } - - public List GetParameterNames(ILogic logic) - { - List results = ProcessDataDescription.GetParameterNames(logic, this); - return results; - } - - public List GetDescription(ILogic logic, List tests, IProcessData iProcessData) - { - List results = ProcessDataDescription.GetDescription(logic, this, tests, iProcessData); - return results; - } - - public string GetCurrentReactor(ILogic logic) - { - string result = string.Empty; - foreach (KeyValuePair keyValuePair in _Reactors) - { - foreach (string filePrefix in keyValuePair.Value.Split('|')) - { - if (logic.Logistics.MID.StartsWith(filePrefix) || (_EventName != EventName.FileRead && MesEntities.ContainsKey(logic.Logistics.JobID) && keyValuePair.Value == MesEntities[logic.Logistics.JobID])) - { - result = keyValuePair.Key; - break; - } - } - } - if (string.IsNullOrEmpty(result) && _Reactors.Count == 1) - result = _Reactors.ElementAt(0).Key; - return result; - } - - protected JsonElement GetDefaultJsonElement(ILogic logic) - { - JsonElement result; - IProcessDataDescription processDataDescription = ProcessDataDescription.GetDefault(logic, this); - string json = JsonSerializer.Serialize(processDataDescription, processDataDescription.GetType()); - object @object = JsonSerializer.Deserialize(json); - result = (JsonElement)@object; - return result; - } - - public Dictionary>> GetParameterInfo(ILogic logic, bool allowNull) - { - Dictionary>> results = new Dictionary>>(); - string description; - Enum param; - Tuple tuple; - JsonElement defaultJsonElement = GetDefaultJsonElement(logic); - Dictionary keyValuePairs = GetDisplayNamesJsonElement(logic); - foreach (JsonProperty jsonProperty in defaultJsonElement.EnumerateObject()) - { - if (jsonProperty.Value.ValueKind == JsonValueKind.Null && !allowNull) - throw new Exception(); - if (jsonProperty.Value.ValueKind == JsonValueKind.Object || jsonProperty.Value.ValueKind == JsonValueKind.Array) - { - description = string.Empty; - param = Description.Param.StructuredType; - //jValue = jObject.Value("Item1"); - throw new NotImplementedException("Item1"); - } - else - { - switch (jsonProperty.Value.ValueKind) - { - case JsonValueKind.String: - param = Description.Param.String; - break; - case JsonValueKind.Number: - param = Description.Param.Double; - break; - case JsonValueKind.True: - case JsonValueKind.False: - param = Description.Param.Boolean; - break; - case JsonValueKind.Null: - param = Description.Param.String; - break; - default: - param = Description.Param.StructuredType; - break; - } - } - if (!keyValuePairs.ContainsKey(jsonProperty.Name)) - description = string.Empty; - else - description = keyValuePairs[jsonProperty.Name]; - tuple = new Tuple(param, jsonProperty.Name, description, jsonProperty.Value.ToString()); - if (!results.ContainsKey(jsonProperty.Name)) - results.Add(jsonProperty.Name, new List>()); - results[jsonProperty.Name].Add(tuple); - } - return results; - } - - protected void WriteExportAliases(ILogic logic, string cellName, string equipmentElementName) - { - int i = 0; - Enum param; - object value; - Enum[] @params; - string description; - StringBuilder stringBuilder = new StringBuilder(); - string shareRoot = @"\\messv02ecc1.ec.local\EC_EDA"; - string shareDirectory = string.Concat(shareRoot, @"\Staging\Pdsf\", cellName, @"\ExportAliases\", equipmentElementName); - Dictionary>> keyValuePairs; - if (!(logic is null)) - keyValuePairs = GetParameterInfo(logic, allowNull: false); - else - keyValuePairs = new Dictionary>>(); - stringBuilder.AppendLine("\"AliasName\";\"Condition\";\"EventId\";\"ExceptionId\";\"Formula\";\"HardwareId\";\"OrderId\";\"ParameterName\";\"Remark\";\"ReportName\";\"SourceId\";\"Use\""); - if (!Directory.Exists(shareRoot)) - return; - if (!Directory.Exists(shareDirectory)) - Directory.CreateDirectory(shareDirectory); - string shareFile = string.Concat(shareDirectory, @"\", DateTime.Now.Ticks, ".csv"); - foreach (KeyValuePair>> keyValuePair in keyValuePairs) - { - i += 1; - @params = (from l in keyValuePair.Value select l.Item1).Distinct().ToArray(); - if (@params.Length != 1) - throw new Exception(); - if (keyValuePair.Value[0].Item2 != keyValuePair.Key) - throw new Exception(); - param = @params[0]; - if (!(param is Description.Param.String)) - stringBuilder.AppendLine($"\"{keyValuePair.Key}\";\"\";\"\";\"\";\"\";\"\";\"{i}\";\"{cellName}/{EquipmentElementName}/{keyValuePair.Key}\";\"\";\"{cellName}/{EquipmentElementName}/{_EventName}\";\"\";\"True\""); - else - { - description = keyValuePair.Value[0].Item3.Split('|')[0]; - if (string.IsNullOrEmpty(description)) - continue; - value = keyValuePair.Value[0].Item4; - stringBuilder.AppendLine($"\"'{description}'\";\"\";\"\";\"\";\"\";\"\";\"{i}\";\"{cellName}/{EquipmentElementName}/{value}\";\"\";\"{cellName}/{EquipmentElementName}/{_EventName}\";\"\";\"True\""); - } - } - if (keyValuePairs.Any()) - File.WriteAllText(shareFile, stringBuilder.ToString()); - } - - public Dictionary GetDisplayNamesJsonElement(ILogic logic) - { - Dictionary results = new Dictionary(); - IProcessDataDescription processDataDescription = ProcessDataDescription.GetDisplayNames(logic, this); - string json = JsonSerializer.Serialize(processDataDescription, processDataDescription.GetType()); - JsonElement jsonElement = JsonSerializer.Deserialize(json); - foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) - { - if (!results.ContainsKey(jsonProperty.Name)) - results.Add(jsonProperty.Name, string.Empty); - if (jsonProperty.Value is JsonElement jsonPropertyValue) - results[jsonProperty.Name] = jsonPropertyValue.ToString(); - } - return results; - } - - public List GetIgnoreParameterNames(ILogic logic, Test test, bool includePairedParameterNames) - { - List results = ProcessDataDescription.GetIgnoreParameterNames(logic, this, test); - if (includePairedParameterNames) - { - string value; - List pairedParameterNames = ProcessDataDescription.GetPairedParameterNames(logic, this); - IProcessDataDescription processDataDescription = ProcessDataDescription.GetDisplayNames(logic, this); - string json = JsonSerializer.Serialize(processDataDescription, processDataDescription.GetType()); - object @object = JsonSerializer.Deserialize(json); - if (!(@object is JsonElement jsonElement)) - throw new Exception(); - foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) - { - if (jsonProperty.Value.ValueKind == JsonValueKind.Object || jsonProperty.Value.ValueKind == JsonValueKind.Array) - throw new Exception(); - value = jsonProperty.Value.ToString(); - if (!results.Contains(jsonProperty.Name) && pairedParameterNames.Contains(jsonProperty.Name) && (string.IsNullOrEmpty(value) || value[0] == '|')) - results.Add(jsonProperty.Name); - } - } - return results; - } - - public List GetProcessDataDescriptions(JsonElement jsonElement) - { - List results; - if (jsonElement.ValueKind != JsonValueKind.Array) - throw new Exception(); - JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString }; - results = JsonSerializer.Deserialize>(jsonElement.ToString(), jsonSerializerOptions); - return results; - } - - public Dictionary> GetKeyValuePairs(List processDataDescriptions) - { - Dictionary> results = new Dictionary>(); - Test testKey; - for (int i = 0; i < processDataDescriptions.Count; i++) - { - testKey = (Test)processDataDescriptions[i].Test; - if (!results.ContainsKey(testKey)) - results.Add(testKey, new List()); - results[testKey].Add(processDataDescriptions[i]); - } - return results; - } - - public Dictionary> GetKeyValuePairs(JsonElement jsonElement, List processDataDescriptions, Test test) - { - Dictionary> results = new Dictionary>(); - Test testKey; - if (jsonElement.ValueKind != JsonValueKind.Array) - throw new Exception(); - JsonElement[] jsonElements = jsonElement.EnumerateArray().ToArray(); - if (processDataDescriptions.Count != jsonElements.Length) - throw new Exception(); - for (int i = 0; i < processDataDescriptions.Count; i++) - { - testKey = (Test)processDataDescriptions[i].Test; - if (testKey != test) - continue; - foreach (JsonProperty jsonProperty in jsonElements[i].EnumerateObject()) - { - if (jsonProperty.Value.ValueKind == JsonValueKind.Object || jsonProperty.Value.ValueKind == JsonValueKind.Array) - throw new Exception(); - if (!results.ContainsKey(jsonProperty.Name)) - results.Add(jsonProperty.Name, new List()); - results[jsonProperty.Name].Add(jsonProperty.Value.ToString()); - } - } - return results; - } - - protected void VerifyProcessDataDescription(ILogic logic) - { - string description; - bool allowNull = false; - JsonElement defaultJsonElement = GetDefaultJsonElement(logic); - Dictionary keyValuePairs = GetDisplayNamesJsonElement(logic); - JsonProperty[] jsonProperties = defaultJsonElement.EnumerateObject().ToArray(); - foreach (JsonProperty jsonProperty in jsonProperties) - { - if (jsonProperty.Value.ValueKind == JsonValueKind.Null && !allowNull) - throw new Exception(); - if (!(jsonProperty.Value.ValueKind is JsonValueKind.String) || !keyValuePairs.ContainsKey(jsonProperty.Name)) - description = string.Empty; - else - description = keyValuePairs[jsonProperty.Name].Split('|')[0]; - } - } - - public List GetIProcessDataDescriptions(JsonElement jsonElement) - { - List results = new List(); - if (jsonElement.ValueKind != JsonValueKind.Array) - throw new Exception(); - object @object; - Type type = ProcessDataDescription.GetType(); - JsonElement[] jsonElements = jsonElement.EnumerateArray().ToArray(); - JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString }; - for (int i = 0; i < jsonElements.Length; i++) - { - @object = JsonSerializer.Deserialize(jsonElements[i].ToString(), type, jsonSerializerOptions); - if (!(@object is IProcessDataDescription processDataDescription)) - continue; - results.Add(processDataDescription); - } - return results; - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/EventName.cs b/Adaptation/Shared/Metrology/EventName.cs deleted file mode 100644 index 0a1cf0d..0000000 --- a/Adaptation/Shared/Metrology/EventName.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace Adaptation.Shared.Metrology -{ - - public enum EventName - { - FileRead, - FileReadDaily, - FileReadMonthly, - FileReadVerification, - FileReadWeekly - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/ILogic.cs b/Adaptation/Shared/Metrology/ILogic.cs deleted file mode 100644 index 01176cf..0000000 --- a/Adaptation/Shared/Metrology/ILogic.cs +++ /dev/null @@ -1,45 +0,0 @@ -using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; -using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection; -using System.Text.Json; - -namespace Adaptation.Shared.Metrology -{ - - public interface ILogic - { - - ILogic ShallowCopy(); - Logistics Logistics { get; } - - void ConfigurationRestore(); - string GetConfigurationErrorTargetFileLocation(); - string GetConfigurationSourceFileLocation(); - string GetConfigurationTarget2FileLocation(); - string GetConfigurationTargetFileLocation(); - string GetConfigurationTargetFileName(); - Tuple> GetExtractResult(string reportFullPath, string eventName); - object GetFilePathGeneratorInfo(string reportFullPath, bool isErrorFile); - string GetReportFullPath(Dictionary keyValuePairs); - string GetTarget2FileLocation(); - void Move(string reportFullPath, Tuple> extractResults, Exception exception = null); - Tuple> ReExtract(string searchDirectory, string sourceFileFilter); - void ReflectionCreateSelfDescription(string equipmentElementName, int? input, string cellName, string debugConfig, string[] strings, bool[] booleans, long[] numbers, string[] enums); - ConfigDataBase ReflectionCreateSelfDescriptionV2(string json); - string ResolveErrorTargetPlaceHolders(string reportFullPath, bool createDirectory = true, string fileFoundPath = ""); - string ResolveSourcePlaceHolders(string reportFullPath, bool createDirectory = true); - string ResolveTarget2PlaceHolders(string reportFullPath, bool createDirectory = true, string fileFoundPath = ""); - string ResolveTargetPlaceHolders(string reportFullPath, bool createDirectory = true, string fileFoundPath = ""); - void SetFileParameter(string key, string value); - void SetFileParameterLotID(string value, bool includeLogisticsSequence = false); - void SetFileParameterLotIDToLogisticsMID(bool includeLogisticsSequence = true); - void SetFileParameterSystemDateTimeToLogisticsSequence(); - void SetPlaceHolder(string reportFullPath, string key, string value); - void SetTarget2FileLocation(string value); - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/MET08DDUPSFS6420.cs b/Adaptation/Shared/Metrology/MET08DDUPSFS6420.cs deleted file mode 100644 index 2214dc4..0000000 --- a/Adaptation/Shared/Metrology/MET08DDUPSFS6420.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Adaptation.Shared.Metrology -{ - - public class MET08DDUPSFS6420 - { - - public enum Test - { - Tencor = Metrology.Test.Tencor - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/MET08DDUPSP1TBI.cs b/Adaptation/Shared/Metrology/MET08DDUPSP1TBI.cs deleted file mode 100644 index 751e9a4..0000000 --- a/Adaptation/Shared/Metrology/MET08DDUPSP1TBI.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Adaptation.Shared.Metrology -{ - - public class MET08DDUPSP1TBI - { - - public enum Test - { - SP1 = Metrology.Test.SP1 - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/MET08RESIHGCV.cs b/Adaptation/Shared/Metrology/MET08RESIHGCV.cs deleted file mode 100644 index 36d411f..0000000 --- a/Adaptation/Shared/Metrology/MET08RESIHGCV.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Adaptation.Shared.Metrology -{ - - public class MET08RESIHGCV - { - - public enum Test - { - HgCV = Metrology.Test.HgCV - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/MET08RESIMAPCDE.cs b/Adaptation/Shared/Metrology/MET08RESIMAPCDE.cs deleted file mode 100644 index 2628764..0000000 --- a/Adaptation/Shared/Metrology/MET08RESIMAPCDE.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Adaptation.Shared.Metrology -{ - - public class MET08RESIMAPCDE - { - - public enum Test - { - CDE = Metrology.Test.CDE - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/MET08THFTIRQS408M.cs b/Adaptation/Shared/Metrology/MET08THFTIRQS408M.cs deleted file mode 100644 index 07aa62d..0000000 --- a/Adaptation/Shared/Metrology/MET08THFTIRQS408M.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Adaptation.Shared.Metrology -{ - - public class MET08THFTIRQS408M - { - - public enum Test - { - BioRadQS408M = Metrology.Test.BioRadQS408M - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/MET08THFTIRSTRATUS.cs b/Adaptation/Shared/Metrology/MET08THFTIRSTRATUS.cs deleted file mode 100644 index 4e4ce83..0000000 --- a/Adaptation/Shared/Metrology/MET08THFTIRSTRATUS.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Adaptation.Shared.Metrology -{ - - public class MET08THFTIRSTRATUS - { - - public enum Test - { - BioRadStratus = Metrology.Test.BioRadStratus - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/MET08XRDXPERTPROMRDXL.cs b/Adaptation/Shared/Metrology/MET08XRDXPERTPROMRDXL.cs deleted file mode 100644 index 15dc076..0000000 --- a/Adaptation/Shared/Metrology/MET08XRDXPERTPROMRDXL.cs +++ /dev/null @@ -1,23 +0,0 @@ -namespace Adaptation.Shared.Metrology -{ - - public class MET08XRDXPERTPROMRDXL - { - - public enum Test - { - XRDXY = Metrology.Test.XRDXY, - XRDWeightedAverage = Metrology.Test.XRDWeightedAverage, - MonthlyXRD = Metrology.Test.MonthlyXRD, - WeeklyXRD = Metrology.Test.WeeklyXRD, - WeeklyXRDAIcomp = Metrology.Test.WeeklyXRDAIcomp, - WeeklyXRDFWHM002 = Metrology.Test.WeeklyXRDFWHM002, - WeeklyXRDFWHM105 = Metrology.Test.WeeklyXRDFWHM105, - WeeklyXRDSLStks = Metrology.Test.WeeklyXRDSLStks, - WeeklyXRDXRR = Metrology.Test.WeeklyXRDXRR, - JVXRD = Metrology.Test.JVXRD - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/OISiViewer.cs b/Adaptation/Shared/Metrology/OISiViewer.cs deleted file mode 100644 index d29b992..0000000 --- a/Adaptation/Shared/Metrology/OISiViewer.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; - -namespace Adaptation.Shared.Metrology -{ - - internal class OISiViewer - { - - private static System.Net.WebClient _WebClient; - - internal static string WebClientDownloadString(string baseAddress, ConfigDataBase configDataBase, string reportFullPath, bool isErrorFile, string target) - { - string result = string.Empty; - if (System.Diagnostics.Debugger.IsAttached) - result = DateTime.Now.ToString(); - else - { - if (string.IsNullOrEmpty(baseAddress) || !baseAddress.Contains(":") || !baseAddress.Contains(".")) - throw new Exception("Invalid URL"); - try - { - if (_WebClient is null) - _WebClient = new System.Net.WebClient(); - string address = string.Concat(baseAddress, "/Home/ExtractMove/?equipment_connection=", configDataBase.GetEquipmentType(), "&is_error_file=", isErrorFile); - _WebClient.OpenRead(address); - result = _WebClient.ResponseHeaders["Date"]; - _WebClient.CancelAsync(); - } - catch (Exception) { } - } - return result; - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/ProcessData.Duplicator.cs b/Adaptation/Shared/Metrology/ProcessData.Duplicator.cs deleted file mode 100644 index 1a7dc26..0000000 --- a/Adaptation/Shared/Metrology/ProcessData.Duplicator.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text.Json; - -namespace Adaptation.Shared.Metrology -{ - - public class Duplicator - { - - public class Description : IProcessDataDescription - { - - public int Test { get; set; } - public int Count { get; set; } - public int Index { get; set; } - // - public string EventName { get; set; } - public string NullData { get; set; } - public string JobID { get; set; } - public string Sequence { get; set; } - public string MesEntity { get; set; } - public string ReportFullPath { get; set; } - public string ProcessJobID { get; set; } - public string MID { get; set; } - public string Date { get; set; } //2021-02-22 - - public string GetEventDescription() { return "File Has been read and parsed"; } - - public List GetHeaderNames(ILogic logic, ConfigDataBase configDataBase) - { - List results = new List(); - return results; - } - - public List GetDetailNames(ILogic logic, ConfigDataBase configDataBase) - { - List results = new List(); - return results; - } - - public List GetParameterNames(ILogic logic, ConfigDataBase configDataBase) - { - List results = new List(); - return results; - } - - public List GetPairedParameterNames(ILogic logic, ConfigDataBase configDataBase) - { - List results = new List(); - return results; - } - - public List GetIgnoreParameterNames(ILogic logic, ConfigDataBase configDataBase, Test test) - { - List results = new List(); - return results; - } - - public List GetNames(ILogic logic, ConfigDataBase configDataBase) - { - List results = new List(); - IProcessDataDescription processDataDescription = GetDefault(logic, configDataBase); - string json = JsonSerializer.Serialize(processDataDescription, processDataDescription.GetType()); - object @object = JsonSerializer.Deserialize(json); - if (!(@object is JsonElement jsonElement)) - throw new Exception(); - foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) - results.Add(jsonProperty.Name); - return results; - } - - public IProcessDataDescription GetDisplayNames(ILogic logic, ConfigDataBase configDataBase) - { - Description result = new Description(); - return result; - } - - public IProcessDataDescription GetDefault(ILogic logic, ConfigDataBase configDataBase) - { - Description result = new Description - { - Test = -1, - Count = 0, - Index = -1, - // - EventName = configDataBase.GetEventName(), - NullData = string.Empty, - JobID = logic.Logistics.JobID, - Sequence = logic.Logistics.Sequence.ToString(), - MesEntity = logic.Logistics.MesEntity, - ReportFullPath = logic.Logistics.ReportFullPath, - ProcessJobID = logic.Logistics.ProcessJobID, - MID = logic.Logistics.MID, - Date = logic.Logistics.DateTimeFromSequence.ToUniversalTime().ToString("MM/dd/yyyy HH:mm:ss"), - }; - return result; - } - - public List GetDescription(ILogic logic, ConfigDataBase configDataBase, List tests, IProcessData iProcessData) - { - List results = new List(); - return results; - } - - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/ProcessDataStandardFormat.cs b/Adaptation/Shared/Metrology/ProcessDataStandardFormat.cs deleted file mode 100644 index 478b208..0000000 --- a/Adaptation/Shared/Metrology/ProcessDataStandardFormat.cs +++ /dev/null @@ -1,527 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text; -using System.Text.Json; - -namespace Adaptation.Shared.Metrology -{ - - public class ProcessDataStandardFormat - { - - public const string RecordStart = "RECORD_START"; - - public enum SearchFor - { - EquipmentIntegration = 1, - BusinessIntegration = 2, - SystemExport = 3, - Archive = 4 - } - - public static string GetPDSFText(ILogic logic, string eventName, string equipmentType, JsonElement jsonElement, string logisticsText) - { - string result; - if (jsonElement.ValueKind != JsonValueKind.Array) - result = string.Empty; - else - { - int columns = 0; - List lines; - string endOffset = "E#######T"; - string dataOffset = "D#######T"; - string headerOffset = "H#######T"; - string format = "MM/dd/yyyy HH:mm:ss"; - StringBuilder stringBuilder = new StringBuilder(); - lines = new string[] { "HEADER_TAG\tHEADER_VALUE", "FORMAT\t2.00", "NUMBER_PASSES\t0001", string.Concat("HEADER_OFFSET\t", headerOffset), string.Concat("DATA_OFFSET\t", dataOffset), string.Concat("END_OFFSET\t", endOffset) }.ToList(); - stringBuilder.Append("\"Time\"").Append('\t'); - stringBuilder.Append("\"A_LOGISTICS\"").Append('\t'); - stringBuilder.Append("\"B_LOGISTICS\"").Append('\t'); - JsonElement[] jsonElements = jsonElement.EnumerateArray().ToArray(); - for (int i = 0; i < jsonElements.Length;) - { - foreach (JsonProperty jsonProperty in jsonElements[0].EnumerateObject()) - { - columns += 1; - stringBuilder.Append("\"").Append(jsonProperty.Name).Append("\"").Append('\t'); - } - break; - } - stringBuilder.Remove(stringBuilder.Length - 1, 1); - lines.Add(stringBuilder.ToString()); - for (int i = 0; i < jsonElements.Length; i++) - { - stringBuilder.Clear(); - stringBuilder.Append("0.1").Append('\t'); - stringBuilder.Append("1").Append('\t'); - stringBuilder.Append("2").Append('\t'); - foreach (JsonProperty jsonProperty in jsonElements[i].EnumerateObject()) - stringBuilder.Append(jsonProperty.Value).Append('\t'); - stringBuilder.Remove(stringBuilder.Length - 1, 1); - lines.Add(stringBuilder.ToString()); - } - lines.Add(string.Concat("NUM_DATA_ROWS ", jsonElements.Length.ToString().PadLeft(9, '0'))); - lines.Add(string.Concat("NUM_DATA_COLUMNS ", (columns + 3).ToString().PadLeft(9, '0'))); - lines.Add("DELIMITER ;"); - lines.Add(string.Concat("START_TIME_FORMAT ", format)); - lines.Add(string.Concat("START_TIME ", logic.Logistics.DateTimeFromSequence.ToString(format))); //12/26/2019 15:22:44 - lines.Add(string.Concat("LOGISTICS_COLUMN", '\t', "A_LOGISTICS")); - lines.Add(string.Concat("LOGISTICS_COLUMN", '\t', "B_LOGISTICS")); - if (!string.IsNullOrEmpty(logisticsText)) - lines.Add(logisticsText); - else - { - lines.Add(string.Concat("LOGISTICS_1", '\t', "A_CHAMBER=;A_INFO=", eventName, ";A_INFO2=", equipmentType, ";A_JOBID=", logic.Logistics.JobID, ";A_MES_ENTITY=", logic.Logistics.MesEntity, ";A_MID=", logic.Logistics.MID, ";A_NULL_DATA=", logic.Logistics.NullData, ";A_PPID=NO_PPID;A_PROCESS_JOBID=", logic.Logistics.ProcessJobID, ";A_PRODUCT=;A_SEQUENCE=", logic.Logistics.Sequence, ";A_WAFER_ID=;")); - lines.Add(string.Concat("LOGISTICS_2", '\t', "B_CHAMBER=;B_INFO=", eventName, ";B_INFO2=", equipmentType, ";B_JOBID=", logic.Logistics.JobID, ";B_MES_ENTITY=", logic.Logistics.MesEntity, ";B_MID=", logic.Logistics.MID, ";B_NULL_DATA=", logic.Logistics.NullData, ";B_PPID=NO_PPID;B_PROCESS_JOBID=", logic.Logistics.ProcessJobID, ";B_PRODUCT=;B_SEQUENCE=", logic.Logistics.Sequence, ";B_WAFER_ID=;")); - lines.Add("END_HEADER"); - } - stringBuilder.Clear(); - foreach (string line in lines) - stringBuilder.AppendLine(line); - result = stringBuilder.ToString(); - result = result.Replace(headerOffset, result.IndexOf("NUM_DATA_ROWS").ToString().PadLeft(9, '0')). - Replace(dataOffset, result.IndexOf('"').ToString().PadLeft(9, '0')). - Replace(endOffset, result.Length.ToString().PadLeft(9, '0')); - } - return result; - } - - public static Tuple GetLogisticsColumnsAndBody(string reportFullPath, string[] lines = null) - { - string segment; - List body = new List(); - StringBuilder logistics = new StringBuilder(); - if (lines is null) - lines = File.ReadAllLines(reportFullPath); - string[] segments; - if (lines.Length < 7) - segments = new string[] { }; - else - segments = lines[6].Trim().Split('\t'); - List columns = new List(); - for (int c = 0; c < segments.Length; c++) - { - segment = segments[c].Substring(1, segments[c].Length - 2); - if (!columns.Contains(segment)) - columns.Add(segment); - else - { - for (short i = 1; i < short.MaxValue; i++) - { - segment = string.Concat(segment, "_", i); - if (!columns.Contains(segment)) - { - columns.Add(segment); - break; - } - } - } - } - bool lookForLogistics = false; - for (int r = 7; r < lines.Count(); r++) - { - if (lines[r].StartsWith("NUM_DATA_ROWS")) - lookForLogistics = true; - if (!lookForLogistics) - { - body.Add(lines[r]); - continue; - } - if (lines[r].StartsWith("LOGISTICS_1")) - { - for (int i = r; i < lines.Count(); i++) - { - if (lines[r].StartsWith("END_HEADER")) - break; - logistics.AppendLine(lines[i]); - } - break; - } - } - return new Tuple(logistics.ToString(), columns.ToArray(), body.ToArray()); - } - - public static JsonElement GetArray(Tuple pdsf, bool lookForNumbers = false) - { - JsonElement result; - string logistics = pdsf.Item1; - string[] columns = pdsf.Item2; - string[] bodyLines = pdsf.Item3; - if (!bodyLines.Any() || !bodyLines[0].Contains('\t')) - result = JsonSerializer.Deserialize("[]"); - else - { - string value; - string[] segments; - StringBuilder stringBuilder = new StringBuilder(); - foreach (string bodyLine in bodyLines) - { - stringBuilder.Append('{'); - segments = bodyLine.Trim().Split('\t'); - if (!lookForNumbers) - { - for (int c = 1; c < segments.Length; c++) - { - value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\"); - stringBuilder.Append('"').Append(columns[c]).Append("\":\"").Append(value).Append("\","); - } - } - else - { - for (int c = 1; c < segments.Length; c++) - { - value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\"); - if (string.IsNullOrEmpty(value)) - stringBuilder.Append('"').Append(columns[c]).Append("\":").Append(value).Append("null,"); - else if (value.All(char.IsDigit)) - stringBuilder.Append('"').Append(columns[c]).Append("\":").Append(value).Append(","); - else - stringBuilder.Append('"').Append(columns[c]).Append("\":\"").Append(value).Append("\","); - } - } - stringBuilder.Remove(stringBuilder.Length - 1, 1); - stringBuilder.AppendLine("},"); - } - stringBuilder.Remove(stringBuilder.Length - 3, 3); - result = JsonSerializer.Deserialize(string.Concat("[", stringBuilder, "]")); - } - return result; - } - - public static Dictionary> GetDictionary(Tuple pdsf) - { - Dictionary> results = new Dictionary>(); - string[] segments; - string[] columns = pdsf.Item2; - string[] bodyLines = pdsf.Item3; - foreach (string column in columns) - results.Add(column, new List()); - foreach (string bodyLine in bodyLines) - { - segments = bodyLine.Split('\t'); - for (int c = 1; c < segments.Length; c++) - { - if (c >= columns.Length) - continue; - results[columns[c]].Add(segments[c]); - } - } - return results; - } - - public static Tuple>>> GetTestDictionary(Tuple pdsf) - { - Dictionary>> results = new Dictionary>>(); - string testColumn = Description.RowColumn.Test.ToString(); - Dictionary> keyValuePairs = GetDictionary(pdsf); - if (!keyValuePairs.ContainsKey(testColumn)) - throw new Exception(); - int min; - int max; - Test testKey; - List vs; - string columnKey; - Dictionary> tests = new Dictionary>(); - for (int i = 0; i < keyValuePairs[testColumn].Count; i++) - { - if (Enum.TryParse(keyValuePairs[testColumn][i], out Test test)) - { - if (!results.ContainsKey(test)) - { - tests.Add(test, new List()); - results.Add(test, new Dictionary>()); - } - tests[test].Add(i); - } - } - foreach (KeyValuePair> testKeyValuePair in tests) - { - testKey = testKeyValuePair.Key; - min = testKeyValuePair.Value.Min(); - max = testKeyValuePair.Value.Max() + 1; - foreach (KeyValuePair> keyValuePair in keyValuePairs) - results[testKey].Add(keyValuePair.Key, new List()); - foreach (KeyValuePair> keyValuePair in keyValuePairs) - { - vs = keyValuePair.Value; - columnKey = keyValuePair.Key; - for (int i = min; i < max; i++) - { - if (vs.Count > i) - results[testKey][columnKey].Add(vs[i]); - else - results[testKey][columnKey].Add(string.Empty); - } - } - } - return new Tuple>>>(pdsf.Item1, results); - } - - private static string GetString(SearchFor searchFor, bool addSpaces, char separator = ' ') - { - if (!addSpaces) - return string.Concat(((int)searchFor).ToString().PadLeft(2, '0'), searchFor); - else - return string.Concat(((int)searchFor).ToString().PadLeft(2, '0'), separator, searchFor.ToString().Replace("In", string.Concat(separator, "In")).Replace("Ex", string.Concat(separator, "Ex"))); - } - - public static string EquipmentIntegration(bool addSpaces = true, char separator = ' ') - { - return GetString(SearchFor.EquipmentIntegration, addSpaces, separator); - } - - public static string BusinessIntegration(bool addSpaces = true, char separator = ' ') - { - return GetString(SearchFor.BusinessIntegration, addSpaces, separator); - } - - public static string SystemExport(bool addSpaces = true, char separator = ' ') - { - return GetString(SearchFor.SystemExport, addSpaces, separator); - } - - public static string Archive(bool addSpaces = true, char separator = ' ') - { - return GetString(SearchFor.Archive, addSpaces, separator); - } - - public static string GetLines(Logistics logistics, IScopeInfo scopeInfo, Dictionary> keyValuePairs, Enum[] enumColumns, string dateFormat, string timeFormat, Column[] pairedColumns, bool useDateTimeFromSequence = true, string format = "", Dictionary alternateDisplayName = null, Enum[] ignoreColumns = null) - { - StringBuilder result = new StringBuilder(); - if (useDateTimeFromSequence && !string.IsNullOrEmpty(format)) - throw new Exception(); - else if (!useDateTimeFromSequence && string.IsNullOrEmpty(format)) - throw new Exception(); - int start; - string ckey; - string pKey; - int pairedColumnsCount; - string firstDuplicate = "_1"; - if (ignoreColumns is null) - ignoreColumns = new Enum[] { }; - if (alternateDisplayName is null) - alternateDisplayName = new Dictionary(); - string columnDate = Column.Date.ToString(); - string columnTime = Column.Time.ToString(); - List columnKeys = new List(); - foreach (Enum item in enumColumns) - { - if (ignoreColumns.Contains(item)) - continue; - columnKeys.Add(item.ToString()); - } - result.AppendLine(scopeInfo.Header); - StringBuilder line = new StringBuilder(); - int count = keyValuePairs[Description.RowColumn.Count.ToString()].Count(); - string nullData; - if (logistics.NullData is null) - nullData = string.Empty; - else - nullData = logistics.NullData.ToString(); - if (pairedColumns is null) - { - start = -1; - pairedColumnsCount = 0; - } - else - { - start = 0; - pairedColumnsCount = pairedColumns.Length; - } - for (int r = 0; r < count; r++) - { - for (int p = start; p < pairedColumnsCount; p++) - { - if (pairedColumnsCount == 0) - pKey = string.Empty; - else if (!(ignoreColumns is null) && ignoreColumns.Contains(pairedColumns[p])) - continue; - else - { - pKey = pairedColumns[p].ToString(); - if (!keyValuePairs.ContainsKey(pKey)) - continue; - else if (keyValuePairs[pKey][r] == nullData) - continue; - } - if (pairedColumnsCount == 0 || !string.IsNullOrEmpty(pKey)) - { - line.Clear(); - line.Append("!"); - for (int i = 0; i < columnKeys.Count; i++) - { - ckey = columnKeys[i]; - if (!keyValuePairs.ContainsKey(ckey)) - line.Append(string.Empty); - else - { - if (useDateTimeFromSequence && ckey == columnDate) - line.Append(logistics.DateTimeFromSequence.ToString(dateFormat)); - else if (useDateTimeFromSequence && ckey == columnTime) - line.Append(logistics.DateTimeFromSequence.ToString(timeFormat)); - else if (!useDateTimeFromSequence && ckey == columnDate && keyValuePairs[ckey][r].Length == format.Length) - line.Append(DateTime.ParseExact(keyValuePairs[ckey][r], format, CultureInfo.InvariantCulture).ToString(dateFormat)); - else if (!useDateTimeFromSequence && ckey == columnTime && keyValuePairs.ContainsKey(string.Concat(ckey, firstDuplicate)) && keyValuePairs[string.Concat(ckey, firstDuplicate)][r].Length == format.Length) - line.Append(DateTime.ParseExact(keyValuePairs[string.Concat(ckey, firstDuplicate)][r], format, CultureInfo.InvariantCulture).ToString(timeFormat)); - else - line.Append(keyValuePairs[ckey][r]); - } - line.Append(';'); - } - if (pairedColumnsCount > 0) - { - if (!alternateDisplayName.ContainsKey(pairedColumns[p])) - line.Append(pairedColumns[p].GetDiplayName()); - else - line.Append(alternateDisplayName[pairedColumns[p]]); - line.Append(';'); - line.Append(keyValuePairs[pKey][r]); - line.Append(';'); - } - line.Remove(line.Length - 1, 1); - result.AppendLine(line.ToString()); - } - } - } - return result.ToString(); - } - - public static string GetLines(Logistics logistics, IScopeInfo scopeInfo, List names, Dictionary> keyValuePairs, string dateFormat, string timeFormat, List pairedParameterNames, bool useDateTimeFromSequence = true, string format = "", List ignoreParameterNames = null) - { - StringBuilder result = new StringBuilder(); - if (ignoreParameterNames is null) - ignoreParameterNames = new List(); - if (useDateTimeFromSequence && !string.IsNullOrEmpty(format)) - throw new Exception(); - else if (!useDateTimeFromSequence && string.IsNullOrEmpty(format)) - throw new Exception(); - string nullData; - const string columnDate = "Date"; - const string columnTime = "Time"; - const string firstDuplicate = "_1"; - result.AppendLine(scopeInfo.Header); - StringBuilder line = new StringBuilder(); - if (logistics.NullData is null) - nullData = string.Empty; - else - nullData = logistics.NullData.ToString(); - int count = (from l in keyValuePairs select l.Value.Count).Min(); - for (int r = 0; r < count; r++) - { - line.Clear(); - line.Append("!"); - foreach (KeyValuePair> keyValuePair in keyValuePairs) - { - if (!names.Contains(keyValuePair.Key)) - continue; - if (ignoreParameterNames.Contains(keyValuePair.Key)) - continue; - if (pairedParameterNames.Contains(keyValuePair.Key)) - { - if (string.IsNullOrEmpty(keyValuePair.Value[r]) || keyValuePair.Value[r] == nullData) - continue; - else - result.Append(line).Append(keyValuePair.Key).Append(';').AppendLine(keyValuePair.Value[r]); - } - else - { - if (useDateTimeFromSequence && keyValuePair.Key == columnDate) - line.Append(logistics.DateTimeFromSequence.ToString(dateFormat)); - else if (useDateTimeFromSequence && keyValuePair.Key == columnTime) - line.Append(logistics.DateTimeFromSequence.ToString(timeFormat)); - else if (!useDateTimeFromSequence && keyValuePair.Key == columnDate && keyValuePair.Value[r].Length == format.Length) - line.Append(DateTime.ParseExact(keyValuePair.Value[r], format, CultureInfo.InvariantCulture).ToString(dateFormat)); - else if (!useDateTimeFromSequence && keyValuePair.Key == columnTime && keyValuePairs.ContainsKey(string.Concat(keyValuePair.Key, firstDuplicate)) && keyValuePairs[string.Concat(keyValuePair.Key, firstDuplicate)][r].Length == format.Length) - line.Append(DateTime.ParseExact(keyValuePairs[string.Concat(keyValuePair.Key, firstDuplicate)][r], format, CultureInfo.InvariantCulture).ToString(timeFormat)); - else if (string.IsNullOrEmpty(keyValuePair.Value[r]) || keyValuePair.Value[r] == nullData) - line.Append(nullData); - else - line.Append(keyValuePair.Value[r]); - line.Append(';'); - } - } - if (!pairedParameterNames.Any()) - { - line.Remove(line.Length - 1, 1); - result.AppendLine(line.ToString()); - } - } - return result.ToString(); - } - - public static List PDSFToFixedWidth(string reportFullPath) - { - List results = new List(); - if (!File.Exists(reportFullPath)) - throw new Exception(); - int[] group; - string line; - int startsAt = 0; - string[] segments; - int? currentGroup = null; - char inputSeperator = '\t'; - char outputSeperator = '\t'; - List vs = new List(); - List groups = new List(); - string[] lines = File.ReadAllLines(reportFullPath); - StringBuilder stringBuilder = new StringBuilder(); - for (int i = 0; i < lines.Length; i++) - { - if (string.IsNullOrEmpty(lines[i])) - continue; - segments = lines[i].Split(inputSeperator); - if (currentGroup is null) - currentGroup = segments.Length; - if (segments.Length != currentGroup) - { - currentGroup = segments.Length; - groups.Add(new int[] { startsAt, i - 1 }); - startsAt = i; - } - } - if (startsAt == lines.Length - 1 && lines[0].Split(inputSeperator).Length != currentGroup) - groups.Add(new int[] { lines.Length - 1, lines.Length - 1 }); - for (int g = 0; g < groups.Count; g++) - { - vs.Clear(); - group = groups[g]; - line = lines[group[0]]; - segments = line.Split(inputSeperator); - for (int s = 0; s < segments.Length; s++) - vs.Add(segments[s].Length); - for (int i = group[0]; i <= group[1]; i++) - { - line = lines[i]; - segments = line.Split(inputSeperator); - for (int s = 0; s < segments.Length; s++) - { - if (vs[s] < segments[s].Length) - vs[s] = segments[s].Length; - } - } - stringBuilder.Clear(); - for (int s = 0; s < segments.Length; s++) - stringBuilder.Append((s + 1).ToString().PadLeft(vs[s], ' ')).Append(outputSeperator); - stringBuilder.Remove(stringBuilder.Length - 1, 1); - results.Add(stringBuilder.ToString()); - for (int i = group[0]; i <= group[1]; i++) - { - line = lines[i]; - stringBuilder.Clear(); - segments = line.Split(inputSeperator); - for (int s = 0; s < segments.Length; s++) - stringBuilder.Append(segments[s].PadLeft(vs[s], ' ')).Append(outputSeperator); - stringBuilder.Remove(stringBuilder.Length - 1, 1); - results.Add(stringBuilder.ToString()); - } - results.Add(string.Empty); - } - return results; - } - - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/ScopeInfo.cs b/Adaptation/Shared/Metrology/ScopeInfo.cs index 037d8a6..2de909e 100644 --- a/Adaptation/Shared/Metrology/ScopeInfo.cs +++ b/Adaptation/Shared/Metrology/ScopeInfo.cs @@ -1,409 +1,300 @@ using System; using System.IO; -namespace Adaptation.Shared.Metrology +namespace Adaptation.Shared.Metrology; + +public class ScopeInfo : Properties.IScopeInfo { - public class ScopeInfo : IScopeInfo + public Test Test { get; private set; } + public Enum Enum { get; private set; } + public string HTML { get; private set; } + public string Title { get; private set; } + public string FileName { get; private set; } + public int TestValue { get; private set; } + public string Header { get; private set; } + public string QueryFilter { get; private set; } + public string FileNameWithoutExtension { get; private set; } + + public ScopeInfo(Test test, string fileName, string queryFilter = "", string title = "", string html = "") { - - public Test Test { get; private set; } - public Enum Enum { get; private set; } - public string HTML { get; private set; } - public string Title { get; private set; } - public string FileName { get; private set; } - public int TestValue { get; private set; } - public string Header { get; private set; } - public string QueryFilter { get; private set; } - public string FileNameWithoutExtension { get; private set; } - public EquipmentType EquipmentType { get; private set; } - - public ScopeInfo(ILogic logic, ConfigDataBase configDataBase, Test test) - { - Enum = test; - Test = test; - TestValue = (int)test; - if (configDataBase.EquipmentConnection is null) - EquipmentType = configDataBase.EquipmentType; - else - EquipmentType = configDataBase.EquipmentConnection.Value; - string eventName = GetEventNameAndSetRemaining(); - if (eventName != configDataBase.GetEventName()) - { - File.Move(logic.Logistics.ReportFullPath, Path.ChangeExtension(logic.Logistics.ReportFullPath, eventName)); - throw new Exception(); - } - else if (EquipmentType != configDataBase.EquipmentType && EquipmentType != configDataBase.EquipmentConnection) - { - File.Move(logic.Logistics.ReportFullPath, Path.ChangeExtension(logic.Logistics.ReportFullPath, EquipmentType.ToString())); - throw new Exception(); - } - } - - public ScopeInfo(ILogic logic, ConfigDataBase configDataBase, Test test, string fileName, string queryFilter, string title = "", string html = "") - { - Enum = test; - Test = test; - TestValue = (int)test; - if (configDataBase.EquipmentConnection is null) - EquipmentType = configDataBase.EquipmentType; - else - EquipmentType = configDataBase.EquipmentConnection.Value; - FileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); - Header = string.Empty; - QueryFilter = queryFilter; - Title = title; - HTML = html; - FileName = fileName; - } - - public ScopeInfo ShallowCopy() - { - return (ScopeInfo)MemberwiseClone(); - } - - private string GetEventNameAndSetRemaining() - { - EventName eventName; - switch (Test) - { - case Test.AFMRoughness: - EquipmentType = EquipmentType.MET08AFMD3100; - eventName = EventName.FileRead; - FileNameWithoutExtension = "afm_iqs_01"; - Header = string.Empty; - QueryFilter = "AFM Roughness"; - Title = "AFM"; - HTML = @"GaN Epi Data\10 - afm.html"; - break; - case Test.BreakdownVoltageCenter: - EquipmentType = EquipmentType.MET08BVHGPROBE; - eventName = EventName.FileRead; - FileNameWithoutExtension = "bv_iqs_01"; - Header = "Reactor;fDate;fRecipeName;Lot;fPocketNumber;g4Scribe;BV Position;BV Value;Tool"; - QueryFilter = "Breakdown Voltage"; - Title = "Breakdown Voltage-Center"; - HTML = @"GaN Epi Data\03 - bv-production.html"; - break; - case Test.BreakdownVoltageEdge: - EquipmentType = EquipmentType.MET08BVHGPROBE; - eventName = EventName.FileRead; - FileNameWithoutExtension = "bv_iqs_01_Edge"; - Header = "Reactor;fDate;fRecipeName;Lot;fPocketNumber;g4Scribe;BV Position;BV Value;Tool"; - QueryFilter = "Breakdown Voltage - Edge"; - Title = "Breakdown Voltage-Edge"; - HTML = @"GaN Epi Data\03 - bv-production.html"; - break; - case Test.BreakdownVoltageMiddle8in: - EquipmentType = EquipmentType.MET08BVHGPROBE; - eventName = EventName.FileRead; - FileNameWithoutExtension = "bv_iqs_01_Middle"; - Header = "Reactor;fDate;fRecipeName;Lot;fPocketNumber;g4Scribe;BV Position;BV Value;Tool"; - QueryFilter = "Breakdown Voltage - Middle"; - Title = "Breakdown Voltage-Middle (8 in)"; - HTML = @"GaN Epi Data\03 - bv-production.html"; - break; - case Test.CV: - EquipmentType = EquipmentType.MET08CVHGPROBE802B150; - eventName = EventName.FileRead; - FileNameWithoutExtension = "cv_iqs_01"; - Header = "Reactor;fDate;fPart;Lot;pocketNumber;g4Scribe;Position;Vp;NdMin;Tool ID;CV Ns;CV Cap"; - QueryFilter = "CV_Ns"; - Title = "CV"; - HTML = @"GaN Epi Data\05 - cv.html"; - break; - case Test.MonthlyCV: - EquipmentType = EquipmentType.MET08CVHGPROBE802B150_Monthly; - eventName = EventName.FileReadMonthly; - FileNameWithoutExtension = "cv_iqs_01"; - Header = "Reactor;fDate;fPart;Lot;pocketNumber;g4Scribe;Position;Vp;NdMin;Tool ID;CV Ns;CV Cap"; - QueryFilter = "CV_Ns"; - Title = "CV Monthly Verification"; - HTML = @"Metrology\07 - cv_verif_monthly.html"; - break; - case Test.WeeklyCV: - EquipmentType = EquipmentType.MET08CVHGPROBE802B150_Weekly; - eventName = EventName.FileReadWeekly; - FileNameWithoutExtension = "cv_iqs_01"; - Header = "Reactor;fDate;fPart;Lot;pocketNumber;g4Scribe;Position;Vp;NdMin;Tool ID;CV Ns;CV Cap"; - QueryFilter = "CV_Ns"; - Title = "CV Weekly Verification"; - HTML = @"Metrology\16 - cv_verif_weekly.html"; - break; - case Test.CandelaKlarfDC: - EquipmentType = EquipmentType.MET08DDINCAN8620; - eventName = EventName.FileRead; - FileNameWithoutExtension = "candela_iqs_01"; - Header = "LotID;OperatorID;RecipeName;CandelaRecipe;WaferID;PocketNumber;RunDate;Epi;SlipLines;Cracks;EpiDef;HazeSpot;SmallLpd;MediumLpd;LargeLpd;Cracks_A;Spirals;Craters;8620 Small;Pits;Tool ID;Defect Count"; - QueryFilter = "Candela Cracking"; - Title = "Candela"; - HTML = @"GaN Epi Data\12 - candela.html"; - break; - case Test.CandelaLaser: - EquipmentType = EquipmentType.MET08DDINCAN8620; - eventName = EventName.FileRead; - FileNameWithoutExtension = "candela_iqs_01"; - Header = "LotID;OperatorID;RecipeName;CandelaRecipe;WaferID;PocketNumber;RunDate;Epi;SlipLines;Cracks;EpiDef;HazeSpot;SmallLpd;MediumLpd;LargeLpd;Cracks_A;Spirals;Craters;Pits;Tool ID;Defect Count"; - QueryFilter = "Candela Cracking"; - Title = "Candela"; - HTML = @"GaN Epi Data\12 - candela.html"; - break; - case Test.CandelaVerify: - EquipmentType = EquipmentType.MET08DDINCAN8620; - eventName = EventName.FileRead; - FileNameWithoutExtension = "candela_iqs_01"; - Header = string.Concat("LotID;OperatorID;RecipeName;CandelaRecipe;WaferID;PocketNumber;RunDate;RunID;Reactor;", "Slip Lines;Cracks;Epi Def;Haze Spot;Small LPD;Medium LPD;Large LPD;Cracks_A;Spirals;Craters;8620 Small;Pits;Tool ID;Defect Count"); - QueryFilter = "Candela Cracking"; - Title = "Candela"; - HTML = @"GaN Epi Data\12 - candela.html"; - break; - case Test.CandelaPSL: - EquipmentType = EquipmentType.MET08DDINCAN8620_Daily; - eventName = EventName.FileReadDaily; - FileNameWithoutExtension = "candela_iqs_01"; - Header = string.Empty; - QueryFilter = "102-83nm"; - Title = "Candela"; - HTML = @"GaN Epi Data\12 - candela.html"; - break; - case Test.CandelaProdU: - EquipmentType = EquipmentType.MET08DDINCAN8620_Daily; - eventName = EventName.FileReadDaily; - FileNameWithoutExtension = "candela_iqs_01"; - Header = string.Empty; - QueryFilter = "SPE verification"; - Title = "Candela"; - HTML = @"GaN Epi Data\12 - candela.html"; - break; - case Test.Denton: - EquipmentType = EquipmentType.MET08EBEAMINTEGRITY26; - eventName = EventName.FileRead; - FileNameWithoutExtension = "denton_iqs_01"; - Header = "Tool;fDate;Run;Recipe;Operator;Name;Value"; - QueryFilter = "Denton_Voltage_AVG"; - Title = "Denton Data"; - HTML = @"Support Process\03 - ebeam02_denton_v1.html"; - break; - case Test.Hall: - EquipmentType = EquipmentType.MET08HALLHL5580; - eventName = EventName.FileRead; - FileNameWithoutExtension = "hall_iqs_01"; - Header = "Lot;Tool;TimeDate;RunDate;RunID;Part;Reactor;Scribe;PocketNumber;Tool ID;Name;Value"; - QueryFilter = "Hall Rs"; - Title = "Hall Data"; - HTML = @"GaN Epi Data\04 - hall.html"; - break; - case Test.MonthlyHall: - EquipmentType = EquipmentType.MET08HALLHL5580_Monthly; - eventName = EventName.FileReadMonthly; - FileNameWithoutExtension = "hall_iqs_01"; - Header = "Lot;Tool;TimeDate;RunDate;RunID;Part;Reactor;Scribe;PocketNumber;Tool ID;Name;Value"; - QueryFilter = "Hall Rs"; - Title = "Hall Monthly Verification"; - HTML = @"Metrology\06 - hall_verif_monthly.html"; - break; - case Test.WeeklyHall: - EquipmentType = EquipmentType.MET08HALLHL5580_Weekly; - eventName = EventName.FileReadWeekly; - FileNameWithoutExtension = "hall_iqs_01"; - Header = "Lot;Tool;TimeDate;RunDate;RunID;Part;Reactor;Scribe;PocketNumber;Tool ID;Name;Value"; - QueryFilter = "Hall Rs"; - Title = "Hall Weekly Verification"; - HTML = @"Metrology\15 - hall_verif_weekly.html"; - break; - case Test.Lehighton: - EquipmentType = EquipmentType.MET08NDFRESIMAP151C; - eventName = EventName.FileRead; - FileNameWithoutExtension = "lei_iqs_01"; - Header = "Reactor;Date;Recipe;Lot;Pocket;Scribe;Tool;Name;Value"; - QueryFilter = "LEI RS Average value"; - Title = "Lehighton"; - HTML = @"GaN Epi Data\13 - lehighton.html"; - break; - case Test.VerificationLehighton: - EquipmentType = EquipmentType.MET08NDFRESIMAP151C_Verification; - eventName = EventName.FileRead; - FileNameWithoutExtension = "___"; - Header = "Reactor;Date;Recipe;Lot;Pocket;Scribe;Tool;Name;Value"; - QueryFilter = "___"; - Title = "LEI Weekly Verification 2 Ohm cm"; - HTML = @"Metrology\14 - lei_verif_weekly.html.html"; - break; - case Test.Microscope: - EquipmentType = EquipmentType.MET08MESMICROSCOPE; - eventName = EventName.FileRead; - FileNameWithoutExtension = string.Empty; - Header = string.Empty; - QueryFilter = "Microscope Center 5x"; - Title = "Total Microscope Defects"; - HTML = string.Empty; - break; - case Test.RPMXY: - EquipmentType = EquipmentType.MET08PLMAPRPM; - eventName = EventName.FileRead; - FileNameWithoutExtension = "RPM_Data"; - Header = "Lot;Date;Recipe;Reactor;Scribe;Pocket;Tool;Name;Value"; - QueryFilter = "Barrier_Composition_RPM_XY"; - Title = "RPM XY Data ***&*** View Data"; - HTML = @"GaN Epi Data\09 - rpm --- 08 - photoluminescence.html"; - break; - case Test.RPMAverage: - EquipmentType = EquipmentType.MET08PLMAPRPM; - eventName = EventName.FileRead; - FileNameWithoutExtension = "RPMdata-short"; - Header = "fProductId;fDate;average;stdDev;fRecipeName;Reactor;g4Scribe;Pocket Number;Tool ID;Recipe From Rpm File"; - QueryFilter = "Epi Thickness Mean"; - Title = "RPM Average Data"; - HTML = @"GaN Epi Data\09 - rpm.html"; - break; - case Test.RPMPLRatio: - EquipmentType = EquipmentType.MET08PLMAPRPM; - eventName = EventName.FileRead; - FileNameWithoutExtension = "PHOTOLUMINESCENCE_data-short"; - Header = "fProductId;fDate;g4Scribe;fRecipeName;bandEdge_nm;bandEdge_V;yellowBand_Pmw;yellowBand_nm;yellowBand_V;Reactor;Pocket Number;Tool ID"; - QueryFilter = "PL Ratio"; - Title = "Photoluminescence: PL Ratio"; - HTML = @"GaN Epi Data\08 - photoluminescence.html"; - break; - case Test.DailyRPMXY: - EquipmentType = EquipmentType.MET08PLMAPRPM_Daily; - eventName = EventName.FileReadDaily; - FileNameWithoutExtension = "RPM_Data"; - Header = "Lot;Date;Recipe;Reactor;Scribe;Pocket;Tool;Name;Value"; - QueryFilter = "Barrier_Composition_RPM_XY"; - Title = ""; - HTML = @"Metrology\?"; - break; - case Test.DailyRPMAverage: - EquipmentType = EquipmentType.MET08PLMAPRPM_Daily; - eventName = EventName.FileReadDaily; - FileNameWithoutExtension = "RPMdata-short"; - Header = "fProductId;fDate;average;stdDev;fRecipeName;Reactor;g4Scribe;Pocket Number;Tool ID;Recipe From Rpm File"; - QueryFilter = "Epi Thickness Mean"; - Title = ""; - HTML = @"Metrology\?"; - break; - case Test.DailyRPMPLRatio: - EquipmentType = EquipmentType.MET08PLMAPRPM_Daily; - eventName = EventName.FileReadDaily; - FileNameWithoutExtension = "PHOTOLUMINESCENCE_data-short"; - Header = "fProductId;fDate;g4Scribe;fRecipeName;bandEdge_nm;bandEdge_V;yellowBand_Pmw;yellowBand_nm;yellowBand_V;Reactor;Pocket Number;Tool ID"; - QueryFilter = "PL Ratio"; - Title = "RPM Daily Verification"; - HTML = @"Metrology\17 - rpm_verif_daily.html"; - break; - case Test.VerificationRPM: - EquipmentType = EquipmentType.MET08PLMAPRPM_Verification; - eventName = EventName.FileReadVerification; - FileNameWithoutExtension = "PhotoLuminescence_Ver"; - Header = "Part;Process;Date;Test;Value"; - QueryFilter = "PL Edge Wavelength"; - Title = "PL Daily Verification - [PL Edge Wavelength]"; - HTML = @"Metrology\18 - photoluminescence_verif_daily.html"; - break; - case Test.Photoreflectance: - EquipmentType = EquipmentType.MET08PRFUSB4000; - eventName = EventName.FileRead; - FileNameWithoutExtension = "photoreflect_iqs_01"; - Header = "Lot;Date;Part;Reactor;Scribe;Pocket;Tool;Point;WaferPosition_PR;PR_Peak"; - QueryFilter = "PR Barrier Composition"; - Title = "Photoreflectance 6 in, Photoreflectance 8 in"; - HTML = @"GaN Epi Data\07 - photoreflectance.html"; - break; - case Test.UV: - EquipmentType = EquipmentType.MET08UVH44GS100M; - eventName = EventName.FileRead; - FileNameWithoutExtension = "uv_iqs_01"; - Header = string.Empty; - QueryFilter = "UV Broken"; - Title = "UV"; - HTML = @"GaN Epi Data\15 - uv 2.1.html"; - break; - case Test.VpdIcpmsAnalyte: - EquipmentType = EquipmentType.MET08VPDSUBCON; - eventName = EventName.FileRead; - FileNameWithoutExtension = "VPD_iqs_01"; - Header = "Reactor;RunID;RunDate;PartNumber;PocketNumber;WaferScribe;Analyte;Value"; - QueryFilter = "Mg"; - Title = "VpdIcpmsAnalyteData"; - HTML = @""; - break; - case Test.WarpAndBow: - EquipmentType = EquipmentType.MET08WGEOMX203641Q; - eventName = EventName.FileRead; - FileNameWithoutExtension = "warp_iqs_01"; - Header = "fDate;fRecipeName;fProductId;g4Scribe;warp;bow;tool;Reactor;Pocket ID;bow_range;BowX;BowY;CenterBow"; - QueryFilter = "BowCenter"; - Title = "Warp and Bow"; - HTML = @"GaN Epi Data\14 - warp.html"; - break; - case Test.VerificationWarpAndBow: - EquipmentType = EquipmentType.MET08WGEOMX203641Q_Verification; - eventName = EventName.FileReadVerification; - FileNameWithoutExtension = "warp_ver_iqs_01"; - Header = "Part;Process;Date;WaferScribe;totWarp;bow"; - QueryFilter = "Bow Calibration"; - Title = "6 Inch Warp/Bow Daily Verification, 8 Inch Warp/Bow Daily Verification"; - HTML = @"Metrology\19 - warp_cal_daily.html"; - break; - case Test.XRDXY: - EquipmentType = EquipmentType.MET08XRDXPERTPROMRDXL; - eventName = EventName.FileRead; - FileNameWithoutExtension = "xrd_iqs_NEW_01"; - Header = "Reactor;fDate;fRecipeName;Lot;pocketNumber;g4Scribe;ToolID;Name;Value;Group"; - QueryFilter = "SL Period"; - Title = "XRD XY Raw Data Viewer"; - HTML = @"GaN Epi Data\11 - xrd.html"; - break; - case Test.XRDWeightedAverage: - EquipmentType = EquipmentType.MET08XRDXPERTPROMRDXL; - eventName = EventName.FileRead; - FileNameWithoutExtension = "xrd_iqs_NEW_01_WtAVG"; - Header = "Reactor;fDate;fRecipeName;Lot;pocketNumber;g4Scribe;Name;Value;Group"; - //QueryFilter = "Al% Barrier WTAVG"; - QueryFilter = "SL Period WTAVG"; - Title = "XRD Weighted Average Data"; - HTML = @"GaN Epi Data\11 - xrd.html"; - break; - case Test.MonthlyXRD: - EquipmentType = EquipmentType.MET08XRDXPERTPROMRDXL_Monthly; - eventName = EventName.FileReadMonthly; - FileNameWithoutExtension = "xrd_monthly_ver_iqs_01"; - Header = "Part;Process;Date;TestName;Value"; - QueryFilter = "XRD 2-Theta Position"; - Title = "XRD Monthly Verification"; - HTML = @"Metrology\03 - xrd_verif_monthly.html"; - break; - case Test.WeeklyXRD: - EquipmentType = EquipmentType.MET08XRDXPERTPROMRDXL_Weekly; - eventName = EventName.FileReadWeekly; - FileNameWithoutExtension = "xrd_weekly_ver_iqs_01"; - Header = "Part;Process;Lot;Date;TestName;Value"; - QueryFilter = "XRD Weekly AL% Center"; - Title = "XRD Weekly Verification"; - HTML = @"Metrology\12 - xrd_verif_weekly.html"; - break; - case Test.JVXRD: - EquipmentType = EquipmentType.METBRXRAYJV7300L; - eventName = EventName.FileRead; - FileNameWithoutExtension = "xrd_iqs_NEW_01"; - Header = "Reactor;fDate;fRecipeName;Lot;pocketNumber;g4Scribe;ToolID;Name;Value;Group"; - QueryFilter = "SL Period"; - Title = "XRD XY Raw Data Viewer"; - HTML = @"GaN Epi Data\11 - xrd.html"; - break; - default: - throw new Exception(); - } - FileName = string.Concat(FileNameWithoutExtension, ".txt"); - return eventName.ToString(); - } - - public override string ToString() - { - return string.Concat(EquipmentType, " - (", Enum, ""); - } - + Enum = test; + Test = test; + HTML = html; + Title = title; + FileName = fileName; + TestValue = (int)test; + Header = string.Empty; + QueryFilter = queryFilter; + FileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); } + public ScopeInfo(Test test) + { + Enum = test; + Test = test; + TestValue = (int)test; + switch (Test) + { + case Test.AFMRoughness: + FileNameWithoutExtension = "afm_iqs_01"; + Header = string.Empty; + QueryFilter = "AFM Roughness"; + Title = "AFM"; + HTML = @"GaN Epi Data\10 - afm.html"; + break; + case Test.BreakdownVoltageCenter: + FileNameWithoutExtension = "bv_iqs_01"; + Header = "Reactor;fDate;fRecipeName;Lot;fPocketNumber;g4Scribe;BV Position;BV Value;Tool"; + QueryFilter = "Breakdown Voltage"; + Title = "Breakdown Voltage-Center"; + HTML = @"GaN Epi Data\03 - bv-production.html"; + break; + case Test.BreakdownVoltageEdge: + FileNameWithoutExtension = "bv_iqs_01_Edge"; + Header = "Reactor;fDate;fRecipeName;Lot;fPocketNumber;g4Scribe;BV Position;BV Value;Tool"; + QueryFilter = "Breakdown Voltage - Edge"; + Title = "Breakdown Voltage-Edge"; + HTML = @"GaN Epi Data\03 - bv-production.html"; + break; + case Test.BreakdownVoltageMiddle8in: + FileNameWithoutExtension = "bv_iqs_01_Middle"; + Header = "Reactor;fDate;fRecipeName;Lot;fPocketNumber;g4Scribe;BV Position;BV Value;Tool"; + QueryFilter = "Breakdown Voltage - Middle"; + Title = "Breakdown Voltage-Middle (8 in)"; + HTML = @"GaN Epi Data\03 - bv-production.html"; + break; + case Test.CV: + FileNameWithoutExtension = "cv_iqs_01"; + Header = "Reactor;fDate;fPart;Lot;pocketNumber;g4Scribe;Position;Vp;NdMin;Tool ID;CV Ns;CV Cap"; + QueryFilter = "CV_Ns"; + Title = "CV"; + HTML = @"GaN Epi Data\05 - cv.html"; + break; + case Test.MonthlyCV: + FileNameWithoutExtension = "cv_iqs_01"; + Header = "Reactor;fDate;fPart;Lot;pocketNumber;g4Scribe;Position;Vp;NdMin;Tool ID;CV Ns;CV Cap"; + QueryFilter = "CV_Ns"; + Title = "CV Monthly Verification"; + HTML = @"Metrology\07 - cv_verif_monthly.html"; + break; + case Test.WeeklyCV: + FileNameWithoutExtension = "cv_iqs_01"; + Header = "Reactor;fDate;fPart;Lot;pocketNumber;g4Scribe;Position;Vp;NdMin;Tool ID;CV Ns;CV Cap"; + QueryFilter = "CV_Ns"; + Title = "CV Weekly Verification"; + HTML = @"Metrology\16 - cv_verif_weekly.html"; + break; + case Test.CandelaKlarfDC: + FileNameWithoutExtension = "candela_iqs_01"; + Header = "LotID;OperatorID;RecipeName;CandelaRecipe;WaferID;PocketNumber;RunDate;Epi;SlipLines;Cracks;EpiDef;HazeSpot;SmallLpd;MediumLpd;LargeLpd;Cracks_A;Spirals;Craters;8620 Small;Pits;Tool ID;Defect Count"; + QueryFilter = "Candela Cracking"; + Title = "Candela"; + HTML = @"GaN Epi Data\12 - candela.html"; + break; + case Test.CandelaLaser: + FileNameWithoutExtension = "candela_iqs_01"; + Header = "LotID;OperatorID;RecipeName;CandelaRecipe;WaferID;PocketNumber;RunDate;Epi;SlipLines;Cracks;EpiDef;HazeSpot;SmallLpd;MediumLpd;LargeLpd;Cracks_A;Spirals;Craters;Pits;Tool ID;Defect Count"; + QueryFilter = "Candela Cracking"; + Title = "Candela"; + HTML = @"GaN Epi Data\12 - candela.html"; + break; + case Test.CandelaVerify: + FileNameWithoutExtension = "candela_iqs_01"; + Header = string.Concat("LotID;OperatorID;RecipeName;CandelaRecipe;WaferID;PocketNumber;RunDate;RunID;Reactor;", "Slip Lines;Cracks;Epi Def;Haze Spot;Small LPD;Medium LPD;Large LPD;Cracks_A;Spirals;Craters;8620 Small;Pits;Tool ID;Defect Count"); + QueryFilter = "Candela Cracking"; + Title = "Candela"; + HTML = @"GaN Epi Data\12 - candela.html"; + break; + case Test.CandelaPSL: + FileNameWithoutExtension = "candela_iqs_01"; + Header = string.Empty; + QueryFilter = "102-83nm"; + Title = "Candela"; + HTML = @"GaN Epi Data\12 - candela.html"; + break; + case Test.CandelaProdU: + FileNameWithoutExtension = "candela_iqs_01"; + Header = string.Empty; + QueryFilter = "SPE verification"; + Title = "Candela"; + HTML = @"GaN Epi Data\12 - candela.html"; + break; + case Test.Denton: + FileNameWithoutExtension = "denton_iqs_01"; + Header = "Tool;fDate;Run;Recipe;Operator;Name;Value"; + QueryFilter = "Denton_Voltage_AVG"; + Title = "Denton Data"; + HTML = @"Support Process\03 - ebeam02_denton_v1.html"; + break; + case Test.Hall: + FileNameWithoutExtension = "hall_iqs_01"; + Header = "Lot;Tool;TimeDate;RunDate;RunID;Part;Reactor;Scribe;PocketNumber;Tool ID;Name;Value"; + QueryFilter = "Hall Rs"; + Title = "Hall Data"; + HTML = @"GaN Epi Data\04 - hall.html"; + break; + case Test.MonthlyHall: + FileNameWithoutExtension = "hall_iqs_01"; + Header = "Lot;Tool;TimeDate;RunDate;RunID;Part;Reactor;Scribe;PocketNumber;Tool ID;Name;Value"; + QueryFilter = "Hall Rs"; + Title = "Hall Monthly Verification"; + HTML = @"Metrology\06 - hall_verif_monthly.html"; + break; + case Test.WeeklyHall: + FileNameWithoutExtension = "hall_iqs_01"; + Header = "Lot;Tool;TimeDate;RunDate;RunID;Part;Reactor;Scribe;PocketNumber;Tool ID;Name;Value"; + QueryFilter = "Hall Rs"; + Title = "Hall Weekly Verification"; + HTML = @"Metrology\15 - hall_verif_weekly.html"; + break; + case Test.Lehighton: + FileNameWithoutExtension = "lei_iqs_01"; + Header = "Reactor;Date;Recipe;Lot;Pocket;Scribe;Tool;Name;Value"; + QueryFilter = "LEI RS Average value"; + Title = "Lehighton"; + HTML = @"GaN Epi Data\13 - lehighton.html"; + break; + case Test.VerificationLehighton: + FileNameWithoutExtension = "___"; + Header = "Reactor;Date;Recipe;Lot;Pocket;Scribe;Tool;Name;Value"; + QueryFilter = "___"; + Title = "LEI Weekly Verification 2 Ohm cm"; + HTML = @"Metrology\14 - lei_verif_weekly.html.html"; + break; + case Test.Microscope: + FileNameWithoutExtension = string.Empty; + Header = string.Empty; + QueryFilter = "Microscope Center 5x"; + Title = "Total Microscope Defects"; + HTML = string.Empty; + break; + case Test.RPMXY: + FileNameWithoutExtension = "RPM_Data"; + Header = "Lot;Date;Recipe;Reactor;Scribe;Pocket;Tool;Name;Value"; + QueryFilter = "Barrier_Composition_RPM_XY"; + Title = "RPM XY Data ***&*** View Data"; + HTML = @"GaN Epi Data\09 - rpm --- 08 - photoluminescence.html"; + break; + case Test.RPMAverage: + FileNameWithoutExtension = "RPMdata-short"; + Header = "fProductId;fDate;average;stdDev;fRecipeName;Reactor;g4Scribe;Pocket Number;Tool ID;Recipe From Rpm File"; + QueryFilter = "Epi Thickness Mean"; + Title = "RPM Average Data"; + HTML = @"GaN Epi Data\09 - rpm.html"; + break; + case Test.RPMPLRatio: + FileNameWithoutExtension = "PHOTOLUMINESCENCE_data-short"; + Header = "fProductId;fDate;g4Scribe;fRecipeName;bandEdge_nm;bandEdge_V;yellowBand_Pmw;yellowBand_nm;yellowBand_V;Reactor;Pocket Number;Tool ID"; + QueryFilter = "PL Ratio"; + Title = "Photoluminescence: PL Ratio"; + HTML = @"GaN Epi Data\08 - photoluminescence.html"; + break; + case Test.DailyRPMXY: + FileNameWithoutExtension = "RPM_Data"; + Header = "Lot;Date;Recipe;Reactor;Scribe;Pocket;Tool;Name;Value"; + QueryFilter = "Barrier_Composition_RPM_XY"; + Title = ""; + HTML = @"Metrology\?"; + break; + case Test.DailyRPMAverage: + FileNameWithoutExtension = "RPMdata-short"; + Header = "fProductId;fDate;average;stdDev;fRecipeName;Reactor;g4Scribe;Pocket Number;Tool ID;Recipe From Rpm File"; + QueryFilter = "Epi Thickness Mean"; + Title = ""; + HTML = @"Metrology\?"; + break; + case Test.DailyRPMPLRatio: + FileNameWithoutExtension = "PHOTOLUMINESCENCE_data-short"; + Header = "fProductId;fDate;g4Scribe;fRecipeName;bandEdge_nm;bandEdge_V;yellowBand_Pmw;yellowBand_nm;yellowBand_V;Reactor;Pocket Number;Tool ID"; + QueryFilter = "PL Ratio"; + Title = "RPM Daily Verification"; + HTML = @"Metrology\17 - rpm_verif_daily.html"; + break; + case Test.VerificationRPM: + FileNameWithoutExtension = "PhotoLuminescence_Ver"; + Header = "Part;Process;Date;Test;Value"; + QueryFilter = "PL Edge Wavelength"; + Title = "PL Daily Verification - [PL Edge Wavelength]"; + HTML = @"Metrology\18 - photoluminescence_verif_daily.html"; + break; + case Test.Photoreflectance: + FileNameWithoutExtension = "photoreflect_iqs_01"; + Header = "Lot;Date;Part;Reactor;Scribe;Pocket;Tool;Point;WaferPosition_PR;PR_Peak"; + QueryFilter = "PR Barrier Composition"; + Title = "Photoreflectance 6 in, Photoreflectance 8 in"; + HTML = @"GaN Epi Data\07 - photoreflectance.html"; + break; + case Test.UV: + FileNameWithoutExtension = "uv_iqs_01"; + Header = string.Empty; + QueryFilter = "UV Broken"; + Title = "UV"; + HTML = @"GaN Epi Data\15 - uv 2.1.html"; + break; + case Test.VpdIcpmsAnalyte: + FileNameWithoutExtension = "VPD_iqs_01"; + Header = "Reactor;RunID;RunDate;PartNumber;PocketNumber;WaferScribe;Analyte;Value"; + QueryFilter = "Mg"; + Title = "VpdIcpmsAnalyteData"; + HTML = @""; + break; + case Test.WarpAndBow: + FileNameWithoutExtension = "warp_iqs_01"; + Header = "fDate;fRecipeName;fProductId;g4Scribe;warp;bow;tool;Reactor;Pocket ID;bow_range;BowX;BowY;CenterBow"; + QueryFilter = "BowCenter"; + Title = "Warp and Bow"; + HTML = @"GaN Epi Data\14 - warp.html"; + break; + case Test.VerificationWarpAndBow: + FileNameWithoutExtension = "warp_ver_iqs_01"; + Header = "Part;Process;Date;WaferScribe;totWarp;bow"; + QueryFilter = "Bow Calibration"; + Title = "6 Inch Warp/Bow Daily Verification, 8 Inch Warp/Bow Daily Verification"; + HTML = @"Metrology\19 - warp_cal_daily.html"; + break; + case Test.XRDXY: + FileNameWithoutExtension = "xrd_iqs_NEW_01"; + Header = "Reactor;fDate;fRecipeName;Lot;pocketNumber;g4Scribe;ToolID;Name;Value;Group"; + QueryFilter = "SL Period"; + Title = "XRD XY Raw Data Viewer"; + HTML = @"GaN Epi Data\11 - xrd.html"; + break; + case Test.XRDWeightedAverage: + FileNameWithoutExtension = "xrd_iqs_NEW_01_WtAVG"; + Header = "Reactor;fDate;fRecipeName;Lot;pocketNumber;g4Scribe;Name;Value;Group"; + //QueryFilter = "Al% Barrier WTAVG"; + QueryFilter = "SL Period WTAVG"; + Title = "XRD Weighted Average Data"; + HTML = @"GaN Epi Data\11 - xrd.html"; + break; + case Test.MonthlyXRD: + FileNameWithoutExtension = "xrd_monthly_ver_iqs_01"; + Header = "Part;Process;Date;TestName;Value"; + QueryFilter = "XRD 2-Theta Position"; + Title = "XRD Monthly Verification"; + HTML = @"Metrology\03 - xrd_verif_monthly.html"; + break; + case Test.WeeklyXRD: + FileNameWithoutExtension = "xrd_weekly_ver_iqs_01"; + Header = "Part;Process;Lot;Date;TestName;Value"; + QueryFilter = "XRD Weekly AL% Center"; + Title = "XRD Weekly Verification"; + HTML = @"Metrology\12 - xrd_verif_weekly.html"; + break; + case Test.JVXRD: + FileNameWithoutExtension = "xrd_iqs_NEW_01"; + Header = "Reactor;fDate;fRecipeName;Lot;pocketNumber;g4Scribe;ToolID;Name;Value;Group"; + QueryFilter = "SL Period"; + Title = "XRD XY Raw Data Viewer"; + HTML = @"GaN Epi Data\11 - xrd.html"; + break; + default: + throw new Exception(); + } + FileName = string.Concat(FileNameWithoutExtension, ".txt"); + } + + public ScopeInfo ShallowCopy() => (ScopeInfo)MemberwiseClone(); + } \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/Test.cs b/Adaptation/Shared/Metrology/Test.cs deleted file mode 100644 index 3771e68..0000000 --- a/Adaptation/Shared/Metrology/Test.cs +++ /dev/null @@ -1,57 +0,0 @@ -namespace Adaptation.Shared.Metrology -{ - - public enum Test - { - AFMRoughness = 34, - BioRadQS408M = 25, - BioRadStratus = 26, - BreakdownVoltageCenter = 0, - BreakdownVoltageEdge = 1, - BreakdownVoltageMiddle8in = 2, - CandelaKlarfDC = 6, - CandelaLaser = 36, - CandelaProdU = 39, - CandelaPSL = 38, - CandelaVerify = 37, - CDE = 24, - CV = 3, - DailyRPMAverage = 19, - DailyRPMPLRatio = 20, - DailyRPMXY = 18, - Denton = 9, - DiffusionLength = 45, - Hall = 10, - HgCV = 23, - Lehighton = 13, - Microscope = 46, - MonthlyCV = 4, - MonthlyHall = 11, - MonthlyXRD = 32, - Photoreflectance = 22, - PlatoA = 48, //Largest - RPMAverage = 16, - RPMPLRatio = 17, - RPMXY = 15, - SP1 = 8, - Tencor = 7, - UV = 35, - VerificationLehighton = 14, - VerificationRPM = 21, - VerificationWarpAndBow = 29, - VpdIcpmsAnalyte = 27, - WarpAndBow = 28, - WeeklyCV = 5, - WeeklyHall = 12, - WeeklyXRD = 33, - WeeklyXRDAIcomp = 40, - WeeklyXRDFWHM002 = 41, - WeeklyXRDFWHM105 = 42, - WeeklyXRDSLStks = 43, - WeeklyXRDXRR = 44, - XRDWeightedAverage = 31, - JVXRD = 47, - XRDXY = 30 - } - -} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/WS.Attachment.cs b/Adaptation/Shared/Metrology/WS.Attachment.cs index 540e760..ea105ed 100644 --- a/Adaptation/Shared/Metrology/WS.Attachment.cs +++ b/Adaptation/Shared/Metrology/WS.Attachment.cs @@ -1,22 +1,19 @@ -namespace Adaptation.Shared.Metrology +namespace Adaptation.Shared.Metrology; + +public partial class WS { - - public partial class WS + public class Attachment { - public class Attachment + + public string UniqueId { get; set; } + public string DestinationFileName { get; set; } + public string SourceFileName { get; set; } + + public Attachment(string uniqueId, string destinationFileName, string sourceFileName) { - - public string UniqueId { get; set; } - public string DestinationFileName { get; set; } - public string SourceFileName { get; set; } - - public Attachment(string uniqueId, string destinationFileName, string sourceFileName) - { - UniqueId = uniqueId; - DestinationFileName = destinationFileName; - SourceFileName = sourceFileName; - } - + UniqueId = uniqueId; + DestinationFileName = destinationFileName; + SourceFileName = sourceFileName; } } diff --git a/Adaptation/Shared/Metrology/WS.Results.cs b/Adaptation/Shared/Metrology/WS.Results.cs index ada4b97..2d1c603 100644 --- a/Adaptation/Shared/Metrology/WS.Results.cs +++ b/Adaptation/Shared/Metrology/WS.Results.cs @@ -1,33 +1,27 @@ using System.Collections.Generic; using System.Text.Json; -namespace Adaptation.Shared.Metrology +namespace Adaptation.Shared.Metrology; + +public partial class WS { - - public partial class WS + // this class represents the response from the Inbound API endpoint + public class Results { - // this class represents the response from the Inbound API endpoint - public class Results - { - // true or false if data was written to the database - public bool Success { get; set; } + // true or false if data was written to the database + public bool Success { get; set; } - // if true, contains ID of the Header record in the database - public long HeaderID { get; set; } + // if true, contains ID of the Header record in the database + public long HeaderID { get; set; } - // if false, this collection will contain a list of errors - public List Errors { get; set; } + // if false, this collection will contain a list of errors + public List Errors { get; set; } - // this collection will contain a list of warnings, they will not prevent data from being saved - public List Warnings { get; set; } - - // this is just a helper function to make displaying the results easier - public override string ToString() - { - return JsonSerializer.Serialize(this, GetType()); - } - } + // this collection will contain a list of warnings, they will not prevent data from being saved + public List Warnings { get; set; } + // this is just a helper function to make displaying the results easier + public override string ToString() => JsonSerializer.Serialize(this, GetType()); } } \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/WS.cs b/Adaptation/Shared/Metrology/WS.cs index 1fa6b5a..d5e7e96 100644 --- a/Adaptation/Shared/Metrology/WS.cs +++ b/Adaptation/Shared/Metrology/WS.cs @@ -1,127 +1,123 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Net.Http; using System.Text; using System.Text.Json; -namespace Adaptation.Shared.Metrology +namespace Adaptation.Shared.Metrology; + +public partial class WS { - public partial class WS + public static Tuple SendData(string url, object payload, int timeoutSeconds = 120) { - - public static Tuple SendData(string url, object payload, int timeoutSeconds = 120) + Results results = new(); + string resultsJson = string.Empty; + try { - Results results = new Results(); - string resultsJson = string.Empty; - try + string json = JsonSerializer.Serialize(payload, payload.GetType()); + if (string.IsNullOrEmpty(url) || !url.Contains(':') || !url.Contains('.')) + throw new Exception("Invalid URL"); + using (HttpClient httpClient = new()) { - string json = JsonSerializer.Serialize(payload, payload.GetType()); - if (string.IsNullOrEmpty(url) || !url.Contains(":") || !url.Contains(".")) - throw new Exception("Invalid URL"); - using (HttpClient httpClient = new HttpClient()) - { - httpClient.Timeout = new TimeSpan(0, 0, 0, timeoutSeconds, 0); - HttpRequestMessage httpRequestMessage = new HttpRequestMessage - { - RequestUri = new Uri(url), - Method = HttpMethod.Post, - Content = new StringContent(json, Encoding.UTF8, "application/json") - }; - HttpResponseMessage httpResponseMessage = httpClient.SendAsync(httpRequestMessage, HttpCompletionOption.ResponseContentRead).Result; - resultsJson = httpResponseMessage.Content.ReadAsStringAsync().Result; - results = JsonSerializer.Deserialize(resultsJson); - } - if (!results.Success) - results.Errors.Add(results.ToString()); - } - catch (Exception e) - { - Exception exception = e; - StringBuilder stringBuilder = new StringBuilder(); - while (!(exception is null)) - { - stringBuilder.AppendLine(exception.Message); - exception = exception.InnerException; - } - if (results.Errors is null) - results.Errors = new List(); - results.Errors.Add(stringBuilder.ToString()); - } - return new Tuple(resultsJson, results); - } - - // this method is a wrapper for attaching a file to either a header or data record - // URL is the same URL used for SendData, ex: http://localhost/api/inbound/CDE - // attachToHeaderId is the ID returned by SendData - // attachToDataUniqueId is the string unique ID for the data record, aka the Title of the Sharepoint list entry - // fileContents is a byte array with the contents of the file - // fileName is which attachment this is, image.pdf, data.pdf, data.txt, header.pdf, etc - // timeoutSeconds is configured as the request timeout - // this method will either succeed or throw an exception - // also, this has been made synchronous - public static void AttachFile(string url, long attachToHeaderId, string attachToDataUniqueId, byte[] fileContents, string fileName, int timeoutSeconds = 60) - { - using (HttpClient httpClient = new HttpClient()) - { - string requestUrl = url + "/attachment?headerid=" + attachToHeaderId.ToString(); - if (!string.IsNullOrWhiteSpace(attachToDataUniqueId)) - { - requestUrl += "&datauniqueid="; - requestUrl += System.Net.WebUtility.UrlEncode(attachToDataUniqueId); - } - requestUrl += "&filename="; // this is just so the web server log shows the filename - requestUrl += System.Net.WebUtility.UrlEncode(fileName); - httpClient.Timeout = new TimeSpan(0, 0, 0, timeoutSeconds, 0); - - MultipartFormDataContent multipartFormDataContent = new MultipartFormDataContent(); - ByteArrayContent byteArrayContent = new ByteArrayContent(fileContents); - byteArrayContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream"); - - multipartFormDataContent.Add(byteArrayContent, "attachment", fileName); - - HttpResponseMessage httpResponseMessage = httpClient.PostAsync(requestUrl, multipartFormDataContent).Result; - - if (httpResponseMessage.IsSuccessStatusCode) - return; - - string resultBody = httpResponseMessage.Content.ReadAsStringAsync().Result; - - throw new Exception("Attachment failed: " + resultBody); + HttpRequestMessage httpRequestMessage = new() + { + RequestUri = new Uri(url), + Method = HttpMethod.Post, + Content = new StringContent(json, Encoding.UTF8, "application/json") + }; + HttpResponseMessage httpResponseMessage = httpClient.SendAsync(httpRequestMessage, HttpCompletionOption.ResponseContentRead).Result; + resultsJson = httpResponseMessage.Content.ReadAsStringAsync().Result; + results = JsonSerializer.Deserialize(resultsJson); } + if (!results.Success) + results.Errors.Add(results.ToString()); } - - public static void AttachFiles(string url, long headerID, List headerAttachments = null, List dataAttachments = null) + catch (Exception e) { - try + Exception exception = e; + StringBuilder stringBuilder = new(); + while (exception is not null) { - if (!(headerAttachments is null)) - { - foreach (Attachment attachment in headerAttachments) - AttachFile(url, headerID, "", System.IO.File.ReadAllBytes(attachment.SourceFileName), attachment.DestinationFileName); - } - if (!(dataAttachments is null)) - { - foreach (Attachment attachment in dataAttachments) - AttachFile(url, headerID, attachment.UniqueId, System.IO.File.ReadAllBytes(attachment.SourceFileName), attachment.DestinationFileName); - } - //MessageBox.Show(r.ToString()); - } - catch (Exception e) - { - Exception exception = e; - StringBuilder stringBuilder = new StringBuilder(); - while (!(exception is null)) - { - stringBuilder.AppendLine(exception.Message); - exception = exception.InnerException; - } - //MessageBox.Show(msgs.ToString(), "Exception", //MessageBoxButtons.OK, //MessageBoxIcon.Error); - throw new Exception(stringBuilder.ToString()); + _ = stringBuilder.AppendLine(exception.Message); + exception = exception.InnerException; } + if (results.Errors is null) + results.Errors = new List(); + results.Errors.Add(stringBuilder.ToString()); } + return new Tuple(resultsJson, results); + } + // this method is a wrapper for attaching a file to either a header or data record + // URL is the same URL used for SendData, ex: http://localhost/api/inbound/CDE + // attachToHeaderId is the ID returned by SendData + // attachToDataUniqueId is the string unique ID for the data record, aka the Title of the Sharepoint list entry + // fileContents is a byte array with the contents of the file + // fileName is which attachment this is, image.pdf, data.pdf, data.txt, header.pdf, etc + // timeoutSeconds is configured as the request timeout + // this method will either succeed or throw an exception + // also, this has been made synchronous + public static void AttachFile(string url, long attachToHeaderId, string attachToDataUniqueId, byte[] fileContents, string fileName, int timeoutSeconds = 60) + { + using HttpClient httpClient = new(); + string requestUrl = url + "/attachment?headerid=" + attachToHeaderId.ToString(); + if (!string.IsNullOrWhiteSpace(attachToDataUniqueId)) + { + requestUrl += "&datauniqueid="; + requestUrl += System.Net.WebUtility.UrlEncode(attachToDataUniqueId); + } + requestUrl += "&filename="; // this is just so the web server log shows the filename + requestUrl += System.Net.WebUtility.UrlEncode(fileName); + + httpClient.Timeout = new TimeSpan(0, 0, 0, timeoutSeconds, 0); + + MultipartFormDataContent multipartFormDataContent = new(); + ByteArrayContent byteArrayContent = new(fileContents); + byteArrayContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream"); + + multipartFormDataContent.Add(byteArrayContent, "attachment", fileName); + + HttpResponseMessage httpResponseMessage = httpClient.PostAsync(requestUrl, multipartFormDataContent).Result; + + if (httpResponseMessage.IsSuccessStatusCode) + return; + + string resultBody = httpResponseMessage.Content.ReadAsStringAsync().Result; + + throw new Exception("Attachment failed: " + resultBody); + } + + public static void AttachFiles(string url, long headerID, List headerAttachments = null, List dataAttachments = null) + { + try + { + if (headerAttachments is not null) + { + foreach (Attachment attachment in headerAttachments) + AttachFile(url, headerID, "", System.IO.File.ReadAllBytes(attachment.SourceFileName), attachment.DestinationFileName); + } + if (dataAttachments is not null) + { + foreach (Attachment attachment in dataAttachments) + AttachFile(url, headerID, attachment.UniqueId, System.IO.File.ReadAllBytes(attachment.SourceFileName), attachment.DestinationFileName); + } + //MessageBox.Show(r.ToString()); + } + catch (Exception e) + { + Exception exception = e; + StringBuilder stringBuilder = new(); + while (exception is not null) + { + _ = stringBuilder.AppendLine(exception.Message); + exception = exception.InnerException; + } + //MessageBox.Show(msgs.ToString(), "Exception", //MessageBoxButtons.OK, //MessageBoxIcon.Error); + throw new Exception(stringBuilder.ToString()); + } } } \ No newline at end of file diff --git a/Adaptation/Shared/ParameterType.cs b/Adaptation/Shared/ParameterType.cs new file mode 100644 index 0000000..cd3fc15 --- /dev/null +++ b/Adaptation/Shared/ParameterType.cs @@ -0,0 +1,10 @@ +namespace Adaptation.Shared; + +public enum ParameterType +{ + String = 0, + Integer = 2, + Double = 3, + Boolean = 4, + StructuredType = 5 +} \ No newline at end of file diff --git a/Adaptation/Shared/ProcessDataStandardFormat.cs b/Adaptation/Shared/ProcessDataStandardFormat.cs new file mode 100644 index 0000000..251d1b4 --- /dev/null +++ b/Adaptation/Shared/ProcessDataStandardFormat.cs @@ -0,0 +1,411 @@ +using Adaptation.Shared.Methods; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.Json; + +namespace Adaptation.Shared; + +public class ProcessDataStandardFormat +{ + + public const string RecordStart = "RECORD_START"; + + public enum SearchFor + { + EquipmentIntegration = 1, + BusinessIntegration = 2, + SystemExport = 3, + Archive = 4 + } + + public static string GetPDSFText(IFileRead fileRead, Logistics logistics, JsonElement[] jsonElements, string logisticsText) + { + string result; + if (!jsonElements.Any()) + result = string.Empty; + else + { + int columns = 0; + List lines; + string endOffset = "E#######T"; + string dataOffset = "D#######T"; + string headerOffset = "H#######T"; + string format = "MM/dd/yyyy HH:mm:ss"; + StringBuilder stringBuilder = new(); + lines = new string[] { "HEADER_TAG\tHEADER_VALUE", "FORMAT\t2.00", "NUMBER_PASSES\t0001", string.Concat("HEADER_OFFSET\t", headerOffset), string.Concat("DATA_OFFSET\t", dataOffset), string.Concat("END_OFFSET\t", endOffset) }.ToList(); + _ = stringBuilder.Append("\"Time\"").Append('\t'); + _ = stringBuilder.Append("\"A_LOGISTICS\"").Append('\t'); + _ = stringBuilder.Append("\"B_LOGISTICS\"").Append('\t'); + for (int i = 0; i < jsonElements.Length;) + { + foreach (JsonProperty jsonProperty in jsonElements[0].EnumerateObject()) + { + columns += 1; + _ = stringBuilder.Append('"').Append(jsonProperty.Name).Append('"').Append('\t'); + } + break; + } + _ = stringBuilder.Remove(stringBuilder.Length - 1, 1); + lines.Add(stringBuilder.ToString()); + for (int i = 0; i < jsonElements.Length; i++) + { + _ = stringBuilder.Clear(); + _ = stringBuilder.Append("0.1").Append('\t'); + _ = stringBuilder.Append('1').Append('\t'); + _ = stringBuilder.Append('2').Append('\t'); + foreach (JsonProperty jsonProperty in jsonElements[i].EnumerateObject()) + _ = stringBuilder.Append(jsonProperty.Value).Append('\t'); + _ = stringBuilder.Remove(stringBuilder.Length - 1, 1); + lines.Add(stringBuilder.ToString()); + } + lines.Add(string.Concat("NUM_DATA_ROWS ", jsonElements.Length.ToString().PadLeft(9, '0'))); + lines.Add(string.Concat("NUM_DATA_COLUMNS ", (columns + 3).ToString().PadLeft(9, '0'))); + lines.Add("DELIMITER ;"); + lines.Add(string.Concat("START_TIME_FORMAT ", format)); + lines.Add(string.Concat("START_TIME ", logistics.DateTimeFromSequence.ToString(format))); //12/26/2019 15:22:44 + lines.Add(string.Concat("LOGISTICS_COLUMN", '\t', "A_LOGISTICS")); + lines.Add(string.Concat("LOGISTICS_COLUMN", '\t', "B_LOGISTICS")); + if (!string.IsNullOrEmpty(logisticsText)) + lines.Add(logisticsText); + else + { + lines.Add(string.Concat("LOGISTICS_1", '\t', "A_CHAMBER=;A_INFO=", fileRead.EventName, ";A_INFO2=", fileRead.EquipmentType, ";A_JOBID=", fileRead.CellInstanceName, ";A_MES_ENTITY=", fileRead.MesEntity, ";A_MID=", logistics.MID, ";A_NULL_DATA=", fileRead.NullData, ";A_PPID=NO_PPID;A_PROCESS_JOBID=", logistics.ProcessJobID, ";A_PRODUCT=;A_SEQUENCE=", logistics.Sequence, ";A_WAFER_ID=;")); + lines.Add(string.Concat("LOGISTICS_2", '\t', "B_CHAMBER=;B_INFO=", fileRead.EventName, ";B_INFO2=", fileRead.EquipmentType, ";B_JOBID=", fileRead.CellInstanceName, ";B_MES_ENTITY=", fileRead.MesEntity, ";B_MID=", logistics.MID, ";B_NULL_DATA=", fileRead.NullData, ";B_PPID=NO_PPID;B_PROCESS_JOBID=", logistics.ProcessJobID, ";B_PRODUCT=;B_SEQUENCE=", logistics.Sequence, ";B_WAFER_ID=;")); + lines.Add("END_HEADER"); + } + _ = stringBuilder.Clear(); + foreach (string line in lines) + _ = stringBuilder.AppendLine(line); + result = stringBuilder.ToString(); + result = result.Replace(headerOffset, result.IndexOf("NUM_DATA_ROWS").ToString().PadLeft(9, '0')). + Replace(dataOffset, result.IndexOf('"').ToString().PadLeft(9, '0')). + Replace(endOffset, result.Length.ToString().PadLeft(9, '0')); + } + return result; + } + + public static Tuple GetLogisticsColumnsAndBody(string reportFullPath, string[] lines = null) + { + string segment; + List body = new(); + StringBuilder logistics = new(); + if (lines is null) + lines = File.ReadAllLines(reportFullPath); + string[] segments; + if (lines.Length < 7) + segments = Array.Empty(); + else + segments = lines[6].Trim().Split('\t'); + List columns = new(); + for (int c = 0; c < segments.Length; c++) + { + segment = segments[c].Substring(1, segments[c].Length - 2); + if (!columns.Contains(segment)) + columns.Add(segment); + else + { + for (short i = 1; i < short.MaxValue; i++) + { + segment = string.Concat(segment, "_", i); + if (!columns.Contains(segment)) + { + columns.Add(segment); + break; + } + } + } + } + bool lookForLogistics = false; + for (int r = 7; r < lines.Length; r++) + { + if (lines[r].StartsWith("NUM_DATA_ROWS")) + lookForLogistics = true; + if (!lookForLogistics) + { + body.Add(lines[r]); + continue; + } + if (lines[r].StartsWith("LOGISTICS_1")) + { + for (int i = r; i < lines.Length; i++) + { + if (lines[r].StartsWith("END_HEADER")) + break; + _ = logistics.AppendLine(lines[i]); + } + break; + } + } + return new Tuple(logistics.ToString(), columns.ToArray(), body.ToArray()); + } + + public static JsonElement[] GetArray(Tuple pdsf, bool lookForNumbers = false) + { + JsonElement[] results; + string logistics = pdsf.Item1; + string[] columns = pdsf.Item2; + string[] bodyLines = pdsf.Item3; + if (!bodyLines.Any() || !bodyLines[0].Contains('\t')) + results = JsonSerializer.Deserialize("[]"); + else + { + string value; + string[] segments; + StringBuilder stringBuilder = new(); + foreach (string bodyLine in bodyLines) + { + _ = stringBuilder.Append('{'); + segments = bodyLine.Trim().Split('\t'); + if (!lookForNumbers) + { + for (int c = 1; c < segments.Length; c++) + { + value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\"); + _ = stringBuilder.Append('"').Append(columns[c]).Append("\":\"").Append(value).Append("\","); + } + } + else + { + for (int c = 1; c < segments.Length; c++) + { + value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\"); + if (string.IsNullOrEmpty(value)) + _ = stringBuilder.Append('"').Append(columns[c]).Append("\":").Append(value).Append("null,"); + else if (value.All(char.IsDigit)) + _ = stringBuilder.Append('"').Append(columns[c]).Append("\":").Append(value).Append(','); + else + _ = stringBuilder.Append('"').Append(columns[c]).Append("\":\"").Append(value).Append("\","); + } + } + _ = stringBuilder.Remove(stringBuilder.Length - 1, 1); + _ = stringBuilder.AppendLine("},"); + } + _ = stringBuilder.Remove(stringBuilder.Length - 3, 3); + results = JsonSerializer.Deserialize(string.Concat("[", stringBuilder, "]")); + } + return results; + } + + public static Dictionary> GetDictionary(Tuple pdsf) + { + Dictionary> results = new(); + string[] segments; + string[] columns = pdsf.Item2; + string[] bodyLines = pdsf.Item3; + foreach (string column in columns) + results.Add(column, new List()); + foreach (string bodyLine in bodyLines) + { + segments = bodyLine.Split('\t'); + for (int c = 1; c < segments.Length; c++) + { + if (c >= columns.Length) + continue; + results[columns[c]].Add(segments[c]); + } + } + return results; + } + + public static Tuple>>> GetTestDictionary(Tuple pdsf) + { + Dictionary>> results = new(); + string testColumn = nameof(Test); + Dictionary> keyValuePairs = GetDictionary(pdsf); + if (!keyValuePairs.ContainsKey(testColumn)) + throw new Exception(); + int min; + int max; + Test testKey; + List vs; + string columnKey; + Dictionary> tests = new(); + for (int i = 0; i < keyValuePairs[testColumn].Count; i++) + { + if (Enum.TryParse(keyValuePairs[testColumn][i], out Test test)) + { + if (!results.ContainsKey(test)) + { + tests.Add(test, new List()); + results.Add(test, new Dictionary>()); + } + tests[test].Add(i); + } + } + foreach (KeyValuePair> testKeyValuePair in tests) + { + testKey = testKeyValuePair.Key; + min = testKeyValuePair.Value.Min(); + max = testKeyValuePair.Value.Max() + 1; + foreach (KeyValuePair> keyValuePair in keyValuePairs) + results[testKey].Add(keyValuePair.Key, new List()); + foreach (KeyValuePair> keyValuePair in keyValuePairs) + { + vs = keyValuePair.Value; + columnKey = keyValuePair.Key; + for (int i = min; i < max; i++) + { + if (vs.Count > i) + results[testKey][columnKey].Add(vs[i]); + else + results[testKey][columnKey].Add(string.Empty); + } + } + } + return new Tuple>>>(pdsf.Item1, results); + } + + private static string GetString(SearchFor searchFor, bool addSpaces, char separator = ' ') + { + if (!addSpaces) + return string.Concat(((int)searchFor).ToString().PadLeft(2, '0'), searchFor); + else + return string.Concat(((int)searchFor).ToString().PadLeft(2, '0'), separator, searchFor.ToString().Replace("In", string.Concat(separator, "In")).Replace("Ex", string.Concat(separator, "Ex"))); + } + + public static string EquipmentIntegration(bool addSpaces = true, char separator = ' ') => GetString(SearchFor.EquipmentIntegration, addSpaces, separator); + + public static string BusinessIntegration(bool addSpaces = true, char separator = ' ') => GetString(SearchFor.BusinessIntegration, addSpaces, separator); + + public static string SystemExport(bool addSpaces = true, char separator = ' ') => GetString(SearchFor.SystemExport, addSpaces, separator); + + public static string Archive(bool addSpaces = true, char separator = ' ') => GetString(SearchFor.Archive, addSpaces, separator); + + public static string GetLines(Logistics logistics, Properties.IScopeInfo scopeInfo, List names, Dictionary> keyValuePairs, string dateFormat, string timeFormat, List pairedParameterNames, bool useDateTimeFromSequence = true, string format = "", List ignoreParameterNames = null) + { + StringBuilder result = new(); + if (ignoreParameterNames is null) + ignoreParameterNames = new List(); + if (useDateTimeFromSequence && !string.IsNullOrEmpty(format)) + throw new Exception(); + else if (!useDateTimeFromSequence && string.IsNullOrEmpty(format)) + throw new Exception(); + string nullData; + const string columnDate = "Date"; + const string columnTime = "Time"; + const string firstDuplicate = "_1"; + _ = result.AppendLine(scopeInfo.Header); + StringBuilder line = new(); + if (logistics.NullData is null) + nullData = string.Empty; + else + nullData = logistics.NullData.ToString(); + int count = (from l in keyValuePairs select l.Value.Count).Min(); + for (int r = 0; r < count; r++) + { + _ = line.Clear(); + _ = line.Append('!'); + foreach (KeyValuePair> keyValuePair in keyValuePairs) + { + if (!names.Contains(keyValuePair.Key)) + continue; + if (ignoreParameterNames.Contains(keyValuePair.Key)) + continue; + if (pairedParameterNames.Contains(keyValuePair.Key)) + { + if (string.IsNullOrEmpty(keyValuePair.Value[r]) || keyValuePair.Value[r] == nullData) + continue; + else + _ = result.Append(line).Append(keyValuePair.Key).Append(';').AppendLine(keyValuePair.Value[r]); + } + else + { + if (useDateTimeFromSequence && keyValuePair.Key == columnDate) + _ = line.Append(logistics.DateTimeFromSequence.ToString(dateFormat)); + else if (useDateTimeFromSequence && keyValuePair.Key == columnTime) + _ = line.Append(logistics.DateTimeFromSequence.ToString(timeFormat)); + else if (!useDateTimeFromSequence && keyValuePair.Key == columnDate && keyValuePair.Value[r].Length == format.Length) + _ = line.Append(DateTime.ParseExact(keyValuePair.Value[r], format, CultureInfo.InvariantCulture).ToString(dateFormat)); + else if (!useDateTimeFromSequence && keyValuePair.Key == columnTime && keyValuePairs.ContainsKey(string.Concat(keyValuePair.Key, firstDuplicate)) && keyValuePairs[string.Concat(keyValuePair.Key, firstDuplicate)][r].Length == format.Length) + _ = line.Append(DateTime.ParseExact(keyValuePairs[string.Concat(keyValuePair.Key, firstDuplicate)][r], format, CultureInfo.InvariantCulture).ToString(timeFormat)); + else if (string.IsNullOrEmpty(keyValuePair.Value[r]) || keyValuePair.Value[r] == nullData) + _ = line.Append(nullData); + else + _ = line.Append(keyValuePair.Value[r]); + _ = line.Append(';'); + } + } + if (!pairedParameterNames.Any()) + { + _ = line.Remove(line.Length - 1, 1); + _ = result.AppendLine(line.ToString()); + } + } + return result.ToString(); + } + + public static List PDSFToFixedWidth(string reportFullPath) + { + List results = new(); + if (!File.Exists(reportFullPath)) + throw new Exception(); + int[] group; + string line; + int startsAt = 0; + string[] segments; + int? currentGroup = null; + char inputSeperator = '\t'; + char outputSeperator = '\t'; + List vs = new(); + List groups = new(); + string[] lines = File.ReadAllLines(reportFullPath); + StringBuilder stringBuilder = new(); + for (int i = 0; i < lines.Length; i++) + { + if (string.IsNullOrEmpty(lines[i])) + continue; + segments = lines[i].Split(inputSeperator); + if (currentGroup is null) + currentGroup = segments.Length; + if (segments.Length != currentGroup) + { + currentGroup = segments.Length; + groups.Add(new int[] { startsAt, i - 1 }); + startsAt = i; + } + } + if (startsAt == lines.Length - 1 && lines[0].Split(inputSeperator).Length != currentGroup) + groups.Add(new int[] { lines.Length - 1, lines.Length - 1 }); + for (int g = 0; g < groups.Count; g++) + { + vs.Clear(); + group = groups[g]; + line = lines[group[0]]; + segments = line.Split(inputSeperator); + for (int s = 0; s < segments.Length; s++) + vs.Add(segments[s].Length); + for (int i = group[0]; i <= group[1]; i++) + { + line = lines[i]; + segments = line.Split(inputSeperator); + for (int s = 0; s < segments.Length; s++) + { + if (vs[s] < segments[s].Length) + vs[s] = segments[s].Length; + } + } + _ = stringBuilder.Clear(); + for (int s = 0; s < segments.Length; s++) + _ = stringBuilder.Append((s + 1).ToString().PadLeft(vs[s], ' ')).Append(outputSeperator); + _ = stringBuilder.Remove(stringBuilder.Length - 1, 1); + results.Add(stringBuilder.ToString()); + for (int i = group[0]; i <= group[1]; i++) + { + line = lines[i]; + _ = stringBuilder.Clear(); + segments = line.Split(inputSeperator); + for (int s = 0; s < segments.Length; s++) + _ = stringBuilder.Append(segments[s].PadLeft(vs[s], ' ')).Append(outputSeperator); + _ = stringBuilder.Remove(stringBuilder.Length - 1, 1); + results.Add(stringBuilder.ToString()); + } + results.Add(string.Empty); + } + return results; + } + +} \ No newline at end of file diff --git a/Adaptation/Shared/Properties/IDescription.cs b/Adaptation/Shared/Properties/IDescription.cs new file mode 100644 index 0000000..93e6de5 --- /dev/null +++ b/Adaptation/Shared/Properties/IDescription.cs @@ -0,0 +1,10 @@ +namespace Adaptation.Shared.Properties; + +public interface IDescription +{ + + int Test { get; } + int Count { get; } + int Index { get; } + +} \ No newline at end of file diff --git a/Adaptation/Shared/Properties/IFileRead.cs b/Adaptation/Shared/Properties/IFileRead.cs new file mode 100644 index 0000000..2e85ac9 --- /dev/null +++ b/Adaptation/Shared/Properties/IFileRead.cs @@ -0,0 +1,17 @@ +namespace Adaptation.Shared.Properties; + +public interface IFileRead +{ + bool IsEvent { get; } + string NullData { get; } + string MesEntity { get; } + bool IsEAFHosted { get; } + string EventName { get; } + string EquipmentType { get; } + string ReportFullPath { get; } + string CellInstanceName { get; } + string ExceptionSubject { get; } + bool UseCyclicalForDescription { get; } + string CellInstanceConnectionName { get; } + string ParameterizedModelObjectDefinitionType { get; } +} \ No newline at end of file diff --git a/Adaptation/Shared/Properties/ILogistics.cs b/Adaptation/Shared/Properties/ILogistics.cs new file mode 100644 index 0000000..dc1a106 --- /dev/null +++ b/Adaptation/Shared/Properties/ILogistics.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; + +namespace Adaptation.Shared.Properties; + +public interface ILogistics +{ + + public object NullData { get; } + public string JobID { get; } //CellName + public long Sequence { get; } //Ticks + public DateTime DateTimeFromSequence { get; } + public double TotalSecondsSinceLastWriteTimeFromSequence { get; } + public string MesEntity { get; } //SPC + public string ReportFullPath { get; } //Extract file + public string ProcessJobID { get; set; } //Reactor (duplicate but I want it in the logistics) + public string MID { get; set; } //Lot & Pocket || Lot + public List Tags { get; set; } + public List Logistics1 { get; set; } + public List Logistics2 { get; set; } + +} \ No newline at end of file diff --git a/Adaptation/Shared/Properties/ILogistics2.cs b/Adaptation/Shared/Properties/ILogistics2.cs new file mode 100644 index 0000000..ae8a15a --- /dev/null +++ b/Adaptation/Shared/Properties/ILogistics2.cs @@ -0,0 +1,14 @@ +namespace Adaptation.Shared.Properties; + +public interface ILogistics2 +{ + + public string MID { get; } + public string RunNumber { get; } + public string SatelliteGroup { get; } + public string PartNumber { get; } + public string PocketNumber { get; } + public string WaferLot { get; } + public string Recipe { get; } + +} \ No newline at end of file diff --git a/Adaptation/Shared/Properties/IProcessData.cs b/Adaptation/Shared/Properties/IProcessData.cs new file mode 100644 index 0000000..e378288 --- /dev/null +++ b/Adaptation/Shared/Properties/IProcessData.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; + +namespace Adaptation.Shared.Properties; + +public interface IProcessData +{ + + List Details { get; } + +} \ No newline at end of file diff --git a/Adaptation/Shared/Properties/IScopeInfo.cs b/Adaptation/Shared/Properties/IScopeInfo.cs new file mode 100644 index 0000000..10d7385 --- /dev/null +++ b/Adaptation/Shared/Properties/IScopeInfo.cs @@ -0,0 +1,17 @@ +using System; + +namespace Adaptation.Shared.Properties; + +public interface IScopeInfo +{ + + Enum Enum { get; } + string HTML { get; } + string Title { get; } + string FileName { get; } + int TestValue { get; } + string Header { get; } + string QueryFilter { get; } + string FileNameWithoutExtension { get; } + +} \ No newline at end of file diff --git a/Adaptation/Shared/Test.cs b/Adaptation/Shared/Test.cs new file mode 100644 index 0000000..aeb4bea --- /dev/null +++ b/Adaptation/Shared/Test.cs @@ -0,0 +1,58 @@ +namespace Adaptation.Shared; + +public enum Test +{ + AFMRoughness = 34, + BioRadQS408M = 25, + BioRadStratus = 26, + BreakdownVoltageCenter = 0, + BreakdownVoltageEdge = 1, + BreakdownVoltageMiddle8in = 2, + CandelaKlarfDC = 6, + CandelaLaser = 36, + CandelaProdU = 39, + CandelaPSL = 38, + CandelaVerify = 37, + CDE = 24, + CV = 3, + DailyRPMAverage = 19, + DailyRPMPLRatio = 20, + DailyRPMXY = 18, + Denton = 9, + DiffusionLength = 45, + GRATXTCenter = 51, + GRATXTEdge = 52, //Largest + GrowthRateXML = 50, + Hall = 10, + HgCV = 23, + JVXRD = 47, + Lehighton = 13, + LogbookCAC = 49, + Microscope = 46, + MonthlyCV = 4, + MonthlyHall = 11, + MonthlyXRD = 32, + Photoreflectance = 22, + PlatoA = 48, + RPMAverage = 16, + RPMPLRatio = 17, + RPMXY = 15, + SP1 = 8, + Tencor = 7, + UV = 35, + VerificationLehighton = 14, + VerificationRPM = 21, + VerificationWarpAndBow = 29, + VpdIcpmsAnalyte = 27, + WarpAndBow = 28, + WeeklyCV = 5, + WeeklyHall = 12, + WeeklyXRD = 33, + WeeklyXRDAIcomp = 40, + WeeklyXRDFWHM002 = 41, + WeeklyXRDFWHM105 = 42, + WeeklyXRDSLStks = 43, + WeeklyXRDXRR = 44, + XRDWeightedAverage = 31, + XRDXY = 30, +} \ No newline at end of file diff --git a/Adaptation/_Tests/CreateSelfDescription/Staging/v2.39.0/MET08DDUPSP1TBI.cs b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.39.0/MET08DDUPSP1TBI.cs new file mode 100644 index 0000000..9550f08 --- /dev/null +++ b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.39.0/MET08DDUPSP1TBI.cs @@ -0,0 +1,177 @@ +using Adaptation.Shared.Methods; +using Microsoft.Extensions.Logging; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Shared; +using System; +using System.Diagnostics; +using System.IO; +using System.Reflection; + +namespace _Tests.CreateSelfDescription.Staging.v2_39_0; + +[TestClass] +public class MET08DDUPSP1TBI : EAFLoggingUnitTesting +{ + +#pragma warning disable CA2254 +#pragma warning disable IDE0060 + + internal static MET08DDUPSP1TBI EAFLoggingUnitTesting { get; private set; } + + public MET08DDUPSP1TBI() : base(testContext: null, declaringType: null, skipEquipmentDictionary: false) + { + if (EAFLoggingUnitTesting is null) + throw new Exception(); + } + + public MET08DDUPSP1TBI(TestContext testContext) : base(testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false) + { + } + + [ClassInitialize] + public static void ClassInitialize(TestContext testContext) + { + if (EAFLoggingUnitTesting is null) + 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() + { + if (EAFLoggingUnitTesting.Logger is not null) + EAFLoggingUnitTesting.Logger.LogInformation("Cleanup"); + if (EAFLoggingUnitTesting is not null) + EAFLoggingUnitTesting.Dispose(); + } + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI() + { + string check = "~IsXToOpenInsightMetrologyViewer"; + MethodBase methodBase = new StackFrame().GetMethod(); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); + string[] fileNameAndJson = EAFLoggingUnitTesting.AdaptationTesting.GetConfiguration(methodBase); + Assert.IsTrue(fileNameAndJson[1].Contains(check)); + File.WriteAllText(fileNameAndJson[0], fileNameAndJson[1]); + IFileRead fileRead = EAFLoggingUnitTesting.AdaptationTesting.Get(methodBase, sourceFileLocation: string.Empty, sourceFileFilter: string.Empty, useCyclicalForDescription: false); + Assert.IsFalse(string.IsNullOrEmpty(fileRead.CellInstanceConnectionName)); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); + } + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI_() + { + string check = "~IsXToIQSSi"; + MethodBase methodBase = new StackFrame().GetMethod(); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); + string[] fileNameAndJson = EAFLoggingUnitTesting.AdaptationTesting.GetConfiguration(methodBase); + Assert.IsTrue(fileNameAndJson[1].Contains(check)); + File.WriteAllText(fileNameAndJson[0], fileNameAndJson[1]); + IFileRead fileRead = EAFLoggingUnitTesting.AdaptationTesting.Get(methodBase, sourceFileLocation: string.Empty, sourceFileFilter: string.Empty, useCyclicalForDescription: false); + Assert.IsFalse(string.IsNullOrEmpty(fileRead.CellInstanceConnectionName)); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); + } + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI__() + { + string check = "~IsXToOpenInsight"; + MethodBase methodBase = new StackFrame().GetMethod(); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); + string[] fileNameAndJson = EAFLoggingUnitTesting.AdaptationTesting.GetConfiguration(methodBase); + Assert.IsTrue(fileNameAndJson[1].Contains(check)); + File.WriteAllText(fileNameAndJson[0], fileNameAndJson[1]); + IFileRead fileRead = EAFLoggingUnitTesting.AdaptationTesting.Get(methodBase, sourceFileLocation: string.Empty, sourceFileFilter: string.Empty, useCyclicalForDescription: false); + Assert.IsFalse(string.IsNullOrEmpty(fileRead.CellInstanceConnectionName)); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); + } + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI___() + { + string check = "~IsXToOpenInsightMetrologyViewerAttachments"; + MethodBase methodBase = new StackFrame().GetMethod(); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); + string[] fileNameAndJson = EAFLoggingUnitTesting.AdaptationTesting.GetConfiguration(methodBase); + Assert.IsTrue(fileNameAndJson[1].Contains(check)); + File.WriteAllText(fileNameAndJson[0], fileNameAndJson[1]); + IFileRead fileRead = EAFLoggingUnitTesting.AdaptationTesting.Get(methodBase, sourceFileLocation: string.Empty, sourceFileFilter: string.Empty, useCyclicalForDescription: false); + Assert.IsFalse(string.IsNullOrEmpty(fileRead.CellInstanceConnectionName)); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); + } + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI____() + { + string check = "~IsXToAPC"; + MethodBase methodBase = new StackFrame().GetMethod(); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); + string[] fileNameAndJson = EAFLoggingUnitTesting.AdaptationTesting.GetConfiguration(methodBase); + Assert.IsTrue(fileNameAndJson[1].Contains(check)); + File.WriteAllText(fileNameAndJson[0], fileNameAndJson[1]); + IFileRead fileRead = EAFLoggingUnitTesting.AdaptationTesting.Get(methodBase, sourceFileLocation: string.Empty, sourceFileFilter: string.Empty, useCyclicalForDescription: false); + Assert.IsFalse(string.IsNullOrEmpty(fileRead.CellInstanceConnectionName)); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); + } + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI_____() + { + string check = "~IsXToSPaCe"; + MethodBase methodBase = new StackFrame().GetMethod(); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); + string[] fileNameAndJson = EAFLoggingUnitTesting.AdaptationTesting.GetConfiguration(methodBase); + Assert.IsTrue(fileNameAndJson[1].Contains(check)); + File.WriteAllText(fileNameAndJson[0], fileNameAndJson[1]); + IFileRead fileRead = EAFLoggingUnitTesting.AdaptationTesting.Get(methodBase, sourceFileLocation: string.Empty, sourceFileFilter: string.Empty, useCyclicalForDescription: false); + Assert.IsFalse(string.IsNullOrEmpty(fileRead.CellInstanceConnectionName)); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); + } + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI______() + { + string check = "~IsXToArchive"; + MethodBase methodBase = new StackFrame().GetMethod(); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); + string[] fileNameAndJson = EAFLoggingUnitTesting.AdaptationTesting.GetConfiguration(methodBase); + Assert.IsTrue(fileNameAndJson[1].Contains(check)); + File.WriteAllText(fileNameAndJson[0], fileNameAndJson[1]); + IFileRead fileRead = EAFLoggingUnitTesting.AdaptationTesting.Get(methodBase, sourceFileLocation: string.Empty, sourceFileFilter: string.Empty, useCyclicalForDescription: false); + Assert.IsFalse(string.IsNullOrEmpty(fileRead.CellInstanceConnectionName)); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); + } + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI_______() + { + string check = "~IsArchive"; + MethodBase methodBase = new StackFrame().GetMethod(); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); + string[] fileNameAndJson = EAFLoggingUnitTesting.AdaptationTesting.GetConfiguration(methodBase); + Assert.IsTrue(fileNameAndJson[1].Contains(check)); + File.WriteAllText(fileNameAndJson[0], fileNameAndJson[1]); + IFileRead fileRead = EAFLoggingUnitTesting.AdaptationTesting.Get(methodBase, sourceFileLocation: string.Empty, sourceFileFilter: string.Empty, useCyclicalForDescription: false); + Assert.IsFalse(string.IsNullOrEmpty(fileRead.CellInstanceConnectionName)); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); + } + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI________() + { + string check = "~IsDummy"; + MethodBase methodBase = new StackFrame().GetMethod(); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); + string[] fileNameAndJson = EAFLoggingUnitTesting.AdaptationTesting.GetConfiguration(methodBase); + Assert.IsTrue(fileNameAndJson[1].Contains(check)); + File.WriteAllText(fileNameAndJson[0], fileNameAndJson[1]); + IFileRead fileRead = EAFLoggingUnitTesting.AdaptationTesting.Get(methodBase, sourceFileLocation: string.Empty, sourceFileFilter: string.Empty, useCyclicalForDescription: false); + Assert.IsFalse(string.IsNullOrEmpty(fileRead.CellInstanceConnectionName)); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); + } + +} \ No newline at end of file diff --git a/Adaptation/_Tests/CreateSelfDescription/Staging/v2.39.0/SP1-EQPT.cs b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.39.0/SP1-EQPT.cs new file mode 100644 index 0000000..eb9acac --- /dev/null +++ b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.39.0/SP1-EQPT.cs @@ -0,0 +1,65 @@ +using Adaptation.Shared.Methods; +using Microsoft.Extensions.Logging; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Shared; +using System; +using System.Diagnostics; +using System.IO; +using System.Reflection; + +namespace _Tests.CreateSelfDescription.Staging.v2_39_0; + +[TestClass] +public class SP1_EQPT : EAFLoggingUnitTesting +{ + +#pragma warning disable CA2254 +#pragma warning disable IDE0060 + + internal static SP1_EQPT EAFLoggingUnitTesting { get; private set; } + + public SP1_EQPT() : base(testContext: null, declaringType: null, skipEquipmentDictionary: false) + { + if (EAFLoggingUnitTesting is null) + throw new Exception(); + } + + public SP1_EQPT(TestContext testContext) : base(testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false) + { + } + + [ClassInitialize] + public static void ClassInitialize(TestContext testContext) + { + if (EAFLoggingUnitTesting is null) + EAFLoggingUnitTesting = new SP1_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() + { + if (EAFLoggingUnitTesting.Logger is not null) + EAFLoggingUnitTesting.Logger.LogInformation("Cleanup"); + if (EAFLoggingUnitTesting is not null) + EAFLoggingUnitTesting.Dispose(); + } + + [TestMethod] + public void Staging__v2_39_0__SP1_EQPT__DownloadRsMFile() + { + string check = "WafrMeas.log|.RsM"; + MethodBase methodBase = new StackFrame().GetMethod(); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); + string[] fileNameAndJson = EAFLoggingUnitTesting.AdaptationTesting.GetConfiguration(methodBase); + Assert.IsTrue(fileNameAndJson[1].Contains(check)); + File.WriteAllText(fileNameAndJson[0], fileNameAndJson[1]); + IFileRead fileRead = EAFLoggingUnitTesting.AdaptationTesting.Get(methodBase, sourceFileLocation: string.Empty, sourceFileFilter: string.Empty, useCyclicalForDescription: false); + Assert.IsFalse(string.IsNullOrEmpty(fileRead.CellInstanceConnectionName)); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); + } + +} \ No newline at end of file diff --git a/Adaptation/_Tests/CreateSelfDescription/Staging/v2.39.0/SP1.cs b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.39.0/SP1.cs new file mode 100644 index 0000000..13fab31 --- /dev/null +++ b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.39.0/SP1.cs @@ -0,0 +1,65 @@ +using Adaptation.Shared.Methods; +using Microsoft.Extensions.Logging; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Shared; +using System; +using System.Diagnostics; +using System.IO; +using System.Reflection; + +namespace _Tests.CreateSelfDescription.Staging.v2_39_0; + +[TestClass] +public class SP1 : EAFLoggingUnitTesting +{ + +#pragma warning disable CA2254 +#pragma warning disable IDE0060 + + internal static SP1 EAFLoggingUnitTesting { get; private set; } + + public SP1() : base(testContext: null, declaringType: null, skipEquipmentDictionary: false) + { + if (EAFLoggingUnitTesting is null) + throw new Exception(); + } + + public SP1(TestContext testContext) : base(testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false) + { + } + + [ClassInitialize] + public static void ClassInitialize(TestContext testContext) + { + if (EAFLoggingUnitTesting is null) + EAFLoggingUnitTesting = new SP1(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() + { + if (EAFLoggingUnitTesting.Logger is not null) + EAFLoggingUnitTesting.Logger.LogInformation("Cleanup"); + if (EAFLoggingUnitTesting is not null) + EAFLoggingUnitTesting.Dispose(); + } + + [TestMethod] + public void Staging__v2_39_0__SP1__RsM() + { + string check = "*.RsM"; + MethodBase methodBase = new StackFrame().GetMethod(); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); + string[] fileNameAndJson = EAFLoggingUnitTesting.AdaptationTesting.GetConfiguration(methodBase); + Assert.IsTrue(fileNameAndJson[1].Contains(check)); + File.WriteAllText(fileNameAndJson[0], fileNameAndJson[1]); + IFileRead fileRead = EAFLoggingUnitTesting.AdaptationTesting.Get(methodBase, sourceFileLocation: string.Empty, sourceFileFilter: string.Empty, useCyclicalForDescription: false); + Assert.IsFalse(string.IsNullOrEmpty(fileRead.CellInstanceConnectionName)); + EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); + } + +} \ No newline at end of file diff --git a/Adaptation/_Tests/Extract/Staging/v2.39.0/MET08DDUPSP1TBI.cs b/Adaptation/_Tests/Extract/Staging/v2.39.0/MET08DDUPSP1TBI.cs new file mode 100644 index 0000000..1af0d68 --- /dev/null +++ b/Adaptation/_Tests/Extract/Staging/v2.39.0/MET08DDUPSP1TBI.cs @@ -0,0 +1,82 @@ +using Adaptation.Shared; +using Adaptation.Shared.Methods; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Text.Json; + +namespace _Tests.Extract.Staging.v2_39_0; + +[TestClass] +public class MET08DDUPSP1TBI +{ + +#pragma warning disable CA2254 +#pragma warning disable IDE0060 + + private static CreateSelfDescription.Staging.v2_39_0.MET08DDUPSP1TBI _MET08DDUPSP1TBI; + + [ClassInitialize] + public static void ClassInitialize(TestContext testContext) + { + CreateSelfDescription.Staging.v2_39_0.MET08DDUPSP1TBI.ClassInitialize(testContext); + _MET08DDUPSP1TBI = CreateSelfDescription.Staging.v2_39_0.MET08DDUPSP1TBI.EAFLoggingUnitTesting; + } + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI() => _MET08DDUPSP1TBI.Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI(); + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI637710931421087642__Normal() + { + string check = "~IsXToOpenInsightMetrologyViewer"; + MethodBase methodBase = new StackFrame().GetMethod(); + _MET08DDUPSP1TBI.Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI(); + string[] variables = _MET08DDUPSP1TBI.AdaptationTesting.GetVariables(methodBase, check); + Tuple pdsf = Helpers.Metrology.GetLogisticsColumnsAndBody(variables[2], variables[4]); + IFileRead fileRead = _MET08DDUPSP1TBI.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false); + Tuple> extractResult = fileRead.ReExtract(); + Assert.IsFalse(string.IsNullOrEmpty(extractResult?.Item1)); + Assert.IsTrue(extractResult.Item3.Length > 0, "extractResult Array Length check!"); + Assert.IsNotNull(extractResult.Item4); + Logistics logistics = new(fileRead); + Tuple pdsfNew = Helpers.Metrology.GetLogisticsColumnsAndBody(fileRead, logistics, extractResult, pdsf); + Helpers.Metrology.CompareSave(variables[5], pdsf, pdsfNew); + Assert.IsTrue(pdsf.Item1 == pdsfNew.Item1, "Item1 check!"); + string[] json = Helpers.Metrology.GetItem2(pdsf, pdsfNew); + Helpers.Metrology.CompareSaveJSON(variables[5], json); + Assert.IsTrue(json[0] == json[1], "Item2 check!"); + string[] join = Helpers.Metrology.GetItem3(pdsf, pdsfNew); + Helpers.Metrology.CompareSaveTSV(variables[5], join); + Assert.IsTrue(join[0] == join[1], "Item3 (Join) check!"); + Helpers.Metrology.UpdatePassDirectory(variables[2]); + } + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI_() => _MET08DDUPSP1TBI.Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI_(); + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI__() => _MET08DDUPSP1TBI.Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI__(); + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI___() => _MET08DDUPSP1TBI.Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI___(); + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI____() => _MET08DDUPSP1TBI.Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI____(); + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI_____() => _MET08DDUPSP1TBI.Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI_____(); + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI______() => _MET08DDUPSP1TBI.Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI______(); + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI_______() => _MET08DDUPSP1TBI.Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI_______(); + + [TestMethod] + public void Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI________() => _MET08DDUPSP1TBI.Staging__v2_39_0__MET08DDUPSP1TBI__MET08DDUPSP1TBI________(); + +} \ No newline at end of file diff --git a/Adaptation/_Tests/Extract/Staging/v2.39.0/SP1-EQPT.cs b/Adaptation/_Tests/Extract/Staging/v2.39.0/SP1-EQPT.cs new file mode 100644 index 0000000..d9c637f --- /dev/null +++ b/Adaptation/_Tests/Extract/Staging/v2.39.0/SP1-EQPT.cs @@ -0,0 +1,32 @@ +using Adaptation.Shared; +using Adaptation.Shared.Methods; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Text.Json; + +namespace _Tests.Extract.Staging.v2_39_0; + +[TestClass] +public class SP1_EQPT +{ + +#pragma warning disable CA2254 +#pragma warning disable IDE0060 + + private static CreateSelfDescription.Staging.v2_39_0.SP1_EQPT _SP1_EQPT; + + [ClassInitialize] + public static void ClassInitialize(TestContext testContext) + { + CreateSelfDescription.Staging.v2_39_0.SP1_EQPT.ClassInitialize(testContext); + _SP1_EQPT = CreateSelfDescription.Staging.v2_39_0.SP1_EQPT.EAFLoggingUnitTesting; + } + + [TestMethod] + public void Staging__v2_39_0__SP1_EQPT__DownloadRsMFile() => _SP1_EQPT.Staging__v2_39_0__SP1_EQPT__DownloadRsMFile(); + +} \ No newline at end of file diff --git a/Adaptation/_Tests/Extract/Staging/v2.39.0/SP1.cs b/Adaptation/_Tests/Extract/Staging/v2.39.0/SP1.cs new file mode 100644 index 0000000..05c6bd8 --- /dev/null +++ b/Adaptation/_Tests/Extract/Staging/v2.39.0/SP1.cs @@ -0,0 +1,32 @@ +using Adaptation.Shared; +using Adaptation.Shared.Methods; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Text.Json; + +namespace _Tests.Extract.Staging.v2_39_0; + +[TestClass] +public class SP1 +{ + +#pragma warning disable CA2254 +#pragma warning disable IDE0060 + + private static CreateSelfDescription.Staging.v2_39_0.SP1 _SP1; + + [ClassInitialize] + public static void ClassInitialize(TestContext testContext) + { + CreateSelfDescription.Staging.v2_39_0.SP1.ClassInitialize(testContext); + _SP1 = CreateSelfDescription.Staging.v2_39_0.SP1.EAFLoggingUnitTesting; + } + + [TestMethod] + public void Staging__v2_39_0__SP1__RsM() => _SP1.Staging__v2_39_0__SP1__RsM(); + +} \ No newline at end of file diff --git a/Adaptation/_Tests/Helpers/Metrology.cs b/Adaptation/_Tests/Helpers/Metrology.cs new file mode 100644 index 0000000..0d41570 --- /dev/null +++ b/Adaptation/_Tests/Helpers/Metrology.cs @@ -0,0 +1,156 @@ +using Adaptation.Shared; +using Adaptation.Shared.Methods; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text.Json; + +namespace _Tests.Helpers; + +public class Metrology +{ + + internal static Tuple GetLogisticsColumnsAndBody(string fileFullName) + { + Tuple results; + results = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(fileFullName); + Assert.IsFalse(string.IsNullOrEmpty(results.Item1)); + Assert.IsTrue(results.Item2.Length > 0, "Column check"); + Assert.IsTrue(results.Item3.Length > 0, "Body check"); + return results; + } + + internal static Tuple GetLogisticsColumnsAndBody(string searchDirectory, string searchPattern) + { + Tuple results; + if (searchPattern.Length > 3 && !searchPattern.Contains('*') && File.Exists(searchPattern)) + results = GetLogisticsColumnsAndBody(searchPattern); + else + { + string[] pdsfFiles; + pdsfFiles = Directory.GetFiles(searchDirectory, searchPattern, SearchOption.TopDirectoryOnly); + if (!pdsfFiles.Any()) + _ = Process.Start("explorer.exe", searchDirectory); + Assert.IsTrue(pdsfFiles.Any(), "GetFiles check"); + results = GetLogisticsColumnsAndBody(pdsfFiles[0]); + } + Assert.IsFalse(string.IsNullOrEmpty(results.Item1)); + Assert.IsTrue(results.Item2.Length > 0, "Column check"); + Assert.IsTrue(results.Item3.Length > 0, "Body check"); + return results; + } + + internal static Tuple GetLogisticsColumnsAndBody(IFileRead fileRead, Logistics logistics, Tuple> extractResult, Tuple pdsf) + { + Tuple results; + string text = ProcessDataStandardFormat.GetPDSFText(fileRead, logistics, extractResult.Item3, logisticsText: pdsf.Item1); + string[] lines = text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + results = ProcessDataStandardFormat.GetLogisticsColumnsAndBody(logistics.ReportFullPath, lines); + Assert.IsFalse(string.IsNullOrEmpty(results.Item1)); + Assert.IsTrue(results.Item2.Length > 0, "Column check"); + Assert.IsTrue(results.Item3.Length > 0, "Body check"); + return results; + } + + internal static string[] GetItem2(Tuple pdsf, Tuple pdsfNew) + { + JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true }; + string jsonOld = JsonSerializer.Serialize(pdsf.Item2, pdsf.Item2.GetType(), jsonSerializerOptions); + string jsonNew = JsonSerializer.Serialize(pdsfNew.Item2, pdsfNew.Item2.GetType(), jsonSerializerOptions); + return new string[] { jsonOld, jsonNew }; + } + + internal static string[] GetItem3(Tuple pdsf, Tuple pdsfNew) + { + string joinOld = string.Join(Environment.NewLine, from l in pdsf.Item3 select string.Join('\t', from t in l.Split('\t') where !t.Contains(@"\\") select t)); + string joinNew = string.Join(Environment.NewLine, from l in pdsfNew.Item3 select string.Join('\t', from t in l.Split('\t') where !t.Contains(@"\\") select t)); + return new string[] { joinOld, joinNew }; + } + + internal static void UpdatePassDirectory(string searchDirectory) + { + DateTime dateTime = DateTime.Now; + try + { Directory.SetLastWriteTime(searchDirectory, dateTime); } + catch (System.Exception) { } + string ticksDirectory = Path.GetDirectoryName(searchDirectory); + try + { Directory.SetLastWriteTime(ticksDirectory, dateTime); } + catch (System.Exception) { } + string[] directories = Directory.GetDirectories(searchDirectory, "*", SearchOption.TopDirectoryOnly); + foreach (string directory in directories) + { + try + { Directory.SetLastWriteTime(directory, dateTime); } + catch (System.Exception) { } + } + } + + internal static string GetFileName(MethodBase methodBase) + { + string result; + string connectionName; + string seperator = "__"; + string connectionNameAndTicks; + string[] segments = methodBase.Name.Split(new string[] { seperator }, StringSplitOptions.None); + string environment = segments[0]; + string rawVersionName = segments[1]; + string equipmentTypeDirectory = segments[2]; + string ticks = DateTime.Now.Ticks.ToString(); + string comment = segments[segments.Length - 1]; + string versionName = segments[1].Replace('_', '.'); + string before = string.Concat(environment, seperator, rawVersionName, seperator, equipmentTypeDirectory, seperator); + string after = methodBase.Name.Substring(before.Length); + if (after.Length < ticks.Length) + { + connectionName = after; + } + else + { + connectionNameAndTicks = after.Substring(0, after.Length - 2 - comment.Length); + connectionName = connectionNameAndTicks.Substring(0, connectionNameAndTicks.Length - ticks.Length); + ticks = connectionNameAndTicks.Substring(connectionName.Length); + } + result = Path.Combine(environment, equipmentTypeDirectory, versionName, $"{environment}__{rawVersionName}__{equipmentTypeDirectory}__{connectionName}", ticks, $"{connectionName.Replace('_', '-')}.json"); + if (result.Contains('/')) + result = string.Concat('/', result); + else + result = string.Concat('\\', result); + return result; + } + + internal static void CompareSaveTSV(string textFileDirectory, string[] join) + { + if (join[0] != join[1]) + { + _ = Process.Start("explorer.exe", textFileDirectory); + File.WriteAllText(Path.Combine(textFileDirectory, "0.tsv"), join[0]); + File.WriteAllText(Path.Combine(textFileDirectory, "1.tsv"), join[1]); + } + } + + internal static void CompareSaveJSON(string textFileDirectory, string[] json) + { + if (json[0] != json[1]) + { + _ = Process.Start("explorer.exe", textFileDirectory); + File.WriteAllText(Path.Combine(textFileDirectory, "0.json"), json[0]); + File.WriteAllText(Path.Combine(textFileDirectory, "1.json"), json[1]); + } + } + + internal static void CompareSave(string textFileDirectory, Tuple pdsf, Tuple pdsfNew) + { + if (pdsf.Item1 != pdsfNew.Item1) + { + _ = Process.Start("explorer.exe", textFileDirectory); + File.WriteAllText(Path.Combine(textFileDirectory, "0.dat"), pdsf.Item1); + File.WriteAllText(Path.Combine(textFileDirectory, "1.dat"), pdsfNew.Item1); + } + } + +} \ No newline at end of file diff --git a/Adaptation/_Tests/Shared/AdaptationTesting.cs b/Adaptation/_Tests/Shared/AdaptationTesting.cs new file mode 100644 index 0000000..8378736 --- /dev/null +++ b/Adaptation/_Tests/Shared/AdaptationTesting.cs @@ -0,0 +1,1061 @@ +using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; +using Adaptation.Ifx.Eaf.Common.Configuration; +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared.Methods; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Shared.PasteSpecialXml.EAF.XML.API.CellInstance; +using Shared.PasteSpecialXml.EAF.XML.API.ConfigurationData; +using Shared.PasteSpecialXml.EAF.XML.API.EquipmentDictionary; +using Shared.PasteSpecialXml.EAF.XML.API.EquipmentType; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Xml; +using System.Xml.Linq; +using System.Xml.Serialization; + +namespace Shared; + +public class AdaptationTesting : ISMTP +{ + + protected readonly string _Environment; + protected readonly string _HostNameAndPort; + protected readonly TestContext _TestContext; + protected readonly bool _SkipEquipmentDictionary; + protected readonly Dictionary _CellInstanceVersions; + protected readonly Dictionary _EquipmentTypeVersions; + protected readonly Dictionary _ParameterizedModelObjectDefinitionTypes; + protected readonly Dictionary _EquipmentDictionaryVersions; + protected readonly Dictionary _FileConnectorConfigurations; + protected readonly Dictionary> _ModelObjectParameters; + protected readonly Dictionary>> _EquipmentDictionaryEventDescriptions; + + public string Environment => _Environment; + public TestContext TestContext => _TestContext; + public string HostNameAndPort => _HostNameAndPort; + public bool SkipEquipmentDictionary => _SkipEquipmentDictionary; + public Dictionary CellInstanceVersions => _CellInstanceVersions; + public Dictionary EquipmentTypeVersions => _EquipmentTypeVersions; + public Dictionary> ModelObjectParameters => _ModelObjectParameters; + public Dictionary EquipmentDictionaryVersions => _EquipmentDictionaryVersions; + public Dictionary FileConnectorConfigurations => _FileConnectorConfigurations; + public Dictionary ParameterizedModelObjectDefinitionTypes => _ParameterizedModelObjectDefinitionTypes; + public Dictionary>> EquipmentDictionaryEventDescriptions => _EquipmentDictionaryEventDescriptions; + + void ISMTP.SendLowPriorityEmailMessage(string subject, string body) => throw new NotImplementedException(); + + void ISMTP.SendHighPriorityEmailMessage(string subject, string body) => throw new NotImplementedException(); + + void ISMTP.SendNormalPriorityEmailMessage(string subject, string body) => throw new NotImplementedException(); + + public AdaptationTesting(TestContext testContext, bool skipEquipmentDictionary) + { + + string environment = GetEnvironment(testContext); + string hostNameAndPort = GetHostNameAndPort(environment); + _TestContext = testContext; + _Environment = environment; + _HostNameAndPort = hostNameAndPort; + _SkipEquipmentDictionary = skipEquipmentDictionary; + _CellInstanceVersions = new Dictionary(); + _EquipmentTypeVersions = new Dictionary(); + _ParameterizedModelObjectDefinitionTypes = new Dictionary(); + _EquipmentDictionaryVersions = new Dictionary(); + _FileConnectorConfigurations = new Dictionary(); + _ModelObjectParameters = new Dictionary>(); + _EquipmentDictionaryEventDescriptions = new Dictionary>>(); + } + + protected static string GetEnvironment(TestContext testContext) + { + string result = testContext.TestName.Split('_')[0]; + return result; + } + + protected static string GetHostNameAndPort(string environment) + { + string result; + result = environment switch + { + "LocalHost" => "localhost:9003", + "Development" => "eaf-dev.mes.infineon.com:9003", + "Staging" => "eaf-staging.mes.infineon.com:9003", + "Production" => "eaf-prod.mes.infineon.com:9003", + _ => throw new Exception(), + }; + return result; + } + + protected string GetTestResultsDirectory() + { + string result = string.Empty; + string testResults = "05_TestResults"; + string checkDirectory = _TestContext.TestResultsDirectory; + if (string.IsNullOrEmpty(checkDirectory) || !checkDirectory.Contains(testResults)) + throw new Exception(); + string rootDirectory = Path.GetPathRoot(checkDirectory); + for (int i = 0; i < int.MaxValue; i++) + { + checkDirectory = Path.GetDirectoryName(checkDirectory); + if (string.IsNullOrEmpty(checkDirectory) || checkDirectory == rootDirectory) + break; + if (checkDirectory.EndsWith(testResults) && Directory.Exists(checkDirectory)) + { + result = checkDirectory; + break; + } + } + if (string.IsNullOrEmpty(result)) + throw new Exception(); + return result; + } + + protected static string GetCellInstanceConnectionName(string cellInstanceConnectionName) + { + string result; + if (string.IsNullOrEmpty(cellInstanceConnectionName) || cellInstanceConnectionName[cellInstanceConnectionName.Length - 1] != '_') + result = cellInstanceConnectionName; + else + { + bool check = false; + List chars = new(); + StringBuilder stringBuilder = new(); + for (int i = cellInstanceConnectionName.Length - 1; i > -1; i--) + { + if (!check && cellInstanceConnectionName[i] != '_') + check = true; + else if (!check && cellInstanceConnectionName[i] == '_') + chars.Add('-'); + if (check) + chars.Add(cellInstanceConnectionName[i]); + } + for (int i = chars.Count - 1; i > -1; i--) + _ = stringBuilder.Append(chars[i]); + result = stringBuilder.ToString(); + } + return result; + } + + private static string GetMethodBaseNameWithActualCICN(string methodBaseName, string cellInstanceName, string cellInstanceConnectionNameFromMethodBaseName, string cellInstanceConnectionName, string ticks) + { + string results; + if (string.IsNullOrEmpty(cellInstanceConnectionNameFromMethodBaseName) || string.IsNullOrEmpty(cellInstanceConnectionName)) + results = methodBaseName; + else if (cellInstanceConnectionNameFromMethodBaseName.Length != cellInstanceConnectionName.Length) + throw new Exception(); + else + { + string[] segments = methodBaseName.Split(new string[] { cellInstanceName }, StringSplitOptions.None); + if (segments.Length == 2) + results = methodBaseName.Replace(cellInstanceConnectionNameFromMethodBaseName, cellInstanceConnectionName); + else if (segments.Length != 3) + throw new Exception(); + else if (string.IsNullOrEmpty(ticks)) + results = string.Concat(segments[0], cellInstanceName, segments[1], cellInstanceConnectionName); + else if (!segments[2].Contains(ticks)) + throw new Exception(); + else + results = string.Concat(segments[0], cellInstanceName, segments[1], cellInstanceConnectionName, ticks, segments[2].Split(new string[] { ticks }, StringSplitOptions.None)[1]); + } + if (methodBaseName.Length != results.Length) + throw new Exception(); + return results; + } + + internal string[] GetSegments(string methodBaseName) + { + List results; + string fileFullName; + string comment; + string[] textFiles; + string seperator = "__"; + string connectionNameAndTicks; + string cellInstanceConnectionName; + string ticks = DateTime.Now.Ticks.ToString(); + string cellInstanceConnectionNameFromMethodBaseName; + string testResultsDirectory = GetTestResultsDirectory(); + string[] segments = methodBaseName.Split(new string[] { seperator }, StringSplitOptions.None); + if (segments[0] != _Environment) + throw new Exception(); + string rawVersionName = segments[1]; + string rawCellInstanceName = segments[2]; + string cellInstanceVersionName = segments[1].Replace('_', '.'); + string cellInstanceName = segments[2].Replace('_', '-').Replace("_EQPT", "-EQPT"); + string before = string.Concat(_Environment, seperator, rawVersionName, seperator, cellInstanceName, seperator); + string after = methodBaseName.Substring(before.Length); + string versionDirectory = Path.Combine(testResultsDirectory, _Environment, cellInstanceName, cellInstanceVersionName); + if (!Directory.Exists(versionDirectory)) + _ = Directory.CreateDirectory(versionDirectory); + comment = segments[segments.Length - 1]; + if (after.Length < ticks.Length || after == comment) + { + ticks = string.Empty; + cellInstanceConnectionNameFromMethodBaseName = string.Empty; + } + else + { + connectionNameAndTicks = after.Substring(0, after.Length - 2 - comment.Length); + if (connectionNameAndTicks.Length - ticks.Length < 1) + { + ticks = string.Empty; + cellInstanceConnectionNameFromMethodBaseName = string.Empty; + } + else + { + cellInstanceConnectionNameFromMethodBaseName = connectionNameAndTicks.Substring(0, connectionNameAndTicks.Length - ticks.Length); + ticks = connectionNameAndTicks.Substring(cellInstanceConnectionNameFromMethodBaseName.Length); + } + } + if (string.IsNullOrEmpty(ticks) || string.IsNullOrEmpty(cellInstanceConnectionNameFromMethodBaseName) || !long.TryParse(ticks, out _)) + { + ticks = string.Empty; + comment = string.Empty; + cellInstanceConnectionNameFromMethodBaseName = after; + } + cellInstanceConnectionName = GetCellInstanceConnectionName(cellInstanceConnectionNameFromMethodBaseName); + string methodBaseNameWithActualCICN = GetMethodBaseNameWithActualCICN(methodBaseName, rawCellInstanceName, cellInstanceConnectionNameFromMethodBaseName, cellInstanceConnectionName, ticks); + if (string.IsNullOrEmpty(ticks)) + { + textFiles = Array.Empty(); + fileFullName = Path.Combine(versionDirectory, methodBaseNameWithActualCICN, $"{cellInstanceConnectionNameFromMethodBaseName}.json"); + } + else + { + segments = methodBaseNameWithActualCICN.Split(new string[] { ticks }, StringSplitOptions.None); + string textDirectory = Path.Combine(versionDirectory, segments[0], string.Concat(ticks, segments[1])); + fileFullName = Path.Combine(versionDirectory, segments[0], $"{cellInstanceConnectionNameFromMethodBaseName}.json"); + if (!Directory.Exists(textDirectory)) + { + textFiles = Array.Empty(); + string renameDirectory = Path.Combine(Path.GetDirectoryName(textDirectory), $"_Rename - {Path.GetFileName(textDirectory)}"); + _ = Directory.CreateDirectory(renameDirectory); + _ = Process.Start("explorer.exe", renameDirectory); + File.WriteAllText(Path.Combine(renameDirectory, $"{nameof(FileConnectorConfiguration.SourceFileFilter)}.txt"), string.Empty); + File.WriteAllText(Path.Combine(renameDirectory, $"{nameof(FileConnectorConfiguration.SourceFileLocation)}.txt"), string.Empty); + } + else + { + textFiles = Directory.GetFiles(textDirectory, "*.txt", SearchOption.TopDirectoryOnly); + if (!textFiles.Any()) + { + _ = Process.Start("explorer.exe", textDirectory); + File.WriteAllText(Path.Combine(textDirectory, "_ Why.why"), string.Empty); + } + } + } + results = new List + { + _Environment, + rawCellInstanceName, + cellInstanceName, + cellInstanceVersionName, + cellInstanceConnectionNameFromMethodBaseName, + cellInstanceConnectionName, + ticks, + comment, + fileFullName + }; + results.AddRange(textFiles); + return results.ToArray(); + } + + internal string[] GetSegments(MethodBase methodBase) + { + string[] results = GetSegments(methodBase.Name); + return results; + } + + internal static string GetEnvironment(string[] segments) => segments[0]; + + internal static string GetRawCellInstanceName(string[] segments) => segments[1]; + + internal static string GetCellInstanceName(string[] segments) => segments[2]; + + internal static string GetCellInstanceVersionName(string[] segments) => segments[3]; + + internal static string GetCellInstanceConnectionNameFromMethodBaseName(string[] segments) => segments[4]; + + internal static string GetCellInstanceConnectionName(string[] segments) => segments[5]; + + internal static string GetTicks(string[] segments) => segments[6]; + + internal static string GetComment(string[] segments) => segments[7]; + + internal static FileInfo GetFileName(string[] segments) => new(segments[8]); + + internal static string[] GetTextFiles(string[] segments) + { + List results = new(); + if (segments.Length > 8) + { + for (int i = 9; i < segments.Length; i++) + results.Add(segments[i]); + } + return results.ToArray(); + } + + protected static Stream ToStream(string @this) + { + MemoryStream memoryStream = new(); + StreamWriter streamWriter = new(memoryStream); + streamWriter.Write(@this); + streamWriter.Flush(); + memoryStream.Position = 0; + return memoryStream; + } + + internal static T ParseXML(string @this, bool throwExceptions) where T : class + { + object result = null; + try + { + Stream stream = ToStream(@this.Trim()); + XmlReader xmlReader = XmlReader.Create(stream, new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Document }); + XmlSerializer xmlSerializer = new(typeof(T), typeof(T).GetNestedTypes()); + result = xmlSerializer.Deserialize(xmlReader); + stream.Dispose(); + } + catch (Exception) + { + if (throwExceptions) + throw; + } + return result as T; + } + + protected static CellInstanceVersion GetCellInstanceVersion(string url) + { + CellInstanceVersion result; + byte[] byteArray; + ConfigurationData configurationData; + string decodedCellInstanceConfigurationData; + string xml; + try + { + xml = XDocument.Load(url).ToString(); + } + catch (System.Exception exception) + { + throw new Exception(string.Concat(url, System.Environment.NewLine, exception.Message)); + } + configurationData = ParseXML(xml, throwExceptions: true); + byteArray = Convert.FromBase64String(configurationData.Data); + decodedCellInstanceConfigurationData = Encoding.Unicode.GetString(byteArray); + if (xml.Length <= 41) + throw new Exception(string.Concat("xml isn't valid {", xml, "}")); + decodedCellInstanceConfigurationData = decodedCellInstanceConfigurationData.Substring(41).Replace("i:type", "i___type"); + result = ParseXML(decodedCellInstanceConfigurationData, throwExceptions: true); + return result; + } + + protected Tuple GetCellInstanceVersionTuple(string cellInstanceName, string cellInstanceVersionName) + { + Tuple result; + CellInstanceVersion cellInstanceVersion; + string cellInstanceServiceV2 = string.Concat("http://", _HostNameAndPort, "/CellInstanceServiceV2/", cellInstanceName, "/", cellInstanceVersionName, "/configuration"); + if (_CellInstanceVersions.ContainsKey(cellInstanceServiceV2)) + cellInstanceVersion = _CellInstanceVersions[cellInstanceServiceV2]; + else + { + cellInstanceVersion = GetCellInstanceVersion(cellInstanceServiceV2); + _CellInstanceVersions.Add(cellInstanceServiceV2, cellInstanceVersion); + } + result = new Tuple(cellInstanceServiceV2, cellInstanceVersion); + return result; + } + + protected static Dictionary GetComponentModelComponentsIndexes(CellInstanceVersion cellInstanceVersion, string cellInstanceConnectionName) + { + Dictionary results = new(); + ComponentsCellComponent componentsCellComponent; + if (cellInstanceVersion.ComponentModel.Components is not null) + { + for (int i = 0; i < cellInstanceVersion.ComponentModel.Components.Length; i++) + { + componentsCellComponent = cellInstanceVersion.ComponentModel.Components[i]; + for (int j = 0; j < componentsCellComponent.Children.Length; j++) + { + if (string.IsNullOrEmpty(componentsCellComponent.Children[j].Equipment.Name)) + continue; + results.Add(componentsCellComponent.Children[j].Name, new int[] { i, j }); + } + } + } + if (!results.Any() || (!string.IsNullOrEmpty(cellInstanceConnectionName) && !results.ContainsKey(cellInstanceConnectionName))) + throw new Exception("Match not found (check test method name matches Mango)!"); + return results; + } + + protected static int[] GetCellInstanceConnectionNameIndexes(string cellInstanceConnectionName, Dictionary componentModelComponentsIndexes) + { + int[] result; + if (string.IsNullOrEmpty(cellInstanceConnectionName)) + result = componentModelComponentsIndexes.ElementAt(0).Value; + else + { + if (componentModelComponentsIndexes is null || !componentModelComponentsIndexes.ContainsKey(cellInstanceConnectionName)) + throw new Exception(); + result = componentModelComponentsIndexes[cellInstanceConnectionName]; + } + return result; + } + + protected string[] GetCSharpTextB(FileInfo fileInfo, string cellInstanceName, string cellInstanceVersionName, CellInstanceVersion cellInstanceVersion) + { + List results = new(); + string check; + string loopName; + string equipmentTypeName; + string methodName = string.Empty; + string extractText = string.Empty; + StringBuilder stringBuilder = new(); + string createSelfDescriptionText = string.Empty; + List componentsCellComponentCellComponentEquipmentNames = new(); + string cellInstanceNameWithoutHyphen = cellInstanceName.Replace('-', '_'); + ComponentsCellComponentCellComponent componentsCellComponentCellComponent; + List componentsCellComponentCellComponentEquipmentTypeNames = new(); + string cellInstanceVersionNameAsCode = cellInstanceVersionName.Replace('.', '_'); + List componentsCellComponentCellComponentEquipmentDictionaryNames = new(); + const string sourceDirectoryCloaking = nameof(FileConnectorConfiguration.SourceDirectoryCloaking); + for (int i = 1; i < 3; i++) + { + if (i == 2) + loopName = "Extract"; + else if (i == 1) + loopName = "CreateSelfDescription"; + else + throw new Exception(); + if (i == 2) + _ = stringBuilder. + AppendLine("using Microsoft.VisualStudio.TestTools.UnitTesting;"). + AppendLine("using Shared;"). + AppendLine("using System.Diagnostics;"); + else if (i == 1) + _ = stringBuilder. + AppendLine("using Adaptation.Shared.Methods;"). + AppendLine("using Microsoft.Extensions.Logging;"). + AppendLine("using Microsoft.VisualStudio.TestTools.UnitTesting;"). + AppendLine("using Shared;"). + AppendLine("using System;"). + AppendLine("using System.Collections.Generic;"). + AppendLine("using System.Diagnostics;"). + AppendLine("using System.IO;"). + AppendLine("using System.Reflection;"). + AppendLine("using System.Text.Json;"). + AppendLine("using System.Threading;"); + else + throw new Exception(); + _ = stringBuilder.AppendLine(). + Append("namespace _Tests.").Append(loopName).Append('.').Append(_Environment).Append('.').AppendLine(cellInstanceVersionNameAsCode). + AppendLine("{"). + AppendLine(). + AppendLine("[TestClass]"); + if (i == 2) + _ = stringBuilder. + Append("public class ").AppendLine(cellInstanceNameWithoutHyphen). + AppendLine("{"). + AppendLine(). + Append("private static CreateSelfDescription.").Append(_Environment).Append('.').Append(cellInstanceVersionNameAsCode).Append('.').Append(cellInstanceNameWithoutHyphen).Append(" _").Append(cellInstanceNameWithoutHyphen).AppendLine(";"); + else if (i == 1) + _ = stringBuilder. + Append("public class ").Append(cellInstanceNameWithoutHyphen).AppendLine(" : EAFLoggingUnitTesting"). + AppendLine("{"). + AppendLine(). + Append("private static ").Append(cellInstanceNameWithoutHyphen).AppendLine(" _EAFLoggingUnitTesting;"). + Append("internal static ").Append(cellInstanceNameWithoutHyphen).AppendLine(" EAFLoggingUnitTesting => _EAFLoggingUnitTesting;"); + else + throw new Exception(); + if (i == 2) + _ = stringBuilder.AppendLine(); + else if (i == 1) + _ = stringBuilder. + AppendLine(). + Append("public ").Append(cellInstanceNameWithoutHyphen).AppendLine("() : base(testContext: null, declaringType: null, skipEquipmentDictionary: false)"). + AppendLine("{"). + AppendLine("if (_EAFLoggingUnitTesting is null)"). + AppendLine("throw new Exception();"). + AppendLine("}"). + AppendLine(). + Append("public ").Append(cellInstanceNameWithoutHyphen).AppendLine("(TestContext testContext) : base(testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false)"). + AppendLine("{"). + AppendLine("}"). + AppendLine(); + else + throw new Exception(); + _ = stringBuilder. + AppendLine("[ClassInitialize]"). + AppendLine("public static void ClassInitialize(TestContext testContext)"). + AppendLine("{"); + if (i == 2) + _ = stringBuilder. + Append("CreateSelfDescription.").Append(_Environment).Append('.').Append(cellInstanceVersionNameAsCode).Append('.').Append(cellInstanceNameWithoutHyphen).AppendLine(".ClassInitialize(testContext);"). + Append('_').Append(cellInstanceNameWithoutHyphen).Append(" = CreateSelfDescription.").Append(_Environment).Append('.').Append(cellInstanceVersionNameAsCode).Append('.').Append(cellInstanceNameWithoutHyphen).AppendLine(".EAFLoggingUnitTesting;"). + AppendLine("}"); + else if (i == 1) + _ = stringBuilder. + AppendLine("if (_EAFLoggingUnitTesting is null)"). + Append("_EAFLoggingUnitTesting = new ").Append(cellInstanceNameWithoutHyphen).AppendLine("(testContext);"). + AppendLine("_EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(testContext.TestName, \" - ClassInitialize\"));"). + AppendLine("string[] fileNameAndText = _EAFLoggingUnitTesting.AdaptationTesting.GetCSharpText(testContext.TestName);"). + AppendLine("File.WriteAllText(fileNameAndText[0], fileNameAndText[1]);"). + AppendLine("File.WriteAllText(fileNameAndText[2], fileNameAndText[3]);"). + AppendLine("}"); + else + throw new Exception(); + if (i == 2) + _ = stringBuilder.AppendLine(); + else if (i == 1) + _ = stringBuilder. + AppendLine(). + AppendLine("[ClassCleanup()]"). + AppendLine("public static void ClassCleanup()"). + AppendLine("{"). + AppendLine("if (!(_EAFLoggingUnitTesting.Logger is null))"). + AppendLine("_EAFLoggingUnitTesting.Logger.LogInformation(\"Cleanup\");"). + AppendLine("if (!(_EAFLoggingUnitTesting is null))"). + AppendLine("_EAFLoggingUnitTesting.Dispose();"). + AppendLine("}"). + AppendLine(); + else + throw new Exception(); + foreach (ComponentsCellComponent componentsCellComponent in cellInstanceVersion.ComponentModel.Components) + { + if (componentsCellComponent.Children.Length != 1) + continue; + componentsCellComponentCellComponent = componentsCellComponent.Children[0]; + if (componentsCellComponentCellComponent.Equipment.EquipmentDictionaries?.CellEquipmentDictionaryReference?.DictionaryName is not null) + componentsCellComponentCellComponentEquipmentDictionaryNames.Add(componentsCellComponentCellComponent.Equipment.EquipmentDictionaries?.CellEquipmentDictionaryReference?.DictionaryName); + componentsCellComponentCellComponentEquipmentNames.Add(componentsCellComponentCellComponent.Equipment.Name); + componentsCellComponentCellComponentEquipmentTypeNames.Add(componentsCellComponentCellComponent.Equipment.EquipmentType.Name); + methodName = $"{_Environment}__{cellInstanceVersionNameAsCode}__{cellInstanceNameWithoutHyphen}__{componentsCellComponentCellComponent.Equipment.Name.Replace('-', '_')}"; + if (componentsCellComponentCellComponent?.Equipment?.ConnectionSettings?.Setting is null) + check = string.Empty; + else + check = (from l in componentsCellComponentCellComponent.Equipment.ConnectionSettings.Setting where l.Name == sourceDirectoryCloaking select l.Value).FirstOrDefault(); + if (string.IsNullOrEmpty(check)) + check = componentsCellComponentCellComponent.Equipment.SourceFileFilter; + _ = stringBuilder. + AppendLine("[TestMethod]"). + Append("public void ").Append(methodName).AppendLine("()"). + AppendLine("{"); + if (i == 2) + _ = stringBuilder.Append('_').Append(cellInstanceNameWithoutHyphen).Append('.').Append(methodName).AppendLine("();"); + else if (i == 1) + { + if (componentsCellComponentCellComponent.Equipment.EquipmentType.Version != cellInstanceVersionName) + throw new Exception("Versions should match!"); + equipmentTypeName = componentsCellComponentCellComponent.Equipment.EquipmentType.Name; + _ = stringBuilder. + Append("string check = \"").Append(check.Split('\\').Last()).AppendLine("\";"). + AppendLine("MethodBase methodBase = new StackFrame().GetMethod();"). + AppendLine("_EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, \" - Getting configuration\"));"). + AppendLine("string[] fileNameAndJson = _EAFLoggingUnitTesting.AdaptationTesting.GetConfiguration(methodBase);"). + AppendLine("Assert.IsTrue(fileNameAndJson[1].Contains(check));"). + AppendLine("File.WriteAllText(fileNameAndJson[0], fileNameAndJson[1]);"); + if (componentsCellComponentCellComponent.Equipment.EquipmentType.Name == componentsCellComponentCellComponentEquipmentTypeNames[0]) + _ = stringBuilder. + AppendLine("IFileRead fileRead = _EAFLoggingUnitTesting.AdaptationTesting.Get(methodBase, sourceFileLocation: string.Empty, sourceFileFilter: string.Empty, useCyclicalForDescription: false);"). + AppendLine("Assert.IsFalse(string.IsNullOrEmpty(fileRead.CellInstanceConnectionName));"); + _ = stringBuilder. + AppendLine("_EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, \" - Exit\"));"); + } + else + throw new Exception(); + _ = stringBuilder. + AppendLine("}"). + AppendLine(); + } + _ = stringBuilder. + AppendLine("}"). + AppendLine(). + AppendLine("}"). + AppendLine(). + AppendLine("// dotnet build --runtime win-x64"). + Append("// dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.").Append(loopName).Append('.').Append(_Environment).Append('.').Append(cellInstanceVersionNameAsCode).AppendLine("\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")"). + Append("// dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.").Append(loopName).Append('.').Append(_Environment).Append('.').Append(cellInstanceVersionNameAsCode).Append(" & ClassName~").Append(cellInstanceNameWithoutHyphen).AppendLine("\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")"). + Append("// dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.").Append(loopName).Append('.').Append(_Environment).Append('.').Append(cellInstanceVersionNameAsCode).Append(" & ClassName~").Append(cellInstanceNameWithoutHyphen).Append(" & ").Append(methodName).AppendLine("\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")"); + if (i == 2) + extractText = stringBuilder.ToString().Trim(); + else if (i == 1) + createSelfDescriptionText = stringBuilder.ToString().Trim(); + else + throw new Exception(); + _ = stringBuilder.Clear(); + } + if (componentsCellComponentCellComponentEquipmentDictionaryNames.Any() && string.IsNullOrEmpty(cellInstanceVersion.FrozenBy)) + { + if (!cellInstanceVersion.CellCommunicatingRule.EndsWith(".Communicating") || !(from l in componentsCellComponentCellComponentEquipmentNames where l == cellInstanceVersion.CellCommunicatingRule.Split('.')[0] select true).Any()) + throw new Exception($"{methodName} - CellCommunicatingRule not correct in Mango!"); + if (!cellInstanceVersion.CellNotCommunicatingRule.EndsWith(".NotCommunicating") || !(from l in componentsCellComponentCellComponentEquipmentNames where l == cellInstanceVersion.CellNotCommunicatingRule.Split('.')[0] select true).Any()) + throw new Exception($"{methodName} - CellNotCommunicatingRule not correct in Mango!"); + } + string versionLevelDirectory = Path.GetDirectoryName(fileInfo.DirectoryName); + results.Add(Path.Combine(versionLevelDirectory, $"{cellInstanceName}-0-CreateSelfDescription.txt")); + results.Add(createSelfDescriptionText); + results.Add(Path.Combine(versionLevelDirectory, $"{cellInstanceName}-1-Extract.txt")); + results.Add(extractText); + return results.ToArray(); + } + + protected static FileConnectorConfiguration GetFileConnectorConfiguration(string json, ComponentsCellComponentCellComponent componentsCellComponentCellComponent) + { + FileConnectorConfiguration result; + const string sourceDirectoryCloaking = nameof(FileConnectorConfiguration.SourceDirectoryCloaking); + JsonSerializerOptions jsonSerializerOptions = new() + { Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase) } }; + json = json.Replace(string.Concat("\"", nameof(FileConnectorConfiguration.ConnectionSettings), "\":"), string.Concat("\"Ignore", nameof(FileConnectorConfiguration.ConnectionSettings), "\":")); + result = JsonSerializer.Deserialize(json, jsonSerializerOptions); + if (string.IsNullOrEmpty(result.SourceFileFilter)) + result.SourceFileFilter = string.Empty; + if (result.ErrorTargetFileLocation is null) + result.ErrorTargetFileLocation = string.Empty; + if (result.SourceFileLocation is null) + result.SourceFileLocation = string.Empty; + if (result.TargetFileLocation is null) + result.TargetFileLocation = string.Empty; + if (result.FolderAgeCheckIndividualSubFolders is null) + result.FolderAgeCheckIndividualSubFolders = false; + result.ConnectionSettings = new List(); + result.SourceFileFilters = result.SourceFileFilter.Split('|').ToList(); + if (componentsCellComponentCellComponent.Equipment?.ConnectionSettings is not null) + { + foreach (Setting setting in componentsCellComponentCellComponent.Equipment.ConnectionSettings.Setting) + result.ConnectionSettings.Add(new ConnectionSetting(null, null) { Name = setting.Name, Value = setting.Value }); + } + IEnumerable sourceDirectoryCloakingCollection = (from l in result.ConnectionSettings where l.Name == sourceDirectoryCloaking select l); + if (sourceDirectoryCloakingCollection.Any()) + result.SourceDirectoryCloaking = sourceDirectoryCloakingCollection.First().Value; + else + { + result.SourceDirectoryCloaking = string.Empty; + result.ConnectionSettings.Add(new ConnectionSetting(null, null) { Name = sourceDirectoryCloaking, Value = string.Empty }); + } + return result; + } + + protected Tuple GetFileConnectorConfigurationTuple(Tuple cellInstanceVersionTuple, string cellInstanceConnectionName) + { + Tuple result; + FileConnectorConfiguration fileConnectorConfiguration; + string cellInstanceServiceV2With = string.Concat(cellInstanceVersionTuple.Item1, '/', cellInstanceConnectionName); + if (_FileConnectorConfigurations.ContainsKey(cellInstanceServiceV2With)) + fileConnectorConfiguration = _FileConnectorConfigurations[cellInstanceServiceV2With]; + else + { + Dictionary componentModelComponentsIndexes = GetComponentModelComponentsIndexes(cellInstanceVersionTuple.Item2, cellInstanceConnectionName); + int[] cellInstanceConnectionNameIndexes = GetCellInstanceConnectionNameIndexes(cellInstanceConnectionName, componentModelComponentsIndexes); + ComponentsCellComponentCellComponent componentsCellComponentCellComponent = cellInstanceVersionTuple.Item2.ComponentModel.Components[cellInstanceConnectionNameIndexes[0]].Children[cellInstanceConnectionNameIndexes[1]]; + string json = JsonSerializer.Serialize(componentsCellComponentCellComponent.Equipment, new JsonSerializerOptions { WriteIndented = true }); + fileConnectorConfiguration = GetFileConnectorConfiguration(json, componentsCellComponentCellComponent); + _FileConnectorConfigurations.Add(cellInstanceServiceV2With, fileConnectorConfiguration); + } + result = new Tuple(cellInstanceServiceV2With, fileConnectorConfiguration); + return result; + } + + protected static EquipmentTypeVersion GetEquipmentTypeVersion(string url) + { + EquipmentTypeVersion result; + byte[] byteArray; + ConfigurationData configurationData; + string decodedCellInstanceConfigurationData; + string xml; + try + { + xml = XDocument.Load(url).ToString(); + } + catch (System.Exception exception) + { + throw new Exception(string.Concat(url, System.Environment.NewLine, exception.Message)); + } + configurationData = ParseXML(xml, throwExceptions: true); + byteArray = Convert.FromBase64String(configurationData.Data); + decodedCellInstanceConfigurationData = Encoding.Unicode.GetString(byteArray); + if (xml.Length <= 41) + throw new Exception(string.Concat("xml isn't valid {", xml, "}")); + decodedCellInstanceConfigurationData = decodedCellInstanceConfigurationData.Substring(41).Replace("i:type", "i___type"); + result = ParseXML(decodedCellInstanceConfigurationData, throwExceptions: true); + return result; + } + + protected Tuple GetEquipmentTypeVersionTuple(CellInstanceVersion cellInstanceVersion, string cellInstanceConnectionName) + { + Tuple result; + EquipmentTypeVersion equipmentTypeVersion; + Dictionary componentModelComponentsIndexes = GetComponentModelComponentsIndexes(cellInstanceVersion, cellInstanceConnectionName); + int[] cellInstanceConnectionNameIndexes = GetCellInstanceConnectionNameIndexes(cellInstanceConnectionName, componentModelComponentsIndexes); + ComponentsCellComponentCellComponent componentsCellComponentCellComponent = cellInstanceVersion.ComponentModel.Components[cellInstanceConnectionNameIndexes[0]].Children[cellInstanceConnectionNameIndexes[1]]; + string equipmentTypeServiceV2 = string.Concat("http://", _HostNameAndPort, "/EquipmentTypeServiceV2/", componentsCellComponentCellComponent.Equipment.EquipmentType.Name, "/", componentsCellComponentCellComponent.Equipment.EquipmentType.Version, "/configuration"); + if (_EquipmentTypeVersions.ContainsKey(equipmentTypeServiceV2)) + equipmentTypeVersion = _EquipmentTypeVersions[equipmentTypeServiceV2]; + else + { + equipmentTypeVersion = GetEquipmentTypeVersion(equipmentTypeServiceV2); + _EquipmentTypeVersions.Add(equipmentTypeServiceV2, equipmentTypeVersion); + } + result = new Tuple(equipmentTypeServiceV2, componentsCellComponentCellComponent.Equipment.EquipmentType.Name, componentsCellComponentCellComponent.Equipment.EquipmentType.Version, equipmentTypeVersion); + return result; + } + + protected Tuple GetParameterizedModelObjectDefinitionTypeTuple(Tuple equipmentTypeVersionTuple) + { + Tuple result; + string parameterizedModelObjectDefinitionType; + if (_FileConnectorConfigurations.ContainsKey(equipmentTypeVersionTuple.Item1)) + parameterizedModelObjectDefinitionType = _ParameterizedModelObjectDefinitionTypes[equipmentTypeVersionTuple.Item1]; + else + parameterizedModelObjectDefinitionType = equipmentTypeVersionTuple.Item4.FileHandlerObjectTypes.ParameterizedModelObjectDefinition.Type; + result = new Tuple(equipmentTypeVersionTuple.Item1, parameterizedModelObjectDefinitionType); + return result; + } + + protected IList GetModelObjectParameters(string json) + { + IList results; + JsonSerializerOptions jsonSerializerOptions = new() + { Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase) } }; + JsonElement jsonElement = JsonSerializer.Deserialize(json); + string parameters = "Parameters"; + string fileHandlerObjectTypes = nameof(FileHandlerObjectTypes); + string parameterizedModelObjectDefinition = nameof(ParameterizedModelObjectDefinition); + if (!json.Contains(fileHandlerObjectTypes) || !json.Contains(parameterizedModelObjectDefinition)) + throw new Exception(); + jsonElement = jsonElement.GetProperty(fileHandlerObjectTypes); + if (jsonElement.ValueKind != JsonValueKind.Object) + throw new Exception(); + jsonElement = jsonElement.GetProperty(parameterizedModelObjectDefinition); + if (jsonElement.ValueKind != JsonValueKind.Object) + throw new Exception(); + jsonElement = jsonElement.GetProperty(parameters); + if (jsonElement.ValueKind != JsonValueKind.Array) + throw new Exception(); + results = JsonSerializer.Deserialize>(jsonElement.ToString(), jsonSerializerOptions); + return results; + } + + protected Tuple> GetModelObjectParameters(Tuple equipmentTypeVersionTuple) + { + Tuple> result; + IList modelObjectParameters; + if (_FileConnectorConfigurations.ContainsKey(equipmentTypeVersionTuple.Item1)) + modelObjectParameters = _ModelObjectParameters[equipmentTypeVersionTuple.Item1]; + else + { + string json = JsonSerializer.Serialize(equipmentTypeVersionTuple.Item4, new JsonSerializerOptions { WriteIndented = true }); + modelObjectParameters = GetModelObjectParameters(json); + } + result = new Tuple>(equipmentTypeVersionTuple.Item1, modelObjectParameters); + return result; + } + + protected string[] GetEquipmentDictionaryStrings(ComponentsCellComponentCellComponentEquipment componentsCellComponentCellComponentEquipment, EquipmentTypeVersion equipmentTypeVersion) + { + string[] results; + string equipmentDictionaryName; + string equipmentDictionaryVersionName; + if (_SkipEquipmentDictionary || equipmentTypeVersion?.EventActionSequences is null || !equipmentTypeVersion.EventActionSequences.Any() || !(from l in equipmentTypeVersion.EventActionSequences where l.HandledEvent.StartsWith("Equipment.FileRead") select 1).Any()) + { + equipmentDictionaryName = string.Empty; + equipmentDictionaryVersionName = string.Empty; + } + else + { + if (componentsCellComponentCellComponentEquipment?.EquipmentDictionaries.CellEquipmentDictionaryReference is null) + { + // equipmentDictionaryName = equipmentTypeVersion.Dictionaries.EquipmentTypeDictionaryReference.DictionaryName; + // equipmentDictionaryVersionName = equipmentTypeVersion.Dictionaries.EquipmentTypeDictionaryReference.DictionaryVersion; + equipmentDictionaryName = string.Empty; + equipmentDictionaryVersionName = string.Empty; + } + else + { + equipmentDictionaryName = componentsCellComponentCellComponentEquipment.EquipmentDictionaries.CellEquipmentDictionaryReference.DictionaryName; + equipmentDictionaryVersionName = componentsCellComponentCellComponentEquipment.EquipmentDictionaries.CellEquipmentDictionaryReference.DictionaryVersion; + } + } + results = new string[] { equipmentDictionaryName, equipmentDictionaryVersionName }; + return results; + } + + protected static EquipmentDictionaryVersion GetEquipmentDictionaryVersion(string url) + { + EquipmentDictionaryVersion result; + string xml; + try + { + xml = XDocument.Load(url).ToString(); + } + catch (System.Exception exception) + { + throw new Exception(string.Concat(url, System.Environment.NewLine, exception.Message)); + } + ConfigurationData configurationData = ParseXML(xml, throwExceptions: true); + byte[] byteArray = Convert.FromBase64String(configurationData.Data); + string decodedCellInstanceConfigurationData = Encoding.Unicode.GetString(byteArray); + if (xml.Length <= 41) + throw new Exception(string.Concat("xml isn't valid {", xml, "}")); + decodedCellInstanceConfigurationData = decodedCellInstanceConfigurationData.Substring(41).Replace("i:type", "i___type"); + result = ParseXML(decodedCellInstanceConfigurationData, throwExceptions: true); + return result; + } + + protected Tuple GetEquipmentDictionaryVersionTuple(CellInstanceVersion cellInstanceVersion, string cellInstanceConnectionName, EquipmentTypeVersion equipmentTypeVersion) + { + Tuple result; + string equipmentDictionaryName; + string equipmentDictionaryVersionName; + EquipmentDictionaryVersion equipmentDictionaryVersion; + Dictionary componentModelComponentsIndexes = GetComponentModelComponentsIndexes(cellInstanceVersion, cellInstanceConnectionName); + int[] cellInstanceConnectionNameIndexes = GetCellInstanceConnectionNameIndexes(cellInstanceConnectionName, componentModelComponentsIndexes); + ComponentsCellComponentCellComponent componentsCellComponentCellComponent = cellInstanceVersion.ComponentModel.Components[cellInstanceConnectionNameIndexes[0]].Children[cellInstanceConnectionNameIndexes[1]]; + string[] segments = GetEquipmentDictionaryStrings(componentsCellComponentCellComponent.Equipment, equipmentTypeVersion); + if (_SkipEquipmentDictionary || segments is null || segments.Length != 2 || string.IsNullOrEmpty(segments[0]) || string.IsNullOrEmpty(segments[1])) + { + equipmentDictionaryName = string.Empty; + equipmentDictionaryVersionName = string.Empty; + } + else + { + equipmentDictionaryName = segments[0]; + equipmentDictionaryVersionName = segments[1]; + } + string equipmentDictionaryServiceV2 = string.Concat("http://", _HostNameAndPort, "/EquipmentDictionaryServiceV2/", equipmentDictionaryName, "/", equipmentDictionaryVersionName, "/configuration"); + if (string.IsNullOrEmpty(equipmentDictionaryName) || string.IsNullOrEmpty(equipmentDictionaryVersionName)) + equipmentDictionaryVersion = null; + else + { + if (_EquipmentDictionaryVersions.ContainsKey(equipmentDictionaryServiceV2)) + equipmentDictionaryVersion = _EquipmentDictionaryVersions[equipmentDictionaryServiceV2]; + else + { + equipmentDictionaryVersion = GetEquipmentDictionaryVersion(equipmentDictionaryServiceV2); + _EquipmentDictionaryVersions.Add(equipmentDictionaryServiceV2, equipmentDictionaryVersion); + } + } + result = new Tuple(equipmentDictionaryServiceV2, equipmentDictionaryName, equipmentDictionaryVersionName, equipmentDictionaryVersion); + return result; + } + + protected Tuple>> GetEquipmentDictionaryIsAlwaysEnabledEventsTuple(Tuple equipmentDictionaryVersionTuple) + { + Tuple>> result; + List> results; + if (_SkipEquipmentDictionary) + results = new List>(); + else if (string.IsNullOrEmpty(equipmentDictionaryVersionTuple.Item1)) + throw new Exception(); + else if (equipmentDictionaryVersionTuple?.Item4?.Events?.Event is null) + results = new List>(); + else if (_EquipmentDictionaryEventDescriptions.ContainsKey(equipmentDictionaryVersionTuple.Item1)) + results = _EquipmentDictionaryEventDescriptions[equipmentDictionaryVersionTuple.Item1]; + else + { + results = new List>(); + foreach (EquipmentDictionaryVersionEventsEvent equipmentDictionaryVersionEventsEvent in equipmentDictionaryVersionTuple.Item4.Events.Event) + { + if (string.IsNullOrEmpty(equipmentDictionaryVersionEventsEvent.Description)) + continue; + if (!equipmentDictionaryVersionEventsEvent.IsAlwaysEnabled) + continue; + results.Add(new Tuple(equipmentDictionaryVersionEventsEvent.Name, equipmentDictionaryVersionEventsEvent.Description)); + } + } + result = new Tuple>>(equipmentDictionaryVersionTuple.Item1, results); + return result; + } + + protected Dictionary GetKeyValuePairs(string cellInstanceName, string cellInstanceVersionName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, List> equipmentDictionaryIsAlwaysEnabledEvents) + { + Dictionary results = new() + { + { nameof(Environment), _Environment }, + { nameof(HostNameAndPort), _HostNameAndPort }, + { nameof(cellInstanceName), cellInstanceName }, + { nameof(equipmentTypeName), equipmentTypeName }, + { nameof(cellInstanceVersionName), cellInstanceVersionName }, + { nameof(equipmentDictionaryName), equipmentDictionaryName }, + { nameof(cellInstanceConnectionName), cellInstanceConnectionName }, + { nameof(FileConnectorConfiguration), fileConnectorConfiguration }, + { nameof(IList), modelObjectParameters }, + { nameof(parameterizedModelObjectDefinitionType), parameterizedModelObjectDefinitionType }, + { nameof(equipmentDictionaryIsAlwaysEnabledEvents), equipmentDictionaryIsAlwaysEnabledEvents } + }; + return results; + } + + public string[] GetCSharpText(string testName) + { + string[] results; + string[] segments = GetSegments(testName); + FileInfo fileInfo = GetFileName(segments); + string cellInstanceName = GetCellInstanceName(segments); + string cellInstanceVersionName = GetCellInstanceVersionName(segments); + string cellInstanceConnectionName = GetCellInstanceConnectionName(segments); + if (!string.IsNullOrEmpty(cellInstanceConnectionName) && !Directory.Exists(fileInfo.DirectoryName)) + _ = Directory.CreateDirectory(fileInfo.Directory.FullName); + Tuple cellInstanceVersionTuple = GetCellInstanceVersionTuple(cellInstanceName, cellInstanceVersionName); + results = GetCSharpTextB(fileInfo, cellInstanceName, cellInstanceVersionName, cellInstanceVersionTuple.Item2); + return results; + } + + public string[] GetConfiguration(MethodBase methodBase) + { + string[] results; + string[] segments = GetSegments(methodBase.Name); + FileInfo fileInfo = GetFileName(segments); + string cellInstanceName = GetCellInstanceName(segments); + string cellInstanceVersionName = GetCellInstanceVersionName(segments); + string cellInstanceConnectionName = GetCellInstanceConnectionName(segments); + if (!string.IsNullOrEmpty(cellInstanceConnectionName) && !Directory.Exists(fileInfo.DirectoryName)) + _ = Directory.CreateDirectory(fileInfo.Directory.FullName); + Tuple cellInstanceVersionTuple = GetCellInstanceVersionTuple(cellInstanceName, cellInstanceVersionName); + Tuple fileConnectorConfigurationTuple = GetFileConnectorConfigurationTuple(cellInstanceVersionTuple, cellInstanceConnectionName); + Tuple equipmentTypeVersionTuple = GetEquipmentTypeVersionTuple(cellInstanceVersionTuple.Item2, cellInstanceConnectionName); + Tuple parameterizedModelObjectDefinitionTypeTuple = GetParameterizedModelObjectDefinitionTypeTuple(equipmentTypeVersionTuple); + Tuple> modelObjectParametersTuple = GetModelObjectParameters(equipmentTypeVersionTuple); + Tuple equipmentDictionaryVersionTuple = GetEquipmentDictionaryVersionTuple(cellInstanceVersionTuple.Item2, cellInstanceConnectionName, equipmentTypeVersionTuple.Item4); + Tuple>> equipmentDictionaryIsAlwaysEnabledEventsTuple = GetEquipmentDictionaryIsAlwaysEnabledEventsTuple(equipmentDictionaryVersionTuple); + Dictionary objects = GetKeyValuePairs(cellInstanceName, cellInstanceVersionName, cellInstanceConnectionName, fileConnectorConfigurationTuple.Item2, equipmentTypeVersionTuple.Item2, parameterizedModelObjectDefinitionTypeTuple.Item2, modelObjectParametersTuple.Item2, equipmentDictionaryVersionTuple.Item2, equipmentDictionaryIsAlwaysEnabledEventsTuple.Item2); + string json = JsonSerializer.Serialize(objects, new JsonSerializerOptions { WriteIndented = true }); + results = new string[] { fileInfo.FullName, json }; + return results; + } + + public IFileRead Get(MethodBase methodBase, string sourceFileLocation, string sourceFileFilter, bool useCyclicalForDescription) + { + IFileRead result; + string[] segments = GetSegments(methodBase.Name); + FileInfo fileInfo = GetFileName(segments); + string cellInstanceName = GetCellInstanceName(segments); + string cellInstanceVersionName = GetCellInstanceVersionName(segments); + Dictionary fileParameter = new(); + string cellInstanceConnectionName = GetCellInstanceConnectionName(segments); + if (!string.IsNullOrEmpty(cellInstanceConnectionName) && !Directory.Exists(fileInfo.DirectoryName)) + _ = Directory.CreateDirectory(fileInfo.Directory.FullName); + Dictionary> dummyRuns = new(); + Tuple cellInstanceVersionTuple = GetCellInstanceVersionTuple(cellInstanceName, cellInstanceVersionName); + Tuple fileConnectorConfigurationTuple = GetFileConnectorConfigurationTuple(cellInstanceVersionTuple, cellInstanceConnectionName); + Tuple equipmentTypeVersionTuple = GetEquipmentTypeVersionTuple(cellInstanceVersionTuple.Item2, cellInstanceConnectionName); + Tuple parameterizedModelObjectDefinitionTypeTuple = GetParameterizedModelObjectDefinitionTypeTuple(equipmentTypeVersionTuple); + Tuple> modelObjectParametersTuple = GetModelObjectParameters(equipmentTypeVersionTuple); + Tuple equipmentDictionaryVersionTuple = GetEquipmentDictionaryVersionTuple(cellInstanceVersionTuple.Item2, cellInstanceConnectionName, equipmentTypeVersionTuple.Item4); + + _ = GetEquipmentDictionaryIsAlwaysEnabledEventsTuple(equipmentDictionaryVersionTuple); + if (!string.IsNullOrEmpty(sourceFileLocation) && sourceFileLocation != fileConnectorConfigurationTuple.Item2.SourceFileLocation) + fileConnectorConfigurationTuple.Item2.SourceFileLocation = sourceFileLocation; + if (!string.IsNullOrEmpty(sourceFileFilter) && sourceFileFilter != fileConnectorConfigurationTuple.Item2.SourceFileFilter) + { + fileConnectorConfigurationTuple.Item2.SourceFileFilter = sourceFileFilter; + fileConnectorConfigurationTuple.Item2.SourceFileFilters = sourceFileFilter.Split('|').ToList(); + } + result = Adaptation.FileHandlers.CellInstanceConnectionName.Get(this, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfigurationTuple.Item2, equipmentTypeVersionTuple.Item2, parameterizedModelObjectDefinitionTypeTuple.Item2, modelObjectParametersTuple.Item2, equipmentDictionaryVersionTuple.Item2, dummyRuns, useCyclicalForDescription, isEAFHosted: false); + return result; + } + + public string[] GetVariables(MethodBase methodBase, string check) + { + string[] results; + string[] lines; + string ipdsfFile; + string textFileDirectory; + string fileNameWithoutExtension; + string searchPattern = "*.ipdsf"; + string sourceFileFilter = string.Empty; + string sourceFileLocation = string.Empty; + string[] segments = GetSegments(methodBase); + string ticks = GetTicks(segments); + FileInfo fileInfo = GetFileName(segments); + string[] textFiles = GetTextFiles(segments); + string cellInstanceName = GetCellInstanceName(segments); + string rawCellInstanceName = GetRawCellInstanceName(segments); + string cellInstanceConnectionName = GetCellInstanceConnectionName(segments); + string cellInstanceConnectionNameFromMethodBaseName = GetCellInstanceConnectionNameFromMethodBaseName(segments); + string methodBaseNameWithActualCICN = GetMethodBaseNameWithActualCICN(methodBase.Name, rawCellInstanceName, cellInstanceConnectionNameFromMethodBaseName, cellInstanceConnectionName, ticks); + if (!textFiles.Any()) + textFileDirectory = string.Empty; + else + textFileDirectory = Path.GetDirectoryName(textFiles[0]); + foreach (string textFile in textFiles) + { + lines = File.ReadAllLines(textFile); + if (lines.Length != 1) + continue; + fileNameWithoutExtension = Path.GetFileNameWithoutExtension(textFile); + if (fileNameWithoutExtension == nameof(FileConnectorConfiguration.SourceFileFilter)) + sourceFileFilter = lines[0]; + else if (fileNameWithoutExtension == nameof(FileConnectorConfiguration.SourceFileLocation)) + { + segments = lines[0].Split(new string[] { ticks }, StringSplitOptions.None); + if (segments.Length > 2) + throw new Exception("Ticks should only appear once in source file location!"); + if (segments.Length != 2) + throw new Exception("Ticks missing from source file location!"); + if (!segments[1].EndsWith(methodBaseNameWithActualCICN.Replace(ticks, string.Empty))) + throw new Exception("Method name missing from source file location!"); + sourceFileLocation = lines[0]; + } + } + if (!Directory.Exists(fileInfo.Directory.FullName)) + _ = Directory.CreateDirectory(fileInfo.Directory.FullName); + if (!fileInfo.Exists) + throw new Exception(); + string json = File.ReadAllText(fileInfo.FullName); + if (!json.Contains(check)) + throw new Exception(); + if (!json.Contains(nameof(FileConnectorConfiguration))) + throw new Exception(); + JsonElement jsonElement = JsonSerializer.Deserialize(json); + JsonElement fileConnectorConfigurationJsonElement = jsonElement.GetProperty(nameof(FileConnectorConfiguration)); + if (fileConnectorConfigurationJsonElement.ValueKind != JsonValueKind.Object) + throw new Exception(); + JsonSerializerOptions jsonSerializerOptions = new() + { Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase) } }; + FileConnectorConfiguration fileConnectorConfiguration = JsonSerializer.Deserialize(fileConnectorConfigurationJsonElement.ToString(), jsonSerializerOptions); + if (!string.IsNullOrEmpty(sourceFileFilter)) + fileConnectorConfiguration.SourceFileFilter = sourceFileFilter; + if (!string.IsNullOrEmpty(sourceFileLocation)) + fileConnectorConfiguration.SourceFileLocation = sourceFileLocation; + if (string.IsNullOrEmpty(sourceFileLocation)) + ipdsfFile = searchPattern; + else + { + string ipdsfDirectory = Path.Combine(sourceFileLocation, "ipdsf"); + if (!Directory.Exists(ipdsfDirectory)) + ipdsfFile = searchPattern; + else + { + string[] files = Directory.GetFiles(ipdsfDirectory, searchPattern, SearchOption.TopDirectoryOnly); + if (files.Any()) + ipdsfFile = files[0]; + else + ipdsfFile = searchPattern; + } + } + if (ipdsfFile == searchPattern) + throw new Exception(); + results = new string[] { fileInfo.FullName, json, fileConnectorConfiguration.SourceFileLocation, fileConnectorConfiguration.SourceFileFilter, ipdsfFile, textFileDirectory }; + if (string.IsNullOrEmpty(results[0])) + throw new Exception(); + if (string.IsNullOrEmpty(results[1])) + throw new Exception(); + if (string.IsNullOrEmpty(results[2])) + throw new Exception(); + if (string.IsNullOrEmpty(results[3])) + throw new Exception(); + if (string.IsNullOrEmpty(results[4])) + throw new Exception(); + if (string.IsNullOrEmpty(results[5])) + throw new Exception(); + return results; + } + +} +// namespace _Tests.Helpers { public class AdaptationTesting { } } +// 2022-02-02 -> AdaptationTesting \ No newline at end of file diff --git a/Adaptation/_Tests/Shared/EAFLoggingUnitTesting.cs b/Adaptation/_Tests/Shared/EAFLoggingUnitTesting.cs new file mode 100644 index 0000000..4504bae --- /dev/null +++ b/Adaptation/_Tests/Shared/EAFLoggingUnitTesting.cs @@ -0,0 +1,28 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; + +namespace Shared; + +public class EAFLoggingUnitTesting : LoggingUnitTesting, IDisposable +{ + + protected readonly AdaptationTesting _AdaptationTesting; + + public AdaptationTesting AdaptationTesting => _AdaptationTesting; + + public EAFLoggingUnitTesting(TestContext testContext, Type declaringType, bool skipEquipmentDictionary) : + base(testContext, declaringType) + { + if (testContext is null || declaringType is null) + _AdaptationTesting = null; + else + _AdaptationTesting = new AdaptationTesting(testContext, skipEquipmentDictionary); + } + + public new void Dispose() + { + base.Dispose(); + GC.SuppressFinalize(this); + } + +} \ No newline at end of file diff --git a/Adaptation/_Tests/Shared/IsEnvironment.cs b/Adaptation/_Tests/Shared/IsEnvironment.cs new file mode 100644 index 0000000..d47716e --- /dev/null +++ b/Adaptation/_Tests/Shared/IsEnvironment.cs @@ -0,0 +1,168 @@ +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace Shared; + +public class IsEnvironment +{ + + public enum Name + { + LinuxDevelopment, + LinuxProduction, + LinuxStaging, + OSXDevelopment, + OSXProduction, + OSXStaging, + WindowsDevelopment, + WindowsProduction, + WindowsStaging + } + + public bool DebuggerWasAttachedDuringConstructor { get; private set; } + public bool Development { get; private set; } + public bool Linux { get; private set; } + public bool OSX { get; private set; } + public bool Production { get; private set; } + public bool Staging { get; private set; } + public bool Windows { get; private set; } + public string Profile { get; private set; } + public string AppSettingsFileName { get; private set; } + public string ASPNetCoreEnvironment { get; private set; } + + public IsEnvironment(string testCategory) + { + if (testCategory.EndsWith(".json")) + { + Production = testCategory == "appsettings.json"; + Staging = testCategory.EndsWith(nameof(Staging)); + OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); + Development = testCategory.EndsWith(nameof(Development)); + Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + } + else + { + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + OSX = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(OSX)); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + Linux = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(Linux)); + Staging = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Staging)); + Windows = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(Windows)); + Production = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Production)); + Development = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Development)); + } + Profile = GetProfile(); + AppSettingsFileName = GetAppSettingsFileName(processesCount: null); + } + + public IsEnvironment(bool isDevelopment, bool isStaging, bool isProduction) + { + Staging = isStaging; + Production = isProduction; + Development = isDevelopment; + OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); + Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + Profile = GetProfile(); + AppSettingsFileName = GetAppSettingsFileName(processesCount: null); + } + + public IsEnvironment(int? processesCount, bool nullASPNetCoreEnvironmentIsDevelopment, bool nullASPNetCoreEnvironmentIsProduction) + { + OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); + Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + if (nullASPNetCoreEnvironmentIsDevelopment && nullASPNetCoreEnvironmentIsProduction) + throw new Exception(); + else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && nullASPNetCoreEnvironmentIsProduction) + Production = true; + else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && nullASPNetCoreEnvironmentIsDevelopment) + Development = true; + else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && !nullASPNetCoreEnvironmentIsDevelopment && !nullASPNetCoreEnvironmentIsProduction) + throw new Exception(); + else + { + Staging = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Staging)); + Production = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Production)); + Development = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Development)); + } + Profile = GetProfile(); + AppSettingsFileName = GetAppSettingsFileName(processesCount); + } + + private string GetProfile() + { + string result; + if (Windows && Production) + result = nameof(Production); + else if (Windows && Staging) + result = nameof(Staging); + else if (Windows && Development) + result = nameof(Development); + else if (Linux && Production) + result = nameof(Name.LinuxProduction); + else if (Linux && Staging) + result = nameof(Name.LinuxStaging); + else if (Linux && Development) + result = nameof(Name.LinuxDevelopment); + else if (OSX && Production) + result = nameof(Name.OSXProduction); + else if (OSX && Staging) + result = nameof(Name.OSXStaging); + else if (OSX && Development) + result = nameof(Name.OSXDevelopment); + else + throw new Exception(); + return result; + } + + private string GetAppSettingsFileName(int? processesCount) + { + string result; + if (Production) + { + if (processesCount is null) + result = "appsettings.json"; + else + result = $"appsettings.{processesCount}.json"; + } + else + { + string environment; + if (Staging) + environment = nameof(Staging); + else if (Development) + environment = nameof(Development); + else + throw new Exception(); + if (processesCount is null) + result = $"appsettings.{environment}.json"; + else + result = $"appsettings.{environment}.{processesCount}.json"; + } + return result; + } + + public static string GetEnvironmentName(IsEnvironment isEnvironment) + { + string result; + if (isEnvironment.Windows) + result = nameof(IsEnvironment.Windows); + else if (isEnvironment.Linux) + result = nameof(IsEnvironment.Linux); + else if (isEnvironment.OSX) + result = nameof(IsEnvironment.OSX); + else + throw new Exception(); + return result; + } + +} \ No newline at end of file diff --git a/Adaptation/_Tests/Shared/LoggingUnitTesting.cs b/Adaptation/_Tests/Shared/LoggingUnitTesting.cs new file mode 100644 index 0000000..1f44068 --- /dev/null +++ b/Adaptation/_Tests/Shared/LoggingUnitTesting.cs @@ -0,0 +1,111 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.IO; + +namespace Shared; + +public class LoggingUnitTesting : UnitTesting, IDisposable +{ + + protected ILogger _Logger; + protected ILoggerFactory _LoggerFactory; + protected readonly LogLevel? _DefaultLogLevel; + protected readonly LogLevel? _Log4netProviderLogLevel; + protected readonly IConfigurationRoot _ConfigurationRoot; + public ILogger Logger => _Logger; + public LogLevel? DefaultLogLevel => _DefaultLogLevel; + public ILoggerFactory LoggerFactory => _LoggerFactory; + public IConfigurationRoot ConfigurationRoot => _ConfigurationRoot; + public LogLevel? Log4netProviderLogLevel => _Log4netProviderLogLevel; + + public LoggingUnitTesting(TestContext testContext, Type declaringType) : + base(testContext, declaringType) + { + _LoggerFactory = new LoggerFactory(); + if (testContext is null || declaringType is null) + { + _ConfigurationRoot = null; + _DefaultLogLevel = null; + _Log4netProviderLogLevel = null; + } + else + { + LogLevel logLevel; + IConfigurationSection configurationSection; + List logLevels = new(); + string defaultLogLevelSection = "Logging:LogLevel:Default"; + string log4netProviderLogLevelSection = "Logging:LogLevel:Log4netProvider"; + string[] sections = new string[] { defaultLogLevelSection, log4netProviderLogLevelSection }; + IConfigurationBuilder configurationBuilder = new ConfigurationBuilder() + .AddEnvironmentVariables() + .AddJsonFile(_IsEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true); + _ConfigurationRoot = configurationBuilder.Build(); + foreach (string section in sections) + { + configurationSection = _ConfigurationRoot.GetSection(section); + if (configurationSection is null) + logLevel = LogLevel.Debug; + else if (!Enum.TryParse(configurationSection.Value, out logLevel)) + logLevel = LogLevel.Debug; + logLevels.Add(logLevel); + } + _DefaultLogLevel = logLevels[0]; + _Log4netProviderLogLevel = logLevels[1]; + } + if (DefaultLogLevel.HasValue) + _LoggerFactory.AddProvider(new DebugProvider(DefaultLogLevel.Value)); + if (DefaultLogLevel.HasValue) + _LoggerFactory.AddProvider(new ConsoleProvider(DefaultLogLevel.Value)); + _Logger = _LoggerFactory.CreateLogger(); + } + + public static string GetEnvironmentSpecialDirectory() + { + string result = string.Empty; + string traceFile; + List directories = new(); + Environment.SpecialFolder[] specialFolders = new Environment.SpecialFolder[] + { + Environment.SpecialFolder.LocalApplicationData, + Environment.SpecialFolder.ApplicationData, + Environment.SpecialFolder.History, + Environment.SpecialFolder.CommonApplicationData, + Environment.SpecialFolder.InternetCache + }; + foreach (Environment.SpecialFolder specialFolder in specialFolders) + directories.Add(Environment.GetFolderPath(specialFolder)); + foreach (string directory in directories) + { + for (int i = 1; i < 3; i++) + { + if (i == 1) + result = directory; + else + result = string.Concat("D", directory.Substring(1)); + try + { + if (!Directory.Exists(result)) + _ = Directory.CreateDirectory(result); + traceFile = string.Concat(result, @"\", DateTime.Now.Ticks, ".txt"); + File.WriteAllText(traceFile, traceFile); + File.Delete(traceFile); + break; + } + catch (Exception) { result = string.Empty; } + } + if (!string.IsNullOrEmpty(result)) + break; + } + return result; + } + + public void Dispose() + { + _LoggerFactory.Dispose(); + GC.SuppressFinalize(this); + } + +} \ No newline at end of file diff --git a/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/CellInstance.cs b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/CellInstance.cs new file mode 100644 index 0000000..304f0b2 --- /dev/null +++ b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/CellInstance.cs @@ -0,0 +1,3056 @@ +namespace Shared.PasteSpecialXml.EAF.XML.API.CellInstance; + +// NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0. +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities", IsNullable = false)] +public partial class CellInstanceVersion +{ + +#pragma warning disable IDE1006 // Naming Styles + + private string createdByField; + + private System.DateTime creationDateField; + + private object descriptionField; + + private ExtensionsVersionExtension[] extensionsField; + + private System.DateTime freezeDateField; + + private string frozenByField; + + private long idField; + + private bool isFrozenField; + + private bool isRetiredField; + + private System.DateTime retireDateField; + + private object retiredByField; + + private string cellCommunicatingRuleField; + + private string cellNotCommunicatingRuleField; + + private CellInstanceVersionCellSetting cellSettingField; + + private CellInstanceVersionComponentModel componentModelField; + + private SelectedDeploymentPackage[] deploymentPackagesField; + + private CellInstanceVersionEdaConnection edaConnectionField; + + private EquipmentConnectionSettings[] equipmentConnectionsField; + + private string nameField; + + private CellInstanceVersionParentInstance parentInstanceField; + + private CellInstanceVersionEdaTraceHandling edaTraceHandlingField; + + private string id1Field; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public string CreatedBy + { + get => this.createdByField; + set => this.createdByField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public System.DateTime CreationDate + { + get => this.creationDateField; + set => this.creationDateField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities", IsNullable = true)] + public object Description + { + get => this.descriptionField; + set => this.descriptionField = value; + } + + /// + [System.Xml.Serialization.XmlArrayAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + [System.Xml.Serialization.XmlArrayItemAttribute("VersionExtension", IsNullable = false)] + public ExtensionsVersionExtension[] Extensions + { + get => this.extensionsField; + set => this.extensionsField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public System.DateTime FreezeDate + { + get => this.freezeDateField; + set => this.freezeDateField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public string FrozenBy + { + get => this.frozenByField; + set => this.frozenByField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public bool IsFrozen + { + get => this.isFrozenField; + set => this.isFrozenField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public bool IsRetired + { + get => this.isRetiredField; + set => this.isRetiredField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public System.DateTime RetireDate + { + get => this.retireDateField; + set => this.retireDateField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities", IsNullable = true)] + public object RetiredBy + { + get => this.retiredByField; + set => this.retiredByField = value; + } + + /// + public string CellCommunicatingRule + { + get => this.cellCommunicatingRuleField; + set => this.cellCommunicatingRuleField = value; + } + + /// + public string CellNotCommunicatingRule + { + get => this.cellNotCommunicatingRuleField; + set => this.cellNotCommunicatingRuleField = value; + } + + /// + public CellInstanceVersionCellSetting CellSetting + { + get => this.cellSettingField; + set => this.cellSettingField = value; + } + + /// + public CellInstanceVersionComponentModel ComponentModel + { + get => this.componentModelField; + set => this.componentModelField = value; + } + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("SelectedDeploymentPackage", Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Deployme" + + "nt", IsNullable = false)] + public SelectedDeploymentPackage[] DeploymentPackages + { + get => this.deploymentPackagesField; + set => this.deploymentPackagesField = value; + } + + /// + public CellInstanceVersionEdaConnection EdaConnection + { + get => this.edaConnectionField; + set => this.edaConnectionField = value; + } + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("EquipmentConnectionSettings", Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances", IsNullable = false)] + public EquipmentConnectionSettings[] EquipmentConnections + { + get => this.equipmentConnectionsField; + set => this.equipmentConnectionsField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + public CellInstanceVersionParentInstance ParentInstance + { + get => this.parentInstanceField; + set => this.parentInstanceField = value; + } + + /// + public CellInstanceVersionEdaTraceHandling EdaTraceHandling + { + get => this.edaTraceHandlingField; + set => this.edaTraceHandlingField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Deployme" + + "nt")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Deployme" + + "nt", IsNullable = false)] +public partial class SelectedDeploymentPackage +{ + + private long idField; + + private string packageNameField; + + private string packageVersionField; + + /// + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + public string PackageName + { + get => this.packageNameField; + set => this.packageNameField = value; + } + + /// + public string PackageVersion + { + get => this.packageVersionField; + set => this.packageVersionField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances", IsNullable = false)] +public partial class EquipmentConnectionSettings +{ + + private string refField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Ref + { + get => this.refField; + set => this.refField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] +public partial class ExtensionsVersionExtension +{ + + private long idField; + + private string classNameField; + + private object configurationField; + + private string nameField; + + private object editorsField; + + private string id1Field; + + private string i___typeField; + + /// + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Backbone" + + "s")] + public string ClassName + { + get => this.classNameField; + set => this.classNameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Backbone" + + "s", IsNullable = true)] + public object Configuration + { + get => this.configurationField; + set => this.configurationField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Backbone" + + "s")] + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tAutomationClient")] + public object Editors + { + get => this.editorsField; + set => this.editorsField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string i___type + { + get => this.i___typeField; + set => this.i___typeField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] +public partial class CellInstanceVersionCellSetting +{ + + private long idField; + + private CellType cellTypeField; + + private string nameField; + + private string id1Field; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] + public CellType CellType + { + get => this.cellTypeField; + set => this.cellTypeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances", IsNullable = false)] +public partial class CellType +{ + + private long idField; + + private string nameField; + + private string versionField; + + private string id1Field; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Version + { + get => this.versionField; + set => this.versionField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] +public partial class CellInstanceVersionComponentModel +{ + + private long idField; + + private ComponentsCellComponent[] componentsField; + + private string id1Field; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlArrayAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] + [System.Xml.Serialization.XmlArrayItemAttribute("CellComponent", IsNullable = false)] + public ComponentsCellComponent[] Components + { + get => this.componentsField; + set => this.componentsField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] +public partial class ComponentsCellComponent +{ + + private ComponentsCellComponentCellComponent[] childrenField; + + private ComponentsCellComponentEquipment equipmentField; + + private object equipmentObjectTypeField; + + private string nameField; + + private ComponentsCellComponentComponentParameter[] parametersField; + + private string typeField; + + private string idField; + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("CellComponent", IsNullable = false)] + public ComponentsCellComponentCellComponent[] Children + { + get => this.childrenField; + set => this.childrenField = value; + } + + /// + public ComponentsCellComponentEquipment Equipment + { + get => this.equipmentField; + set => this.equipmentField = value; + } + + /// + public object EquipmentObjectType + { + get => this.equipmentObjectTypeField; + set => this.equipmentObjectTypeField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("ComponentParameter", IsNullable = false)] + public ComponentsCellComponentComponentParameter[] Parameters + { + get => this.parametersField; + set => this.parametersField = value; + } + + /// + public string Type + { + get => this.typeField; + set => this.typeField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] +public partial class ComponentsCellComponentCellComponent +{ + + private object childrenField; + + private ComponentsCellComponentCellComponentEquipment equipmentField; + + private object equipmentObjectTypeField; + + private string nameField; + + private ComponentsCellComponentCellComponentComponentParameter[] parametersField; + + private string typeField; + + private string idField; + + /// + public object Children + { + get => this.childrenField; + set => this.childrenField = value; + } + + /// + public ComponentsCellComponentCellComponentEquipment Equipment + { + get => this.equipmentField; + set => this.equipmentField = value; + } + + /// + public object EquipmentObjectType + { + get => this.equipmentObjectTypeField; + set => this.equipmentObjectTypeField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("ComponentParameter", IsNullable = false)] + public ComponentsCellComponentCellComponentComponentParameter[] Parameters + { + get => this.parametersField; + set => this.parametersField = value; + } + + /// + public string Type + { + get => this.typeField; + set => this.typeField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] +public partial class ComponentsCellComponentCellComponentEquipment +{ + + private long idField; + + private ComponentsCellComponentChildrenCellComponentEquipmentEquipmentDictionaries equipmentDictionariesField; + + private ComponentsCellComponentCellComponentEquipmentEquipmentType equipmentTypeField; + + private string nameField; + + private string alternateTargetFolderField; + + private long connectionRetryIntervalField; + + private ConnectionSettings connectionSettingsField; + + private bool copySourceFolderStructureField; + + private string defaultPlaceHolderValueField; + + private bool deleteEmptySourceSubFoldersField; + + private string errorPostProcessingModeField; + + private string errorTargetFileLocationField; + + private string errorTargetFileNameField; + + private string fileAgeFilterModeField; + + private string fileAgeThresholdField; + + private long fileHandleTimeoutField; + + private long fileHandleWaitTimeField; + + private int fileScanningIntervalInSecondsField; + + private string fileScanningOptionField; + + private int idleEventWaitTimeInSecondsField; + + private string ifFileExistActionField; + + private string ifPostProcessingFailsActionField; + + private bool includeSubDirectoriesField; + + private string postProcessingModeField; + + private long postProcessingRetriesField; + + private string preProcessingModeField; + + private string skipSearchDirectoryNamesField; + + private string sourceFileFilterField; + + private string sourceFileLocationField; + + private string targetFileLocationField; + + private string targetFileNameField; + + private bool triggerOnChangedField; + + private bool triggerOnCreatedField; + + private bool useZip64ModeField; + + private string zipErrorTargetFileNameField; + + private long zipFileAmountField; + + private long zipFileSubFolderLevelField; + + private long zipFileTimeField; + + private string zipModeField; + + private string zipTargetFileNameField; + + private string baudRateField; + + private string connectionModeField; + + private byte deviceIdField; + + private bool deviceIdFieldSpecified; + + private string hostField; + + private string linkTestTimerField; + + private ushort portField; + + private bool portFieldSpecified; + + private string portTypeField; + + private string sessionModeField; + + private string t1InterCharacterField; + + private string t2ProtocolField; + + private string t3MessageReplyField; + + private string t4InterBlockField; + + private string t5ConnectionSeperationField; + + private string t6HsmsControlMessageField; + + private string t7ConnectionIdleField; + + private string t8NetworkIntercharacterField; + + private string id1Field; + + private string i___typeField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + + /// + public ComponentsCellComponentChildrenCellComponentEquipmentEquipmentDictionaries EquipmentDictionaries + { + get => this.equipmentDictionariesField; + set => this.equipmentDictionariesField = value; + } + + /// + public ComponentsCellComponentCellComponentEquipmentEquipmentType EquipmentType + { + get => this.equipmentTypeField; + set => this.equipmentTypeField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string AlternateTargetFolder + { + get => this.alternateTargetFolderField; + set => this.alternateTargetFolderField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ConnectionRetryInterval + { + get => this.connectionRetryIntervalField; + set => this.connectionRetryIntervalField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public ConnectionSettings ConnectionSettings + { + get => this.connectionSettingsField; + set => this.connectionSettingsField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool CopySourceFolderStructure + { + get => this.copySourceFolderStructureField; + set => this.copySourceFolderStructureField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string DefaultPlaceHolderValue + { + get => this.defaultPlaceHolderValueField; + set => this.defaultPlaceHolderValueField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool DeleteEmptySourceSubFolders + { + get => this.deleteEmptySourceSubFoldersField; + set => this.deleteEmptySourceSubFoldersField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorPostProcessingMode + { + get => this.errorPostProcessingModeField; + set => this.errorPostProcessingModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorTargetFileLocation + { + get => this.errorTargetFileLocationField; + set => this.errorTargetFileLocationField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorTargetFileName + { + get => this.errorTargetFileNameField; + set => this.errorTargetFileNameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileAgeFilterMode + { + get => this.fileAgeFilterModeField; + set => this.fileAgeFilterModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileAgeThreshold + { + get => this.fileAgeThresholdField; + set => this.fileAgeThresholdField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long FileHandleTimeout + { + get => this.fileHandleTimeoutField; + set => this.fileHandleTimeoutField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long FileHandleWaitTime + { + get => this.fileHandleWaitTimeField; + set => this.fileHandleWaitTimeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public int FileScanningIntervalInSeconds + { + get => this.fileScanningIntervalInSecondsField; + set => this.fileScanningIntervalInSecondsField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileScanningOption + { + get => this.fileScanningOptionField; + set => this.fileScanningOptionField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public int IdleEventWaitTimeInSeconds + { + get => this.idleEventWaitTimeInSecondsField; + set => this.idleEventWaitTimeInSecondsField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string IfFileExistAction + { + get => this.ifFileExistActionField; + set => this.ifFileExistActionField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string IfPostProcessingFailsAction + { + get => this.ifPostProcessingFailsActionField; + set => this.ifPostProcessingFailsActionField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool IncludeSubDirectories + { + get => this.includeSubDirectoriesField; + set => this.includeSubDirectoriesField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string PostProcessingMode + { + get => this.postProcessingModeField; + set => this.postProcessingModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long PostProcessingRetries + { + get => this.postProcessingRetriesField; + set => this.postProcessingRetriesField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string PreProcessingMode + { + get => this.preProcessingModeField; + set => this.preProcessingModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SkipSearchDirectoryNames + { + get => this.skipSearchDirectoryNamesField; + set => this.skipSearchDirectoryNamesField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SourceFileFilter + { + get => this.sourceFileFilterField; + set => this.sourceFileFilterField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SourceFileLocation + { + get => this.sourceFileLocationField; + set => this.sourceFileLocationField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string TargetFileLocation + { + get => this.targetFileLocationField; + set => this.targetFileLocationField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string TargetFileName + { + get => this.targetFileNameField; + set => this.targetFileNameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool TriggerOnChanged + { + get => this.triggerOnChangedField; + set => this.triggerOnChangedField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool TriggerOnCreated + { + get => this.triggerOnCreatedField; + set => this.triggerOnCreatedField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool UseZip64Mode + { + get => this.useZip64ModeField; + set => this.useZip64ModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipErrorTargetFileName + { + get => this.zipErrorTargetFileNameField; + set => this.zipErrorTargetFileNameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileAmount + { + get => this.zipFileAmountField; + set => this.zipFileAmountField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileSubFolderLevel + { + get => this.zipFileSubFolderLevelField; + set => this.zipFileSubFolderLevelField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileTime + { + get => this.zipFileTimeField; + set => this.zipFileTimeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipMode + { + get => this.zipModeField; + set => this.zipModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipTargetFileName + { + get => this.zipTargetFileNameField; + set => this.zipTargetFileNameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances")] + public string BaudRate + { + get => this.baudRateField; + set => this.baudRateField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances")] + public string ConnectionMode + { + get => this.connectionModeField; + set => this.connectionModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances")] + public byte DeviceId + { + get => this.deviceIdField; + set => this.deviceIdField = value; + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool DeviceIdSpecified + { + get => this.deviceIdFieldSpecified; + set => this.deviceIdFieldSpecified = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances")] + public string Host + { + get => this.hostField; + set => this.hostField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string LinkTestTimer + { + get => this.linkTestTimerField; + set => this.linkTestTimerField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances")] + public ushort Port + { + get => this.portField; + set => this.portField = value; + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool PortSpecified + { + get => this.portFieldSpecified; + set => this.portFieldSpecified = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances")] + public string PortType + { + get => this.portTypeField; + set => this.portTypeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances")] + public string SessionMode + { + get => this.sessionModeField; + set => this.sessionModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T1InterCharacter + { + get => this.t1InterCharacterField; + set => this.t1InterCharacterField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T2Protocol + { + get => this.t2ProtocolField; + set => this.t2ProtocolField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T3MessageReply + { + get => this.t3MessageReplyField; + set => this.t3MessageReplyField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T4InterBlock + { + get => this.t4InterBlockField; + set => this.t4InterBlockField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T5ConnectionSeperation + { + get => this.t5ConnectionSeperationField; + set => this.t5ConnectionSeperationField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T6HsmsControlMessage + { + get => this.t6HsmsControlMessageField; + set => this.t6HsmsControlMessageField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T7ConnectionIdle + { + get => this.t7ConnectionIdleField; + set => this.t7ConnectionIdleField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T8NetworkIntercharacter + { + get => this.t8NetworkIntercharacterField; + set => this.t8NetworkIntercharacterField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string i___type + { + get => this.i___typeField; + set => this.i___typeField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] +public partial class ComponentsCellComponentChildrenCellComponentEquipmentEquipmentDictionaries +{ + + private CellEquipmentDictionaryReference cellEquipmentDictionaryReferenceField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public CellEquipmentDictionaryReference CellEquipmentDictionaryReference + { + get => this.cellEquipmentDictionaryReferenceField; + set => this.cellEquipmentDictionaryReferenceField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities", IsNullable = false)] +public partial class CellEquipmentDictionaryReference +{ + + private string dictionaryNameField; + + private string dictionaryVersionField; + + private byte idField; + + private string id1Field; + + /// + public string DictionaryName + { + get => this.dictionaryNameField; + set => this.dictionaryNameField = value; + } + + /// + public string DictionaryVersion + { + get => this.dictionaryVersionField; + set => this.dictionaryVersionField = value; + } + + /// + public byte Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] +public partial class ComponentsCellComponentCellComponentEquipmentEquipmentType +{ + + private long idField; + + private string nameField; + + private string versionField; + + private string id1Field; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Version + { + get => this.versionField; + set => this.versionField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] +public partial class ComponentsCellComponentCellComponentComponentParameter +{ + + private object enumTypeField; + + private long idField; + + private string nameField; + + private string valueField; + + private string valueTypeField; + + private bool isOverrideField; + + private string id1Field; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation", IsNullable = true)] + public object EnumType + { + get => this.enumTypeField; + set => this.enumTypeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public string Value + { + get => this.valueField; + set => this.valueField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public string ValueType + { + get => this.valueTypeField; + set => this.valueTypeField = value; + } + + /// + public bool IsOverride + { + get => this.isOverrideField; + set => this.isOverrideField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] +public partial class ComponentsCellComponentEquipment +{ + + private long idField; + + private object equipmentDictionariesField; + + private ComponentsCellComponentEquipmentEquipmentType equipmentTypeField; + + private string nameField; + + private string alternateTargetFolderField; + + private long connectionRetryIntervalField; + + private ConnectionSettings connectionSettingsField; + + private bool copySourceFolderStructureField; + + private string defaultPlaceHolderValueField; + + private bool deleteEmptySourceSubFoldersField; + + private string errorPostProcessingModeField; + + private string errorTargetFileLocationField; + + private string errorTargetFileNameField; + + private string fileAgeFilterModeField; + + private string fileAgeThresholdField; + + private long fileHandleTimeoutField; + + private long fileHandleWaitTimeField; + + private int fileScanningIntervalInSecondsField; + + private string fileScanningOptionField; + + private int idleEventWaitTimeInSecondsField; + + private string ifFileExistActionField; + + private string ifPostProcessingFailsActionField; + + private bool includeSubDirectoriesField; + + private string postProcessingModeField; + + private long postProcessingRetriesField; + + private string preProcessingModeField; + + private string skipSearchDirectoryNamesField; + + private string sourceFileFilterField; + + private string sourceFileLocationField; + + private string targetFileLocationField; + + private string targetFileNameField; + + private bool triggerOnChangedField; + + private bool triggerOnCreatedField; + + private bool useZip64ModeField; + + private string zipErrorTargetFileNameField; + + private long zipFileAmountField; + + private long zipFileSubFolderLevelField; + + private long zipFileTimeField; + + private string zipModeField; + + private string zipTargetFileNameField; + + private string refField; + + private string id1Field; + + private string i___typeField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + public object EquipmentDictionaries + { + get => this.equipmentDictionariesField; + set => this.equipmentDictionariesField = value; + } + + /// + public ComponentsCellComponentEquipmentEquipmentType EquipmentType + { + get => this.equipmentTypeField; + set => this.equipmentTypeField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string AlternateTargetFolder + { + get => this.alternateTargetFolderField; + set => this.alternateTargetFolderField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ConnectionRetryInterval + { + get => this.connectionRetryIntervalField; + set => this.connectionRetryIntervalField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public ConnectionSettings ConnectionSettings + { + get => this.connectionSettingsField; + set => this.connectionSettingsField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool CopySourceFolderStructure + { + get => this.copySourceFolderStructureField; + set => this.copySourceFolderStructureField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string DefaultPlaceHolderValue + { + get => this.defaultPlaceHolderValueField; + set => this.defaultPlaceHolderValueField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool DeleteEmptySourceSubFolders + { + get => this.deleteEmptySourceSubFoldersField; + set => this.deleteEmptySourceSubFoldersField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorPostProcessingMode + { + get => this.errorPostProcessingModeField; + set => this.errorPostProcessingModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorTargetFileLocation + { + get => this.errorTargetFileLocationField; + set => this.errorTargetFileLocationField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorTargetFileName + { + get => this.errorTargetFileNameField; + set => this.errorTargetFileNameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileAgeFilterMode + { + get => this.fileAgeFilterModeField; + set => this.fileAgeFilterModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileAgeThreshold + { + get => this.fileAgeThresholdField; + set => this.fileAgeThresholdField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long FileHandleTimeout + { + get => this.fileHandleTimeoutField; + set => this.fileHandleTimeoutField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long FileHandleWaitTime + { + get => this.fileHandleWaitTimeField; + set => this.fileHandleWaitTimeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public int FileScanningIntervalInSeconds + { + get => this.fileScanningIntervalInSecondsField; + set => this.fileScanningIntervalInSecondsField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileScanningOption + { + get => this.fileScanningOptionField; + set => this.fileScanningOptionField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public int IdleEventWaitTimeInSeconds + { + get => this.idleEventWaitTimeInSecondsField; + set => this.idleEventWaitTimeInSecondsField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string IfFileExistAction + { + get => this.ifFileExistActionField; + set => this.ifFileExistActionField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string IfPostProcessingFailsAction + { + get => this.ifPostProcessingFailsActionField; + set => this.ifPostProcessingFailsActionField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool IncludeSubDirectories + { + get => this.includeSubDirectoriesField; + set => this.includeSubDirectoriesField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string PostProcessingMode + { + get => this.postProcessingModeField; + set => this.postProcessingModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long PostProcessingRetries + { + get => this.postProcessingRetriesField; + set => this.postProcessingRetriesField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string PreProcessingMode + { + get => this.preProcessingModeField; + set => this.preProcessingModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SkipSearchDirectoryNames + { + get => this.skipSearchDirectoryNamesField; + set => this.skipSearchDirectoryNamesField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SourceFileFilter + { + get => this.sourceFileFilterField; + set => this.sourceFileFilterField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SourceFileLocation + { + get => this.sourceFileLocationField; + set => this.sourceFileLocationField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string TargetFileLocation + { + get => this.targetFileLocationField; + set => this.targetFileLocationField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string TargetFileName + { + get => this.targetFileNameField; + set => this.targetFileNameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool TriggerOnChanged + { + get => this.triggerOnChangedField; + set => this.triggerOnChangedField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool TriggerOnCreated + { + get => this.triggerOnCreatedField; + set => this.triggerOnCreatedField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool UseZip64Mode + { + get => this.useZip64ModeField; + set => this.useZip64ModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipErrorTargetFileName + { + get => this.zipErrorTargetFileNameField; + set => this.zipErrorTargetFileNameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileAmount + { + get => this.zipFileAmountField; + set => this.zipFileAmountField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileSubFolderLevel + { + get => this.zipFileSubFolderLevelField; + set => this.zipFileSubFolderLevelField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileTime + { + get => this.zipFileTimeField; + set => this.zipFileTimeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipMode + { + get => this.zipModeField; + set => this.zipModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipTargetFileName + { + get => this.zipTargetFileNameField; + set => this.zipTargetFileNameField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Ref + { + get => this.refField; + set => this.refField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string i___type + { + get => this.i___typeField; + set => this.i___typeField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] +public partial class ComponentsCellComponentEquipmentEquipmentType +{ + + private long idField; + + private string nameField; + + private string versionField; + + private string id1Field; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Version + { + get => this.versionField; + set => this.versionField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] +public partial class ComponentsCellComponentComponentParameter +{ + + private object enumTypeField; + + private long idField; + + private string nameField; + + private string valueField; + + private string valueTypeField; + + private bool isOverrideField; + + private string id1Field; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation", IsNullable = true)] + public object EnumType + { + get => this.enumTypeField; + set => this.enumTypeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public string Value + { + get => this.valueField; + set => this.valueField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public string ValueType + { + get => this.valueTypeField; + set => this.valueTypeField = value; + } + + /// + public bool IsOverride + { + get => this.isOverrideField; + set => this.isOverrideField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] +public partial class CellInstanceVersionEdaConnection +{ + + private long idField; + + private int checkIntervalField; + + private int connectionTimeoutField; + + private object edaClientProxyFactoryProviderNameField; + + private long maxLostPingsField; + + private string portNameField; + + private int portNumberField; + + private string sSLEnabledField; + + private string id1Field; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public int CheckInterval + { + get => this.checkIntervalField; + set => this.checkIntervalField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public int ConnectionTimeout + { + get => this.connectionTimeoutField; + set => this.connectionTimeoutField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA", IsNullable = true)] + public object EdaClientProxyFactoryProviderName + { + get => this.edaClientProxyFactoryProviderNameField; + set => this.edaClientProxyFactoryProviderNameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public long MaxLostPings + { + get => this.maxLostPingsField; + set => this.maxLostPingsField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public string PortName + { + get => this.portNameField; + set => this.portNameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public int PortNumber + { + get => this.portNumberField; + set => this.portNumberField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public string SSLEnabled + { + get => this.sSLEnabledField; + set => this.sSLEnabledField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] +public partial class CellInstanceVersionParentInstance +{ + + private string currentActiveVersionField; + + private object currentHostField; + + private long idField; + + private object infoField; + + private bool isStartedField; + + private string nameField; + + private object startTimeField; + + private bool startableField; + + private object stopTimeField; + + private string targetActiveVersionField; + + private object targetHostField; + + private string id1Field; + + /// + public string CurrentActiveVersion + { + get => this.currentActiveVersionField; + set => this.currentActiveVersionField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object CurrentHost + { + get => this.currentHostField; + set => this.currentHostField = value; + } + + /// + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object Info + { + get => this.infoField; + set => this.infoField = value; + } + + /// + public bool IsStarted + { + get => this.isStartedField; + set => this.isStartedField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object StartTime + { + get => this.startTimeField; + set => this.startTimeField = value; + } + + /// + public bool Startable + { + get => this.startableField; + set => this.startableField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object StopTime + { + get => this.stopTimeField; + set => this.stopTimeField = value; + } + + /// + public string TargetActiveVersion + { + get => this.targetActiveVersionField; + set => this.targetActiveVersionField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object TargetHost + { + get => this.targetHostField; + set => this.targetHostField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] +public partial class CellInstanceVersionEdaTraceHandling +{ + + private long maxParameterCollectionTimeDeltaField; + + private object mergeStrategyClassField; + + private object mergeStrategyParametersField; + + private long traceCleanupDaemonIntervalField; + + private TraceSourcePrimaryPrioritiesConnection[] traceSourcePrimaryPrioritiesField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public long MaxParameterCollectionTimeDelta + { + get => this.maxParameterCollectionTimeDeltaField; + set => this.maxParameterCollectionTimeDeltaField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA", IsNullable = true)] + public object MergeStrategyClass + { + get => this.mergeStrategyClassField; + set => this.mergeStrategyClassField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public object MergeStrategyParameters + { + get => this.mergeStrategyParametersField; + set => this.mergeStrategyParametersField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public long TraceCleanupDaemonInterval + { + get => this.traceCleanupDaemonIntervalField; + set => this.traceCleanupDaemonIntervalField = value; + } + + /// + [System.Xml.Serialization.XmlArrayAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + [System.Xml.Serialization.XmlArrayItemAttribute("Connection", IsNullable = false)] + public TraceSourcePrimaryPrioritiesConnection[] TraceSourcePrimaryPriorities + { + get => this.traceSourcePrimaryPrioritiesField; + set => this.traceSourcePrimaryPrioritiesField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] +public partial class TraceSourcePrimaryPrioritiesConnection +{ + + private long idField; + + private object equipmentDictionariesField; + + private EquipmentType equipmentTypeField; + + private string nameField; + + private string alternateTargetFolderField; + + private long connectionRetryIntervalField; + + private ConnectionSettings connectionSettingsField; + + private bool copySourceFolderStructureField; + + private string defaultPlaceHolderValueField; + + private bool deleteEmptySourceSubFoldersField; + + private string errorPostProcessingModeField; + + private string errorTargetFileLocationField; + + private string errorTargetFileNameField; + + private string fileAgeFilterModeField; + + private string fileAgeThresholdField; + + private long fileHandleTimeoutField; + + private long fileHandleWaitTimeField; + + private int fileScanningIntervalInSecondsField; + + private string fileScanningOptionField; + + private int idleEventWaitTimeInSecondsField; + + private string ifFileExistActionField; + + private string ifPostProcessingFailsActionField; + + private bool includeSubDirectoriesField; + + private string postProcessingModeField; + + private long postProcessingRetriesField; + + private string preProcessingModeField; + + private string skipSearchDirectoryNamesField; + + private string sourceFileFilterField; + + private string sourceFileLocationField; + + private string targetFileLocationField; + + private string targetFileNameField; + + private bool triggerOnChangedField; + + private bool triggerOnCreatedField; + + private bool useZip64ModeField; + + private string zipErrorTargetFileNameField; + + private long zipFileAmountField; + + private long zipFileSubFolderLevelField; + + private long zipFileTimeField; + + private string zipModeField; + + private string zipTargetFileNameField; + + private string id1Field; + + private string i___typeField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] + public object EquipmentDictionaries + { + get => this.equipmentDictionariesField; + set => this.equipmentDictionariesField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] + public EquipmentType EquipmentType + { + get => this.equipmentTypeField; + set => this.equipmentTypeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string AlternateTargetFolder + { + get => this.alternateTargetFolderField; + set => this.alternateTargetFolderField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ConnectionRetryInterval + { + get => this.connectionRetryIntervalField; + set => this.connectionRetryIntervalField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public ConnectionSettings ConnectionSettings + { + get => this.connectionSettingsField; + set => this.connectionSettingsField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool CopySourceFolderStructure + { + get => this.copySourceFolderStructureField; + set => this.copySourceFolderStructureField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string DefaultPlaceHolderValue + { + get => this.defaultPlaceHolderValueField; + set => this.defaultPlaceHolderValueField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool DeleteEmptySourceSubFolders + { + get => this.deleteEmptySourceSubFoldersField; + set => this.deleteEmptySourceSubFoldersField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorPostProcessingMode + { + get => this.errorPostProcessingModeField; + set => this.errorPostProcessingModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorTargetFileLocation + { + get => this.errorTargetFileLocationField; + set => this.errorTargetFileLocationField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorTargetFileName + { + get => this.errorTargetFileNameField; + set => this.errorTargetFileNameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileAgeFilterMode + { + get => this.fileAgeFilterModeField; + set => this.fileAgeFilterModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileAgeThreshold + { + get => this.fileAgeThresholdField; + set => this.fileAgeThresholdField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long FileHandleTimeout + { + get => this.fileHandleTimeoutField; + set => this.fileHandleTimeoutField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long FileHandleWaitTime + { + get => this.fileHandleWaitTimeField; + set => this.fileHandleWaitTimeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public int FileScanningIntervalInSeconds + { + get => this.fileScanningIntervalInSecondsField; + set => this.fileScanningIntervalInSecondsField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileScanningOption + { + get => this.fileScanningOptionField; + set => this.fileScanningOptionField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public int IdleEventWaitTimeInSeconds + { + get => this.idleEventWaitTimeInSecondsField; + set => this.idleEventWaitTimeInSecondsField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string IfFileExistAction + { + get => this.ifFileExistActionField; + set => this.ifFileExistActionField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string IfPostProcessingFailsAction + { + get => this.ifPostProcessingFailsActionField; + set => this.ifPostProcessingFailsActionField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool IncludeSubDirectories + { + get => this.includeSubDirectoriesField; + set => this.includeSubDirectoriesField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string PostProcessingMode + { + get => this.postProcessingModeField; + set => this.postProcessingModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long PostProcessingRetries + { + get => this.postProcessingRetriesField; + set => this.postProcessingRetriesField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string PreProcessingMode + { + get => this.preProcessingModeField; + set => this.preProcessingModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SkipSearchDirectoryNames + { + get => this.skipSearchDirectoryNamesField; + set => this.skipSearchDirectoryNamesField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SourceFileFilter + { + get => this.sourceFileFilterField; + set => this.sourceFileFilterField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SourceFileLocation + { + get => this.sourceFileLocationField; + set => this.sourceFileLocationField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string TargetFileLocation + { + get => this.targetFileLocationField; + set => this.targetFileLocationField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string TargetFileName + { + get => this.targetFileNameField; + set => this.targetFileNameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool TriggerOnChanged + { + get => this.triggerOnChangedField; + set => this.triggerOnChangedField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool TriggerOnCreated + { + get => this.triggerOnCreatedField; + set => this.triggerOnCreatedField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool UseZip64Mode + { + get => this.useZip64ModeField; + set => this.useZip64ModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipErrorTargetFileName + { + get => this.zipErrorTargetFileNameField; + set => this.zipErrorTargetFileNameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileAmount + { + get => this.zipFileAmountField; + set => this.zipFileAmountField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileSubFolderLevel + { + get => this.zipFileSubFolderLevelField; + set => this.zipFileSubFolderLevelField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileTime + { + get => this.zipFileTimeField; + set => this.zipFileTimeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipMode + { + get => this.zipModeField; + set => this.zipModeField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipTargetFileName + { + get => this.zipTargetFileNameField; + set => this.zipTargetFileNameField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string i___type + { + get => this.i___typeField; + set => this.i___typeField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances", IsNullable = false)] +public partial class EquipmentType +{ + + private long idField; + + private string nameField; + + private string versionField; + + private string id1Field; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public long Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Version + { + get => this.versionField; + set => this.versionField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities", IsNullable = false)] +public partial class Extensions +{ + + private ExtensionsVersionExtension[] versionExtensionField; + + /// + [System.Xml.Serialization.XmlElementAttribute("VersionExtension")] + public ExtensionsVersionExtension[] VersionExtension + { + get => this.versionExtensionField; + set => this.versionExtensionField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances", IsNullable = false)] +public partial class Components +{ + + private ComponentsCellComponent[] cellComponentField; + + /// + [System.Xml.Serialization.XmlElementAttribute("CellComponent")] + public ComponentsCellComponent[] CellComponent + { + get => this.cellComponentField; + set => this.cellComponentField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA", IsNullable = false)] +public partial class TraceSourcePrimaryPriorities +{ + + private TraceSourcePrimaryPrioritiesConnection[] connectionField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Connection")] + public TraceSourcePrimaryPrioritiesConnection[] Connection + { + get => this.connectionField; + set => this.connectionField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances", IsNullable = false)] +public partial class ConnectionSettings +{ + + private Setting[] settingField; + + private string idField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Setting", Namespace = "http://schemas.datacontract.org/2004/07/Ifx.ManagementInterfaceIfx.Common.Connect" + + "ionSettings")] + public Setting[] Setting + { + get => this.settingField; + set => this.settingField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Ifx.ManagementInterfaceIfx.Common.Connect" + + "ionSettings")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Ifx.ManagementInterfaceIfx.Common.Connect" + + "ionSettings", IsNullable = false)] +public partial class Setting +{ + + private string nameField; + + private string valueField; + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + public string Value + { + get => this.valueField; + set => this.valueField = value; + } +} \ No newline at end of file diff --git a/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/ConfigurationData.cs b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/ConfigurationData.cs new file mode 100644 index 0000000..40e7492 --- /dev/null +++ b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/ConfigurationData.cs @@ -0,0 +1,23 @@ +using System.Xml.Serialization; + +namespace Shared.PasteSpecialXml.EAF.XML.API.ConfigurationData; + +[XmlRoot(ElementName = "ChildBackboneMembers", Namespace = "http://schemas.datacontract.org/2004/07/EafManagement.Configuration.Services")] +public class ChildBackboneMembers +{ + [XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")] + public string Nil { get; set; } +} + +[XmlRoot(ElementName = "ConfigurationData", Namespace = "http://schemas.datacontract.org/2004/07/EafManagement.Configuration.Services")] +public class ConfigurationData +{ + [XmlElement(ElementName = "ChildBackboneMembers", Namespace = "http://schemas.datacontract.org/2004/07/EafManagement.Configuration.Services")] + public ChildBackboneMembers ChildBackboneMembers { get; set; } + [XmlElement(ElementName = "Data", Namespace = "http://schemas.datacontract.org/2004/07/EafManagement.Configuration.Services")] + public string Data { get; set; } + [XmlAttribute(AttributeName = "xmlns")] + public string Xmlns { get; set; } + [XmlAttribute(AttributeName = "i", Namespace = "http://www.w3.org/2000/xmlns/")] + public string I { get; set; } +} \ No newline at end of file diff --git a/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentDictionary.cs b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentDictionary.cs new file mode 100644 index 0000000..e54c13c --- /dev/null +++ b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentDictionary.cs @@ -0,0 +1,1300 @@ +namespace Shared.PasteSpecialXml.EAF.XML.API.EquipmentDictionary; + +// NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0. +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization", IsNullable = false)] +public partial class EquipmentDictionaryVersion +{ + +#pragma warning disable IDE1006 // Naming Styles + + private EquipmentDictionaryVersionAlarms alarmsField; + + private string createdByField; + + private System.DateTime creationDateField; + + private EquipmentDictionaryVersionDataItems dataItemsField; + + private string descriptionField; + + private string dictionaryNameField; + + private EquipmentDictionaryVersionEquipmentSettings equipmentSettingsField; + + private EquipmentDictionaryVersionEvents eventsField; + + private System.DateTime freezeDateField; + + private object frozenByField; + + private bool isFrozenField; + + private bool isRetiredField; + + private string nameField; + + private EquipmentDictionaryVersionObjectTypes objectTypesField; + + private EquipmentDictionaryVersionReports reportsField; + + private System.DateTime retireDateField; + + private object retiredByField; + + private string schemaVersionField; + + private EquipmentDictionaryVersionValidityMapDataItemToEvent validityMapDataItemToEventField; + + private string idField; + + /// + public EquipmentDictionaryVersionAlarms Alarms + { + get => this.alarmsField; + set => this.alarmsField = value; + } + + /// + public string CreatedBy + { + get => this.createdByField; + set => this.createdByField = value; + } + + /// + public System.DateTime CreationDate + { + get => this.creationDateField; + set => this.creationDateField = value; + } + + /// + public EquipmentDictionaryVersionDataItems DataItems + { + get => this.dataItemsField; + set => this.dataItemsField = value; + } + + /// + public string Description + { + get => this.descriptionField; + set => this.descriptionField = value; + } + + /// + public string DictionaryName + { + get => this.dictionaryNameField; + set => this.dictionaryNameField = value; + } + + /// + public EquipmentDictionaryVersionEquipmentSettings EquipmentSettings + { + get => this.equipmentSettingsField; + set => this.equipmentSettingsField = value; + } + + /// + public EquipmentDictionaryVersionEvents Events + { + get => this.eventsField; + set => this.eventsField = value; + } + + /// + public System.DateTime FreezeDate + { + get => this.freezeDateField; + set => this.freezeDateField = value; + } + + /// + public object FrozenBy + { + get => this.frozenByField; + set => this.frozenByField = value; + } + + /// + public bool IsFrozen + { + get => this.isFrozenField; + set => this.isFrozenField = value; + } + + /// + public bool IsRetired + { + get => this.isRetiredField; + set => this.isRetiredField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + public EquipmentDictionaryVersionObjectTypes ObjectTypes + { + get => this.objectTypesField; + set => this.objectTypesField = value; + } + + /// + public EquipmentDictionaryVersionReports Reports + { + get => this.reportsField; + set => this.reportsField = value; + } + + /// + public System.DateTime RetireDate + { + get => this.retireDateField; + set => this.retireDateField = value; + } + + /// + public object RetiredBy + { + get => this.retiredByField; + set => this.retiredByField = value; + } + + /// + public string SchemaVersion + { + get => this.schemaVersionField; + set => this.schemaVersionField = value; + } + + /// + public EquipmentDictionaryVersionValidityMapDataItemToEvent ValidityMapDataItemToEvent + { + get => this.validityMapDataItemToEventField; + set => this.validityMapDataItemToEventField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionAlarms +{ + + private EquipmentDictionaryVersionAlarmsAlarm[] alarmField; + + private string idField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Alarm")] + public EquipmentDictionaryVersionAlarmsAlarm[] Alarm + { + get => this.alarmField; + set => this.alarmField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionAlarmsAlarm +{ + + private object contextField; + + private string descriptionField; + + private bool isEnabledField; + + private bool isVirtualField; + + private bool isVirtualFieldSpecified; + + private string nameField; + + private object severityField; + + private int sourceIDField; + + private object textField; + + private string idField; + + /// + public object Context + { + get => this.contextField; + set => this.contextField = value; + } + + /// + public string Description + { + get => this.descriptionField; + set => this.descriptionField = value; + } + + /// + public bool IsEnabled + { + get => this.isEnabledField; + set => this.isEnabledField = value; + } + + /// + public bool IsVirtual + { + get => this.isVirtualField; + set => this.isVirtualField = value; + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool IsVirtualSpecified + { + get => this.isVirtualFieldSpecified; + set => this.isVirtualFieldSpecified = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + public object Severity + { + get => this.severityField; + set => this.severityField = value; + } + + /// + public int SourceID + { + get => this.sourceIDField; + set => this.sourceIDField = value; + } + + /// + public object Text + { + get => this.textField; + set => this.textField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionDataItems +{ + + private EquipmentDictionaryVersionDataItemsItem[] itemField; + + private string idField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Item")] + public EquipmentDictionaryVersionDataItemsItem[] Item + { + get => this.itemField; + set => this.itemField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionDataItemsItem +{ + + private string dataTypeField; + + private string descriptionField; + + private bool isQueryableField; + + private string nameField; + + private uint sourceIDField; + + private object unitField; + + private string validityContextField; + + private string idField; + + /// + public string DataType + { + get => this.dataTypeField; + set => this.dataTypeField = value; + } + + /// + public string Description + { + get => this.descriptionField; + set => this.descriptionField = value; + } + + /// + public bool IsQueryable + { + get => this.isQueryableField; + set => this.isQueryableField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + public uint SourceID + { + get => this.sourceIDField; + set => this.sourceIDField = value; + } + + /// + public object Unit + { + get => this.unitField; + set => this.unitField = value; + } + + /// + public string ValidityContext + { + get => this.validityContextField; + set => this.validityContextField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionEquipmentSettings +{ + + private EquipmentDictionaryVersionEquipmentSettingsSetting[] settingField; + + private string idField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Setting")] + public EquipmentDictionaryVersionEquipmentSettingsSetting[] Setting + { + get => this.settingField; + set => this.settingField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionEquipmentSettingsSetting +{ + + private object contextField; + + private string dataTypeField; + + private string descriptionField; + + private string initialValueField; + + private bool initializeField; + + private string nameField; + + private uint sourceIDField; + + private string idField; + + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object Context + { + get => this.contextField; + set => this.contextField = value; + } + + /// + public string DataType + { + get => this.dataTypeField; + set => this.dataTypeField = value; + } + + /// + public string Description + { + get => this.descriptionField; + set => this.descriptionField = value; + } + + /// + public string InitialValue + { + get => this.initialValueField; + set => this.initialValueField = value; + } + + /// + public bool Initialize + { + get => this.initializeField; + set => this.initializeField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + public uint SourceID + { + get => this.sourceIDField; + set => this.sourceIDField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionEvents +{ + + private EquipmentDictionaryVersionEventsEvent[] eventField; + + private string idField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Event")] + public EquipmentDictionaryVersionEventsEvent[] Event + { + get => this.eventField; + set => this.eventField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionEventsEvent +{ + + private object contextField; + + private string descriptionField; + + private bool isAlwaysEnabledField; + + private bool isVirtualField; + + private string nameField; + + private string sourceIDField; + + private EquipmentDictionaryVersionEventsEventValidDataItems validDataItemsField; + + private string idField; + + /// + public object Context + { + get => this.contextField; + set => this.contextField = value; + } + + /// + public string Description + { + get => this.descriptionField; + set => this.descriptionField = value; + } + + /// + public bool IsAlwaysEnabled + { + get => this.isAlwaysEnabledField; + set => this.isAlwaysEnabledField = value; + } + + /// + public bool IsVirtual + { + get => this.isVirtualField; + set => this.isVirtualField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + public string SourceID + { + get => this.sourceIDField; + set => this.sourceIDField = value; + } + + /// + public EquipmentDictionaryVersionEventsEventValidDataItems ValidDataItems + { + get => this.validDataItemsField; + set => this.validDataItemsField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionEventsEventValidDataItems +{ + + private string idField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionObjectTypes +{ + + private EquipmentDictionaryVersionObjectTypesType[] typeField; + + private string idField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Type")] + public EquipmentDictionaryVersionObjectTypesType[] Type + { + get => this.typeField; + set => this.typeField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionObjectTypesType +{ + + private EquipmentDictionaryVersionObjectTypesTypeAlarms alarmsField; + + private object baseTypeField; + + private EquipmentDictionaryVersionObjectTypesTypeDataItems dataItemsField; + + private EquipmentDictionaryVersionObjectTypesTypeEvents eventsField; + + private string nameField; + + private EquipmentDictionaryVersionObjectTypesTypeSettings settingsField; + + private string idField; + + /// + public EquipmentDictionaryVersionObjectTypesTypeAlarms Alarms + { + get => this.alarmsField; + set => this.alarmsField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object BaseType + { + get => this.baseTypeField; + set => this.baseTypeField = value; + } + + /// + public EquipmentDictionaryVersionObjectTypesTypeDataItems DataItems + { + get => this.dataItemsField; + set => this.dataItemsField = value; + } + + /// + public EquipmentDictionaryVersionObjectTypesTypeEvents Events + { + get => this.eventsField; + set => this.eventsField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + public EquipmentDictionaryVersionObjectTypesTypeSettings Settings + { + get => this.settingsField; + set => this.settingsField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionObjectTypesTypeAlarms +{ + + private string idField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionObjectTypesTypeDataItems +{ + + private EquipmentDictionaryVersionObjectTypesTypeDataItemsItem[] itemField; + + private string idField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Item")] + public EquipmentDictionaryVersionObjectTypesTypeDataItemsItem[] Item + { + get => this.itemField; + set => this.itemField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionObjectTypesTypeDataItemsItem +{ + + private EquipmentDictionaryVersionObjectTypesTypeDataItemsItemEquipmentDataItems equipmentDataItemsField; + + private string nameField; + + private object unitField; + + private string idField; + + /// + public EquipmentDictionaryVersionObjectTypesTypeDataItemsItemEquipmentDataItems EquipmentDataItems + { + get => this.equipmentDataItemsField; + set => this.equipmentDataItemsField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + public object Unit + { + get => this.unitField; + set => this.unitField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionObjectTypesTypeDataItemsItemEquipmentDataItems +{ + + private EquipmentDictionaryVersionObjectTypesTypeDataItemsItemEquipmentDataItemsItem[] itemField; + + private string idField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Item")] + public EquipmentDictionaryVersionObjectTypesTypeDataItemsItemEquipmentDataItemsItem[] Item + { + get => this.itemField; + set => this.itemField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionObjectTypesTypeDataItemsItemEquipmentDataItemsItem +{ + + private string refField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Ref + { + get => this.refField; + set => this.refField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionObjectTypesTypeEvents +{ + + private EquipmentDictionaryVersionObjectTypesTypeEventsEvent[] eventField; + + private string idField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Event")] + public EquipmentDictionaryVersionObjectTypesTypeEventsEvent[] Event + { + get => this.eventField; + set => this.eventField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionObjectTypesTypeEventsEvent +{ + + private EquipmentDictionaryVersionObjectTypesTypeEventsEventEquipmentEvents equipmentEventsField; + + private string nameField; + + private string stateModelField; + + private string idField; + + /// + public EquipmentDictionaryVersionObjectTypesTypeEventsEventEquipmentEvents EquipmentEvents + { + get => this.equipmentEventsField; + set => this.equipmentEventsField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + public string StateModel + { + get => this.stateModelField; + set => this.stateModelField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionObjectTypesTypeEventsEventEquipmentEvents +{ + + private EquipmentDictionaryVersionObjectTypesTypeEventsEventEquipmentEventsEvent eventField; + + private string idField; + + /// + public EquipmentDictionaryVersionObjectTypesTypeEventsEventEquipmentEventsEvent Event + { + get => this.eventField; + set => this.eventField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionObjectTypesTypeEventsEventEquipmentEventsEvent +{ + + private string refField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Ref + { + get => this.refField; + set => this.refField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionObjectTypesTypeSettings +{ + + private string idField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionReports +{ + + private EquipmentDictionaryVersionReportsReport[] reportField; + + private string idField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Report")] + public EquipmentDictionaryVersionReportsReport[] Report + { + get => this.reportField; + set => this.reportField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionReportsReport +{ + + private EquipmentDictionaryVersionReportsReportDataItems dataItemsField; + + private bool isPreDefinedField; + + private EquipmentDictionaryVersionReportsReportLinkEvents linkEventsField; + + private string nameField; + + private EquipmentDictionaryVersionReportsReportPreLinkedEvents preLinkedEventsField; + + private object sourceIdField; + + private string idField; + + /// + public EquipmentDictionaryVersionReportsReportDataItems DataItems + { + get => this.dataItemsField; + set => this.dataItemsField = value; + } + + /// + public bool IsPreDefined + { + get => this.isPreDefinedField; + set => this.isPreDefinedField = value; + } + + /// + public EquipmentDictionaryVersionReportsReportLinkEvents LinkEvents + { + get => this.linkEventsField; + set => this.linkEventsField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + public EquipmentDictionaryVersionReportsReportPreLinkedEvents PreLinkedEvents + { + get => this.preLinkedEventsField; + set => this.preLinkedEventsField = value; + } + + /// + public object SourceId + { + get => this.sourceIdField; + set => this.sourceIdField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionReportsReportDataItems +{ + + private EquipmentDictionaryVersionReportsReportDataItemsItem[] itemField; + + private string idField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Item")] + public EquipmentDictionaryVersionReportsReportDataItemsItem[] Item + { + get => this.itemField; + set => this.itemField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionReportsReportDataItemsItem +{ + + private string refField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Ref + { + get => this.refField; + set => this.refField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionReportsReportLinkEvents +{ + + private EquipmentDictionaryVersionReportsReportLinkEventsEvent[] eventField; + + private string idField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Event")] + public EquipmentDictionaryVersionReportsReportLinkEventsEvent[] Event + { + get => this.eventField; + set => this.eventField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionReportsReportLinkEventsEvent +{ + + private string refField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Ref + { + get => this.refField; + set => this.refField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionReportsReportPreLinkedEvents +{ + + private string idField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tCharacterization")] +public partial class EquipmentDictionaryVersionValidityMapDataItemToEvent +{ + + private object dataItemsField; + + /// + public object DataItems + { + get => this.dataItemsField; + set => this.dataItemsField = value; + } +} \ No newline at end of file diff --git a/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentType.cs b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentType.cs new file mode 100644 index 0000000..c5efa45 --- /dev/null +++ b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentType.cs @@ -0,0 +1,962 @@ +namespace Shared.PasteSpecialXml.EAF.XML.API.EquipmentType; + +// NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0. +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities", IsNullable = false)] +public partial class EquipmentTypeVersion +{ + +#pragma warning disable IDE1006 // Naming Styles + + private string createdByField; + + private System.DateTime creationDateField; + + private object descriptionField; + + private ExtensionsVersionExtension[] extensionsField; + + private System.DateTime freezeDateField; + + private string frozenByField; + + private byte idField; + + private bool isFrozenField; + + private bool isRetiredField; + + private System.DateTime retireDateField; + + private object retiredByField; + + private SelectedDeploymentPackage[] deploymentPackagesField; + + private EquipmentTypeVersionDictionaries dictionariesField; + + private string nameField; + + private EquipmentTypeVersionParentType parentTypeField; + + private ParameterizedModelObjectDefinition[] equipmentComponentsField; + + private EventActionSequenceDefinition[] eventActionSequencesField; + + private object fileCommunicatorObjectTypesField; + + private FileConfiguration fileConfigurationField; + + private FileHandlerObjectTypes fileHandlerObjectTypesField; + + private ParameterizedModelObjectDefinition[] transientEquipmentObjectTypesField; + + private string id1Field; + + private string i___typeField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public string CreatedBy + { + get => this.createdByField; + set => this.createdByField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public System.DateTime CreationDate + { + get => this.creationDateField; + set => this.creationDateField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities", IsNullable = true)] + public object Description + { + get => this.descriptionField; + set => this.descriptionField = value; + } + + /// + [System.Xml.Serialization.XmlArrayAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + [System.Xml.Serialization.XmlArrayItemAttribute("VersionExtension", IsNullable = false)] + public ExtensionsVersionExtension[] Extensions + { + get => this.extensionsField; + set => this.extensionsField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public System.DateTime FreezeDate + { + get => this.freezeDateField; + set => this.freezeDateField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public string FrozenBy + { + get => this.frozenByField; + set => this.frozenByField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public byte Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public bool IsFrozen + { + get => this.isFrozenField; + set => this.isFrozenField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public bool IsRetired + { + get => this.isRetiredField; + set => this.isRetiredField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public System.DateTime RetireDate + { + get => this.retireDateField; + set => this.retireDateField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities", IsNullable = true)] + public object RetiredBy + { + get => this.retiredByField; + set => this.retiredByField = value; + } + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("SelectedDeploymentPackage", Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Deployme" + + "nt", IsNullable = false)] + public SelectedDeploymentPackage[] DeploymentPackages + { + get => this.deploymentPackagesField; + set => this.deploymentPackagesField = value; + } + + /// + public EquipmentTypeVersionDictionaries Dictionaries + { + get => this.dictionariesField; + set => this.dictionariesField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + public EquipmentTypeVersionParentType ParentType + { + get => this.parentTypeField; + set => this.parentTypeField = value; + } + + /// + [System.Xml.Serialization.XmlArrayAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes")] + [System.Xml.Serialization.XmlArrayItemAttribute("ParameterizedModelObjectDefinition", Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation", IsNullable = false)] + public ParameterizedModelObjectDefinition[] EquipmentComponents + { + get => this.equipmentComponentsField; + set => this.equipmentComponentsField = value; + } + + /// + [System.Xml.Serialization.XmlArrayAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes")] + [System.Xml.Serialization.XmlArrayItemAttribute("EventActionSequenceDefinition", Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation", IsNullable = false)] + public EventActionSequenceDefinition[] EventActionSequences + { + get => this.eventActionSequencesField; + set => this.eventActionSequencesField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes")] + public object FileCommunicatorObjectTypes + { + get => this.fileCommunicatorObjectTypesField; + set => this.fileCommunicatorObjectTypesField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes")] + public FileConfiguration FileConfiguration + { + get => this.fileConfigurationField; + set => this.fileConfigurationField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes")] + public FileHandlerObjectTypes FileHandlerObjectTypes + { + get => this.fileHandlerObjectTypesField; + set => this.fileHandlerObjectTypesField = value; + } + + /// + [System.Xml.Serialization.XmlArrayAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes")] + [System.Xml.Serialization.XmlArrayItemAttribute("ParameterizedModelObjectDefinition", Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation", IsNullable = false)] + public ParameterizedModelObjectDefinition[] TransientEquipmentObjectTypes + { + get => this.transientEquipmentObjectTypesField; + set => this.transientEquipmentObjectTypesField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string i___type + { + get => this.i___typeField; + set => this.i___typeField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Deployme" + + "nt")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Deployme" + + "nt", IsNullable = false)] +public partial class SelectedDeploymentPackage +{ + + private byte idField; + + private string packageNameField; + + private string packageVersionField; + + /// + public byte Id + { + get => this.idField; + set => this.idField = value; + } + + /// + public string PackageName + { + get => this.packageNameField; + set => this.packageNameField = value; + } + + /// + public string PackageVersion + { + get => this.packageVersionField; + set => this.packageVersionField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] +public partial class ExtensionsVersionExtension +{ + + private byte idField; + + private string classNameField; + + private object configurationField; + + private string nameField; + + private string id1Field; + + private string i___typeField; + + /// + public byte Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Backbone" + + "s")] + public string ClassName + { + get => this.classNameField; + set => this.classNameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Backbone" + + "s", IsNullable = true)] + public object Configuration + { + get => this.configurationField; + set => this.configurationField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Backbone" + + "s")] + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string i___type + { + get => this.i___typeField; + set => this.i___typeField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] +public partial class EquipmentTypeVersionDictionaries +{ + + private EquipmentTypeVersionDictionariesEquipmentTypeDictionaryReference equipmentTypeDictionaryReferenceField; + + /// + public EquipmentTypeVersionDictionariesEquipmentTypeDictionaryReference EquipmentTypeDictionaryReference + { + get => this.equipmentTypeDictionaryReferenceField; + set => this.equipmentTypeDictionaryReferenceField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] +public partial class EquipmentTypeVersionDictionariesEquipmentTypeDictionaryReference +{ + + private string dictionaryNameField; + + private string dictionaryVersionField; + + private byte idField; + + private string id1Field; + + /// + public string DictionaryName + { + get => this.dictionaryNameField; + set => this.dictionaryNameField = value; + } + + /// + public string DictionaryVersion + { + get => this.dictionaryVersionField; + set => this.dictionaryVersionField = value; + } + + /// + public byte Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] +public partial class EquipmentTypeVersionParentType +{ + + private byte idField; + + private string nameField; + + private string id1Field; + + /// + public byte Id + { + get => this.idField; + set => this.idField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation", IsNullable = false)] +public partial class ParameterizedModelObjectDefinition +{ + + private byte idField; + + private string nameField; + + private ParameterizedModelObjectDefinitionModelObjectParameterDefinition[] parametersField; + + private string typeField; + + private string id1Field; + + /// + public byte Id + { + get => this.idField; + set => this.idField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("ModelObjectParameterDefinition", IsNullable = false)] + public ParameterizedModelObjectDefinitionModelObjectParameterDefinition[] Parameters + { + get => this.parametersField; + set => this.parametersField = value; + } + + /// + public string Type + { + get => this.typeField; + set => this.typeField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] +public partial class ParameterizedModelObjectDefinitionModelObjectParameterDefinition +{ + + private string enumTypeField; + + private byte idField; + + private string nameField; + + private string valueField; + + private string valueTypeField; + + private string id1Field; + + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string EnumType + { + get => this.enumTypeField; + set => this.enumTypeField = value; + } + + /// + public byte Id + { + get => this.idField; + set => this.idField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + public string Value + { + get => this.valueField; + set => this.valueField = value; + } + + /// + public string ValueType + { + get => this.valueTypeField; + set => this.valueTypeField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation", IsNullable = false)] +public partial class EventActionSequenceDefinition +{ + + private EventActionSequenceDefinitionEventActionParameterDefinition[] actionsField; + + private string eventTypeField; + + private string handledEventField; + + private byte idField; + + private string id1Field; + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("EventActionParameterDefinition", IsNullable = false)] + public EventActionSequenceDefinitionEventActionParameterDefinition[] Actions + { + get => this.actionsField; + set => this.actionsField = value; + } + + /// + public string EventType + { + get => this.eventTypeField; + set => this.eventTypeField = value; + } + + /// + public string HandledEvent + { + get => this.handledEventField; + set => this.handledEventField = value; + } + + /// + public byte Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes", IsNullable = false)] +public class FileConfiguration +{ + + private string idField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get => this.idField; + set => this.idField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes", IsNullable = false)] +public class FileHandlerObjectTypes +{ + + private ParameterizedModelObjectDefinition parameterizedModelObjectDefinitionField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public ParameterizedModelObjectDefinition ParameterizedModelObjectDefinition + { + get => this.parameterizedModelObjectDefinitionField; + set => this.parameterizedModelObjectDefinitionField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities", IsNullable = false)] +public partial class Extensions +{ + + private ExtensionsVersionExtension[] versionExtensionField; + + /// + [System.Xml.Serialization.XmlElementAttribute("VersionExtension")] + public ExtensionsVersionExtension[] VersionExtension + { + get => this.versionExtensionField; + set => this.versionExtensionField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes", IsNullable = false)] +public partial class EquipmentComponents +{ + + private ParameterizedModelObjectDefinition[] parameterizedModelObjectDefinitionField; + + /// + [System.Xml.Serialization.XmlElementAttribute("ParameterizedModelObjectDefinition", Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public ParameterizedModelObjectDefinition[] ParameterizedModelObjectDefinition + { + get => this.parameterizedModelObjectDefinitionField; + set => this.parameterizedModelObjectDefinitionField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes", IsNullable = false)] +public partial class EventActionSequences +{ + + private EventActionSequenceDefinition[] eventActionSequenceDefinitionField; + + /// + [System.Xml.Serialization.XmlElementAttribute("EventActionSequenceDefinition", Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public EventActionSequenceDefinition[] EventActionSequenceDefinition + { + get => this.eventActionSequenceDefinitionField; + set => this.eventActionSequenceDefinitionField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes")] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes", IsNullable = false)] +public partial class TransientEquipmentObjectTypes +{ + + private ParameterizedModelObjectDefinition[] parameterizedModelObjectDefinitionField; + + /// + [System.Xml.Serialization.XmlElementAttribute("ParameterizedModelObjectDefinition", Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public ParameterizedModelObjectDefinition[] ParameterizedModelObjectDefinition + { + get => this.parameterizedModelObjectDefinitionField; + set => this.parameterizedModelObjectDefinitionField = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] +public partial class EventActionSequenceDefinitionEventActionParameterDefinition +{ + + private byte idField; + + private object nameField; + + private EventActionSequenceDefinitionEventActionParameterDefinitionModelObjectParameterDefinition[] parametersField; + + private string typeField; + + private byte positionField; + + private string id1Field; + + /// + public byte Id + { + get => this.idField; + set => this.idField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("ModelObjectParameterDefinition", IsNullable = false)] + public EventActionSequenceDefinitionEventActionParameterDefinitionModelObjectParameterDefinition[] Parameters + { + get => this.parametersField; + set => this.parametersField = value; + } + + /// + public string Type + { + get => this.typeField; + set => this.typeField = value; + } + + /// + public byte Position + { + get => this.positionField; + set => this.positionField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} + +/// +[System.SerializableAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] +public partial class EventActionSequenceDefinitionEventActionParameterDefinitionModelObjectParameterDefinition +{ + + private object categoryField; + + private object descriptionField; + + private object displayNameField; + + private object enumTypeField; + + private byte idField; + + private bool isMandatoryField; + + private string nameField; + + private byte orderField; + + private string valueField; + + private string valueTypeField; + + private string id1Field; + + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object Category + { + get => this.categoryField; + set => this.categoryField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object Description + { + get => this.descriptionField; + set => this.descriptionField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object DisplayName + { + get => this.displayNameField; + set => this.displayNameField = value; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object EnumType + { + get => this.enumTypeField; + set => this.enumTypeField = value; + } + + /// + public byte Id + { + get => this.idField; + set => this.idField = value; + } + + /// + public bool IsMandatory + { + get => this.isMandatoryField; + set => this.isMandatoryField = value; + } + + /// + public string Name + { + get => this.nameField; + set => this.nameField = value; + } + + /// + public byte Order + { + get => this.orderField; + set => this.orderField = value; + } + + /// + public string Value + { + get => this.valueField; + set => this.valueField = value; + } + + /// + public string ValueType + { + get => this.valueTypeField; + set => this.valueTypeField = value; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get => this.id1Field; + set => this.id1Field = value; + } +} \ No newline at end of file diff --git a/Adaptation/_Tests/Shared/UnitTesting.cs b/Adaptation/_Tests/Shared/UnitTesting.cs new file mode 100644 index 0000000..161de0c --- /dev/null +++ b/Adaptation/_Tests/Shared/UnitTesting.cs @@ -0,0 +1,90 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Text.Json; +using System.Threading; + +namespace Shared; + +public class UnitTesting +{ + + protected readonly IsEnvironment _IsEnvironment; + + public IsEnvironment IsEnvironment => _IsEnvironment; + + public UnitTesting(TestContext testContext, Type declaringType) + { + if (testContext is null || declaringType is null) + _IsEnvironment = null; + else + { + string projectDirectory = GetProjectDirectory(testContext); + string json = JsonSerializer.Serialize(testContext.Properties); + string vsCodeDirectory = Path.Combine(projectDirectory, ".vscode"); + if (!Directory.Exists(vsCodeDirectory)) + _ = Directory.CreateDirectory(vsCodeDirectory); + string launchText = GetLaunchText(); + File.WriteAllText(Path.Combine(vsCodeDirectory, "launch.json"), launchText); + for (int i = 0; i < int.MaxValue; i++) + { + if (!json.Contains("Debugger.IsAttached") || Debugger.IsAttached) + break; + Thread.Sleep(500); + } + MethodBase methodBase = declaringType.GetMethod(testContext.TestName); + if (methodBase is not null) + { + TestCategoryAttribute testCategoryAttribute = methodBase.GetCustomAttribute(); + if (testCategoryAttribute is not null) + { + foreach (string testCategory in testCategoryAttribute.TestCategories) + _IsEnvironment = new IsEnvironment(testCategory); + } + } + if (_IsEnvironment is null) + _IsEnvironment = new IsEnvironment(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: Debugger.IsAttached, nullASPNetCoreEnvironmentIsProduction: !Debugger.IsAttached); + } + } + + internal static string GetProjectDirectory(TestContext testContext) + { + string result; + string[] checkFiles = null; + result = Path.GetDirectoryName(testContext.DeploymentDirectory); + for (int i = 0; i < int.MaxValue; i++) + { + if (string.IsNullOrEmpty(result)) + break; + checkFiles = Directory.GetFiles(result, "*.Tests.*proj", SearchOption.TopDirectoryOnly); + if (checkFiles.Any()) + break; + result = Path.GetDirectoryName(result); + } + if (string.IsNullOrEmpty(result) || checkFiles is null || !checkFiles.Any()) + throw new Exception(result); + return result; + } + + internal static string GetLaunchText() + { + StringBuilder result = new(); + _ = result. + AppendLine("{"). + AppendLine(" \"configurations\": ["). + AppendLine(" {"). + AppendLine(" \"name\": \".NET Core Attach\","). + AppendLine(" \"type\": \"coreclr\","). + AppendLine(" \"request\": \"attach\","). + AppendLine($" \"processId\": {Environment.ProcessId}"). + AppendLine(" }"). + AppendLine(" ]"). + AppendLine("}"); + return result.ToString(); + } + +} \ No newline at end of file diff --git a/Adaptation/appsettings.Development.json b/Adaptation/appsettings.Development.json new file mode 100644 index 0000000..923c216 --- /dev/null +++ b/Adaptation/appsettings.Development.json @@ -0,0 +1,139 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Debug", + "Microsoft": "Warning", + "Log4netProvider": "Debug", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "Company": "Infineon Technologies Americas Corp.", + "Drives": [ + { + "Use": false, + "Letter": "a", + "Share": "Floppy Disk", + "User": "", + "Password": "" + }, + { + "Use": false, + "Letter": "c", + "Share": "SYSTEM", + "User": "", + "Password": "" + }, + { + "Use": false, + "Letter": "d", + "Share": "DATA", + "User": "", + "Password": "" + }, + { + "Use": true, + "Letter": "g", + "Share": "\\\\10.95.154.12\\testdata", + "User": "10.95.154.12\\Manager", + "Password": "D6QDJ5g6vjqnNyyRbfbj+g==" + }, + { + "Use": false, + "Letter": "h", + "Share": "\\\\10.95.154.13\\COM 5", + "User": "10.95.154.13\\user", + "Password": "tVyC7uPHtScZR8NLInSaxQ==" + }, + { + "Use": true, + "Letter": "i", + "Share": "\\\\messdv002.na.infineon.com\\Candela", + "User": "INFINEON\\MESGaNEAF", + "Password": "tLIPgqM6R9hVQOteRnTHwPqIg3Zxv8CohTjFkjkFz8k=" + }, + { + "Use": false, + "Letter": "j", + "Share": "\\\\messdv002.na.infineon.com\\Characterization", + "User": "INFINEON\\MESGaNEAF", + "Password": "tLIPgqM6R9hVQOteRnTHwPqIg3Zxv8CohTjFkjkFz8k=" + }, + { + "Use": true, + "Letter": "k", + "Share": "\\\\messdv002.na.infineon.com\\GaN_NEC\\Characterization", + "User": "INFINEON\\MESGaNEAF", + "Password": "tLIPgqM6R9hVQOteRnTHwPqIg3Zxv8CohTjFkjkFz8k=" + }, + { + "Use": false, + "Letter": "l", + "Share": "TFS", + "User": "", + "Password": "" + }, + { + "Use": false, + "Letter": "m", + "Share": "\\\\messdv002.na.infineon.com\\MOCVD", + "User": "EC\\ECMESEAF", + "Password": "CUGygiPwahy4U3j+6KqqoMZ08STyVDR1rKm6MwPpt00=" + }, + { + "Use": true, + "Letter": "n", + "Share": "\\\\10.95.154.22\\C", + "User": "10.95.154.22\\Aixtron", + "Password": "DYVBOr2HJdB7KOhd/IFhLA==" + }, + { + "Use": true, + "Letter": "o", + "Share": "\\\\10.95.154.16\\Aixtron", + "User": "10.95.154.16\\Aixtron", + "Password": "DYVBOr2HJdB7KOhd/IFhLA==" + }, + { + "Use": true, + "Letter": "p", + "Share": "\\\\10.95.154.15\\Aixtron", + "User": "10.95.154.15\\Aixtron", + "Password": "DYVBOr2HJdB7KOhd/IFhLA==" + }, + { + "Use": true, + "Letter": "q", + "Share": "\\\\10.95.154.21\\Data", + "User": "10.95.154.21\\XRD04Admin", + "Password": "v1NOsEOCvbnhzKabspPcCQ==" + }, + { + "Use": true, + "Letter": "r", + "Share": "\\\\10.95.154.23\\Data", + "User": "\"10.95.154.23\\infineon us\"", + "Password": "rzXkXdHKetDfsukhZKW0yA==" + }, + { + "Use": true, + "Letter": "s", + "Share": "\\\\messv02ecc1.ec.local\\EC_EAFRepository", + "User": "EC\\ECMESEAF", + "Password": "CUGygiPwahy4U3j+6KqqoMZ08STyVDR1rKm6MwPpt00=" + }, + { + "Use": true, + "Letter": "t", + "Share": "\\\\messv02ecc1.ec.local\\EC_EDA", + "User": "EC\\ECEDASvc", + "Password": "IKsJmRVUH3xlv+RRELRbwoXYKwLvF4Re7k1Rigzpwf4=" + }, + { + "Use": false, + "Letter": "z", + "Share": "DVD Drive", + "User": "", + "Password": "" + } + ] +} \ No newline at end of file diff --git a/Adaptation/appsettings.json b/Adaptation/appsettings.json new file mode 100644 index 0000000..bfeb1ac --- /dev/null +++ b/Adaptation/appsettings.json @@ -0,0 +1,139 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Log4netProvider": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "Company": "Infineon Technologies Americas Corp.", + "Drives": [ + { + "Use": false, + "Letter": "a", + "Share": "Floppy Disk", + "User": "", + "Password": "" + }, + { + "Use": false, + "Letter": "c", + "Share": "SYSTEM", + "User": "", + "Password": "" + }, + { + "Use": false, + "Letter": "d", + "Share": "DATA", + "User": "", + "Password": "" + }, + { + "Use": true, + "Letter": "g", + "Share": "\\\\10.95.154.12\\testdata", + "User": "10.95.154.12\\Manager", + "Password": "D6QDJ5g6vjqnNyyRbfbj+g==" + }, + { + "Use": false, + "Letter": "h", + "Share": "\\\\10.95.154.13\\COM 5", + "User": "10.95.154.13\\user", + "Password": "tVyC7uPHtScZR8NLInSaxQ==" + }, + { + "Use": true, + "Letter": "i", + "Share": "\\\\messdv002.na.infineon.com\\Candela", + "User": "INFINEON\\MESGaNEAF", + "Password": "tLIPgqM6R9hVQOteRnTHwPqIg3Zxv8CohTjFkjkFz8k=" + }, + { + "Use": false, + "Letter": "j", + "Share": "\\\\messdv002.na.infineon.com\\Characterization", + "User": "INFINEON\\MESGaNEAF", + "Password": "tLIPgqM6R9hVQOteRnTHwPqIg3Zxv8CohTjFkjkFz8k=" + }, + { + "Use": true, + "Letter": "k", + "Share": "\\\\messdv002.na.infineon.com\\GaN_NEC\\Characterization", + "User": "INFINEON\\MESGaNEAF", + "Password": "tLIPgqM6R9hVQOteRnTHwPqIg3Zxv8CohTjFkjkFz8k=" + }, + { + "Use": false, + "Letter": "l", + "Share": "TFS", + "User": "", + "Password": "" + }, + { + "Use": false, + "Letter": "m", + "Share": "\\\\messdv002.na.infineon.com\\MOCVD", + "User": "EC\\ECMESEAF", + "Password": "CUGygiPwahy4U3j+6KqqoMZ08STyVDR1rKm6MwPpt00=" + }, + { + "Use": true, + "Letter": "n", + "Share": "\\\\10.95.154.22\\C", + "User": "10.95.154.22\\Aixtron", + "Password": "DYVBOr2HJdB7KOhd/IFhLA==" + }, + { + "Use": true, + "Letter": "o", + "Share": "\\\\10.95.154.16\\Aixtron", + "User": "10.95.154.16\\Aixtron", + "Password": "DYVBOr2HJdB7KOhd/IFhLA==" + }, + { + "Use": true, + "Letter": "p", + "Share": "\\\\10.95.154.15\\Aixtron", + "User": "10.95.154.15\\Aixtron", + "Password": "DYVBOr2HJdB7KOhd/IFhLA==" + }, + { + "Use": true, + "Letter": "q", + "Share": "\\\\10.95.154.21\\Data", + "User": "10.95.154.21\\XRD04Admin", + "Password": "v1NOsEOCvbnhzKabspPcCQ==" + }, + { + "Use": true, + "Letter": "r", + "Share": "\\\\10.95.154.23\\Data", + "User": "\"10.95.154.23\\infineon us\"", + "Password": "rzXkXdHKetDfsukhZKW0yA==" + }, + { + "Use": true, + "Letter": "s", + "Share": "\\\\messv02ecc1.ec.local\\EC_EAFRepository", + "User": "EC\\ECMESEAF", + "Password": "CUGygiPwahy4U3j+6KqqoMZ08STyVDR1rKm6MwPpt00=" + }, + { + "Use": true, + "Letter": "t", + "Share": "\\\\messv02ecc1.ec.local\\EC_EDA", + "User": "EC\\ECEDASvc", + "Password": "IKsJmRVUH3xlv+RRELRbwoXYKwLvF4Re7k1Rigzpwf4=" + }, + { + "Use": false, + "Letter": "z", + "Share": "DVD Drive", + "User": "", + "Password": "" + } + ] +} \ No newline at end of file diff --git a/Adaptation/package.json b/Adaptation/package.json index 8247f48..81d36c3 100644 --- a/Adaptation/package.json +++ b/Adaptation/package.json @@ -1,8 +1,19 @@ { "scripts": { + "Alpha": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "build": "dotnet build --runtime win-x64 --self-contained", - "dotnet-format": "dotnet format --report .vscode --verbosity detailed --severity error", + "dotnet-format": "dotnet format --report .vscode --verbosity detailed --severity warn", "pull": "git pull", - "garbage-collect": "git gc" + "garbage-collect": "git gc", + "AA-CreateSelfDescription.Staging.v2_39_0-SP1_EQPT-Staging__v2_39_0__SP1_EQPT__DownloadRsMFile": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_39_0 & ClassName~SP1_EQPT & Staging__v2_39_0__SP1_EQPT__DownloadRsMFile\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "AT-CreateSelfDescription.Staging.v2_39_0-MET08DDUPSP1TBI": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_39_0 & ClassName~MET08DDUPSP1TBI\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "AX-CreateSelfDescription.Staging.v2_39_0-SP1_EQPT": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_39_0 & ClassName~SP1_EQPT\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "AY-CreateSelfDescription.Staging.v2_39_0-SP1": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_39_0 & ClassName~SP1\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "AZ-CreateSelfDescription.Staging.v2_39_0": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_39_0\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "BA-Extract.Staging.v2_39_0-SP1-Staging__v2_39_0__SP1__RsM643047560320000000__Normal": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.Extract.Staging.v2_39_0 & ClassName~SP1 & Staging__v2_39_0__SP1__RsM643047560320000000__Normal\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "BT-Extract.Staging.v2_39_0-MET08DDUPSP1TBI": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.Extract.Staging.v2_39_0 & ClassName~MET08DDUPSP1TBI\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "BX-Extract.Staging.v2_39_0-SP1_EQPT": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.Extract.Staging.v2_39_0 & ClassName~SP1_EQPT\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "BY-Extract.Staging.v2_39_0-SP1": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.Extract.Staging.v2_39_0 & ClassName~SP1\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")", + "BZ-Extract.Staging.v2_39_0": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~_Tests.Extract.Staging.v2_39_0\" --% -- TestRunParameters.Parameter(name=\\\"Debug\\\", value=\\\"Debugger.IsAttached\\\")" } } \ No newline at end of file diff --git a/FileHandlers/FileRead.cs b/FileHandlers/FileRead.cs index 1439563..4f0720f 100644 --- a/FileHandlers/FileRead.cs +++ b/FileHandlers/FileRead.cs @@ -1,95 +1,350 @@ -using Eaf.Core.Smtp; -using Adaptation.Shared.Metrology; +using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; +using Adaptation.FileHandlers; +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared; +using Adaptation.Shared.Methods; using Eaf.Core; +using Eaf.Core.Smtp; +using Eaf.EquipmentCore.DataCollection.Reporting; +using Eaf.EquipmentCore.SelfDescription.ElementDescription; +using Eaf.EquipmentCore.SelfDescription.EquipmentStructure; +using Eaf.EquipmentCore.SelfDescription.ParameterTypes; using Ifx.Eaf.EquipmentConnector.File.Component.Reader; +using Ifx.Eaf.EquipmentConnector.File.SelfDescription; using log4net; using Shared; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; +using System.Linq; using System.Reflection; using System.Text; using System.Text.Json; -using System.Linq; +using System.Text.Json.Serialization; +using System.Threading; -namespace MET08DDUPSP1TBI.FileHandlers +namespace MET08DDUPSP1TBI.FileHandlers; + +public partial class FileRead : FileReaderHandler, ISMTP { - public partial class FileRead : FileReaderHandler + private readonly ILog _Log; + private IFileRead _FileRead; + private EquipmentEvent _EquipmentEvent; + private readonly bool _UseCyclicalForDescription; + private FilePathGenerator _FilePathGeneratorForError; + private FilePathGenerator _FilePathGeneratorForTarget; + private readonly List _EquipmentParameters; + private static readonly Dictionary> _DummyRuns; + + static FileRead() => _DummyRuns = new Dictionary>(); + + public FileRead() { + if (FileParameter is null) + FileParameter = new Dictionary(); + _FileRead = null; + _UseCyclicalForDescription = false; + _Log = LogManager.GetLogger(typeof(FileRead)); + _EquipmentParameters = new List(); + } - private Adaptation.FileHandlers.FileRead _FileRead; - - public FileRead() + public override void CreateSelfDescription() + { + MethodBase methodBase = new StackFrame().GetMethod(); + _Log.Debug(string.Concat(methodBase.Name, " - Entry")); + try { - _Log = LogManager.GetLogger(typeof(FileRead)); - _FileRead = new Adaptation.FileHandlers.FileRead(); + if (Equipment is null) + throw new Exception(); + CreateSelfDescription(methodBase); + _Log.Debug(string.Concat(methodBase.Name, " - Try - Exit")); } - - public override bool Extract(string reportFullPath, string eventName) + catch (Exception ex) { - MethodBase methodBase = new StackFrame().GetMethod(); - _Log.Debug(string.Concat(methodBase.Name, " - Entry - {", reportFullPath, "}")); - Tuple> extractResults = null; - try + _Log.Error(string.Concat(methodBase.Name, " - Catch - Entry {", ex.Message, "}", Environment.NewLine, Environment.NewLine, ex.StackTrace)); + long breakAfter = DateTime.Now.AddSeconds(30).Ticks; + for (short i = 0; i < short.MaxValue; i++) { - extractResults = _FileRead.GetExtractResult(reportFullPath, eventName); - TriggerEvents(reportFullPath, extractResults); - _FileRead.Move(reportFullPath, extractResults); - FilePathGeneratorInfoMove(reportFullPath, extractResults); - _FileRead.WaitForThread(); - _Log.Debug(string.Concat(methodBase.Name, " - Try - Exit")); - return true; + if (DateTime.Now.Ticks > breakAfter) + break; + Thread.Sleep(500); } - catch (Exception ex) + throw; + } + } + + public override bool Extract(string reportFullPath, string eventName) + { + MethodBase methodBase = new StackFrame().GetMethod(); + _Log.Debug(string.Concat(methodBase.Name, " - Entry - {", reportFullPath, "}")); + Tuple> extractResults = null; + try + { + extractResults = _FileRead.GetExtractResult(reportFullPath, eventName); + TriggerEvents(extractResults); + _FileRead.Move(extractResults); + FilePathGeneratorInfoMove(extractResults); + _FileRead.WaitForThread(); + _Log.Debug(string.Concat(methodBase.Name, " - Try - Exit")); + return true; + } + catch (Exception ex) + { + _Log.Error(string.Concat(methodBase.Name, " - Catch - Entry {", ex.Message, "}", Environment.NewLine, Environment.NewLine, ex.StackTrace)); + _FileRead.Move(extractResults, exception: ex); + FilePathGeneratorInfoMove(extractResults, exception: ex); + return false; + } + } + + private void Send(EmailMessage emailMessage) + { + ISmtp smtp = Backbone.Instance.GetBackboneComponentsOfType().SingleOrDefault(); + if (smtp is not null) + smtp.Send(emailMessage); + } + + void ISMTP.SendLowPriorityEmailMessage(string subject, string body) + { + EmailMessage emailMessage = new(subject, body, MailPriority.Low); + Send(emailMessage); + } + + void ISMTP.SendHighPriorityEmailMessage(string subject, string body) + { + EmailMessage emailMessage = new(subject, body, MailPriority.High); + Send(emailMessage); + } + + void ISMTP.SendNormalPriorityEmailMessage(string subject, string body) + { + EmailMessage emailMessage = new(subject, body, MailPriority.Normal); + Send(emailMessage); + } + + private void AddParameterRangeAndEvent() + { + string description; + bool allowNull = false; + EquipmentParameter equipmentParameter; + JsonProperty[] jsonProperties = _FileRead.GetDefault(); + Dictionary keyValuePairs = _FileRead.GetDisplayNamesJsonElement(); + Dictionary parameterTypeDefinitions = new(); + FileConnectorParameterTypeDefinitionProvider fileConnectorParameterTypeDefinitionProvider = new(); + foreach (ParameterTypeDefinition parameterTypeDefinition in fileConnectorParameterTypeDefinitionProvider.GetAllParameterTypeDefinition()) + { + switch (parameterTypeDefinition.Name) { - _Log.Error(string.Concat(methodBase.Name, " - Catch - Entry {", ex.Message, "}", Environment.NewLine, Environment.NewLine, ex.StackTrace)); - _FileRead.Move(reportFullPath, extractResults, exception: ex); - FilePathGeneratorInfoMove(reportFullPath, extractResults, exception: ex); - return false; + case nameof(String): + parameterTypeDefinitions.Add(JsonValueKind.String, parameterTypeDefinition); + break; + case nameof(Double): + parameterTypeDefinitions.Add(JsonValueKind.Number, parameterTypeDefinition); + break; + case nameof(Boolean): + parameterTypeDefinitions.Add(JsonValueKind.True, parameterTypeDefinition); + parameterTypeDefinitions.Add(JsonValueKind.False, parameterTypeDefinition); + break; + default: + break; } } - - public Tuple> ReExtract(string searchDirectory, string sourceFileFilter) + foreach (JsonProperty jsonProperty in jsonProperties) { - Tuple> results = _FileRead.ReExtract(searchDirectory, sourceFileFilter); - if (!(results?.Item2 is null)) + if (jsonProperty.Value.ValueKind == JsonValueKind.Object && !parameterTypeDefinitions.ContainsKey(JsonValueKind.Object)) { - TriggerEvents(_FileRead.Logistics.ReportFullPath, results); - _FileRead.Move(_FileRead.Logistics.ReportFullPath, results); - FilePathGeneratorInfoMove(_FileRead.Logistics.ReportFullPath, results); + StructuredType structuredType = new(nameof(StructuredType), string.Empty, new List()); + parameterTypeDefinitions.Add(JsonValueKind.Object, structuredType); + Equipment.SelfDescriptionBuilder.AddParameterTypeDefinition(structuredType); } - return results; + if (!parameterTypeDefinitions.ContainsKey(jsonProperty.Value.ValueKind)) + throw new Exception(string.Concat('{', jsonProperty.Value.ValueKind, "} is not mapped!")); } - - private void FilePathGeneratorInfoMove(string reportFullPath, Tuple> extractResults, Exception exception = null) + foreach (JsonProperty jsonProperty in jsonProperties) { - bool isErrorFile = !(exception is null); - object filePathGeneratorInfo = GetFilePathGeneratorInfo(reportFullPath, isErrorFile); - Tuple tuple = _FileRead.GetOpenInsightTuple(); - if (filePathGeneratorInfo is null || !(filePathGeneratorInfo is FilePathGeneratorInfo filePathGenerator)) - OISiViewer.WebClientDownloadString(tuple.Item1, tuple.Item2, reportFullPath, isErrorFile, string.Empty); + if (jsonProperty.Value.ValueKind == JsonValueKind.Null && !allowNull) + throw new Exception(); + if (jsonProperty.Value.ValueKind != JsonValueKind.String || !keyValuePairs.ContainsKey(jsonProperty.Name)) + description = string.Empty; + else + description = keyValuePairs[jsonProperty.Name].Split('|')[0]; + equipmentParameter = new EquipmentParameter(jsonProperty.Name, parameterTypeDefinitions[jsonProperty.Value.ValueKind], description); + _EquipmentParameters.Add(equipmentParameter); + } + _ = Equipment.SelfDescriptionBuilder.RootEquipmentElementBuilder.AddParameterRange(_EquipmentParameters); + _EquipmentEvent = new EquipmentEvent(_FileRead.EventName, _FileRead.GetEventDescription(), _EquipmentParameters); + _ = Equipment.SelfDescriptionBuilder.RootEquipmentElementBuilder.AddEvent(_EquipmentEvent); + } + + private void CreateSelfDescription(MethodBase methodBase) + { + string cellInstanceName; + string equipmentTypeName = string.Empty; + string equipmentDictionaryName = string.Empty; + EquipmentElement equipmentElement = Equipment.SelfDescriptionBuilder.RootEquipmentElementBuilder.Item; + if (Backbone.Instance?.CellName is null) + cellInstanceName = string.Empty; + else + cellInstanceName = Backbone.Instance.CellName; + string cellInstanceConnectionName = equipmentElement.Name; + FileConnectorConfiguration fileConnectorConfiguration = Mapper.Map(Configuration); + string parameterizedModelObjectDefinitionType = methodBase.DeclaringType.FullName; + IList modelObjectParameters = Mapper.Map(ConfiguredParameters); + _FileRead = CellInstanceConnectionName.Get(this, FileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, _DummyRuns, _UseCyclicalForDescription, isEAFHosted: true); + if (_FileRead.IsEvent) + AddParameterRangeAndEvent(); + } + + private object GetFilePathGeneratorInfo(string reportFullPath, bool isErrorFile) + { + FilePathGeneratorInfo result; + FilePathGenerator filePathGeneratorOriginal; + if (Configuration is null) + result = null; + else + { + if (isErrorFile) + { + if (_FilePathGeneratorForError is null) + _FilePathGeneratorForError = new FilePathGenerator(Configuration, reportFullPath, isErrorFile: true); + filePathGeneratorOriginal = _FilePathGeneratorForError; + } else { - OISiViewer.WebClientDownloadString(tuple.Item1, tuple.Item2, reportFullPath, isErrorFile, filePathGenerator.To); - string[] exceptionLines = _FileRead.Shared1124(reportFullPath, extractResults, filePathGenerator.To, filePathGenerator.From, filePathGenerator.ResolvedFileLocation, exception); - if (isErrorFile) + if (_FilePathGeneratorForTarget is null) + _FilePathGeneratorForTarget = new FilePathGenerator(Configuration, reportFullPath, isErrorFile: false); + filePathGeneratorOriginal = _FilePathGeneratorForTarget; + } + result = new FilePathGeneratorInfo(filePathGeneratorOriginal, reportFullPath, isErrorFile, FileParameter); + } + return result; + } + + private void FilePathGeneratorInfoMove(Tuple> extractResults, Exception exception = null) + { + bool isErrorFile = exception is not null; + object filePathGeneratorInfo = GetFilePathGeneratorInfo(_FileRead.ReportFullPath, isErrorFile); + if (filePathGeneratorInfo is not null and FilePathGeneratorInfo filePathGenerator) + { + string[] exceptionLines = _FileRead.Move(extractResults, filePathGenerator.To, filePathGenerator.From, filePathGenerator.ResolvedFileLocation, exception); + if (isErrorFile) + { + try { - try - { - StringBuilder stringBuilder = new StringBuilder(); - foreach (string item in exceptionLines) - stringBuilder.Append("<").Append(item).AppendLine(">"); - ISmtp smtp = Backbone.Instance.GetBackboneComponentsOfType().SingleOrDefault(); - EmailMessage emailMessage = new EmailMessage(string.Concat("Exception:", _ConfigDataBase.EquipmentElementName, _ConfigDataBase.FileConnectorConfiguration?.SourceDirectoryCloaking), stringBuilder.ToString(), MailPriority.High); - smtp.Send(emailMessage); - } - catch (Exception) { } + StringBuilder stringBuilder = new(); + foreach (string item in exceptionLines) + _ = stringBuilder.Append("<").Append(item).AppendLine(">"); + ISmtp smtp = Backbone.Instance.GetBackboneComponentsOfType().SingleOrDefault(); + EmailMessage emailMessage = new(_FileRead.ExceptionSubject, stringBuilder.ToString(), MailPriority.High); + smtp.Send(emailMessage); } + catch (Exception) { } } } + } + private List GetParameterValues(List headerNames, JsonElement[] jsonElements, int i) + { + List results = new(); + if (_UseCyclicalForDescription && i > 0) + throw new Exception(); + object value; + List list; + JsonProperty[] jsonProperties = jsonElements[i].EnumerateObject().ToArray(); + if (jsonProperties.Length != _EquipmentParameters.Count) + throw new Exception(); + for (int p = 0; p < jsonProperties.Length; p++) + { + if (!_UseCyclicalForDescription || headerNames.Contains(jsonProperties[p].Name)) + value = jsonProperties[p].Value.ToString(); + else + { + list = new List(); + for (int z = 0; z < jsonElements.Length; z++) + list.Add(new object[] { z, jsonElements[z].GetProperty(jsonProperties[p].Name).ToString() }); + value = list; + } + results.Add(new ParameterValue(_EquipmentParameters[p], value, DateTime.Now)); + } + return results; + } + + private void TriggerEvents(Tuple> extractResults) + { + List headerNames; + List parameters; + if (!_UseCyclicalForDescription) + headerNames = null; + else + headerNames = _FileRead.GetHeaderNames(); + for (int i = 0; i < extractResults.Item3.Length; i++) + { + if (_EquipmentEvent is not null) + { + _Log.Debug(string.Concat("TriggerEvent - {", _FileRead.ReportFullPath, "} ", i, " of ", extractResults.Item3.Length)); + parameters = GetParameterValues(headerNames, extractResults.Item3, i); + if (_EquipmentEvent is not null) + Equipment.DataCollection.TriggerEvent(_EquipmentEvent, parameters); + if (_UseCyclicalForDescription) + break; + } + } + } + + public Tuple> ReExtract(string json) + { + Tuple> results; + string cellInstanceName; + if (!json.Contains(nameof(cellInstanceName))) + throw new Exception(); + string equipmentTypeName; + if (!json.Contains(nameof(equipmentTypeName))) + throw new Exception(); + string equipmentDictionaryName; + if (!json.Contains(nameof(equipmentDictionaryName))) + throw new Exception(); + string cellInstanceConnectionName; + if (!json.Contains(nameof(cellInstanceConnectionName))) + throw new Exception(); + if (!json.Contains(nameof(FileConnectorConfiguration))) + throw new Exception(); + if (!json.Contains(nameof(IList))) + throw new Exception(); + string parameterizedModelObjectDefinitionType; + if (!json.Contains(nameof(parameterizedModelObjectDefinitionType))) + throw new Exception(); + Dictionary> dummyRuns = new(); + Dictionary fileParameter = new(); + MethodBase methodBase = new StackFrame().GetMethod(); + JsonElement jsonElement = JsonSerializer.Deserialize(json); + cellInstanceName = jsonElement.GetProperty(nameof(cellInstanceName)).ToString(); + equipmentTypeName = jsonElement.GetProperty(nameof(equipmentTypeName)).ToString(); + equipmentDictionaryName = jsonElement.GetProperty(nameof(equipmentDictionaryName)).ToString(); + cellInstanceConnectionName = jsonElement.GetProperty(nameof(cellInstanceConnectionName)).ToString(); + JsonElement fileConnectorConfigurationJsonElement = jsonElement.GetProperty(nameof(FileConnectorConfiguration)); + parameterizedModelObjectDefinitionType = jsonElement.GetProperty(nameof(parameterizedModelObjectDefinitionType)).ToString(); + if (fileConnectorConfigurationJsonElement.ValueKind != JsonValueKind.Object) + throw new Exception(); + JsonSerializerOptions jsonSerializerOptions = new() { Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase) } }; + FileConnectorConfiguration fileConnectorConfiguration = JsonSerializer.Deserialize(fileConnectorConfigurationJsonElement.ToString(), jsonSerializerOptions); + JsonElement modelObjectParameterDefinitionJsonElement = jsonElement.GetProperty(nameof(IList)); + if (modelObjectParameterDefinitionJsonElement.ValueKind != JsonValueKind.Array) + throw new Exception(); + IList modelObjectParameters = JsonSerializer.Deserialize>(modelObjectParameterDefinitionJsonElement.ToString(), jsonSerializerOptions); + _FileRead = CellInstanceConnectionName.Get(this, FileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, _DummyRuns, _UseCyclicalForDescription, isEAFHosted: false); + results = _FileRead.ReExtract(); + if (results?.Item2 is null) + throw new Exception(); + else + { + TriggerEvents(results); + _FileRead.Move(results); + FilePathGeneratorInfoMove(results); + } + return results; } } +// 2022-02-15 -> FileRead \ No newline at end of file diff --git a/FileHandlers/FileReadShared.cs b/FileHandlers/FileReadShared.cs deleted file mode 100644 index 12ae48d..0000000 --- a/FileHandlers/FileReadShared.cs +++ /dev/null @@ -1,249 +0,0 @@ -using Adaptation.Shared.Metrology; -using Eaf.Core; -using Eaf.EquipmentCore.DataCollection.Reporting; -using Eaf.EquipmentCore.SelfDescription.ElementDescription; -using Eaf.EquipmentCore.SelfDescription.EquipmentStructure; -using Eaf.Management.ConfigurationData.CellAutomation; -using Ifx.Eaf.EquipmentConnector.File.Configuration; -using log4net; -using Shared; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text.Json; -using System.Threading; - -namespace MET08DDUPSP1TBI.FileHandlers -{ - - public partial class FileRead - { - -#pragma warning disable CS0169 - private readonly ILog _Log; - private Description _Description; - private ConfigDataBase _ConfigDataBase; - private EquipmentEvent _EquipmentEvent; - private FilePathGenerator _FilePathGeneratorForError; - private FilePathGenerator _FilePathGeneratorForTarget; -#pragma warning restore CS0169 - - public override void CreateSelfDescription() - { - MethodBase methodBase = new StackFrame().GetMethod(); - _Log.Debug(string.Concat(methodBase.Name, " - Entry")); - try - { - if (Equipment is null) - throw new Exception(); - string cellInstanceName; - if (Backbone.Instance?.CellName is null) - cellInstanceName = string.Empty; - else - cellInstanceName = Backbone.Instance.CellName; - if (cellInstanceName.Contains("-IO")) - cellInstanceName = cellInstanceName.Replace("-IO", string.Empty); - EquipmentElement equipmentElement = Equipment.SelfDescriptionBuilder.RootEquipmentElementBuilder.Item; - Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration fileConnectorConfiguration = Map(Configuration); - IList modelObjectParameterDefinitions = Map(ConfiguredParameters); - _ConfigDataBase = _FileRead.GetConfigDataBase(methodBase, cellInstanceName, equipmentElement.Name, fileConnectorConfiguration, modelObjectParameterDefinitions, eafHosted: !(Equipment is null)); - if (Configuration.SourceFileLocation != _ConfigDataBase.FileConnectorConfiguration.SourceFileLocation) - Configuration.SourceFileLocation = _ConfigDataBase.FileConnectorConfiguration.SourceFileLocation; - _Description = new Description(_FileRead, _ConfigDataBase, Equipment); - _FileRead.Shared0749(); - if (FileParameter is null) - FileParameter = new Dictionary(); - _FileRead.Shared1301(FileParameter, fileConnectorConfiguration); - if (!(Equipment is null) && _ConfigDataBase.IsEvent) - { - if (_Description.ParameterTypeDefinitions.Any()) - { - foreach (Eaf.EquipmentCore.SelfDescription.ParameterTypes.ParameterTypeDefinition item in _Description.ParameterTypeDefinitions) - { - Equipment.SelfDescriptionBuilder.AddParameterTypeDefinition(item); - } - } - Equipment.SelfDescriptionBuilder.RootEquipmentElementBuilder.AddParameterRange(_Description.EquipmentParameters); - _EquipmentEvent = new EquipmentEvent(_ConfigDataBase.GetEventName(), _ConfigDataBase.GetEventDescription(), _Description.EquipmentParameters); - Equipment.SelfDescriptionBuilder.RootEquipmentElementBuilder.AddEvent(_EquipmentEvent); - } - _Log.Debug(string.Concat(methodBase.Name, " - Try - Exit")); - } - catch (Exception ex) - { - _Log.Error(string.Concat(methodBase.Name, " - Catch - Entry {", ex.Message, "}", Environment.NewLine, Environment.NewLine, ex.StackTrace)); - long breakAfter = DateTime.Now.AddSeconds(30).Ticks; - for (short i = 0; i < short.MaxValue; i++) - { - if (DateTime.Now.Ticks > breakAfter) - break; - Thread.Sleep(500); - } - throw; - } - } - - public object GetFilePathGeneratorInfo(string reportFullPath, bool isErrorFile) - { - FilePathGeneratorInfo result; - FilePathGenerator filePathGeneratorOriginal; - if (Configuration is null) - result = null; - else - { - if (isErrorFile) - { - if (_FilePathGeneratorForError is null) - _FilePathGeneratorForError = new FilePathGenerator(Configuration, reportFullPath, isErrorFile: true); - filePathGeneratorOriginal = _FilePathGeneratorForError; - } - else - { - if (_FilePathGeneratorForTarget is null) - _FilePathGeneratorForTarget = new FilePathGenerator(Configuration, reportFullPath, isErrorFile: false); - filePathGeneratorOriginal = _FilePathGeneratorForTarget; - } - result = new FilePathGeneratorInfo(filePathGeneratorOriginal, reportFullPath, isErrorFile, FileParameter); - } - return result; - } - - private Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration Map(FileConnectorConfiguration configuration) - { - Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration result = new Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration - { - AlternateTargetFolder = configuration.AlternateTargetFolder, - ConnectionRetryInterval = configuration.ConnectionRetryInterval, - ConnectionSettings = new List(), - CopySourceFolderStructure = configuration.CopySourceFolderStructure, - DefaultPlaceHolderValue = configuration.DefaultPlaceHolderValue, - //DeleteAbandonedEmptySourceSubFolders = configuration.DeleteAbandonedEmptySourceSubFolders, - DeleteEmptySourceSubFolders = configuration.DeleteEmptySourceSubFolders, - ErrorPostProcessingMode = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.PostProcessingModeEnum)configuration.ErrorPostProcessingMode, - ErrorTargetFileLocation = configuration.ErrorTargetFileLocation, - ErrorTargetFileName = configuration.ErrorTargetFileName, - FileAgeFilterMode = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.FileAgeFilterEnum)configuration.FileAgeFilterMode, - FileAgeThreshold = configuration.FileAgeThreshold, - //FileHandlers = configuration.FileHandlers, - FileHandleTimeout = (long)configuration.FileHandleTimeout, - FileHandleWaitTime = configuration.FileHandleWaitTime, - FileScanningIntervalInSeconds = configuration.FileScanningIntervalInSeconds, - FileScanningOption = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.FileScanningOptionEnum)configuration.FileScanningOption, - FolderAgeCheckIndividualSubFolders = configuration.FolderAgeCheckIndividualSubFolders, - FolderAgeThreshold = configuration.FolderAgeThreshold, - //FolderOperationsSubFolderLevel = configuration.FolderOperationsSubFolderLevel, - IdleEventWaitTimeInSeconds = (long)configuration.IdleEventWaitTimeInSeconds, - IfFileExistAction = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.IfFileExistEnum)configuration.IfFileExistAction, - IfPostProcessingFailsAction = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.IfPostProcessingFailsEnum)configuration.IfPostProcessingFailsAction, - IncludeSubDirectories = configuration.IncludeSubDirectories, - PostProcessingRetries = configuration.PostProcessingRetries, - PreProcessingMode = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.PreProcessingModeEnum)configuration.PreProcessingMode, - PostProcessingMode = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.PostProcessingModeEnum)configuration.PostProcessingMode, - SourceDirectoryCloaking = configuration.SourceDirectoryCloaking, - SourceFileFilter = configuration.SourceFileFilter, - SourceFileFilters = configuration.SourceFileFilters, - SourceFileLocation = configuration.SourceFileLocation, - TargetFileLocation = configuration.TargetFileLocation, - TargetFileName = configuration.TargetFileName, - TriggerOnChanged = configuration.TriggerOnChanged, - TriggerOnCreated = configuration.TriggerOnCreated, - UseZip64Mode = configuration.UseZip64Mode, - ZipErrorTargetFileName = configuration.ZipErrorTargetFileName, - ZipFileAmount = configuration.ZipFileAmount, - ZipFileSubFolderLevel = configuration.ZipFileSubFolderLevel, - ZipFileTime = configuration.ZipFileTime, - ZipMode = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.ZipModeEnum)configuration.ZipMode, - ZipTargetFileName = configuration.ZipTargetFileName, - }; - foreach (Ifx.Eaf.Common.Configuration.ConnectionSetting connectionSetting in configuration.ConnectionSettings) - result.ConnectionSettings.Add(new Adaptation.Ifx.Eaf.Common.Configuration.ConnectionSetting(connectionSetting.Name, connectionSetting.Value)); - return result; - } - - private IList Map(IList configuredParameters) - { - List results = new List(); - Adaptation.Eaf.Management.ConfigurationData.CellAutomation.ModelObjectParameterType modelObjectParameterType; - for (int i = 0; i < configuredParameters.Count; i++) - { - modelObjectParameterType = (Adaptation.Eaf.Management.ConfigurationData.CellAutomation.ModelObjectParameterType)configuredParameters[i].ValueType; - results.Add(new Adaptation.Eaf.Management.ConfigurationData.CellAutomation.ModelObjectParameterDefinition() { Id = i, Name = configuredParameters[i].Name, Value = configuredParameters[i].Value, ValueType = modelObjectParameterType, EnumType = modelObjectParameterType.ToString() }); - } - return results; - } - - public ConfigDataBase ReflectionCreateSelfDescriptionV2(string json) - { - ConfigDataBase result = _FileRead.ReflectionCreateSelfDescriptionV2(json); - _ConfigDataBase = result; - _Description = new Description(_FileRead, result, Equipment); - return result; - } - - private void TriggerEvents(string reportFullPath, Tuple> extractResults) - { - List parameters; - int count = extractResults.Item2.Value.GetArrayLength(); - for (int i = 0; i < count; i++) - { - _Log.Debug(string.Concat("TriggerEvent - {", reportFullPath, "} ", i, " of ", count)); - parameters = _Description.GetParameterValues(_FileRead, Equipment, extractResults.Item2.Value, i); - if (!(_EquipmentEvent is null)) - Equipment.DataCollection.TriggerEvent(_EquipmentEvent, parameters); - if (_ConfigDataBase.UseCyclicalForDescription) - break; - } - if (_ConfigDataBase.IsDatabaseExportToIPDSF && count > 0) - { - _Log.Debug(string.Concat("TriggerEvent - {", reportFullPath, "} ", null, " of ", count)); - parameters = _Description.GetParameterValues(_FileRead, Equipment, extractResults.Item2.Value, null); - if (!(_EquipmentEvent is null)) - Equipment.DataCollection.TriggerEvent(_EquipmentEvent, parameters); - } - } - - private void TriggerEvents(string reportFullPath, Tuple> extractResults, Dictionary eventDataList, int count) - { - const string DATA_LIST_KEY = "DataList"; - const int RESULT_CODE_SUCCESS = 0; - const string RESULT_CODE_KEY = "ReturnCode"; - const string RESULT_EMAIL_FAILURE_TYPE = "ReturnEmailFailureType"; - const string RESULT_EMAIL_FAILURE_NONE = "EmailFailureNone"; - const string RESULT_TEXT_KEY = "ReturnText"; - List parameters; - for (int i = 0; i < count; i++) - { - _Log.Debug(string.Concat("TriggerEvent - {", reportFullPath, "} ", i, " of ", count)); - //parameters = _Description.GetParameterValues(this, Equipment, extractResults.Item2, count, i); - // add the final results fields to the data dictionary - Dictionary finalDictionary = new Dictionary - { - [RESULT_CODE_KEY] = RESULT_CODE_SUCCESS, - [RESULT_TEXT_KEY] = "success", - [RESULT_EMAIL_FAILURE_TYPE] = RESULT_EMAIL_FAILURE_NONE, - [DATA_LIST_KEY] = eventDataList - }; - // trigger File Read event - //Equipment.DataCollection.TriggerEvent(mFileReadEvent, new List() { new ParameterValue(mMyParameter, finalDictionary) }); - // - parameters = _Description.GetParameterValues(_FileRead, Equipment, extractResults.Item2.Value, i, keyValuePairs: finalDictionary); - if (!(_EquipmentEvent is null)) - Equipment.DataCollection.TriggerEvent(_EquipmentEvent, parameters); - if (_ConfigDataBase.UseCyclicalForDescription) - break; - } - if (_ConfigDataBase.IsDatabaseExportToIPDSF && count > 0) - { - _Log.Debug(string.Concat("TriggerEvent - {", reportFullPath, "} ", null, " of ", count)); - parameters = _Description.GetParameterValues(_FileRead, Equipment, extractResults.Item2.Value, null); - if (!(_EquipmentEvent is null)) - Equipment.DataCollection.TriggerEvent(_EquipmentEvent, parameters); - } - } - - } - -} \ No newline at end of file diff --git a/MET08DDUPSP1TBI.csproj b/MET08DDUPSP1TBI.csproj index e89068b..20a263b 100644 --- a/MET08DDUPSP1TBI.csproj +++ b/MET08DDUPSP1TBI.csproj @@ -93,8 +93,26 @@ + + + - + + + + + + + + + + + + + + + + @@ -105,27 +123,28 @@ - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - @@ -133,21 +152,14 @@ - - - - - - - - + @@ -157,10 +169,6 @@ 5.0.1 - - - - - + \ No newline at end of file diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 49b21d0..e1c8110 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.36.0.0")] -[assembly: AssemblyFileVersion("2.36.0.0")] +[assembly: AssemblyVersion("2.39.0.0")] +[assembly: AssemblyFileVersion("2.39.0.0")] diff --git a/Shared/Description.cs b/Shared/Description.cs deleted file mode 100644 index 839cfbb..0000000 --- a/Shared/Description.cs +++ /dev/null @@ -1,182 +0,0 @@ -using Adaptation.Shared.Metrology; -using Eaf.Core; -using Eaf.EquipmentCore.Control; -using Eaf.EquipmentCore.DataCollection.Reporting; -using Eaf.EquipmentCore.SelfDescription.ElementDescription; -using Eaf.EquipmentCore.SelfDescription.ParameterTypes; -using Ifx.Eaf.EquipmentConnector.File.SelfDescription; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text.Json; - -namespace Shared -{ - - public class Description - { - - public enum RowColumn - { - Test = 1000, - Count, - Index - } - - public enum LogisticsColumn - { - EventName = 2000, - NullData, - JobID, - Sequence, - MesEntity, - ReportFullPath, - ProcessJobID, - MID - } - - public enum Param - { - String = 0, - Integer = 2, - Double = 3, - Boolean = 4, - StructuredType = 5 - } - - internal const string FileFound = "FileFound"; - - - public List EquipmentParameters { get; private set; } - public List ParameterTypeDefinitions { get; private set; } - - private readonly bool _UseCyclical; - private readonly List _HeaderNames; - private readonly Dictionary _KeyIndexPairs; - private readonly ParameterTypeDefinition _StructuredType; - private readonly FileConnectorParameterTypeDefinitionProvider _FileConnectorParameterTypeDefinitionProvider; - - public Description(ILogic logic, ConfigDataBase configDataBase, IEquipmentControl equipmentControl) - { - _KeyIndexPairs = new Dictionary(); - _HeaderNames = configDataBase.GetHeaderNames(logic); - _UseCyclical = configDataBase.UseCyclicalForDescription; - _StructuredType = new StructuredType(nameof(StructuredType), string.Empty, new List()); - _FileConnectorParameterTypeDefinitionProvider = new FileConnectorParameterTypeDefinitionProvider(); - EquipmentParameters = new List(); - ParameterTypeDefinitions = new List { _StructuredType }; - Dictionary>> keyValuePairsCollection = configDataBase.GetParameterInfo(logic, allowNull: false); - List results = GetParameterValues(equipmentControl, keyValuePairsCollection); - } - - private List GetParameterValues(IEquipmentControl equipmentControl, Dictionary>> keyValuePairsCollection) - { - List results = new List(); - Enum param; - object value; - Enum[] @params; - string description; - List list; - EquipmentParameter equipmentParameter; - ParameterTypeDefinition parameterTypeDefinition; - bool addToEquipmentParameters = !EquipmentParameters.Any(); - foreach (KeyValuePair>> keyValuePair in keyValuePairsCollection) - { - if (!addToEquipmentParameters && !_KeyIndexPairs.ContainsKey(keyValuePair.Key)) - continue; - @params = (from l in keyValuePair.Value select l.Item1).Distinct().ToArray(); - if (@params.Length != 1) - throw new Exception(); - if (keyValuePair.Value[0].Item2 != keyValuePair.Key) - throw new Exception(); - param = @params[0]; - if (!addToEquipmentParameters) - equipmentParameter = EquipmentParameters[_KeyIndexPairs[keyValuePair.Key]]; - else - { - description = keyValuePair.Value[0].Item3; - _KeyIndexPairs.Add(keyValuePair.Key, EquipmentParameters.Count()); - if (param is Param.StructuredType || (_UseCyclical && !_HeaderNames.Contains(keyValuePair.Key))) - parameterTypeDefinition = _StructuredType; - else - parameterTypeDefinition = _FileConnectorParameterTypeDefinitionProvider.GetParameterTypeDefinition(param.ToString()); - equipmentParameter = new EquipmentParameter(keyValuePair.Key, parameterTypeDefinition, description); - EquipmentParameters.Add(equipmentParameter); - } - if (!_UseCyclical || _HeaderNames.Contains(keyValuePair.Key)) - value = keyValuePair.Value[0].Item4; - else - { - list = new List(); - for (int i = 0; i < keyValuePair.Value.Count; i++) - list.Add(new object[] { i, keyValuePair.Value[i].Item4 }); - value = list; - } - if (equipmentControl is null || !(param is Param.StructuredType)) - results.Add(new ParameterValue(equipmentParameter, value, DateTime.Now)); - else - results.Add(equipmentControl.DataCollection.CreateParameterValue(equipmentParameter, value)); - } - return results; - } - - public List GetParameterValues(ILogic logic, IEquipmentControl equipmentControl, JsonElement jsonElement, int? i = null, Dictionary keyValuePairs = null) - { - List results = new List(); - if (_UseCyclical && (i is null || i.Value > 0)) - throw new Exception(); - if (jsonElement.ValueKind != JsonValueKind.Array) - throw new Exception(); - Enum param; - Tuple tuple; - JsonElement[] jsonElements = jsonElement.EnumerateArray().ToArray(); - Dictionary>> keyValuePairsCollection = new Dictionary>>(); - for (int r = i.Value; r < jsonElements.Length; r++) - { - foreach (JsonProperty jsonProperty in jsonElement[r].EnumerateObject()) - { - if (jsonProperty.Value.ValueKind == JsonValueKind.Object || jsonProperty.Value.ValueKind == JsonValueKind.Array) - { - param = Param.StructuredType; - //jValue = jObject.Value("Item1"); - throw new NotImplementedException("Item1"); - } - else - { - switch (jsonProperty.Value.ValueKind) - { - case JsonValueKind.String: param = Param.String; break; - case JsonValueKind.Number: param = Param.Double; break; - case JsonValueKind.True: - case JsonValueKind.False: param = Param.Boolean; break; - case JsonValueKind.Null: param = Param.String; break; - default: param = Param.StructuredType; break; - } - } - tuple = new Tuple(param, jsonProperty.Name, string.Empty, jsonProperty.Value.ToString()); - if (!keyValuePairsCollection.ContainsKey(jsonProperty.Name)) - keyValuePairsCollection.Add(jsonProperty.Name, new List>()); - keyValuePairsCollection[jsonProperty.Name].Add(tuple); - } - if (!_UseCyclical) - break; - } - results = GetParameterValues(equipmentControl, keyValuePairsCollection); - return results; - } - - public static string GetCellName() - { - string result; - if (Backbone.Instance?.CellName is null) - result = string.Empty; - else - result = Backbone.Instance.CellName; - if (result.Contains("-IO")) - result = result.Replace("-IO", string.Empty); - return result; - } - - } - -} diff --git a/Shared/FilePathGenerator.cs b/Shared/FilePathGenerator.cs index 0a441f6..da97777 100644 --- a/Shared/FilePathGenerator.cs +++ b/Shared/FilePathGenerator.cs @@ -1,35 +1,20 @@ -using Ifx.Eaf.EquipmentConnector.File.Component; -using Ifx.Eaf.EquipmentConnector.File.Configuration; using System.Collections.Generic; +using Ifx.Eaf.EquipmentConnector.File.Component; +using Ifx.Eaf.EquipmentConnector.File.Configuration; -namespace Shared +namespace Shared; + +public class FilePathGenerator : Ifx.Eaf.EquipmentConnector.File.Component.FilePathGenerator { - public class FilePathGenerator : Ifx.Eaf.EquipmentConnector.File.Component.FilePathGenerator - { + public FileConnectorConfiguration FileConnectorConfiguration { get; private set; } - public FileConnectorConfiguration FileConnectorConfiguration { get; private set; } + public FilePathGenerator(FileConnectorConfiguration config, Dictionary customPattern = null) : base(config, customPattern) => FileConnectorConfiguration = config; - public FilePathGenerator(FileConnectorConfiguration config, Dictionary customPattern = null) : base(config, customPattern) - { - FileConnectorConfiguration = config; - } + public FilePathGenerator(FileConnectorConfiguration config, File file, bool isErrorFile = false, Dictionary customPattern = null) : base(config, file, isErrorFile, customPattern) => FileConnectorConfiguration = config; - public FilePathGenerator(FileConnectorConfiguration config, File file, bool isErrorFile = false, Dictionary customPattern = null) : base(config, file, isErrorFile, customPattern) - { - FileConnectorConfiguration = config; - } + public FilePathGenerator(FileConnectorConfiguration config, string sourceFilePath, bool isErrorFile = false, Dictionary customPattern = null) : base(config, sourceFilePath, isErrorFile, customPattern) => FileConnectorConfiguration = config; - public FilePathGenerator(FileConnectorConfiguration config, string sourceFilePath, bool isErrorFile = false, Dictionary customPattern = null) : base(config, sourceFilePath, isErrorFile, customPattern) - { - FileConnectorConfiguration = config; - } - - public string GetSubFolderPath() - { - return SubFolderPath; - } - - } + public string GetSubFolderPath() => SubFolderPath; } diff --git a/Shared/FilePathGeneratorInfo.cs b/Shared/FilePathGeneratorInfo.cs index e44626b..8d5e287 100644 --- a/Shared/FilePathGeneratorInfo.cs +++ b/Shared/FilePathGeneratorInfo.cs @@ -1,67 +1,63 @@ -using System.IO; +using System.IO; -namespace Shared +namespace Shared; + +public class FilePathGeneratorInfo { - public class FilePathGeneratorInfo + public string To { get; protected set; } + public string From { get; protected set; } + public bool IsErrorFile { get; protected set; } + public string SubFolderPath { get; protected set; } + public string FirstDirectory { get; protected set; } + public string ReportFullPath { get; protected set; } + public string ResolvedFileLocation { get; protected set; } + + public FilePathGeneratorInfo(object originalFilePathGenerator, string reportFullPath, bool isErrorFile, System.Collections.Generic.Dictionary fileParameter) { - - public string To { get; protected set; } - public string From { get; protected set; } - public bool IsErrorFile { get; protected set; } - public string SubFolderPath { get; protected set; } - public string FirstDirectory { get; protected set; } - public string ReportFullPath { get; protected set; } - public string ResolvedFileLocation { get; protected set; } - - public FilePathGeneratorInfo(object originalFilePathGenerator, string reportFullPath, bool isErrorFile, System.Collections.Generic.Dictionary fileParameter) + ReportFullPath = reportFullPath; + IsErrorFile = isErrorFile; + if (originalFilePathGenerator is null || originalFilePathGenerator is not FilePathGenerator original) { - ReportFullPath = reportFullPath; - IsErrorFile = isErrorFile; - if (originalFilePathGenerator is null || !(originalFilePathGenerator is FilePathGenerator)) - { - FirstDirectory = string.Empty; - ResolvedFileLocation = string.Empty; - To = string.Empty; - From = string.Empty; - } - else - { - string directorySeparatorChar = Path.DirectorySeparatorChar.ToString(); - FilePathGenerator original = (FilePathGenerator)originalFilePathGenerator; - FilePathGenerator filePathGenerator = new FilePathGenerator(original.FileConnectorConfiguration, reportFullPath, isErrorFile); - SubFolderPath = filePathGenerator.GetSubFolderPath(); - if (string.IsNullOrEmpty(SubFolderPath)) - FirstDirectory = SubFolderPath; - else - FirstDirectory = SubFolderPath.Split(Path.DirectorySeparatorChar)[0]; - ResolvedFileLocation = filePathGenerator.GetTargetFolder(); - if (string.IsNullOrEmpty(ResolvedFileLocation) && string.IsNullOrEmpty(SubFolderPath)) - To = string.Empty; - else if (string.IsNullOrEmpty(SubFolderPath)) - To = ResolvedFileLocation; - else - To = string.Concat(ResolvedFileLocation.Replace(SubFolderPath, string.Empty), Path.DirectorySeparatorChar, FirstDirectory); -#if (true) - if (string.IsNullOrEmpty(original.FileConnectorConfiguration.DefaultPlaceHolderValue)) - original.FileConnectorConfiguration.DefaultPlaceHolderValue = "NA"; - if (!(fileParameter is null) && fileParameter.Count == 1 && To.Contains(original.FileConnectorConfiguration.DefaultPlaceHolderValue)) - { - foreach (var keyValuePair in fileParameter) - To = To.Replace(string.Concat(original.FileConnectorConfiguration.DefaultPlaceHolderValue), keyValuePair.Value); - } -#endif - if (original.FileConnectorConfiguration.SourceFileLocation.EndsWith(directorySeparatorChar)) - From = string.Concat(original.FileConnectorConfiguration.SourceFileLocation, FirstDirectory); - else - From = string.Concat(original.FileConnectorConfiguration.SourceFileLocation, Path.DirectorySeparatorChar, FirstDirectory); - if (From.EndsWith(directorySeparatorChar) && !To.EndsWith(directorySeparatorChar)) - To = string.Concat(To, Path.DirectorySeparatorChar); - else if (To.EndsWith(directorySeparatorChar) && !From.EndsWith(directorySeparatorChar)) - To = To.Remove(To.Length - 1, 1); - } + FirstDirectory = string.Empty; + ResolvedFileLocation = string.Empty; + To = string.Empty; + From = string.Empty; + } + else + { + string directorySeparatorChar = Path.DirectorySeparatorChar.ToString(); + FilePathGenerator filePathGenerator = new(original.FileConnectorConfiguration, reportFullPath, isErrorFile); + SubFolderPath = filePathGenerator.GetSubFolderPath(); + if (string.IsNullOrEmpty(SubFolderPath)) + FirstDirectory = SubFolderPath; + else + FirstDirectory = SubFolderPath.Split(Path.DirectorySeparatorChar)[0]; + ResolvedFileLocation = filePathGenerator.GetTargetFolder(); + if (string.IsNullOrEmpty(ResolvedFileLocation) && string.IsNullOrEmpty(SubFolderPath)) + To = string.Empty; + else if (string.IsNullOrEmpty(SubFolderPath)) + To = ResolvedFileLocation; + else + To = string.Concat(ResolvedFileLocation.Replace(SubFolderPath, string.Empty), Path.DirectorySeparatorChar, FirstDirectory); +#if (true) + if (string.IsNullOrEmpty(original.FileConnectorConfiguration.DefaultPlaceHolderValue)) + original.FileConnectorConfiguration.DefaultPlaceHolderValue = "NA"; + if (fileParameter is not null && fileParameter.Count == 1 && To.Contains(original.FileConnectorConfiguration.DefaultPlaceHolderValue)) + { + foreach (System.Collections.Generic.KeyValuePair keyValuePair in fileParameter) + To = To.Replace(string.Concat(original.FileConnectorConfiguration.DefaultPlaceHolderValue), keyValuePair.Value); + } +#endif + if (original.FileConnectorConfiguration.SourceFileLocation.EndsWith(directorySeparatorChar)) + From = string.Concat(original.FileConnectorConfiguration.SourceFileLocation, FirstDirectory); + else + From = string.Concat(original.FileConnectorConfiguration.SourceFileLocation, Path.DirectorySeparatorChar, FirstDirectory); + if (From.EndsWith(directorySeparatorChar) && !To.EndsWith(directorySeparatorChar)) + To = string.Concat(To, Path.DirectorySeparatorChar); + else if (To.EndsWith(directorySeparatorChar) && !From.EndsWith(directorySeparatorChar)) + To = To.Remove(To.Length - 1, 1); } - } } diff --git a/Shared/Mapper.cs b/Shared/Mapper.cs new file mode 100644 index 0000000..fe5c923 --- /dev/null +++ b/Shared/Mapper.cs @@ -0,0 +1,74 @@ +using System.Collections.Generic; +using Eaf.Management.ConfigurationData.CellAutomation; +using Ifx.Eaf.EquipmentConnector.File.Configuration; + +namespace Shared; + +public static class Mapper +{ + + internal static Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration Map(FileConnectorConfiguration configuration) + { + Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration result = new() + { + AlternateTargetFolder = configuration.AlternateTargetFolder, + ConnectionRetryInterval = configuration.ConnectionRetryInterval, + ConnectionSettings = new List(), + CopySourceFolderStructure = configuration.CopySourceFolderStructure, + DefaultPlaceHolderValue = configuration.DefaultPlaceHolderValue, + //DeleteAbandonedEmptySourceSubFolders = configuration.DeleteAbandonedEmptySourceSubFolders, + DeleteEmptySourceSubFolders = configuration.DeleteEmptySourceSubFolders, + ErrorPostProcessingMode = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.PostProcessingModeEnum)configuration.ErrorPostProcessingMode, + ErrorTargetFileLocation = configuration.ErrorTargetFileLocation, + ErrorTargetFileName = configuration.ErrorTargetFileName, + FileAgeFilterMode = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.FileAgeFilterEnum)configuration.FileAgeFilterMode, + FileAgeThreshold = configuration.FileAgeThreshold, + //FileHandlers = configuration.FileHandlers, + FileHandleTimeout = (long)configuration.FileHandleTimeout, + FileHandleWaitTime = configuration.FileHandleWaitTime, + FileScanningIntervalInSeconds = configuration.FileScanningIntervalInSeconds, + FileScanningOption = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.FileScanningOptionEnum)configuration.FileScanningOption, + FolderAgeCheckIndividualSubFolders = configuration.FolderAgeCheckIndividualSubFolders, + FolderAgeThreshold = configuration.FolderAgeThreshold, + //FolderOperationsSubFolderLevel = configuration.FolderOperationsSubFolderLevel, + IdleEventWaitTimeInSeconds = (long)configuration.IdleEventWaitTimeInSeconds, + IfFileExistAction = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.IfFileExistEnum)configuration.IfFileExistAction, + IfPostProcessingFailsAction = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.IfPostProcessingFailsEnum)configuration.IfPostProcessingFailsAction, + IncludeSubDirectories = configuration.IncludeSubDirectories, + PostProcessingRetries = configuration.PostProcessingRetries, + PreProcessingMode = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.PreProcessingModeEnum)configuration.PreProcessingMode, + PostProcessingMode = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.PostProcessingModeEnum)configuration.PostProcessingMode, + SourceDirectoryCloaking = configuration.SourceDirectoryCloaking, + SourceFileFilter = configuration.SourceFileFilter, + SourceFileFilters = configuration.SourceFileFilters, + SourceFileLocation = configuration.SourceFileLocation, + TargetFileLocation = configuration.TargetFileLocation, + TargetFileName = configuration.TargetFileName, + TriggerOnChanged = configuration.TriggerOnChanged, + TriggerOnCreated = configuration.TriggerOnCreated, + UseZip64Mode = configuration.UseZip64Mode, + ZipErrorTargetFileName = configuration.ZipErrorTargetFileName, + ZipFileAmount = configuration.ZipFileAmount, + ZipFileSubFolderLevel = configuration.ZipFileSubFolderLevel, + ZipFileTime = configuration.ZipFileTime, + ZipMode = (Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration.FileConnectorConfiguration.ZipModeEnum)configuration.ZipMode, + ZipTargetFileName = configuration.ZipTargetFileName, + }; + foreach (Ifx.Eaf.Common.Configuration.ConnectionSetting connectionSetting in configuration.ConnectionSettings) + result.ConnectionSettings.Add(new Adaptation.Ifx.Eaf.Common.Configuration.ConnectionSetting(connectionSetting.Name, connectionSetting.Value)); + return result; + } + + internal static IList Map(IList configuredParameters) + { + List results = new(); + Adaptation.Eaf.Management.ConfigurationData.CellAutomation.ModelObjectParameterType modelObjectParameterType; + for (int i = 0; i < configuredParameters.Count; i++) + { + modelObjectParameterType = (Adaptation.Eaf.Management.ConfigurationData.CellAutomation.ModelObjectParameterType)configuredParameters[i].ValueType; + results.Add(new Adaptation.Eaf.Management.ConfigurationData.CellAutomation.ModelObjectParameterDefinition() { Id = i, Name = configuredParameters[i].Name, Value = configuredParameters[i].Value, ValueType = modelObjectParameterType, EnumType = modelObjectParameterType.ToString() }); + } + return results; + } + +}