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 MET08ANLYSDIFAAST230.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); } } } }