From 0cfcb46ee710ed7ab19e31c213a59ce248ac6822 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Tue, 1 Feb 2022 18:02:51 -0700 Subject: [PATCH] Match TFS Changeset 303348 --- .gitignore | 9 + Adaptation/.editorconfig | 336 ++ Adaptation/.vscode/launch.json | 10 + Adaptation/.vscode/tasks.json | 42 + .../Core/AutoGenerated/BackboneComponent.cs | 6 + .../Core/AutoGenerated/BackboneStatusCache.cs | 6 + .../AutoGenerated/ILoggingSetupManager.cs | 6 + .../Eaf/Core/AutoGenerated/StatusItem.cs | 6 + Adaptation/Eaf/Core/Backbone.cs | 48 + Adaptation/Eaf/Core/Smtp/EmailMessage.cs | 24 + Adaptation/Eaf/Core/Smtp/ISmtp.cs | 9 + Adaptation/Eaf/Core/Smtp/MailPriority.cs | 11 + .../ChangeDataCollectionHandler.cs | 6 + .../AutoGenerated/DataCollectionRequest.cs | 6 + .../Control/AutoGenerated/EquipmentEvent.cs | 6 + .../AutoGenerated/EquipmentException.cs | 6 + .../AutoGenerated/EquipmentSelfDescription.cs | 6 + .../GetParameterValuesHandler.cs | 6 + .../AutoGenerated/IConnectionControl.cs | 6 + .../AutoGenerated/IDataTracingHandler.cs | 6 + .../AutoGenerated/IEquipmentCommandService.cs | 6 + .../AutoGenerated/IEquipmentControl.cs | 16 + .../IEquipmentSelfDescriptionBuilder.cs | 6 + .../Control/AutoGenerated/IPackage.cs | 6 + .../AutoGenerated/ISelfDescriptionLookup.cs | 6 + .../IVirtualParameterValuesHandler.cs | 6 + .../SetParameterValuesHandler.cs | 6 + .../Control/AutoGenerated/TraceRequest.cs | 6 + .../Control/IEquipmentDataCollection.cs | 39 + .../EquipmentCore/Control/IPackageSource.cs | 6 + .../Reporting/ParameterValue.cs | 20 + .../ElementDescription/EquipmentParameter.cs | 24 + .../SelfDescription/ParameterTypes/Field.cs | 12 + .../ParameterTypes/ParameterTypeDefinition.cs | 12 + .../ParameterTypes/StructuredType.cs | 12 + .../CellAutomation/IConfigurationObject.cs | 6 + .../ModelObjectParameterDefinition.cs | 26 + .../ModelObjectParameterType.cs | 17 + .../SecsConnectionConfiguration.cs | 44 + .../CellInstanceConnectionName.cs | 35 + .../FileHandlers/DownloadRsMFile/FileRead.cs | 283 + .../DownloadRsMFile/NginxFileSystem.cs | 12 + .../FileHandlers/MET08RESIMAPCDE/FileRead.cs | 552 ++ .../FileHandlers/MET08RESIMAPCDE/Hyphen.cs | 18 + .../MET08RESIMAPCDE/ProcessData.cs | 56 + .../FileHandlers/MET08RESIMAPCDE/WSRequest.cs | 107 + Adaptation/FileHandlers/RsM/Description.cs | 316 ++ Adaptation/FileHandlers/RsM/Detail.cs | 22 + Adaptation/FileHandlers/RsM/FileRead.cs | 149 + Adaptation/FileHandlers/RsM/ProcessData.cs | 279 + Adaptation/FileHandlers/pcl/Description.cs | 315 ++ Adaptation/FileHandlers/pcl/Detail.cs | 22 + Adaptation/FileHandlers/pcl/FileRead.cs | 145 + Adaptation/FileHandlers/pcl/ProcessData.cs | 452 ++ .../Common/Configuration/ConnectionSetting.cs | 13 + .../EquipmentConnector/File/Component/File.cs | 19 + .../File/Component/FilePathGenerator.cs | 35 + .../FileConnectorConfiguration.cs | 135 + ...onnectorParameterTypeDefinitionProvider.cs | 14 + Adaptation/MET08RESIMAPCDE.Tests.csproj | 103 + .../GCL/Annotations/NotNullAttribute.cs | 10 + .../GCL/SecsDriver/HsmsConnectionMode.cs | 8 + .../GCL/SecsDriver/HsmsSessionMode.cs | 8 + .../GCL/SecsDriver/SecsTransportType.cs | 8 + .../GCL/SecsDriver/SerialBaudRate.cs | 16 + Adaptation/Shared/Duplicator/Description.cs | 148 + Adaptation/Shared/FileRead.cs | 834 +++ Adaptation/Shared/Logistics.cs | 223 + Adaptation/Shared/Logistics2.cs | 81 + Adaptation/Shared/Methods/IDescription.cs | 25 + Adaptation/Shared/Methods/IFileRead.cs | 26 + Adaptation/Shared/Methods/ILogistics.cs | 8 + Adaptation/Shared/Methods/ILogistics2.cs | 8 + Adaptation/Shared/Methods/IProcessData.cs | 17 + Adaptation/Shared/Methods/ISMTP.cs | 9 + Adaptation/Shared/Metrology/ScopeInfo.cs | 306 ++ Adaptation/Shared/Metrology/WS.Attachment.cs | 24 + Adaptation/Shared/Metrology/WS.Results.cs | 33 + Adaptation/Shared/Metrology/WS.cs | 127 + Adaptation/Shared/ParameterType.cs | 13 + .../Shared/ProcessDataStandardFormat.cs | 426 ++ Adaptation/Shared/Properties/IDescription.cs | 13 + Adaptation/Shared/Properties/IFileRead.cs | 20 + Adaptation/Shared/Properties/ILogistics.cs | 25 + Adaptation/Shared/Properties/ILogistics2.cs | 17 + Adaptation/Shared/Properties/IProcessData.cs | 13 + Adaptation/Shared/Properties/IScopeInfo.cs | 20 + Adaptation/Shared/Test.cs | 57 + .../Staging/v2.36.1/CDE2.cs | 60 + .../Staging/v2.36.1/CDE3-EQPT.cs | 71 + .../Staging/v2.36.1/CDE3.cs | 71 + .../Staging/v2.36.1/CDE5.cs | 65 + .../Staging/v2.36.1/MET08RESIMAPCDE.cs | 183 + .../_Tests/Extract/Staging/v2.36.1/CDE2.cs | 0 .../Extract/Staging/v2.36.1/CDE3-EQPT.cs | 40 + .../_Tests/Extract/Staging/v2.36.1/CDE3.cs | 95 + .../_Tests/Extract/Staging/v2.36.1/CDE5.cs | 0 .../Staging/v2.36.1/MET08RESIMAPCDE.cs | 114 + Adaptation/_Tests/Helpers/Metrology.cs | 160 + Adaptation/_Tests/Shared/AdaptationTesting.cs | 1119 ++++ .../_Tests/Shared/EAFLoggingUnitTesting.cs | 30 + Adaptation/_Tests/Shared/IsEnvironment.cs | 171 + .../_Tests/Shared/LoggingUnitTesting.cs | 113 + .../EAF XML API/CellInstance.cs | 4660 +++++++++++++++++ .../EAF XML API/ConfigurationData.cs | 25 + .../EAF XML API/EquipmentDictionary.cs | 1956 +++++++ .../EAF XML API/EquipmentType.cs | 1437 +++++ Adaptation/_Tests/Shared/UnitTesting.cs | 93 + Adaptation/appsettings.Development.json | 139 + Adaptation/appsettings.json | 139 + Adaptation/package.json | 8 + FileHandlers/FileRead.cs | 356 ++ MET08RESIMAPCDE.csproj | 160 + Properties/AssemblyInfo.cs | 36 + README.md | 26 +- Shared/FilePathGenerator.cs | 35 + Shared/FilePathGeneratorInfo.cs | 66 + Shared/Mapper.cs | 77 + 118 files changed, 17934 insertions(+), 13 deletions(-) create mode 100644 Adaptation/.editorconfig create mode 100644 Adaptation/.vscode/launch.json create mode 100644 Adaptation/.vscode/tasks.json create mode 100644 Adaptation/Eaf/Core/AutoGenerated/BackboneComponent.cs create mode 100644 Adaptation/Eaf/Core/AutoGenerated/BackboneStatusCache.cs create mode 100644 Adaptation/Eaf/Core/AutoGenerated/ILoggingSetupManager.cs create mode 100644 Adaptation/Eaf/Core/AutoGenerated/StatusItem.cs create mode 100644 Adaptation/Eaf/Core/Backbone.cs create mode 100644 Adaptation/Eaf/Core/Smtp/EmailMessage.cs create mode 100644 Adaptation/Eaf/Core/Smtp/ISmtp.cs create mode 100644 Adaptation/Eaf/Core/Smtp/MailPriority.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ChangeDataCollectionHandler.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/DataCollectionRequest.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentEvent.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentException.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentSelfDescription.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/GetParameterValuesHandler.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IConnectionControl.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IDataTracingHandler.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentCommandService.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentControl.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentSelfDescriptionBuilder.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IPackage.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ISelfDescriptionLookup.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IVirtualParameterValuesHandler.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/SetParameterValuesHandler.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/TraceRequest.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/IEquipmentDataCollection.cs create mode 100644 Adaptation/Eaf/EquipmentCore/Control/IPackageSource.cs create mode 100644 Adaptation/Eaf/EquipmentCore/DataCollection/Reporting/ParameterValue.cs create mode 100644 Adaptation/Eaf/EquipmentCore/SelfDescription/ElementDescription/EquipmentParameter.cs create mode 100644 Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/Field.cs create mode 100644 Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/ParameterTypeDefinition.cs create mode 100644 Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/StructuredType.cs create mode 100644 Adaptation/Eaf/Management/ConfigurationData/CellAutomation/IConfigurationObject.cs create mode 100644 Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterDefinition.cs create mode 100644 Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterType.cs create mode 100644 Adaptation/Eaf/Management/ConfigurationData/Semiconductor/CellInstances/SecsConnectionConfiguration.cs create mode 100644 Adaptation/FileHandlers/CellInstanceConnectionName.cs create mode 100644 Adaptation/FileHandlers/DownloadRsMFile/FileRead.cs create mode 100644 Adaptation/FileHandlers/DownloadRsMFile/NginxFileSystem.cs create mode 100644 Adaptation/FileHandlers/MET08RESIMAPCDE/FileRead.cs create mode 100644 Adaptation/FileHandlers/MET08RESIMAPCDE/Hyphen.cs create mode 100644 Adaptation/FileHandlers/MET08RESIMAPCDE/ProcessData.cs create mode 100644 Adaptation/FileHandlers/MET08RESIMAPCDE/WSRequest.cs create mode 100644 Adaptation/FileHandlers/RsM/Description.cs create mode 100644 Adaptation/FileHandlers/RsM/Detail.cs create mode 100644 Adaptation/FileHandlers/RsM/FileRead.cs create mode 100644 Adaptation/FileHandlers/RsM/ProcessData.cs create mode 100644 Adaptation/FileHandlers/pcl/Description.cs create mode 100644 Adaptation/FileHandlers/pcl/Detail.cs create mode 100644 Adaptation/FileHandlers/pcl/FileRead.cs create mode 100644 Adaptation/FileHandlers/pcl/ProcessData.cs create mode 100644 Adaptation/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs create mode 100644 Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/File.cs create mode 100644 Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/FilePathGenerator.cs create mode 100644 Adaptation/Ifx/Eaf/EquipmentConnector/File/Configuration/FileConnectorConfiguration.cs create mode 100644 Adaptation/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs create mode 100644 Adaptation/MET08RESIMAPCDE.Tests.csproj create mode 100644 Adaptation/PeerGroup/GCL/Annotations/NotNullAttribute.cs create mode 100644 Adaptation/PeerGroup/GCL/SecsDriver/HsmsConnectionMode.cs create mode 100644 Adaptation/PeerGroup/GCL/SecsDriver/HsmsSessionMode.cs create mode 100644 Adaptation/PeerGroup/GCL/SecsDriver/SecsTransportType.cs create mode 100644 Adaptation/PeerGroup/GCL/SecsDriver/SerialBaudRate.cs create mode 100644 Adaptation/Shared/Duplicator/Description.cs create mode 100644 Adaptation/Shared/FileRead.cs create mode 100644 Adaptation/Shared/Logistics.cs create mode 100644 Adaptation/Shared/Logistics2.cs create mode 100644 Adaptation/Shared/Methods/IDescription.cs create mode 100644 Adaptation/Shared/Methods/IFileRead.cs create mode 100644 Adaptation/Shared/Methods/ILogistics.cs create mode 100644 Adaptation/Shared/Methods/ILogistics2.cs create mode 100644 Adaptation/Shared/Methods/IProcessData.cs create mode 100644 Adaptation/Shared/Methods/ISMTP.cs create mode 100644 Adaptation/Shared/Metrology/ScopeInfo.cs create mode 100644 Adaptation/Shared/Metrology/WS.Attachment.cs create mode 100644 Adaptation/Shared/Metrology/WS.Results.cs create mode 100644 Adaptation/Shared/Metrology/WS.cs create mode 100644 Adaptation/Shared/ParameterType.cs create mode 100644 Adaptation/Shared/ProcessDataStandardFormat.cs create mode 100644 Adaptation/Shared/Properties/IDescription.cs create mode 100644 Adaptation/Shared/Properties/IFileRead.cs create mode 100644 Adaptation/Shared/Properties/ILogistics.cs create mode 100644 Adaptation/Shared/Properties/ILogistics2.cs create mode 100644 Adaptation/Shared/Properties/IProcessData.cs create mode 100644 Adaptation/Shared/Properties/IScopeInfo.cs create mode 100644 Adaptation/Shared/Test.cs create mode 100644 Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE2.cs create mode 100644 Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE3-EQPT.cs create mode 100644 Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE3.cs create mode 100644 Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE5.cs create mode 100644 Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/MET08RESIMAPCDE.cs create mode 100644 Adaptation/_Tests/Extract/Staging/v2.36.1/CDE2.cs create mode 100644 Adaptation/_Tests/Extract/Staging/v2.36.1/CDE3-EQPT.cs create mode 100644 Adaptation/_Tests/Extract/Staging/v2.36.1/CDE3.cs create mode 100644 Adaptation/_Tests/Extract/Staging/v2.36.1/CDE5.cs create mode 100644 Adaptation/_Tests/Extract/Staging/v2.36.1/MET08RESIMAPCDE.cs create mode 100644 Adaptation/_Tests/Helpers/Metrology.cs create mode 100644 Adaptation/_Tests/Shared/AdaptationTesting.cs create mode 100644 Adaptation/_Tests/Shared/EAFLoggingUnitTesting.cs create mode 100644 Adaptation/_Tests/Shared/IsEnvironment.cs create mode 100644 Adaptation/_Tests/Shared/LoggingUnitTesting.cs create mode 100644 Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/CellInstance.cs create mode 100644 Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/ConfigurationData.cs create mode 100644 Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentDictionary.cs create mode 100644 Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentType.cs create mode 100644 Adaptation/_Tests/Shared/UnitTesting.cs create mode 100644 Adaptation/appsettings.Development.json create mode 100644 Adaptation/appsettings.json create mode 100644 Adaptation/package.json create mode 100644 FileHandlers/FileRead.cs create mode 100644 MET08RESIMAPCDE.csproj create mode 100644 Properties/AssemblyInfo.cs create mode 100644 Shared/FilePathGenerator.cs create mode 100644 Shared/FilePathGeneratorInfo.cs create mode 100644 Shared/Mapper.cs diff --git a/.gitignore b/.gitignore index 3e759b7..7c7ee90 100644 --- a/.gitignore +++ b/.gitignore @@ -328,3 +328,12 @@ ASALocalRun/ # MFractors (Xamarin productivity tool) working folder .mfractor/ + +## +## Visual Studio Code +## +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/Adaptation/.editorconfig b/Adaptation/.editorconfig new file mode 100644 index 0000000..a3ebdb2 --- /dev/null +++ b/Adaptation/.editorconfig @@ -0,0 +1,336 @@ +# Remove the line below if you want to inherit .editorconfig settings from higher directories +root = true + +# C# files +[*.cs] + +#### Core EditorConfig Options #### + +# Indentation and spacing +indent_size = 4 +indent_style = space +tab_width = 4 + +# New line preferences +end_of_line = crlf +insert_final_newline = false + +#### .NET Coding Conventions #### + +# Organize usings +dotnet_separate_import_directive_groups = false +dotnet_sort_system_directives_first = false +file_header_template = unset + +# this. and Me. preferences +dotnet_style_qualification_for_event = false:error +dotnet_style_qualification_for_field = false +dotnet_style_qualification_for_method = false:error +dotnet_style_qualification_for_property = false:error + +# Language keywords vs BCL types preferences +dotnet_style_predefined_type_for_locals_parameters_members = true +dotnet_style_predefined_type_for_member_access = true + +# Parentheses preferences +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity +dotnet_style_parentheses_in_other_operators = never_if_unnecessary +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity + +# Modifier preferences +dotnet_style_require_accessibility_modifiers = for_non_interface_members + +# Expression-level preferences +dotnet_style_coalesce_expression = true +dotnet_style_collection_initializer = true:warning +dotnet_style_explicit_tuple_names = true:warning +dotnet_style_namespace_match_folder = true +dotnet_style_null_propagation = true:warning +dotnet_style_object_initializer = true:warning +dotnet_style_operator_placement_when_wrapping = beginning_of_line +dotnet_style_prefer_auto_properties = true:warning +dotnet_style_prefer_compound_assignment = true:warning +dotnet_style_prefer_conditional_expression_over_assignment = false +dotnet_style_prefer_conditional_expression_over_return = false +dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning +dotnet_style_prefer_inferred_tuple_names = true:warning +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning +dotnet_style_prefer_simplified_boolean_expressions = true:warning +dotnet_style_prefer_simplified_interpolation = true + +# Field preferences +dotnet_style_readonly_field = true:warning + +# Parameter preferences +dotnet_code_quality_unused_parameters = all + +# Suppression preferences +dotnet_remove_unnecessary_suppression_exclusions = 0 + +# New line preferences +dotnet_style_allow_multiple_blank_lines_experimental = false:warning +dotnet_style_allow_statement_immediately_after_block_experimental = true + +#### C# Coding Conventions #### + +# var preferences +csharp_style_var_elsewhere = false:warning +csharp_style_var_for_built_in_types = false:warning +csharp_style_var_when_type_is_apparent = false:warning + +# Expression-bodied members +csharp_style_expression_bodied_accessors = when_on_single_line:warning +csharp_style_expression_bodied_constructors = when_on_single_line:warning +csharp_style_expression_bodied_indexers = when_on_single_line:warning +csharp_style_expression_bodied_lambdas = when_on_single_line:warning +csharp_style_expression_bodied_local_functions = when_on_single_line:warning +csharp_style_expression_bodied_methods = when_on_single_line:warning +csharp_style_expression_bodied_operators = when_on_single_line:warning +csharp_style_expression_bodied_properties = when_on_single_line:warning + +# Pattern matching preferences +csharp_style_pattern_matching_over_as_with_null_check = true:warning +csharp_style_pattern_matching_over_is_with_cast_check = true:warning +csharp_style_prefer_not_pattern = true:warning +csharp_style_prefer_pattern_matching = true:warning +csharp_style_prefer_switch_expression = true:warning + +# Null-checking preferences +csharp_style_conditional_delegate_call = true + +# Modifier preferences +csharp_prefer_static_local_function = true:warning +csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async + +# Code-block preferences +csharp_prefer_braces = false +csharp_prefer_simple_using_statement = true:warning +csharp_style_namespace_declarations = file_scoped:warning + +# Expression-level preferences +csharp_prefer_simple_default_expression = true:warning +csharp_style_deconstructed_variable_declaration = false +csharp_style_implicit_object_creation_when_type_is_apparent = true:warning +csharp_style_inlined_variable_declaration = false +csharp_style_pattern_local_over_anonymous_function = true:warning +csharp_style_prefer_index_operator = false:warning +csharp_style_prefer_null_check_over_type_check = true +csharp_style_prefer_range_operator = false:warning +csharp_style_throw_expression = true +csharp_style_unused_value_assignment_preference = discard_variable:warning +csharp_style_unused_value_expression_statement_preference = discard_variable:warning + +# 'using' directive preferences +csharp_using_directive_placement = outside_namespace + +# New line preferences +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true +csharp_style_allow_embedded_statements_on_same_line_experimental = true + +#### C# Formatting Rules #### + +# New line preferences +csharp_new_line_before_catch = true +csharp_new_line_before_else = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_open_brace = all +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true +csharp_indent_labels = one_less_than_current +csharp_indent_switch_labels = true + +# Space preferences +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false + +# Wrapping preferences +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = false + +#### Naming styles #### + +# Naming rules + +dotnet_naming_rule.interface_should_be_begins_with_i.severity = warning +dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface +dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i + +dotnet_naming_rule.types_should_be_pascal_case.severity = warning +dotnet_naming_rule.types_should_be_pascal_case.symbols = types +dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.severity = warning +dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.symbols = private_or_internal_field +dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.style = private_of_internal_field + +dotnet_naming_rule.enum_should_be_pascal_case.severity = warning +dotnet_naming_rule.enum_should_be_pascal_case.symbols = enum +dotnet_naming_rule.enum_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.severity = warning +dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.symbols = public_or_protected_field +dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.style = private_of_internal_field + +dotnet_naming_rule.class_should_be_pascal_case.severity = warning +dotnet_naming_rule.class_should_be_pascal_case.symbols = class +dotnet_naming_rule.class_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.method_should_be_pascal_case.severity = warning +dotnet_naming_rule.method_should_be_pascal_case.symbols = method +dotnet_naming_rule.method_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.severity = warning +dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.symbols = private_or_internal_static_field +dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.style = private_of_internal_field + +dotnet_naming_rule.static_field_should_be_pascal_case.severity = warning +dotnet_naming_rule.static_field_should_be_pascal_case.symbols = static_field +dotnet_naming_rule.static_field_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.property_should_be_pascal_case.severity = warning +dotnet_naming_rule.property_should_be_pascal_case.symbols = property +dotnet_naming_rule.property_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.static_method_should_be_pascal_case.severity = warning +dotnet_naming_rule.static_method_should_be_pascal_case.symbols = static_method +dotnet_naming_rule.static_method_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning +dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method +dotnet_naming_rule.abstract_method_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.private_method_should_be_pascal_case.severity = warning +dotnet_naming_rule.private_method_should_be_pascal_case.symbols = private_method +dotnet_naming_rule.private_method_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.event_should_be_pascal_case.severity = warning +dotnet_naming_rule.event_should_be_pascal_case.symbols = event +dotnet_naming_rule.event_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.delegate_should_be_pascal_case.severity = warning +dotnet_naming_rule.delegate_should_be_pascal_case.symbols = delegate +dotnet_naming_rule.delegate_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.struct_should_be_pascal_case.severity = warning +dotnet_naming_rule.struct_should_be_pascal_case.symbols = struct +dotnet_naming_rule.struct_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = warning +dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members +dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case + +# Symbol specifications + +dotnet_naming_symbols.class.applicable_kinds = class +dotnet_naming_symbols.class.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.class.required_modifiers = + +dotnet_naming_symbols.interface.applicable_kinds = interface +dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.interface.required_modifiers = + +dotnet_naming_symbols.struct.applicable_kinds = struct +dotnet_naming_symbols.struct.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.struct.required_modifiers = + +dotnet_naming_symbols.enum.applicable_kinds = enum +dotnet_naming_symbols.enum.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.enum.required_modifiers = + +dotnet_naming_symbols.delegate.applicable_kinds = delegate +dotnet_naming_symbols.delegate.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.delegate.required_modifiers = + +dotnet_naming_symbols.event.applicable_kinds = event +dotnet_naming_symbols.event.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.event.required_modifiers = + +dotnet_naming_symbols.method.applicable_kinds = method +dotnet_naming_symbols.method.applicable_accessibilities = public +dotnet_naming_symbols.method.required_modifiers = + +dotnet_naming_symbols.private_method.applicable_kinds = method +dotnet_naming_symbols.private_method.applicable_accessibilities = private +dotnet_naming_symbols.private_method.required_modifiers = + +dotnet_naming_symbols.abstract_method.applicable_kinds = method +dotnet_naming_symbols.abstract_method.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.abstract_method.required_modifiers = abstract + +dotnet_naming_symbols.static_method.applicable_kinds = method +dotnet_naming_symbols.static_method.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.static_method.required_modifiers = static + +dotnet_naming_symbols.property.applicable_kinds = property +dotnet_naming_symbols.property.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.property.required_modifiers = + +dotnet_naming_symbols.public_or_protected_field.applicable_kinds = field +dotnet_naming_symbols.public_or_protected_field.applicable_accessibilities = public, protected +dotnet_naming_symbols.public_or_protected_field.required_modifiers = + +dotnet_naming_symbols.static_field.applicable_kinds = field +dotnet_naming_symbols.static_field.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.static_field.required_modifiers = static + +dotnet_naming_symbols.private_or_internal_field.applicable_kinds = field +dotnet_naming_symbols.private_or_internal_field.applicable_accessibilities = internal, private, private_protected +dotnet_naming_symbols.private_or_internal_field.required_modifiers = + +dotnet_naming_symbols.private_or_internal_static_field.applicable_kinds = field +dotnet_naming_symbols.private_or_internal_static_field.applicable_accessibilities = internal, private, private_protected +dotnet_naming_symbols.private_or_internal_static_field.required_modifiers = static + +dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum +dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.types.required_modifiers = + +dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method +dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.non_field_members.required_modifiers = + +# Naming styles + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case + +dotnet_naming_style.begins_with_i.required_prefix = I +dotnet_naming_style.begins_with_i.required_suffix = +dotnet_naming_style.begins_with_i.word_separator = +dotnet_naming_style.begins_with_i.capitalization = pascal_case + +dotnet_naming_style.private_of_internal_field.required_prefix = _ +dotnet_naming_style.private_of_internal_field.required_suffix = +dotnet_naming_style.private_of_internal_field.word_separator = +dotnet_naming_style.private_of_internal_field.capitalization = pascal_case diff --git a/Adaptation/.vscode/launch.json b/Adaptation/.vscode/launch.json new file mode 100644 index 0000000..23f847f --- /dev/null +++ b/Adaptation/.vscode/launch.json @@ -0,0 +1,10 @@ +{ + "configurations": [ + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach", + "processId": 68192 + } + ] +} diff --git a/Adaptation/.vscode/tasks.json b/Adaptation/.vscode/tasks.json new file mode 100644 index 0000000..6f47439 --- /dev/null +++ b/Adaptation/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/MET08RESIMAPCDE.Tests.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/MET08RESIMAPCDE.Tests.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "${workspaceFolder}/MET08RESIMAPCDE.Tests.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/Adaptation/Eaf/Core/AutoGenerated/BackboneComponent.cs b/Adaptation/Eaf/Core/AutoGenerated/BackboneComponent.cs new file mode 100644 index 0000000..4b83dcf --- /dev/null +++ b/Adaptation/Eaf/Core/AutoGenerated/BackboneComponent.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.Core +{ + 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 new file mode 100644 index 0000000..5da2cda --- /dev/null +++ b/Adaptation/Eaf/Core/AutoGenerated/BackboneStatusCache.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.Core +{ + 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 new file mode 100644 index 0000000..ba939e7 --- /dev/null +++ b/Adaptation/Eaf/Core/AutoGenerated/ILoggingSetupManager.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.Core +{ + 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 new file mode 100644 index 0000000..4dc8f3b --- /dev/null +++ b/Adaptation/Eaf/Core/AutoGenerated/StatusItem.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.Core +{ + public class StatusItem + { + } +} \ No newline at end of file diff --git a/Adaptation/Eaf/Core/Backbone.cs b/Adaptation/Eaf/Core/Backbone.cs new file mode 100644 index 0000000..d4b6f03 --- /dev/null +++ b/Adaptation/Eaf/Core/Backbone.cs @@ -0,0 +1,48 @@ +using Adaptation.PeerGroup.GCL.Annotations; +using System; +using System.Collections.Generic; + +namespace Adaptation.Eaf.Core +{ + 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() { } + + [NotNull] + public static Backbone Instance { get; } + [NotNull] + public ILoggingSetupManager LoggingConfigurationManager { get; set; } + public BackboneStatusCache Status { get; } + public bool IsAutomatedRestartActive { get; } + public bool IsReadyForRestart { get; } + public string StartTime { get; } + public string State { get; } + public string Name { get; } + public string ConfigurationServiceAddress { get; } + public string CellName { get; } + protected bool IsInitialized { get; set; } + protected Dictionary BackboneComponents { get; } + + public void AddBackboneComponent(BackboneComponent backboneComponent) { } + public bool ContainsBackboneComponent(string id) { throw new NotImplementedException(); } + [Obsolete("Use the capabilities exposed via the Status property -> GetAll. Will be removed with next major release.")] + public List GetAllStatuses() { throw new NotImplementedException(); } + public BackboneComponent GetBackboneComponentById(string id) { throw new NotImplementedException(); } + public List GetBackboneComponentsOfType() { throw new NotImplementedException(); } + public List GetBackboneComponentsOfType(Type type) { throw new NotImplementedException(); } + public void RegisterSubprocess(int pid) { } + [Obsolete("Use the capabilities exposed via the Status property -> SetValue. Will be removed with next major release.")] + public void SetStatus(string statusName, string statusValue) { } + [Obsolete("Use the capabilities exposed via the Status property -> SetValue. Will be removed with next major release.")] + public void SetStatus(BackboneComponent source, string statusName, string statusValue) { } + protected void CloseConnectionOfComponents(List components) { } + protected virtual void StopAllComponents() { } + protected void StopComponents(List components) { } + } +} \ No newline at end of file diff --git a/Adaptation/Eaf/Core/Smtp/EmailMessage.cs b/Adaptation/Eaf/Core/Smtp/EmailMessage.cs new file mode 100644 index 0000000..f0c2baf --- /dev/null +++ b/Adaptation/Eaf/Core/Smtp/EmailMessage.cs @@ -0,0 +1,24 @@ +using System; + +namespace Adaptation.Eaf.Core.Smtp +{ + + public class EmailMessage + { + public EmailMessage() { } + public EmailMessage(string subject, string body, MailPriority priority = MailPriority.Normal) { } + + public string Body { get; } + public MailPriority Priority { get; } + public string Subject { get; } + + public 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 new file mode 100644 index 0000000..3a12278 --- /dev/null +++ b/Adaptation/Eaf/Core/Smtp/ISmtp.cs @@ -0,0 +1,9 @@ +namespace Adaptation.Eaf.Core.Smtp +{ + + public interface ISmtp + { + 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 new file mode 100644 index 0000000..18ee1af --- /dev/null +++ b/Adaptation/Eaf/Core/Smtp/MailPriority.cs @@ -0,0 +1,11 @@ +namespace Adaptation.Eaf.Core.Smtp +{ + + public enum MailPriority + { + 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 new file mode 100644 index 0000000..096cfd8 --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ChangeDataCollectionHandler.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..f085c14 --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/DataCollectionRequest.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..fd97bcb --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentEvent.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..1a3babd --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentException.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..3697004 --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentSelfDescription.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..bc26e0f --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/GetParameterValuesHandler.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..a9e800c --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IConnectionControl.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..3b98f85 --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IDataTracingHandler.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..2a54add --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentCommandService.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..a119d2b --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentControl.cs @@ -0,0 +1,16 @@ +using Adaptation.PeerGroup.GCL.Annotations; + +namespace Adaptation.Eaf.EquipmentCore.Control +{ + public interface IEquipmentControl : IPackageSource + { + [NotNull] + IEquipmentSelfDescriptionBuilder SelfDescriptionBuilder { get; } + [NotNull] + IEquipmentDataCollection DataCollection { get; } + [NotNull] + IEquipmentCommandService Commands { get; } + [NotNull] + IConnectionControl Connection { get; } + } +} \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentSelfDescriptionBuilder.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentSelfDescriptionBuilder.cs new file mode 100644 index 0000000..b583e8c --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentSelfDescriptionBuilder.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..67ef808 --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IPackage.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..57b3215 --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ISelfDescriptionLookup.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..64e4621 --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IVirtualParameterValuesHandler.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..200fb13 --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/SetParameterValuesHandler.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..84511e9 --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/TraceRequest.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..7a704b5 --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/IEquipmentDataCollection.cs @@ -0,0 +1,39 @@ +using Adaptation.Eaf.EquipmentCore.DataCollection.Reporting; +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; } + + 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 new file mode 100644 index 0000000..2c0371e --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/Control/IPackageSource.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.EquipmentCore.Control +{ + 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 new file mode 100644 index 0000000..9f0b794 --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/DataCollection/Reporting/ParameterValue.cs @@ -0,0 +1,20 @@ +using Adaptation.Eaf.EquipmentCore.SelfDescription.ElementDescription; +using Adaptation.PeerGroup.GCL.Annotations; +using System; + +namespace Adaptation.Eaf.EquipmentCore.DataCollection.Reporting +{ + 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; } + + 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 new file mode 100644 index 0000000..852fb8d --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/SelfDescription/ElementDescription/EquipmentParameter.cs @@ -0,0 +1,24 @@ +using Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes; + +namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ElementDescription +{ + 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; } + + public override string ToString() { return base.ToString(); } + public string ToStringWithDetails() { return 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 new file mode 100644 index 0000000..a83b45f --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/Field.cs @@ -0,0 +1,12 @@ +namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes +{ + public class Field + { + public Field(string name, string description, bool canBeNull, ParameterTypeDefinition typeDefinition) { } + + public string Name { get; } + public string Description { get; } + public ParameterTypeDefinition TypeDefinition { get; } + public bool CanBeNull { get; } + } +} \ No newline at end of file diff --git a/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/ParameterTypeDefinition.cs b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/ParameterTypeDefinition.cs new file mode 100644 index 0000000..65ad7dd --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/ParameterTypeDefinition.cs @@ -0,0 +1,12 @@ +namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes +{ + public abstract class ParameterTypeDefinition + { + public ParameterTypeDefinition(string name, string description) { } + + public string Name { get; } + public string Description { get; } + + 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 new file mode 100644 index 0000000..24c5856 --- /dev/null +++ b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/StructuredType.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; + +namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes +{ + public class StructuredType : ParameterTypeDefinition + { + + public StructuredType(string name, string description, IList fields) : base(name, description) { } + + 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 new file mode 100644 index 0000000..597ace3 --- /dev/null +++ b/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/IConfigurationObject.cs @@ -0,0 +1,6 @@ +namespace Adaptation.Eaf.Management.ConfigurationData.CellAutomation +{ + 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 new file mode 100644 index 0000000..0b772a2 --- /dev/null +++ b/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterDefinition.cs @@ -0,0 +1,26 @@ +using System; + +namespace Adaptation.Eaf.Management.ConfigurationData.CellAutomation +{ + [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; } + + 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 new file mode 100644 index 0000000..6f779af --- /dev/null +++ b/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterType.cs @@ -0,0 +1,17 @@ +namespace Adaptation.Eaf.Management.ConfigurationData.CellAutomation +{ + public enum ModelObjectParameterType + { + String = 0, + Bool = 1, + Byte = 2, + SignedByte = 3, + Integer = 4, + UnsignedInteger = 5, + LongInteger = 6, + UnsignedLongInteger = 7, + Double = 8, + Float = 9, + Enum = 10 + } +} \ No newline at end of file diff --git a/Adaptation/Eaf/Management/ConfigurationData/Semiconductor/CellInstances/SecsConnectionConfiguration.cs b/Adaptation/Eaf/Management/ConfigurationData/Semiconductor/CellInstances/SecsConnectionConfiguration.cs new file mode 100644 index 0000000..91493b0 --- /dev/null +++ b/Adaptation/Eaf/Management/ConfigurationData/Semiconductor/CellInstances/SecsConnectionConfiguration.cs @@ -0,0 +1,44 @@ +using Adaptation.PeerGroup.GCL.SecsDriver; +using System; + +namespace Adaptation.Eaf.Management.ConfigurationData.Semiconductor.CellInstances +{ + [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/CellInstanceConnectionName.cs b/Adaptation/FileHandlers/CellInstanceConnectionName.cs new file mode 100644 index 0000000..b934cb6 --- /dev/null +++ b/Adaptation/FileHandlers/CellInstanceConnectionName.cs @@ -0,0 +1,35 @@ +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; + int levelIsArchive = 7; + int levelIsXToArchive = 6; + bool isDuplicator = cellInstanceConnectionName.StartsWith(cellInstanceName); + if (isDuplicator) + result = new MET08RESIMAPCDE.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted, levelIsXToArchive, levelIsArchive); + else + { + result = cellInstanceConnectionName switch + { + nameof(DownloadRsMFile) => new DownloadRsMFile.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted, levelIsXToArchive, levelIsArchive), + nameof(RsM) => new RsM.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted, levelIsXToArchive, levelIsArchive), + _ => throw new Exception(), + }; + } + return result; + } + + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/DownloadRsMFile/FileRead.cs b/Adaptation/FileHandlers/DownloadRsMFile/FileRead.cs new file mode 100644 index 0000000..e360403 --- /dev/null +++ b/Adaptation/FileHandlers/DownloadRsMFile/FileRead.cs @@ -0,0 +1,283 @@ +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.Diagnostics; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Net; +using System.Text.Json; +using System.Threading; + +namespace Adaptation.FileHandlers.DownloadRsMFile +{ + + public class FileRead : Shared.FileRead, IFileRead + { + + private readonly Timer _Timer; + private readonly WebClient _WebClient; + private readonly string _StaticFileServer; + + 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, int hyphenXToArchive, int hyphenIsArchive) : + base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted, hyphenXToArchive, hyphenIsArchive) + { + _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); + _WebClient = new WebClient(); + _StaticFileServer = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, string.Concat("CellInstance.", cellInstanceName, ".StaticFileServer")); + if (!Debugger.IsAttached && fileConnectorConfiguration.PreProcessingMode != FileConnectorConfiguration.PreProcessingModeEnum.Process) + _Timer = new Timer(Callback, null, (int)(fileConnectorConfiguration.FileScanningIntervalInSeconds * 1000), Timeout.Infinite); + else + { + _Timer = new Timer(Callback, null, Timeout.Infinite, Timeout.Infinite); + Callback(null); + } + } + + void IFileRead.Move(Tuple> extractResults, Exception exception) + { + Move(this, 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, new Test[] { }, 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.MoveArchive() + { + throw new Exception(string.Concat("Not ", nameof(_IsDuplicator))); + } + + void IFileRead.Callback(object state) + { + Callback(state); + } + + private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) + { + if (reportFullPath is null) + { } + if (dateTime == DateTime.MinValue) + { } + throw new Exception(string.Concat("See ", nameof(Callback))); + } + + private void DownloadRsMFile() + { + if (_WebClient is null) + throw new Exception(); + if (string.IsNullOrEmpty(_StaticFileServer)) + throw new Exception(); + string logText; + string runJson; + string rootJson; + string[] logLines; + string runFileName; + string[] logSegments; + string targetFileName; + string runFullFileName; + FileInfo targetFileInfo; + FileInfo alternateFileInfo; + List runFullFileNameSegments; + string dateTimeFormat = "yy/MM/dd HH:mm:ss"; + NginxFileSystem[] runNginxFileSystemCollection; + NginxFileSystem[] rootNginxFileSystemCollection; + DateTime fileAgeThresholdDateTime = DateTime.Now; + string nginxFormat = "ddd, dd MMM yyyy HH:mm:ss zzz"; + List> possibleDownload = new(); + string[] segments = _FileConnectorConfiguration.FileAgeThreshold.Split(':'); + JsonSerializerOptions propertyNameCaseInsensitiveJsonSerializerOptions = new() { PropertyNameCaseInsensitive = true }; + for (int i = 0; i < segments.Length; i++) + { + fileAgeThresholdDateTime = i switch + { + 0 => fileAgeThresholdDateTime.AddDays(double.Parse(segments[i]) * -1), + 1 => fileAgeThresholdDateTime.AddHours(double.Parse(segments[i]) * -1), + 2 => fileAgeThresholdDateTime.AddMinutes(double.Parse(segments[i]) * -1), + 3 => fileAgeThresholdDateTime.AddSeconds(double.Parse(segments[i]) * -1), + _ => throw new Exception(), + }; + } + rootJson = _WebClient.DownloadString(string.Concat("http://", _StaticFileServer)); + rootNginxFileSystemCollection = JsonSerializer.Deserialize(rootJson, propertyNameCaseInsensitiveJsonSerializerOptions); + foreach (NginxFileSystem rootNginxFileSystem in rootNginxFileSystemCollection) + { + if (!(from l in _FileConnectorConfiguration.SourceFileFilters where rootNginxFileSystem.Name == l select false).Any()) + continue; + logText = _WebClient.DownloadString(string.Concat("http://", _StaticFileServer, '/', rootNginxFileSystem.Name)); + logLines = logText.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); + foreach (string logLine in logLines) + { + if (string.IsNullOrEmpty(logLine)) + continue; + logSegments = logLine.Split('<'); + if (logSegments.Length < 1 || !DateTime.TryParseExact(logSegments[0].Trim(), dateTimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime tvsDateTime)) + continue; + if (tvsDateTime < fileAgeThresholdDateTime) + continue; + if (logSegments.Length < 2) + continue; + runFullFileName = logSegments[1].Split('>')[0]; + if (!(from l in _FileConnectorConfiguration.SourceFileFilters where runFullFileName.EndsWith(l) select false).Any()) + continue; + runFullFileNameSegments = runFullFileName.Split('\\').ToList(); + runFileName = runFullFileNameSegments[runFullFileNameSegments.Count - 1]; + runFullFileNameSegments.RemoveAt(runFullFileNameSegments.Count - 1); + runJson = _WebClient.DownloadString(string.Concat("http://", _StaticFileServer, '/', string.Join("/", runFullFileNameSegments))); + runFullFileNameSegments.Add(runFileName); + runNginxFileSystemCollection = JsonSerializer.Deserialize(runJson, propertyNameCaseInsensitiveJsonSerializerOptions); + foreach (NginxFileSystem matchNginxFileSystem in runNginxFileSystemCollection) + { + if (matchNginxFileSystem.Name != runFileName) + continue; + if (!(from l in _FileConnectorConfiguration.SourceFileFilters where matchNginxFileSystem.Name.EndsWith(l) select false).Any()) + continue; + if (!DateTime.TryParseExact(matchNginxFileSystem.MTime.Replace("GMT", "+00:00"), nginxFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime matchNginxFileSystemDateTime)) + continue; + if (matchNginxFileSystemDateTime < fileAgeThresholdDateTime) + continue; + targetFileInfo = new FileInfo(Path.Combine(_FileConnectorConfiguration.TargetFileLocation, runFullFileName)); + if (!Directory.Exists(targetFileInfo.Directory.FullName)) + Directory.CreateDirectory(targetFileInfo.Directory.FullName); + if (targetFileInfo.Exists && targetFileInfo.LastWriteTime == matchNginxFileSystemDateTime) + continue; + alternateFileInfo = new(Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, matchNginxFileSystem.Name)); + targetFileName = string.Concat("http://", _StaticFileServer, '/', string.Join("/", runFullFileNameSegments)); + possibleDownload.Add(new(matchNginxFileSystemDateTime, targetFileInfo, alternateFileInfo, targetFileName)); + break; + } + if (possibleDownload.Any()) + break; + } + if (possibleDownload.Any()) + break; + } + if (possibleDownload.Any()) + { + possibleDownload = (from l in possibleDownload orderby l.Item1 select l).ToList(); + alternateFileInfo = possibleDownload[0].Item3; + targetFileName = possibleDownload[0].Item4; + targetFileInfo = possibleDownload[0].Item2; + DateTime matchNginxFileSystemDateTime = possibleDownload[0].Item1; + if (alternateFileInfo.Exists) + File.Delete(alternateFileInfo.FullName); + if (targetFileInfo.Exists) + File.Delete(targetFileInfo.FullName); + _WebClient.DownloadFile(targetFileName, targetFileInfo.FullName); + targetFileInfo.LastWriteTime = matchNginxFileSystemDateTime; + File.Copy(targetFileInfo.FullName, alternateFileInfo.FullName); + } + } + + private void Callback(object state) + { + try + { + if (_IsEAFHosted) + DownloadRsMFile(); + } + 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/DownloadRsMFile/NginxFileSystem.cs b/Adaptation/FileHandlers/DownloadRsMFile/NginxFileSystem.cs new file mode 100644 index 0000000..56c32c2 --- /dev/null +++ b/Adaptation/FileHandlers/DownloadRsMFile/NginxFileSystem.cs @@ -0,0 +1,12 @@ +namespace Adaptation.FileHandlers.DownloadRsMFile +{ + internal class NginxFileSystem + { + + public string Name { get; set; } + public string Type { get; set; } + public string MTime { get; set; } + public float Size { get; set; } + + } +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/MET08RESIMAPCDE/FileRead.cs b/Adaptation/FileHandlers/MET08RESIMAPCDE/FileRead.cs new file mode 100644 index 0000000..d220dd9 --- /dev/null +++ b/Adaptation/FileHandlers/MET08RESIMAPCDE/FileRead.cs @@ -0,0 +1,552 @@ +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.Text.Json; +using System.Text.Json.Serialization; +using System.Threading; + +namespace Adaptation.FileHandlers.MET08RESIMAPCDE +{ + + public class FileRead : Shared.FileRead, IFileRead + { + + private readonly Timer _Timer; + private int _LastDummyRunIndex; + private readonly string _IqsFile; + private readonly int _HyphenIsDummy; + private readonly int _HyphenIsNaEDA; + private readonly string _MemoryPath; + private readonly int _HyphenIsXToAPC; + private readonly int _HyphenIsXToIQSSi; + private readonly int _HyphenIsXToSPaCe; + private readonly int _HyphenIsXToOpenInsight; + private readonly string _EventNameFileReadDaily; + private readonly string _OpenInsightFilePattern; + private readonly string _OpenInsightMetrologyViewerAPI; + private readonly Dictionary _CellNames; + private readonly int _HyphenIsXToOpenInsightMetrologyViewer; + private readonly int _HyphenIsXToOpenInsightMetrologyViewerAttachments; + + 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, int hyphenXToArchive, int hyphenIsArchive) : + base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted, hyphenXToArchive, hyphenIsArchive) + { + _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); + if (hyphenIsArchive != (int)Hyphen.IsArchive) + throw new Exception(cellInstanceConnectionName); + if (hyphenXToArchive != (int)Hyphen.IsXToArchive) + throw new Exception(cellInstanceConnectionName); + _LastDummyRunIndex = -1; + if (_HyphenIsNaEDA == 0) + { } + if (_HyphenIsXToSPaCe == 0) + { } + if (_HyphenIsXToIQSSi == 0) + { } + _CellNames = new Dictionary(); + _HyphenIsNaEDA = (int)Hyphen.IsNaEDA; + _HyphenIsDummy = (int)Hyphen.IsDummy; + _HyphenIsXToAPC = (int)Hyphen.IsXToAPC; + _HyphenIsXToIQSSi = (int)Hyphen.IsXToIQSSi; + _HyphenIsXToSPaCe = (int)Hyphen.IsXToSPaCe; + _HyphenIsXToOpenInsight = (int)Hyphen.IsXToOpenInsight; + _EventNameFileReadDaily = string.Concat(_EventNameFileRead, "Daily"); + _IqsFile = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "IQS.File"); + _MemoryPath = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Path.Memory"); + _HyphenIsXToOpenInsightMetrologyViewer = (int)Hyphen.IsXToOpenInsightMetrologyViewer; + _HyphenIsXToOpenInsightMetrologyViewerAttachments = (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); + if (_Hyphens == _HyphenIsDummy) + { + 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(this, 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, new Test[] { }, 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 Description)) + throw new Exception(); + } + + void IFileRead.Callback(object state) + { + Callback(state); + } + + void IFileRead.MoveArchive() + { + 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); + } + + protected List GetDescriptions(JsonElement[] jsonElements) + { + List results = new(); + pcl.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) && _Hyphens == _HyphenIsXToOpenInsightMetrologyViewerAttachments); + 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 (_Hyphens != _HyphenIsXToOpenInsight) + 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) && _Hyphens != _HyphenIsXToArchive && _Hyphens != _HyphenIsArchive) + { + if (!Directory.Exists(duplicateDirectory)) + Directory.CreateDirectory(duplicateDirectory); + string successDirectory; + if (_Hyphens != _HyphenIsXToAPC) + 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 (_Hyphens == _HyphenIsXToAPC) + { + if (!isDummyRun && _IsEAFHosted) + File.Copy(reportFullPath, duplicateFile, overwrite: true); + } + else + { + if (_Hyphens == _HyphenIsXToOpenInsightMetrologyViewer) + { + 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 lines; + Shared.Properties.IScopeInfo scopeInfo; + foreach (KeyValuePair> keyValuePair in tuple.Item2) + { + test = keyValuePair.Key; + //scopeInfo = new ScopeInfo(test); + if (_Hyphens != _HyphenIsXToOpenInsight) + scopeInfo = new ScopeInfo(test, _IqsFile); + else + scopeInfo = new ScopeInfo(test, _OpenInsightFilePattern); + //lines = ProcessDataStandardFormat.GetLines(this, scopeInfo, names, values, dateFormat: "M/d/yyyy hh:mm:ss tt", timeFormat: string.Empty, pairedColumns: ExtractResultPairedColumns); + lines = ProcessData.GetLines(this, _Logistics, descriptions); + tuples.Add(new Tuple(scopeInfo, lines)); + } + } + if (_Hyphens == _HyphenIsXToOpenInsightMetrologyViewerAttachments) + { + string[] matchDirectories = Shared1567(reportFullPath, tuples); + if (!isDummyRun && _IsEAFHosted && !isNotUsedInsightMetrologyViewerAttachments) + ProcessData.PostOpenInsightMetrologyViewerAttachments(this, dateTime, logisticsSequenceMemoryDirectory, descriptions, matchDirectories[0]); + } + } + if (_Hyphens != _HyphenIsXToOpenInsightMetrologyViewer && _Hyphens != _HyphenIsXToOpenInsightMetrologyViewerAttachments) + Shared0413(dateTime, isDummyRun, successDirectory, duplicateDirectory, tuples, duplicateFile); + } + if (_Hyphens == _HyphenIsXToOpenInsightMetrologyViewerAttachments) + { + 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) + { + if (_EventName == _EventNameFileRead) + checkDirectory = string.Concat(checkDirectory, @"\", sequence); + else if (_EventName == _EventNameFileReadDaily) + 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) + { + 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 (_Hyphens != _HyphenIsDummy) + 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/MET08RESIMAPCDE/Hyphen.cs b/Adaptation/FileHandlers/MET08RESIMAPCDE/Hyphen.cs new file mode 100644 index 0000000..0bb6667 --- /dev/null +++ b/Adaptation/FileHandlers/MET08RESIMAPCDE/Hyphen.cs @@ -0,0 +1,18 @@ +namespace Adaptation.FileHandlers.MET08RESIMAPCDE +{ + + public enum Hyphen + { + IsXToOpenInsightMetrologyViewer, //MetrologyWS.SendData(file, string.Concat("http://", serverName, "/api/inbound/CDE")); + IsXToIQSSi, //NA -361 + IsXToOpenInsight, //NA -363 + IsXToOpenInsightMetrologyViewerAttachments, //Site-None -362 + IsXToAPC, + IsXToSPaCe, + IsXToArchive, + IsArchive, + IsDummy, + IsNaEDA + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/MET08RESIMAPCDE/ProcessData.cs b/Adaptation/FileHandlers/MET08RESIMAPCDE/ProcessData.cs new file mode 100644 index 0000000..bf2ad8b --- /dev/null +++ b/Adaptation/FileHandlers/MET08RESIMAPCDE/ProcessData.cs @@ -0,0 +1,56 @@ +using Adaptation.Shared; +using Adaptation.Shared.Properties; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Adaptation.FileHandlers.MET08RESIMAPCDE +{ + + 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 string GetLines(IFileRead fileRead, Logistics logistics, List descriptions) + { + StringBuilder result = new(); + if (fileRead is null) + { } + if (logistics is null) + { } + if (descriptions is null) + { } + return result.ToString(); + } + + internal static void PostOpenInsightMetrologyViewerAttachments(IFileRead fileRead, 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) + { } + //Not used + } + + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/MET08RESIMAPCDE/WSRequest.cs b/Adaptation/FileHandlers/MET08RESIMAPCDE/WSRequest.cs new file mode 100644 index 0000000..e43a0c1 --- /dev/null +++ b/Adaptation/FileHandlers/MET08RESIMAPCDE/WSRequest.cs @@ -0,0 +1,107 @@ +using Adaptation.Shared; +using Adaptation.Shared.Properties; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Adaptation.FileHandlers.MET08RESIMAPCDE +{ + + public class WSRequest + { + + public bool SentToMetrology { get; set; } + public bool SentToSPC { get; set; } + // + + public string AutoOptimizeGain { get; set; } + public string AutoProbeHeightSet { get; set; } + public string Avg { get; set; } + public string CellName { get; set; } + public string DLRatio { get; set; } + public string DataReject { get; set; } + public string Date { get; set; } + public string Engineer { get; set; } + public string EquipId { get; set; } + public string FileName { get; set; } + public string FilePath { get; set; } + public string Id { get; set; } + public string Layer { get; set; } + public string LotId { get; set; } + public string Op { get; set; } + public string PSN { get; set; } + public string RDS { get; set; } + public string Reactor { get; set; } + public string Recipe { get; set; } + public string ResistivitySpec { get; set; } + public string Run { get; set; } + public string SemiRadial { get; set; } + public string StDev { get; set; } + public string Temp { get; set; } + public string UniqueId { get; set; } + public string Zone { get; set; } + public List Details { get; protected set; } + + [Obsolete("For json")] public WSRequest() { } + + internal WSRequest(IFileRead fileRead, Logistics logistics, List descriptions) + { + Id = "-1"; + if (fileRead is null) + { } + CellName = logistics.MesEntity; + Details = new List(); + if (descriptions[0] is not pcl.Description x) + throw new Exception(); + //Header + { + AutoOptimizeGain = x.AutoOptimizeGain; + AutoProbeHeightSet = x.AutoProbeHeightSet; + Avg = x.Avg; + DLRatio = x.DLRatio; + DataReject = x.DataReject; + Date = x.Date; + Op = x.Employee; + Engineer = x.Engineer; + EquipId = x.EquipId; + FileName = x.FileName; + Layer = x.Layer; + LotId = x.Lot; + PSN = x.PSN; + RDS = x.RDS; + Reactor = x.Reactor; + Recipe = x.Recipe; + ResistivitySpec = x.ResistivitySpec; + Run = x.Run; + SemiRadial = x.SemiRadial; + StDev = x.StdDev; + Temp = x.Temp; + UniqueId = x.UniqueId; + Zone = x.Zone; + } + pcl.Detail detail; + foreach (pcl.Description description in descriptions) + { + detail = new pcl.Detail + { + HeaderUniqueId = description.HeaderUniqueId, + Merit = description.Merit, + Pt = description.Pt, + R = description.R, + Rs = description.Rs, + T = description.T, + UniqueId = description.UniqueId + }; + Details.Add(detail); + } + if (Date is null) + Date = logistics.DateTimeFromSequence.ToString(); + if (UniqueId is null && Details.Any()) + UniqueId = Details[0].HeaderUniqueId; + string onlyWSRequest = string.Empty; + FilePath = onlyWSRequest; + } + + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/RsM/Description.cs b/Adaptation/FileHandlers/RsM/Description.cs new file mode 100644 index 0000000..959e5bd --- /dev/null +++ b/Adaptation/FileHandlers/RsM/Description.cs @@ -0,0 +1,316 @@ +using Adaptation.Shared; +using Adaptation.Shared.Methods; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; + +namespace Adaptation.FileHandlers.RsM +{ + + public class Description : 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 AutoOptimizeGain { get; set; } + public string AutoProbeHeightSet { get; set; } + public string Avg { get; set; } + public string DataReject { get; set; } + public string DLRatio { get; set; } + public string Merit { get; set; } + public string Pt { get; set; } + public string R { get; set; } + public string ResistivitySpec { get; set; } + public string Rs { get; set; } + public string SemiRadial { get; set; } + public string StdDev { get; set; } + public string T { get; set; } + public string Temp { get; set; } + // + public string Engineer { get; set; } + public string EquipId { get; set; } + public string FileName { get; set; } + public string HeaderUniqueId { get; set; } + public string Id { get; set; } + public string Layer { get; set; } + public string RDS { get; set; } + public string Run { get; set; } + public string UniqueId { get; set; } + public string Zone { get; set; } + + string IDescription.GetEventDescription() + { + return "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(AutoOptimizeGain), + nameof(AutoProbeHeightSet), + nameof(Avg), + nameof(DataReject), + nameof(DLRatio), + nameof(Merit), + nameof(Pt), + nameof(R), + nameof(ResistivitySpec), + nameof(Rs), + nameof(SemiRadial), + nameof(StdDev), + nameof(T), + nameof(Temp) + }; + 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(Engineer), + nameof(EquipId), + nameof(FileName), + nameof(HeaderUniqueId), + nameof(Id), + nameof(Layer), + nameof(RDS), + nameof(Run), + nameof(UniqueId), + nameof(Zone) + }; + 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.Engineer, + Lot = processData.Lot, + PSN = processData.PSN, + Reactor = processData.Reactor, + Recipe = processData.Recipe, + // + AutoOptimizeGain = processData.AutoOptimizeGain, + AutoProbeHeightSet = processData.AutoProbeHeightSet, + Avg = processData.Avg, + DataReject = processData.DataReject, + DLRatio = processData.DLRatio, + Merit = detail.Merit, + Pt = detail.Pt, + R = detail.R, + ResistivitySpec = processData.ResistivitySpec, + Rs = detail.Rs, + SemiRadial = processData.SemiRadial, + StdDev = processData.StandardDeviationPercentage, + T = detail.T, + Temp = processData.Temp, + // + Engineer = processData.Engineer, + EquipId = processData.EquipId, + FileName = processData.FileName, + HeaderUniqueId = detail.HeaderUniqueId, + Id = processData.UniqueId, + Layer = processData.Layer, + RDS = processData.RDS, + Run = processData.Run, + UniqueId = detail.UniqueId, + Zone = processData.Zone + }; + results.Add(description); + } + } + return results; + } + + private 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), + // + AutoOptimizeGain = nameof(AutoOptimizeGain), + AutoProbeHeightSet = nameof(AutoProbeHeightSet), + Avg = nameof(Avg), + DataReject = nameof(DataReject), + DLRatio = nameof(DLRatio), + Merit = nameof(Merit), + Pt = nameof(Pt), + R = nameof(R), + ResistivitySpec = nameof(ResistivitySpec), + Rs = nameof(Rs), + SemiRadial = nameof(SemiRadial), + StdDev = nameof(StdDev), + T = nameof(T), + Temp = nameof(Temp), + // + Engineer = nameof(Engineer), + EquipId = nameof(EquipId), + FileName = nameof(FileName), + HeaderUniqueId = nameof(HeaderUniqueId), + Id = nameof(Id), + Layer = nameof(Layer), + RDS = nameof(RDS), + Run = nameof(Run), + UniqueId = nameof(UniqueId), + Zone = nameof(Zone), + }; + return result; + } + + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/RsM/Detail.cs b/Adaptation/FileHandlers/RsM/Detail.cs new file mode 100644 index 0000000..9f9a76b --- /dev/null +++ b/Adaptation/FileHandlers/RsM/Detail.cs @@ -0,0 +1,22 @@ +namespace Adaptation.FileHandlers.RsM +{ + + public class Detail + { + + public string HeaderUniqueId { get; set; } + public string Merit { get; set; } + public string Pt { get; set; } + public string R { get; set; } + public string Rs { get; set; } + public string T { get; set; } + public string UniqueId { get; set; } + + public override string ToString() + { + return string.Concat(Merit, ";", Pt, ";", R, ";", Rs, ";", T); + } + + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/RsM/FileRead.cs b/Adaptation/FileHandlers/RsM/FileRead.cs new file mode 100644 index 0000000..e9416de --- /dev/null +++ b/Adaptation/FileHandlers/RsM/FileRead.cs @@ -0,0 +1,149 @@ +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.RsM +{ + + 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, int hyphenXToArchive, int hyphenIsArchive) : + base(new Description(), true, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted, hyphenXToArchive, hyphenIsArchive) + { + _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(this, 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, new Test[] { }, 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.MoveArchive() + { + 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 + { + string logBody = string.Empty; + 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; + logBody = processData.LogBody; + } + if (!iProcessData.Details.Any()) + throw new Exception(string.Concat("No Data - ", dateTime.Ticks)); + results = iProcessData.GetResults(this, _Logistics, results.Item4); + if (!_IsEAFHosted) + results = new(logBody, results.Item2, results.Item3, results.Item4); + } + return results; + } + + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/RsM/ProcessData.cs b/Adaptation/FileHandlers/RsM/ProcessData.cs new file mode 100644 index 0000000..4dfa370 --- /dev/null +++ b/Adaptation/FileHandlers/RsM/ProcessData.cs @@ -0,0 +1,279 @@ +using Adaptation.Shared; +using Adaptation.Shared.Methods; +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.RsM +{ + + public class ProcessData : IProcessData + { + + private readonly List _Details; + + public string JobID { get; set; } + public string MesEntity { get; set; } + public string AutoOptimizeGain { get; set; } + public string AutoProbeHeightSet { get; set; } + public string Avg { get; set; } + public string DLRatio { get; set; } + public string DataReject { get; set; } + public string Date { get; set; } + public DateTime DateTime { get; set; } + public string Employee { get; set; } + public string EquipId { get; set; } + public string Engineer { get; set; } + public string FileName { get; set; } + public string Layer { get; set; } + public string Lot { get; set; } + public string LogBody { get; set; } + public string PSN { get; set; } + public string Project { get; set; } + public string RDS { get; set; } + public string Reactor { get; set; } + public string Recipe { get; set; } + public string RecipeName { get; set; } + public string ResistivitySpec { get; set; } + public string Run { get; set; } + public string SemiRadial { get; set; } + public string StandardDeviation { get; set; } + public string StandardDeviationPercentage { get; set; } + public string Temp { get; set; } + public string Title { get; set; } + public string UniqueId { get; set; } + public string Zone { get; set; } + + List Shared.Properties.IProcessData.Details => _Details; + + public ProcessData(IFileRead fileRead, Logistics logistics, List fileInfoCollection) + { + JobID = logistics.JobID; + fileInfoCollection.Clear(); + _Details = new List(); + MesEntity = logistics.MesEntity; + 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.CDE); + 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 SetTitleData(string[] segments) + { + if (segments.Length > 0) + { + Title = segments[0]; + // Remove illegal characters \/:*?"<>| found in the Run. + Run = Regex.Replace(segments[0], @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]", "_").Split('\r')[0].Split('\n')[0]; + string[] parsedBatch = segments[0].Split('-'); + if (parsedBatch.Length > 0) + Reactor = parsedBatch[0]; + if (parsedBatch.Length > 1) + RDS = parsedBatch[1]; + if (parsedBatch.Length > 2) + { + string[] parsedPSN = parsedBatch[2].Split('.'); + if (parsedPSN.Length > 0) + PSN = parsedPSN[0]; + if (parsedPSN.Length > 1) + Layer = parsedPSN[1]; + } + if (parsedBatch.Length > 3) + Zone = parsedBatch[3]; + } + } + + private void SetFileNameData(string[] segments) + { + if (segments.Length > 1) + FileName = segments[0]; + if (segments.Length > 2) + { + Project = segments[1]; + RecipeName = segments[2]; + Recipe = string.Concat(segments[1], " \\ ", segments[2]); + } + } + + internal static DateTime GetDateTime(Logistics logistics, string dateTimeText) + { + DateTime result; + string inputDateFormat = "HH:mm MM/dd/yy"; + if (dateTimeText.Length != inputDateFormat.Length) + result = logistics.DateTimeFromSequence; + else + { + if (!DateTime.TryParseExact(dateTimeText, inputDateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTimeParsed)) + result = logistics.DateTimeFromSequence; + else + { + if (dateTimeParsed < logistics.DateTimeFromSequence.AddDays(1) && dateTimeParsed > logistics.DateTimeFromSequence.AddDays(-1)) + result = dateTimeParsed; + else + result = logistics.DateTimeFromSequence; + } + } + return result; + } + + private void SetDateTimeData(Logistics logistics, string[] segments) + { + DateTime dateTime; + if (segments.Length < 2) + dateTime = logistics.DateTimeFromSequence; + else + { + string dateTimeText = string.Concat(segments[0], ' ', segments[1]); + dateTime = GetDateTime(logistics, dateTimeText); + } + DateTime = dateTime; + Date = dateTime.ToString(); + if (segments.Length > 3 && float.TryParse(segments[2], out float temp)) + Temp = temp.ToString("0.0"); + if (segments.Length > 7 && segments[6] == "Avg=") + Avg = segments[7]; + if (segments.Length > 7 && segments[8] == "Dev=") + StandardDeviation = segments[9]; + if (!string.IsNullOrEmpty(Avg) && !string.IsNullOrEmpty(StandardDeviation) && float.TryParse(Avg, out float average) && float.TryParse(StandardDeviation, out float standardDeviation)) + StandardDeviationPercentage = Math.Round(standardDeviation / average, 4).ToString("0.00%"); + } + + private void SetOperatorData(string[] segments) + { + if (segments.Length > 1) + Employee = segments[0]; + if (segments.Length > 2) + EquipId = segments[1]; + } + + private void SetEngineerData(string[] segments) + { + if (segments.Length > 1) + Engineer = segments[0]; + } + + private void SetNumProbePointsData(string[] segments) + { + if (segments.Length > 6) + DataReject = segments[6]; + } + + private Detail GetRData(string[] segments) + { + Detail result = new(); + if (segments.Length > 0 && float.TryParse(segments[0], out float r)) + result.R = r.ToString("0.0"); + if (segments.Length > 1 && float.TryParse(segments[1], out float t)) + result.T = t.ToString("0.0"); + if (segments.Length > 2 && float.TryParse(segments[2], out float rs)) + result.Rs = rs.ToString("0.0000"); + if (segments.Length > 12 && float.TryParse(segments[12], out float merit)) + result.Merit = merit.ToString("0.00"); + result.Pt = "-1"; + result.UniqueId = string.Empty; + return result; + } + + private void Parse(IFileRead fileRead, Logistics logistics, List fileInfoCollection) + { + if (fileRead is null) + { } + Lot = "LotID"; + Detail detail; + if (fileInfoCollection is null) + { } + string timeFormat = "yyyyMMddHHmmss"; + string[] separator = new string[] { " " }; + string[] lines = File.ReadAllLines(logistics.ReportFullPath); + for (int i = 0; i < lines.Length; i++) + { + if (lines[i].Contains(",")) + SetTitleData(lines[i].Split(separator, StringSplitOptions.RemoveEmptyEntries)); + else if (lines[i].Contains(",<FileName, Proj,Rcpe, LotID,WfrID>")) + SetFileNameData(lines[i].Split(separator, StringSplitOptions.RemoveEmptyEntries)); + else if (lines[i].Contains(",<DateTime,Temp,TCR%,N|P>")) + SetDateTimeData(logistics, lines[i].Split(separator, StringSplitOptions.RemoveEmptyEntries)); + else if (lines[i].Contains(",<Operator, Epuipment>")) + SetOperatorData(lines[i].Split(separator, StringSplitOptions.RemoveEmptyEntries)); + else if (lines[i].Contains(",<Engineer>")) + SetEngineerData(lines[i].Split(separator, StringSplitOptions.RemoveEmptyEntries)); + else if (lines[i].Contains(",<NumProbePoints, SingleOrDualProbeConfig, #ActPrbPts, Rsens,IdrvMx,VinGain, DataRejectSigma, MeritThreshold>")) + SetNumProbePointsData(lines[i].Split(separator, StringSplitOptions.RemoveEmptyEntries)); + else if (lines[i].Contains(",<R,Th,Data, Rs,RsA,RsB, #Smpl, x,y, Irng,Vrng,ChiSq,merit,DataIntegrity>")) + { + for (int z = i; z < lines.Length; z++) + { + i = z; + if (string.IsNullOrEmpty(lines[z])) + continue; + detail = GetRData(lines[z].Split(separator, StringSplitOptions.RemoveEmptyEntries)); + _Details.Add(detail); + } + } + } + UniqueId = string.Concat(EquipId, "_", Run, "_", logistics.DateTimeFromSequence.ToString(timeFormat)); + for (int i = 0; i < _Details.Count; i++) + { + if (_Details[i] is not Detail item) + continue; + item.HeaderUniqueId = UniqueId; + item.Pt = (i + 1).ToString(); + item.UniqueId = string.Concat(item, "_Point-", item.Pt); + } + // Remove illegal characters \/:*?"<>| found in the Lot. + Lot = Regex.Replace(Lot, @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]", "_").Split('\r')[0].Split('\n')[0]; + StringBuilder stringBuilder = new(); + string reportFileName = Path.GetFileName(logistics.ReportFullPath); + stringBuilder.AppendLine($"RUN [{Title}]"); + stringBuilder.AppendLine($"Recipe {Project} \\ {RecipeName} RESISTIVITY {"####"}"); + stringBuilder.AppendLine($"EQUIP# {EquipId} Engineer {Engineer}"); + stringBuilder.AppendLine($"LotID {Lot} D.L.RATIO {"#.####"}"); + stringBuilder.AppendLine($"OPERATOR {Employee} TEMP {Temp} {DateTime:HH:mm MM/dd/yy}"); + stringBuilder.AppendLine($"AutoOptimizeGain = {"###"} AutoProbeHeightSet = {"##"}"); + stringBuilder.AppendLine($"DataReject > {"#.#"}Sigma"); + stringBuilder.AppendLine($"0 ..\\{Project}.prj\\{RecipeName}.rcp\\{reportFileName} {DateTime:HH:mm MM/dd/yy}"); + stringBuilder.AppendLine($"pt# R Th Rs[Ohm/sq@T] Merit"); + for (int i = 0; i < _Details.Count; i++) + { + if (_Details[i] is not Detail item) + continue; + stringBuilder.AppendLine($"{item.Pt} {item.R} {item.T} {item.Rs} {item.Merit}"); + } + stringBuilder.AppendLine($"Avg = {Avg} {StandardDeviationPercentage} SEMI Radial= {"#.##%"}"); + LogBody = stringBuilder.ToString(); + } + + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/pcl/Description.cs b/Adaptation/FileHandlers/pcl/Description.cs new file mode 100644 index 0000000..6f921a6 --- /dev/null +++ b/Adaptation/FileHandlers/pcl/Description.cs @@ -0,0 +1,315 @@ +using Adaptation.Shared; +using Adaptation.Shared.Methods; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; + +namespace Adaptation.FileHandlers.pcl +{ + + 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 AutoOptimizeGain { get; set; } + public string AutoProbeHeightSet { get; set; } + public string Avg { get; set; } + public string DataReject { get; set; } + public string DLRatio { get; set; } + public string Merit { get; set; } + public string Pt { get; set; } + public string R { get; set; } + public string ResistivitySpec { get; set; } + public string Rs { get; set; } + public string SemiRadial { get; set; } + public string StdDev { get; set; } + public string T { get; set; } + public string Temp { get; set; } + // + public string Engineer { get; set; } + public string EquipId { get; set; } + public string FileName { get; set; } + public string HeaderUniqueId { get; set; } + public string Id { get; set; } + public string Layer { get; set; } + public string RDS { get; set; } + public string Run { get; set; } + public string UniqueId { get; set; } + public string Zone { get; set; } + + string IDescription.GetEventDescription() + { + return "File Has been read and parsed"; + } + + List<string> IDescription.GetNames(IFileRead fileRead, Logistics logistics) + { + List<string> results = new(); + IDescription description = GetDefault(fileRead, logistics); + string json = JsonSerializer.Serialize(description, description.GetType()); + object @object = JsonSerializer.Deserialize<object>(json); + if (@object is not JsonElement jsonElement) + throw new Exception(); + foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) + results.Add(jsonProperty.Name); + return results; + } + + List<string> IDescription.GetDetailNames() + { + List<string> results = new() + { + nameof(AutoOptimizeGain), + nameof(AutoProbeHeightSet), + nameof(Avg), + nameof(DataReject), + nameof(DLRatio), + nameof(Merit), + nameof(Pt), + nameof(R), + nameof(ResistivitySpec), + nameof(Rs), + nameof(SemiRadial), + nameof(StdDev), + nameof(T), + nameof(Temp) + }; + return results; + } + + List<string> IDescription.GetHeaderNames() + { + List<string> 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<string> IDescription.GetParameterNames() + { + List<string> results = new() + { + nameof(Engineer), + nameof(EquipId), + nameof(FileName), + nameof(HeaderUniqueId), + nameof(Id), + nameof(Layer), + nameof(RDS), + nameof(Run), + nameof(UniqueId), + nameof(Zone) + }; + 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<object>(json); + results = ((JsonElement)@object).EnumerateObject().ToArray(); + return results; + } + + List<string> IDescription.GetPairedParameterNames() + { + List<string> results = new(); + return results; + } + + List<string> IDescription.GetIgnoreParameterNames(Test test) + { + List<string> results = new(); + return results; + } + + IDescription IDescription.GetDefaultDescription(IFileRead fileRead, Logistics logistics) + { + Description result = GetDefault(fileRead, logistics); + return result; + } + + Dictionary<string, string> IDescription.GetDisplayNamesJsonElement(IFileRead fileRead) + { + Dictionary<string, string> results = new(); + IDescription description = GetDisplayNames(); + string json = JsonSerializer.Serialize(description, description.GetType()); + JsonElement jsonElement = JsonSerializer.Deserialize<JsonElement>(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> IDescription.GetDescriptions(IFileRead fileRead, Logistics logistics, List<Test> tests, IProcessData iProcessData) + { + List<IDescription> 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.Engineer, + Lot = processData.Lot, + PSN = processData.PSN, + Reactor = processData.Reactor, + Recipe = processData.Recipe, + // + AutoOptimizeGain = processData.AutoOptimizeGain, + AutoProbeHeightSet = processData.AutoProbeHeightSet, + Avg = processData.Avg, + DataReject = processData.DataReject, + DLRatio = processData.DLRatio, + Merit = detail.Merit, + Pt = detail.Pt, + R = detail.R, + ResistivitySpec = processData.ResistivitySpec, + Rs = detail.Rs, + SemiRadial = processData.SemiRadial, + StdDev = processData.StdDev, + T = detail.T, + Temp = processData.Temp, + // + Engineer = processData.Engineer, + EquipId = processData.EquipId, + FileName = processData.FileName, + HeaderUniqueId = detail.HeaderUniqueId, + Id = processData.UniqueId, + Layer = processData.Layer, + RDS = processData.RDS, + Run = processData.Run, + UniqueId = detail.UniqueId, + Zone = processData.Zone + }; + results.Add(description); + } + } + return results; + } + + private 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), + // + AutoOptimizeGain = nameof(AutoOptimizeGain), + AutoProbeHeightSet = nameof(AutoProbeHeightSet), + Avg = nameof(Avg), + DataReject = nameof(DataReject), + DLRatio = nameof(DLRatio), + Merit = nameof(Merit), + Pt = nameof(Pt), + R = nameof(R), + ResistivitySpec = nameof(ResistivitySpec), + Rs = nameof(Rs), + SemiRadial = nameof(SemiRadial), + StdDev = nameof(StdDev), + T = nameof(T), + Temp = nameof(Temp), + // + Engineer = nameof(Engineer), + EquipId = nameof(EquipId), + FileName = nameof(FileName), + HeaderUniqueId = nameof(HeaderUniqueId), + Id = nameof(Id), + Layer = nameof(Layer), + RDS = nameof(RDS), + Run = nameof(Run), + UniqueId = nameof(UniqueId), + Zone = nameof(Zone), + }; + return result; + } + + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/pcl/Detail.cs b/Adaptation/FileHandlers/pcl/Detail.cs new file mode 100644 index 0000000..98cf40c --- /dev/null +++ b/Adaptation/FileHandlers/pcl/Detail.cs @@ -0,0 +1,22 @@ +namespace Adaptation.FileHandlers.pcl +{ + + public class Detail + { + + public string HeaderUniqueId { get; set; } + public string Merit { get; set; } + public string Pt { get; set; } + public string R { get; set; } + public string Rs { get; set; } + public string T { get; set; } + public string UniqueId { get; set; } + + public override string ToString() + { + return string.Concat(Merit, ";", Pt, ";", R, ";", Rs, ";", T); + } + + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/pcl/FileRead.cs b/Adaptation/FileHandlers/pcl/FileRead.cs new file mode 100644 index 0000000..292c332 --- /dev/null +++ b/Adaptation/FileHandlers/pcl/FileRead.cs @@ -0,0 +1,145 @@ +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.pcl +{ + + public class FileRead : Shared.FileRead, IFileRead + { + + public FileRead(ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted, int hyphenXToArchive, int hyphenIsArchive) : + base(new Description(), true, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted, hyphenXToArchive, hyphenIsArchive) + { + _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<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception) + { + Move(this, extractResults, exception); + } + + void IFileRead.WaitForThread() + { + WaitForThread(thread: null, threadExceptions: null); + } + + string IFileRead.GetEventDescription() + { + string result = _Description.GetEventDescription(); + return result; + } + + List<string> IFileRead.GetHeaderNames() + { + List<string> results = _Description.GetHeaderNames(); + return results; + } + + string[] IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> 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<string, string> IFileRead.GetDisplayNamesJsonElement() + { + Dictionary<string, string> results = _Description.GetDisplayNamesJsonElement(this); + return results; + } + + List<IDescription> IFileRead.GetDescriptions(IFileRead fileRead, List<Test> tests, IProcessData processData) + { + List<IDescription> results = _Description.GetDescriptions(fileRead, _Logistics, tests, processData); + return results; + } + + Tuple<string, Test[], JsonElement[], List<FileInfo>> IFileRead.GetExtractResult(string reportFullPath, string eventName) + { + Tuple<string, Test[], JsonElement[], List<FileInfo>> 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<string, Test[], JsonElement[], List<FileInfo>>(results.Item1, new Test[] { }, JsonSerializer.Deserialize<JsonElement[]>("[]"), results.Item4); + if (results.Item3.Length > 0 && _IsEAFHosted) + WritePDSF(this, results.Item3); + UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks); + return results; + } + + Tuple<string, Test[], JsonElement[], List<FileInfo>> IFileRead.ReExtract() + { + Tuple<string, Test[], JsonElement[], List<FileInfo>> results; + List<string> headerNames = _Description.GetHeaderNames(); + Dictionary<string, string> 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.MoveArchive() + { + throw new Exception(string.Concat("Not ", nameof(_IsDuplicator))); + } + + void IFileRead.Callback(object state) + { + throw new Exception(string.Concat("Not ", nameof(_IsDuplicator))); + } + + private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime) + { + Tuple<string, Test[], JsonElement[], List<FileInfo>> results = new(string.Empty, null, null, new List<FileInfo>()); + _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/pcl/ProcessData.cs b/Adaptation/FileHandlers/pcl/ProcessData.cs new file mode 100644 index 0000000..c71b4fe --- /dev/null +++ b/Adaptation/FileHandlers/pcl/ProcessData.cs @@ -0,0 +1,452 @@ +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.pcl +{ + + public class ProcessData : IProcessData + { + + private int _I; + private string _Data; + + private readonly ILog _Log; + private readonly List<object> _Details; + + public string JobID { get; set; } + public string MesEntity { get; set; } + public string AutoOptimizeGain { get; set; } + public string AutoProbeHeightSet { get; set; } + public string Avg { get; set; } + public string DLRatio { get; set; } + public string DataReject { get; set; } + public string Date { get; set; } + public string Employee { get; set; } + public string EquipId { get; set; } + public string Engineer { get; set; } + public string FileName { get; set; } + public string Layer { get; set; } + public string Lot { get; set; } + public string PSN { get; set; } + public string RDS { get; set; } + public string Reactor { get; set; } + public string Recipe { get; set; } + public string ResistivitySpec { get; set; } + public string Run { get; set; } + public string SemiRadial { get; set; } + public string StdDev { get; set; } + public string Temp { get; set; } + public string UniqueId { get; set; } + public string Zone { get; set; } + + List<object> Shared.Properties.IProcessData.Details => _Details; + + public ProcessData(IFileRead fileRead, Logistics logistics, List<FileInfo> fileInfoCollection) + { + fileInfoCollection.Clear(); + _Details = new List<object>(); + _I = 0; + _Data = string.Empty; + JobID = logistics.JobID; + MesEntity = logistics.MesEntity; + _Log = LogManager.GetLogger(typeof(ProcessData)); + Parse(fileRead, logistics, fileInfoCollection); + } + + string IProcessData.GetCurrentReactor(IFileRead fileRead, Logistics logistics, Dictionary<string, string> reactors) + { + throw new Exception(string.Concat("See ", nameof(Parse))); + } + + Tuple<string, Test[], JsonElement[], List<FileInfo>> IProcessData.GetResults(IFileRead fileRead, Logistics logistics, List<FileInfo> fileInfoCollection) + { + Tuple<string, Test[], JsonElement[], List<FileInfo>> results; + List<Test> tests = new(); + foreach (object item in _Details) + tests.Add(Test.CDE); + List<IDescription> 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<Description> fileReadDescriptions = (from l in descriptions select (Description)l).ToList(); + string json = JsonSerializer.Serialize(fileReadDescriptions, fileReadDescriptions.GetType()); + JsonElement[] jsonElements = JsonSerializer.Deserialize<JsonElement[]>(json); + results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(logistics.Logistics1[0], tests.ToArray(), jsonElements, fileInfoCollection); + return results; + } + + private string GetBefore(string text) + { + string str; + string str1; + int num = _Data.IndexOf(text, _I); + if (num <= -1) + { + str = _Data.Substring(_I); + _I = _Data.Length; + str1 = str.Trim(); + } + else + { + str = _Data.Substring(_I, num - _I); + _I = num + text.Length; + str1 = str.Trim(); + } + return str1; + } + + private string GetBefore(string text, bool trim) + { + string str; + string before; + if (!trim) + { + int num = _Data.IndexOf(text, _I); + if (num <= -1) + { + str = _Data.Substring(_I); + _I = _Data.Length; + before = str; + } + else + { + str = _Data.Substring(_I, num - _I); + _I = num + text.Length; + before = str; + } + } + else + { + before = GetBefore(text); + } + return before; + } + + private string GetToEOL() + { + return GetBefore("\n"); + } + + private string GetToEOL(bool trim) + { + string str; + str = (!trim ? GetBefore("\n", false) : GetToEOL()); + return str; + } + + private string GetToken() + { + while (true) + { + if ((_I >= _Data.Length || !IsNullOrWhiteSpace(_Data.Substring(_I, 1)))) + break; + _I++; + } + int num = _I; + while (true) + { + if ((num >= _Data.Length || IsNullOrWhiteSpace(_Data.Substring(num, 1)))) + break; + num++; + } + string str = _Data.Substring(_I, num - _I); + _I = num; + return str.Trim(); + } + + private string GetToText(string text) + { + string str = _Data.Substring(_I, _Data.IndexOf(text, _I) - _I).Trim(); + return str; + } + + private bool IsBlankLine() + { + int num = _Data.IndexOf("\n", _I); + return IsNullOrWhiteSpace((num > -1 ? _Data.Substring(_I, num - _I) : _Data.Substring(_I))); + } + + private bool IsNullOrWhiteSpace(string text) + { + bool flag; + int num = 0; + while (true) + { + if (num >= text.Length) + { + flag = true; + break; + } + else if (char.IsWhiteSpace(text[num])) + { + num++; + } + else + { + flag = false; + break; + } + } + return flag; + } + + private string PeekNextLine() + { + int num = _I; + string toEOL = GetToEOL(); + _I = num; + return toEOL; + } + + private void ScanPast(string text) + { + int num = _Data.IndexOf(text, _I); + if (num <= -1) + { + _I = _Data.Length; + } + else + { + _I = num + text.Length; + } + } + + internal static DateTime GetDateTime(Logistics logistics, string dateTimeText) + { + DateTime result; + string inputDateFormat = "HH:mm MM/dd/yy"; + if (dateTimeText.Length != inputDateFormat.Length) + result = logistics.DateTimeFromSequence; + else + { + if (!DateTime.TryParseExact(dateTimeText, inputDateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTimeParsed)) + result = logistics.DateTimeFromSequence; + else + { + if (dateTimeParsed < logistics.DateTimeFromSequence.AddDays(1) && dateTimeParsed > logistics.DateTimeFromSequence.AddDays(-1)) + result = dateTimeParsed; + else + result = logistics.DateTimeFromSequence; + } + } + return result; + } + + private void Parse(IFileRead fileRead, Logistics logistics, List<FileInfo> fileInfoCollection) + { + if (fileRead is null) + { } + // Convert the source file to UTF8Encoding format and then back to string for processing. This convertion + // shall eliminate the special HEX characters such as 0x18 "CANCEL" and 0x20 "SPACE" captured via nPort. + string rawText = File.ReadAllText(logistics.ReportFullPath); + UTF8Encoding utf8Encoding = new(); + byte[] bytes = utf8Encoding.GetBytes(rawText); + string convertedText = utf8Encoding.GetString(bytes); + // Replaces all control characters with a space, except for the TAB (0x09), LF (0x0A), CR (0x0D), and + // normal ASCII characters, which are valid characters for SharePoint. + string receivedData = Regex.Replace(convertedText, @"[^\u0009\u000A\u000D\u0020-\u007E]", " "); + string log = receivedData; + for (short i = 0; i < short.MaxValue; i++) + { + if (!log.Contains(" ")) + break; + log = log.Replace(" ", " "); + } + log = log.Replace(" ", "\t").Replace(": ", "\t").Replace(":\t", "\t"); + IEnumerable<string> lines = (from l in log.Split('\r') select l.Trim()); + string logFile = Path.ChangeExtension(logistics.ReportFullPath, ".log"); + File.WriteAllLines(logFile, lines); + fileInfoCollection.Add(new FileInfo(logFile)); + //parse file + string h = string.Empty; + receivedData = receivedData.Replace("\r", "\n").Trim(); + _I = 0; + _Data = string.Empty; + if (string.IsNullOrEmpty(receivedData)) + throw new Exception("No data!"); + Detail detail; + _I = 0; + _Data = receivedData; + ScanPast("RUN:"); + Run = GetToEOL(); + ScanPast("Recipe:"); + Recipe = GetBefore("RESISTIVITY SPEC:"); + if (string.IsNullOrEmpty(Recipe)) + { + _I = 0; + _Data = receivedData; + ScanPast("RUN:"); + Run = GetToEOL(); + ScanPast("DEVICE:"); + Recipe = GetBefore("RESISTIVITY SPEC:"); + } + ResistivitySpec = GetToEOL(); + ScanPast("EQUIP#:"); + EquipId = GetBefore("Engineer:"); + Engineer = GetToEOL(); + ScanPast("LotID:"); + Lot = GetBefore("D.L.RATIO:"); + // Remove illegal characters \/:*?"<>| found in the Lot. + Lot = Regex.Replace(Lot, @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]", "_").Split('\r')[0].Split('\n')[0]; + DLRatio = GetToEOL(); + ScanPast("OPERATOR:"); + Employee = GetBefore("TEMP:"); + Temp = GetToken(); + string dateTimeText = GetToEOL(); + DateTime dateTime = GetDateTime(logistics, dateTimeText); + Date = dateTime.ToString(); + ScanPast("AutoOptimizeGain ="); + AutoOptimizeGain = GetBefore("AutoProbeHeightSet ="); + AutoProbeHeightSet = GetToEOL(); + ScanPast("DataReject"); + DataReject = GetToEOL(); + GetToEOL(); + FileName = GetToEOL(); + GetToEOL(); + GetToEOL(); + bool check = false; + while (!IsBlankLine()) + { + detail = new Detail() { Pt = GetToken() }; + if (detail.Pt.Contains("Avg")) + break; + else if (!detail.Pt.Contains(":")) + { + detail.R = GetToken(); + detail.T = GetToken(); + detail.Rs = GetToken(); + detail.Merit = GetToken(); + detail.UniqueId = string.Concat("_Point-", _Details.Count + 1); + GetToEOL(); + _Details.Add(detail); + } + else + { + check = true; + break; + } + } + _I = 0; + _Data = receivedData; + if (!check) + { + ScanPast("Avg ="); + Avg = GetToken(); + StdDev = GetToken(); + ScanPast("SEMI Radial="); + SemiRadial = GetToEOL(); + } + else + { + ScanPast("RsAv "); + Avg = GetBefore("+/-"); + StdDev = GetToken(); + _Log.Debug($"****ProcessData - RsAv StDev={StdDev}"); + ScanPast("(Mx+Mn)"); + SemiRadial = GetToken(); + _Log.Debug($"****ProcessData - RsAv SemiRadial={SemiRadial}"); + GetToEOL(); + int num = 0; + GetBefore(": "); + for (string i = GetToken(); !string.IsNullOrEmpty(i); i = GetToken()) + { + if (!i.Contains(":")) + { + detail = new Detail(); + int num1 = num + 1; + num = num1; + _Log.Debug($"****ProcessData - RsAv Point={num1}"); + detail.Pt = num1.ToString(); + detail.Rs = i; + detail.Merit = GetToken().Replace("|", ""); + detail.UniqueId = string.Concat("_Point-", _Details.Count + 1); + _Details.Add(detail); + } + } + } + //Id = -1; + Run = Run.Trim(); + if (!Run.StartsWith("[") && !Run.EndsWith("]")) + throw new Exception("Lot summary data is invalid or missing."); + Run = Run.Replace("[", ""); + Run = Run.Replace("]", ""); + Run = Regex.Replace(Run, @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]", "_").Split('\r')[0].Split('\n')[0]; + _Log.Debug($"****ParseData - cde.Run:'{Run}'"); + if (string.IsNullOrEmpty(Run)) + throw new Exception("Batch (Run) information does not exist"); + + //parse out batch and validate + string[] parsedBatch = Run.Split('-'); + if (parsedBatch.Length >= 1) + Reactor = parsedBatch[0]; + if (parsedBatch.Length >= 2) + RDS = parsedBatch[1]; + if (parsedBatch.Length >= 3) + { + string[] parsedPSN = parsedBatch[2].Split('.'); + if (parsedPSN.Length >= 1) + PSN = parsedPSN[0]; + if (parsedPSN.Length >= 2) + Layer = parsedPSN[1]; + } + if (parsedBatch.Length >= 4) + Zone = parsedBatch[3]; + + //create filename / unique id + string timeFormat = "yyyyMMddHHmmss"; + + //fix equip + StringBuilder equipFixed = new(); + foreach (char c in EquipId) + { + if (char.IsLetterOrDigit(c) || c == '-' || c == '.') + { + equipFixed.Append(c); + } + } + EquipId = equipFixed.ToString(); + _Log.Debug($"****ParseData - cde.EquipId:'{EquipId}'"); + + // The "cde.Run" string is used as part of the SharePoint header unique ID. The "cde.Run" ID is typed + // at the tool by the users. The characters are not controlled and the user can type any characters like + // "\", "*", ".", " ", etc. Some of these characters are not valid and thus can't be used for the + // SharePoint header unique ID. Therefore, we need to filter out invalid characters and only keep the + // important ones. + + StringBuilder runFixed = new(); + foreach (char c in Run) + { + if (char.IsLetterOrDigit(c) || c == '-' || c == '.') + runFixed.Append(c); + } + Run = runFixed.ToString(); + + UniqueId = string.Concat(EquipId, "_", Run, "_", logistics.DateTimeFromSequence.ToString(timeFormat)); + foreach (Detail item in _Details) + { + item.HeaderUniqueId = UniqueId; + item.UniqueId = string.Concat(item, item.UniqueId); + } + + fileInfoCollection.Add(new FileInfo(logistics.ReportFullPath)); + } + + } + +} \ No newline at end of file diff --git a/Adaptation/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs b/Adaptation/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs new file mode 100644 index 0000000..b6cb4b8 --- /dev/null +++ b/Adaptation/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs @@ -0,0 +1,13 @@ +namespace Adaptation.Ifx.Eaf.Common.Configuration +{ + [System.Runtime.Serialization.DataContractAttribute] + public class ConnectionSetting + { + public ConnectionSetting(string name, string value) { } + + [System.Runtime.Serialization.DataMemberAttribute] + public string Name { get; set; } + [System.Runtime.Serialization.DataMemberAttribute] + public string Value { get; set; } + } +} \ 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 new file mode 100644 index 0000000..4726692 --- /dev/null +++ b/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/File.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.Component +{ + 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<string, string> ContentParameters { get; } + + public File UpdateContentParameters(Dictionary<string, string> 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 new file mode 100644 index 0000000..561725e --- /dev/null +++ b/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/FilePathGenerator.cs @@ -0,0 +1,35 @@ +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using System; +using System.Collections.Generic; + +namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.Component +{ + 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<string, string> customPattern = null) { throw new NotImplementedException(); } + public FilePathGenerator(FileConnectorConfiguration config, File file, bool isErrorFile = false, Dictionary<string, string> customPattern = null) { throw new NotImplementedException(); } + public FilePathGenerator(FileConnectorConfiguration config, string sourceFilePath, bool isErrorFile = false, Dictionary<string, string> 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(); } + } +} \ 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 new file mode 100644 index 0000000..5eafd1c --- /dev/null +++ b/Adaptation/Ifx/Eaf/EquipmentConnector/File/Configuration/FileConnectorConfiguration.cs @@ -0,0 +1,135 @@ +using Adaptation.Ifx.Eaf.Common.Configuration; +using System; +using System.Collections.Generic; + +namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration +{ + [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<ConnectionSetting> 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<string> 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 + } + } +} \ 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 new file mode 100644 index 0000000..55d81fd --- /dev/null +++ b/Adaptation/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs @@ -0,0 +1,14 @@ +using Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes; +using System; +using System.Collections.Generic; + +namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.SelfDescription +{ + public class FileConnectorParameterTypeDefinitionProvider + { + public FileConnectorParameterTypeDefinitionProvider() { } + + public IEnumerable<ParameterTypeDefinition> GetAllParameterTypeDefinition() { return null; } + public ParameterTypeDefinition GetParameterTypeDefinition(string name) { return null; } + } +} \ No newline at end of file diff --git a/Adaptation/MET08RESIMAPCDE.Tests.csproj b/Adaptation/MET08RESIMAPCDE.Tests.csproj new file mode 100644 index 0000000..9213e13 --- /dev/null +++ b/Adaptation/MET08RESIMAPCDE.Tests.csproj @@ -0,0 +1,103 @@ +<Project Sdk="Microsoft.NET.Sdk"> + <PropertyGroup Label="Globals"> + <SccProjectName>SAK</SccProjectName> + <SccProvider>SAK</SccProvider> + <SccAuxPath>SAK</SccAuxPath> + <SccLocalPath>SAK</SccLocalPath> + </PropertyGroup> + <PropertyGroup> + <TargetFramework>net6.0</TargetFramework> + <IsPackable>false</IsPackable> + </PropertyGroup> + <PropertyGroup> + <VSTestLogger>trx</VSTestLogger> + <VSTestResultsDirectory>../../../Trunk/MET08RESIMAPCDE/05_TestResults/TestResults</VSTestResultsDirectory> + </PropertyGroup> + <PropertyGroup> + <IsWindows Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' == 'true'">true</IsWindows> + <IsOSX Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))' == 'true'">true</IsOSX> + <IsLinux Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true'">true</IsLinux> + </PropertyGroup> + <PropertyGroup Condition="'$(IsWindows)'=='true'"> + <DefineConstants>Windows</DefineConstants> + </PropertyGroup> + <PropertyGroup Condition="'$(IsOSX)'=='true'"> + <DefineConstants>OSX</DefineConstants> + </PropertyGroup> + <PropertyGroup Condition="'$(IsLinux)'=='true'"> + <DefineConstants>Linux</DefineConstants> + </PropertyGroup> + <ItemGroup> + <PackageReference Include="coverlet.collector" Version="3.1.0"/> + <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0"/> + <PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="6.0.0"/> + <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.0"/> + <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="6.0.0"/> + <PackageReference Include="Microsoft.Extensions.Configuration.json" Version="6.0.0"/> + <PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.0"/> + <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0"/> + <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="6.0.0"/> + <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="6.0.0"/> + <PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0"/> + <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0"/> + <PackageReference Include="MSTest.TestAdapter" Version="2.2.8"/> + <PackageReference Include="MSTest.TestFramework" Version="2.2.8"/> + <PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.0"/> + <PackageReference Include="System.Data.OleDb" Version="6.0.0"/> + <PackageReference Include="System.Data.SqlClient" Version="4.8.3"/> + <PackageReference Include="System.Text.Json" Version="6.0.1"/> + </ItemGroup> + <ItemGroup> + <PackageReference Include="External.Common.Logging.Core" Version="3.3.1"> + <NoWarn>NU1701</NoWarn> + </PackageReference> + <PackageReference Include="External.Common.Logging" Version="3.3.1"> + <NoWarn>NU1701</NoWarn> + </PackageReference> + <PackageReference Include="External.Infineon.Monitoring.MonA" Version="1.2.0.1"> + <NoWarn>NU1701</NoWarn> + </PackageReference> + <PackageReference Include="External.Infineon.Yoda" Version="5.2.1"> + <NoWarn>NU1701</NoWarn> + </PackageReference> + <PackageReference Include="External.log4net" Version="2.0.8"> + <NoWarn>NU1701</NoWarn> + </PackageReference> + </ItemGroup> + <ItemGroup> + <PackageReference Include="IKVM.AWT.WinForms" Version="7.2.4630.5"> + <NoWarn>NU1701</NoWarn> + </PackageReference> + <PackageReference Include="IKVM.OpenJDK.Core" Version="7.2.4630.5"> + <NoWarn>NU1701</NoWarn> + </PackageReference> + <PackageReference Include="IKVM.OpenJDK.Media" Version="7.2.4630.5"> + <NoWarn>NU1701</NoWarn> + </PackageReference> + <PackageReference Include="IKVM.OpenJDK.Text" Version="7.2.4630.5"> + <NoWarn>NU1701</NoWarn> + </PackageReference> + <PackageReference Include="IKVM.OpenJDK.Util" Version="7.2.4630.5"> + <NoWarn>NU1701</NoWarn> + </PackageReference> + <PackageReference Include="IKVM.OpenJDK.XML.API" Version="7.2.4630.5"> + <NoWarn>NU1701</NoWarn> + </PackageReference> + <PackageReference Include="IKVM.Runtime" Version="7.2.4630.5"> + <NoWarn>NU1701</NoWarn> + </PackageReference> + <PackageReference Include="Pdfbox" Version="1.1.1"> + <NoWarn>NU1701</NoWarn> + </PackageReference> + <PackageReference Include="RoboSharp" Version="1.2.4" /> + <PackageReference Include="Tibco.Rendezvous" Version="8.5.0" /> + </ItemGroup> + <ItemGroup> + <None Include="appsettings.json"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </None> + <None Include="appsettings.Development.json"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </None> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/Adaptation/PeerGroup/GCL/Annotations/NotNullAttribute.cs b/Adaptation/PeerGroup/GCL/Annotations/NotNullAttribute.cs new file mode 100644 index 0000000..c4e64f0 --- /dev/null +++ b/Adaptation/PeerGroup/GCL/Annotations/NotNullAttribute.cs @@ -0,0 +1,10 @@ +using System; + +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 + { + public NotNullAttribute() { } + } +} \ No newline at end of file diff --git a/Adaptation/PeerGroup/GCL/SecsDriver/HsmsConnectionMode.cs b/Adaptation/PeerGroup/GCL/SecsDriver/HsmsConnectionMode.cs new file mode 100644 index 0000000..82138e2 --- /dev/null +++ b/Adaptation/PeerGroup/GCL/SecsDriver/HsmsConnectionMode.cs @@ -0,0 +1,8 @@ +namespace Adaptation.PeerGroup.GCL.SecsDriver +{ + public enum HsmsConnectionMode + { + 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 new file mode 100644 index 0000000..b52c7a3 --- /dev/null +++ b/Adaptation/PeerGroup/GCL/SecsDriver/HsmsSessionMode.cs @@ -0,0 +1,8 @@ +namespace Adaptation.PeerGroup.GCL.SecsDriver +{ + public enum HsmsSessionMode + { + 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 new file mode 100644 index 0000000..81181f0 --- /dev/null +++ b/Adaptation/PeerGroup/GCL/SecsDriver/SecsTransportType.cs @@ -0,0 +1,8 @@ +namespace Adaptation.PeerGroup.GCL.SecsDriver +{ + public enum SecsTransportType + { + 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 new file mode 100644 index 0000000..4511319 --- /dev/null +++ b/Adaptation/PeerGroup/GCL/SecsDriver/SerialBaudRate.cs @@ -0,0 +1,16 @@ +namespace Adaptation.PeerGroup.GCL.SecsDriver +{ + public enum SerialBaudRate + { + Baud9600 = 0, + Baud19200 = 1, + Baud4800 = 2, + Baud2400 = 3, + Baud1200 = 4, + Baud300 = 5, + Baud150 = 6, + Baud38400 = 7, + Baud57600 = 8, + Baud115200 = 9 + } +} \ No newline at end of file diff --git a/Adaptation/Shared/Duplicator/Description.cs b/Adaptation/Shared/Duplicator/Description.cs new file mode 100644 index 0000000..e0031fe --- /dev/null +++ b/Adaptation/Shared/Duplicator/Description.cs @@ -0,0 +1,148 @@ +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() + { + return "File Has been read and parsed"; + } + + List<string> IDescription.GetNames(IFileRead fileRead, Logistics logistics) + { + List<string> results = new(); + IDescription description = GetDefault(fileRead, logistics); + string json = JsonSerializer.Serialize(description, description.GetType()); + object @object = JsonSerializer.Deserialize<object>(json); + if (@object is not JsonElement jsonElement) + throw new Exception(); + foreach (JsonProperty jsonProperty in jsonElement.EnumerateObject()) + results.Add(jsonProperty.Name); + return results; + } + + List<string> IDescription.GetDetailNames() + { + List<string> results = new(); + return results; + } + + List<string> IDescription.GetHeaderNames() + { + List<string> results = new(); + return results; + } + + IDescription IDescription.GetDisplayNames() + { + Description result = GetDisplayNames(); + return result; + } + + List<string> IDescription.GetParameterNames() + { + List<string> 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<object>(json); + results = ((JsonElement)@object).EnumerateObject().ToArray(); + return results; + } + + List<string> IDescription.GetPairedParameterNames() + { + List<string> results = new(); + return results; + } + + List<string> IDescription.GetIgnoreParameterNames(Test test) + { + List<string> results = new(); + return results; + } + + IDescription IDescription.GetDefaultDescription(IFileRead fileRead, Logistics logistics) + { + Description result = GetDefault(fileRead, logistics); + return result; + } + + Dictionary<string, string> IDescription.GetDisplayNamesJsonElement(IFileRead fileRead) + { + Dictionary<string, string> results = new(); + IDescription description = GetDisplayNames(); + string json = JsonSerializer.Serialize(description, description.GetType()); + JsonElement jsonElement = JsonSerializer.Deserialize<JsonElement>(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> IDescription.GetDescriptions(IFileRead fileRead, Logistics logistics, List<Test> tests, IProcessData iProcessData) + { + List<IDescription> results = new(); + return results; + } + + private 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 = logistics.DateTimeFromSequence.ToUniversalTime().ToString("MM/dd/yyyy HH:mm:ss") + }; + return result; + } + + } + +} \ No newline at end of file diff --git a/Adaptation/Shared/FileRead.cs b/Adaptation/Shared/FileRead.cs new file mode 100644 index 0000000..1615183 --- /dev/null +++ b/Adaptation/Shared/FileRead.cs @@ -0,0 +1,834 @@ +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 int _HyphenIsArchive; + protected readonly string _ProgressPath; + protected readonly string _EquipmentType; + protected readonly int _HyphenIsXToArchive; + 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<string, List<long>> _DummyRuns; + protected readonly Dictionary<string, string> _FileParameter; + protected readonly string _ParameterizedModelObjectDefinitionType; + protected readonly FileConnectorConfiguration _FileConnectorConfiguration; + protected readonly IList<ModelObjectParameterDefinition> _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<string, string> fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted, int hyphenXToArchive, int hyphenIsArchive) + { + _SMTP = smtp; + _IsEvent = isEvent; + _DummyRuns = dummyRuns; + _LastTicksDuration = 0; + _IsEAFHosted = isEAFHosted; + _Description = description; + _FileParameter = fileParameter; + _ReportFullPath = string.Empty; + _HyphenIsArchive = hyphenIsArchive; + _CellInstanceName = cellInstanceName; + _HyphenIsXToArchive = hyphenXToArchive; + _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 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 string GetPropertyValue(string cellInstanceConnectionName, IList<ModelObjectParameterDefinition> modelObjectParameters, string propertyName) + { + string result; + List<string> 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 ModelObjectParameterDefinition[] GetProperties(string cellInstanceConnectionName, IList<ModelObjectParameterDefinition> 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 ModelObjectParameterDefinition[] GetProperties(string cellInstanceConnectionName, IList<ModelObjectParameterDefinition> 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<Exception> threadExceptions) + { + if (!(thread is null)) + { + ThreadState threadState; + for (short i = 0; i < short.MaxValue; i++) + { + if (thread is null) + break; + else + { + threadState = thread.ThreadState; + if (threadState != ThreadState.Running && threadState != 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 progressPath, Logistics logistics, int? duplicator, string[] exceptionLines) + { + string progressDirectory; + StringBuilder stringBuilder = new(); + if (duplicator is null || duplicator.Value == 0) + progressDirectory = string.Concat(progressPath, @"\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; + 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) { } + } + } + + protected string[] Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, string to, string from, string resolvedFileLocation, Exception exception) + { + 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(), _Logistics.ReportFullPath, from, resolvedFileLocation, to, string.Empty, string.Empty, exception.Message, string.Empty, string.Empty, exception.StackTrace }; + Shared0449(to, results); + } + if (!(extractResults is null) && !(extractResults.Item4 is null) && extractResults.Item4.Any()) + { + string itemFile; + List<string> 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 null)) + Shared1811(to, sourceFile); + } + Shared0231(directories); + } + return results; + } + + protected IEnumerable<string> GetDirectoriesRecursively(string path, string directoryNameSegment = null) + { + Queue<string> 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<Tuple<Properties.IScopeInfo, string>> 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<Properties.IScopeInfo, string> 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 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<Tuple<Properties.IScopeInfo, string>> tuples) + { + bool check; + long preWait; + string tupleFile; + List<int> consumedFileIndices = new(); + List<string> 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<Properties.IScopeInfo, string> 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(IFileRead fileRead, Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception) + { + bool isErrorFile = !(exception is null); + if (!isErrorFile && _IsDuplicator) + { + if (_Hyphens == _HyphenIsXToArchive) + Shared0192(); + else if (_IsEAFHosted && _Hyphens == _HyphenIsArchive) + fileRead.MoveArchive(); + if (_IsEAFHosted && !string.IsNullOrEmpty(_ProgressPath)) + CreateProgressDirectory(_ProgressPath, _Logistics, _Hyphens, exceptionLines: null); + } + if (!_IsEAFHosted) + { + string to; + if (!_FileConnectorConfiguration.TargetFileLocation.EndsWith(Path.DirectorySeparatorChar.ToString())) + to = _FileConnectorConfiguration.TargetFileLocation; + else + to = Path.GetDirectoryName(_FileConnectorConfiguration.TargetFileLocation); + foreach (KeyValuePair<string, string> 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<string, Test[], JsonElement[], List<FileInfo>> extractResults, List<string> headerNames, Dictionary<string, string> keyValuePairs) + { + object value; + string description; + List<object[]> 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<object[]>(); + 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<string, Test[], JsonElement[], List<FileInfo>> ReExtract(IFileRead fileRead, List<string> headerNames, Dictionary<string, string> keyValuePairs) + { + Tuple<string, Test[], JsonElement[], List<FileInfo>> 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 Dictionary<Test, List<Properties.IDescription>> GetKeyValuePairs(List<Properties.IDescription> descriptions) + { + Dictionary<Test, List<Properties.IDescription>> 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<Properties.IDescription>()); + results[testKey].Add(descriptions[i]); + } + return results; + } + + protected List<Properties.IDescription> GetDuplicatorDescriptions(JsonElement[] jsonElements) + { + List<Properties.IDescription> results = new(); + Duplicator.Description description; + JsonSerializerOptions jsonSerializerOptions = new() { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString }; + foreach (JsonElement jsonElement in jsonElements) + { + if (jsonElement.ValueKind != JsonValueKind.Object) + throw new Exception(); + description = JsonSerializer.Deserialize<Duplicator.Description>(jsonElement.ToString(), jsonSerializerOptions); + results.Add(description); + } + return results; + } + + protected Tuple<Test[], Dictionary<Test, List<Properties.IDescription>>> GetTuple(IFileRead fileRead, IEnumerable<Properties.IDescription> descriptions, bool extra = false) + { + Tuple<Test[], Dictionary<Test, List<Properties.IDescription>>> result; + Dictionary<Test, List<Properties.IDescription>> keyValuePairs = GetKeyValuePairs(descriptions.ToList()); + Test[] tests = (from l in keyValuePairs select l.Key).ToArray(); + fileRead.CheckTests(tests, extra); + result = new Tuple<Test[], Dictionary<Test, List<Properties.IDescription>>>(tests, keyValuePairs); + return result; + } + + protected void Shared0449(string to, string[] exceptionLines) + { + if (_IsDuplicator) + CreateProgressDirectory(_ProgressPath, _Logistics, _Hyphens, 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); } + } + } + + protected void Shared1880(string itemFile, List<string> 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<string> 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<Tuple<Properties.IScopeInfo, string>> 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 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 void Shared0192() + { + if (!string.IsNullOrEmpty(_Logistics.ReportFullPath)) + { + FileInfo fileInfo = new(_Logistics.ReportFullPath); + if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) + File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime); + } + } + + protected string[] Shared1567(string reportFullPath, List<Tuple<Properties.IScopeInfo, string>> 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<Properties.IScopeInfo, string> 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); + } + + } + +} + +// 2021-12-17 -> Shared - FileRead \ No newline at end of file diff --git a/Adaptation/Shared/Logistics.cs b/Adaptation/Shared/Logistics.cs new file mode 100644 index 0000000..fed85b3 --- /dev/null +++ b/Adaptation/Shared/Logistics.cs @@ -0,0 +1,223 @@ +using Adaptation.Shared.Methods; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace Adaptation.Shared +{ + + public class Logistics : ILogistics + { + + 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<string> Tags { get; set; } + public List<string> Logistics1 { get; set; } + public List<Logistics2> 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<string>(); + Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); + Logistics2 = new List<Logistics2>(); + } + + 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<string>(); + Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); + Logistics2 = new List<Logistics2>(); + } + + 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; + MesEntity = DefaultMesEntity(dateTime); + ReportFullPath = reportFullPath; + ProcessJobID = "R##"; + MID = "null"; + Tags = new List<string>(); + Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); + Logistics2 = new List<Logistics2>(); + } + 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]; + } + } + Logistics2 logistics2; + Tags = new List<string>(); + Logistics2 = new List<Logistics2>(); + for (int i = 1; i < Logistics1.Count(); i++) + { + if (Logistics1[i].StartsWith("LOGISTICS_2")) + { + logistics2 = new Logistics2(Logistics1[i]); + Logistics2.Add(logistics2); + } + } + for (int i = Logistics1.Count() - 1; i > -1; i--) + { + if (Logistics1[i].StartsWith("LOGISTICS_2")) + Logistics1.RemoveAt(i); + } + } + + public Logistics ShallowCopy() + { + return (Logistics)MemberwiseClone(); + } + + private string DefaultMesEntity(DateTime dateTime) + { + 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<string>(); + Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); + Logistics2 = new List<Logistics2>(); + } + } + +} \ No newline at end of file diff --git a/Adaptation/Shared/Logistics2.cs b/Adaptation/Shared/Logistics2.cs new file mode 100644 index 0000000..eaab290 --- /dev/null +++ b/Adaptation/Shared/Logistics2.cs @@ -0,0 +1,81 @@ +using System; + +namespace Adaptation.Shared +{ + + public class Logistics2 : Methods.ILogistics2 + { + + 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 + { + 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..1891e5a --- /dev/null +++ b/Adaptation/Shared/Methods/IDescription.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; +using System.Text.Json; + +namespace Adaptation.Shared.Methods +{ + + public interface IDescription + { + + string GetEventDescription(); + List<string> GetDetailNames(); + List<string> GetHeaderNames(); + IDescription GetDisplayNames(); + List<string> GetParameterNames(); + List<string> GetPairedParameterNames(); + List<string> GetIgnoreParameterNames(Test test); + List<string> GetNames(IFileRead fileRead, Logistics logistics); + JsonProperty[] GetDefault(IFileRead fileRead, Logistics logistics); + Dictionary<string, string> GetDisplayNamesJsonElement(IFileRead fileRead); + IDescription GetDefaultDescription(IFileRead fileRead, Logistics logistics); + List<IDescription> GetDescriptions(IFileRead fileRead, Logistics logistics, List<Test> 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..d6c3f58 --- /dev/null +++ b/Adaptation/Shared/Methods/IFileRead.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.Json; + +namespace Adaptation.Shared.Methods +{ + + public interface IFileRead : Properties.IFileRead + { + void MoveArchive(); + void WaitForThread(); + JsonProperty[] GetDefault(); + void Callback(object state); + string GetEventDescription(); + List<string> GetHeaderNames(); + void CheckTests(Test[] tests, bool extra); + Dictionary<string, string> GetDisplayNamesJsonElement(); + Tuple<string, Test[], JsonElement[], List<FileInfo>> ReExtract(); + List<IDescription> GetDescriptions(IFileRead fileRead, List<Test> tests, IProcessData processData); + void Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception = null); + Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, string eventName); + string[] Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> 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..73fd452 --- /dev/null +++ b/Adaptation/Shared/Methods/ILogistics.cs @@ -0,0 +1,8 @@ +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..ee89538 --- /dev/null +++ b/Adaptation/Shared/Methods/ILogistics2.cs @@ -0,0 +1,8 @@ +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..26c69fe --- /dev/null +++ b/Adaptation/Shared/Methods/IProcessData.cs @@ -0,0 +1,17 @@ +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<string, string> reactors); + Tuple<string, Test[], JsonElement[], List<FileInfo>> GetResults(IFileRead fileRead, Logistics logistics, List<FileInfo> 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..7792d7c --- /dev/null +++ b/Adaptation/Shared/Methods/ISMTP.cs @@ -0,0 +1,9 @@ +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/ScopeInfo.cs b/Adaptation/Shared/Metrology/ScopeInfo.cs new file mode 100644 index 0000000..20f63ea --- /dev/null +++ b/Adaptation/Shared/Metrology/ScopeInfo.cs @@ -0,0 +1,306 @@ +using System; +using System.IO; + +namespace Adaptation.Shared.Metrology +{ + + public class ScopeInfo : Properties.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 = "") + { + 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() + { + return (ScopeInfo)MemberwiseClone(); + } + + } + +} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/WS.Attachment.cs b/Adaptation/Shared/Metrology/WS.Attachment.cs new file mode 100644 index 0000000..540e760 --- /dev/null +++ b/Adaptation/Shared/Metrology/WS.Attachment.cs @@ -0,0 +1,24 @@ +namespace Adaptation.Shared.Metrology +{ + + public partial class WS + { + 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) + { + UniqueId = uniqueId; + DestinationFileName = destinationFileName; + SourceFileName = sourceFileName; + } + + } + + } + +} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/WS.Results.cs b/Adaptation/Shared/Metrology/WS.Results.cs new file mode 100644 index 0000000..ada4b97 --- /dev/null +++ b/Adaptation/Shared/Metrology/WS.Results.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; +using System.Text.Json; + +namespace Adaptation.Shared.Metrology +{ + + public partial class WS + { + // 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; } + + // 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<string> Errors { get; set; } + + // this collection will contain a list of warnings, they will not prevent data from being saved + public List<string> Warnings { get; set; } + + // this is just a helper function to make displaying the results easier + public override string ToString() + { + return JsonSerializer.Serialize(this, GetType()); + } + } + + } + +} \ No newline at end of file diff --git a/Adaptation/Shared/Metrology/WS.cs b/Adaptation/Shared/Metrology/WS.cs new file mode 100644 index 0000000..1fa6b5a --- /dev/null +++ b/Adaptation/Shared/Metrology/WS.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace Adaptation.Shared.Metrology +{ + + public partial class WS + { + + public static Tuple<string, Results> SendData(string url, object payload, int timeoutSeconds = 120) + { + 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 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<Results>(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<string>(); + results.Errors.Add(stringBuilder.ToString()); + } + return new Tuple<string, Results>(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); + } + } + + public static void AttachFiles(string url, long headerID, List<Attachment> headerAttachments = null, List<Attachment> dataAttachments = null) + { + try + { + 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()); + } + } + + } + +} \ No newline at end of file diff --git a/Adaptation/Shared/ParameterType.cs b/Adaptation/Shared/ParameterType.cs new file mode 100644 index 0000000..43e548f --- /dev/null +++ b/Adaptation/Shared/ParameterType.cs @@ -0,0 +1,13 @@ +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..b33fa81 --- /dev/null +++ b/Adaptation/Shared/ProcessDataStandardFormat.cs @@ -0,0 +1,426 @@ +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<string> 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<string, string[], string[]> GetLogisticsColumnsAndBody(string reportFullPath, string[] lines = null) + { + string segment; + List<string> body = new(); + StringBuilder logistics = new(); + if (lines is null) + lines = File.ReadAllLines(reportFullPath); + string[] segments; + if (lines.Length < 7) + segments = new string[] { }; + else + segments = lines[6].Trim().Split('\t'); + List<string> columns = new(); + for (int c = 0; c < segments.Length; c++) + { + segment = segments[c].Substring(1, segments[c].Length - 2); + if (!columns.Contains(segment)) + columns.Add(segment); + else + { + for (short i = 1; i < short.MaxValue; i++) + { + segment = string.Concat(segment, "_", i); + if (!columns.Contains(segment)) + { + columns.Add(segment); + break; + } + } + } + } + bool lookForLogistics = false; + for (int r = 7; r < lines.Count(); r++) + { + if (lines[r].StartsWith("NUM_DATA_ROWS")) + lookForLogistics = true; + if (!lookForLogistics) + { + body.Add(lines[r]); + continue; + } + if (lines[r].StartsWith("LOGISTICS_1")) + { + for (int i = r; i < lines.Count(); i++) + { + if (lines[r].StartsWith("END_HEADER")) + break; + logistics.AppendLine(lines[i]); + } + break; + } + } + return new Tuple<string, string[], string[]>(logistics.ToString(), columns.ToArray(), body.ToArray()); + } + + public static JsonElement[] GetArray(Tuple<string, string[], string[]> 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<JsonElement[]>("[]"); + 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<JsonElement[]>(string.Concat("[", stringBuilder, "]")); + } + return results; + } + + public static Dictionary<string, List<string>> GetDictionary(Tuple<string, string[], string[]> pdsf) + { + Dictionary<string, List<string>> results = new(); + string[] segments; + string[] columns = pdsf.Item2; + string[] bodyLines = pdsf.Item3; + foreach (string column in columns) + results.Add(column, new List<string>()); + 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<string, Dictionary<Test, Dictionary<string, List<string>>>> GetTestDictionary(Tuple<string, string[], string[]> pdsf) + { + Dictionary<Test, Dictionary<string, List<string>>> results = new(); + string testColumn = nameof(Test); + Dictionary<string, List<string>> keyValuePairs = GetDictionary(pdsf); + if (!keyValuePairs.ContainsKey(testColumn)) + throw new Exception(); + int min; + int max; + Test testKey; + List<string> vs; + string columnKey; + Dictionary<Test, List<int>> 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<int>()); + results.Add(test, new Dictionary<string, List<string>>()); + } + tests[test].Add(i); + } + } + foreach (KeyValuePair<Test, List<int>> testKeyValuePair in tests) + { + testKey = testKeyValuePair.Key; + min = testKeyValuePair.Value.Min(); + max = testKeyValuePair.Value.Max() + 1; + foreach (KeyValuePair<string, List<string>> keyValuePair in keyValuePairs) + results[testKey].Add(keyValuePair.Key, new List<string>()); + foreach (KeyValuePair<string, List<string>> 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<string, Dictionary<Test, Dictionary<string, List<string>>>>(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, Properties.IScopeInfo scopeInfo, List<string> names, Dictionary<string, List<string>> keyValuePairs, string dateFormat, string timeFormat, List<string> pairedParameterNames, bool useDateTimeFromSequence = true, string format = "", List<string> ignoreParameterNames = null) + { + StringBuilder result = new(); + if (ignoreParameterNames is null) + ignoreParameterNames = new List<string>(); + 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<string, List<string>> 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<string> PDSFToFixedWidth(string reportFullPath) + { + List<string> 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<int> vs = new(); + List<int[]> 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..c45a6d1 --- /dev/null +++ b/Adaptation/Shared/Properties/IDescription.cs @@ -0,0 +1,13 @@ +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..5f30585 --- /dev/null +++ b/Adaptation/Shared/Properties/IFileRead.cs @@ -0,0 +1,20 @@ +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..9be989c --- /dev/null +++ b/Adaptation/Shared/Properties/ILogistics.cs @@ -0,0 +1,25 @@ +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<string> Tags { get; set; } + public List<string> Logistics1 { get; set; } + public List<Logistics2> 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..d20d326 --- /dev/null +++ b/Adaptation/Shared/Properties/ILogistics2.cs @@ -0,0 +1,17 @@ +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..29f83af --- /dev/null +++ b/Adaptation/Shared/Properties/IProcessData.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; + +namespace Adaptation.Shared.Properties +{ + + public interface IProcessData + { + + List<object> 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..d3e59f6 --- /dev/null +++ b/Adaptation/Shared/Properties/IScopeInfo.cs @@ -0,0 +1,20 @@ +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..c833c82 --- /dev/null +++ b/Adaptation/Shared/Test.cs @@ -0,0 +1,57 @@ +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, + 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/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE2.cs b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE2.cs new file mode 100644 index 0000000..0f19547 --- /dev/null +++ b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE2.cs @@ -0,0 +1,60 @@ +using Microsoft.Extensions.Logging; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Shared; +using System; +using System.Diagnostics; +using System.IO; + +namespace _Tests.CreateSelfDescription.Staging.v2_36_1 +{ + + [TestClass] + public class CDE2 : EAFLoggingUnitTesting + { + + private static CDE2 _EAFLoggingUnitTesting; + internal static CDE2 EAFLoggingUnitTesting => _EAFLoggingUnitTesting; + + public CDE2() : base(testContext: null, declaringType: null, skipEquipmentDictionary: false) + { + if (_EAFLoggingUnitTesting is null) + throw new Exception(); + } + + public CDE2(TestContext testContext) : base(testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false) + { + } + + [ClassInitialize] + public static void ClassInitialize(TestContext testContext) + { + if (_EAFLoggingUnitTesting is null) + _EAFLoggingUnitTesting = new CDE2(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 null)) + _EAFLoggingUnitTesting.Logger.LogInformation("Cleanup"); + if (!(_EAFLoggingUnitTesting is null)) + _EAFLoggingUnitTesting.Dispose(); + } + + [TestMethod] + public void Staging__v2_36_1__CDE2__() + { + } + + } + +} + +// dotnet build --runtime win-x64 +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_36_1" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_36_1 & ClassName~CDE2" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_36_1 & ClassName~CDE2 & Staging__v2_36_1__CDE2__xlsx" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") \ No newline at end of file diff --git a/Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE3-EQPT.cs b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE3-EQPT.cs new file mode 100644 index 0000000..76960da --- /dev/null +++ b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE3-EQPT.cs @@ -0,0 +1,71 @@ +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_36_1 +{ + + [TestClass] + public class CDE3_EQPT : EAFLoggingUnitTesting + { + + private static CDE3_EQPT _EAFLoggingUnitTesting; + internal static CDE3_EQPT EAFLoggingUnitTesting => _EAFLoggingUnitTesting; + + public CDE3_EQPT() : base(testContext: null, declaringType: null, skipEquipmentDictionary: false) + { + if (_EAFLoggingUnitTesting is null) + throw new Exception(); + } + + public CDE3_EQPT(TestContext testContext) : base(testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false) + { + } + + [ClassInitialize] + public static void ClassInitialize(TestContext testContext) + { + if (_EAFLoggingUnitTesting is null) + _EAFLoggingUnitTesting = new CDE3_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 null)) + _EAFLoggingUnitTesting.Logger.LogInformation("Cleanup"); + if (!(_EAFLoggingUnitTesting is null)) + _EAFLoggingUnitTesting.Dispose(); + } + + [TestMethod] + public void Staging__v2_36_1__CDE3_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")); + } + + } + +} + +// dotnet build --runtime win-x64 +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_36_1" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_36_1 & ClassName~CDE3_EQPT" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_36_1 & ClassName~CDE3_EQPT & Staging__v2_36_1__CDE3_EQPT__DownloadRsMFile" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") \ No newline at end of file diff --git a/Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE3.cs b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE3.cs new file mode 100644 index 0000000..b8114eb --- /dev/null +++ b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE3.cs @@ -0,0 +1,71 @@ +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_36_1 +{ + + [TestClass] + public class CDE3 : EAFLoggingUnitTesting + { + + private static CDE3 _EAFLoggingUnitTesting; + internal static CDE3 EAFLoggingUnitTesting => _EAFLoggingUnitTesting; + + public CDE3() : base(testContext: null, declaringType: null, skipEquipmentDictionary: false) + { + if (_EAFLoggingUnitTesting is null) + throw new Exception(); + } + + public CDE3(TestContext testContext) : base(testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false) + { + } + + [ClassInitialize] + public static void ClassInitialize(TestContext testContext) + { + if (_EAFLoggingUnitTesting is null) + _EAFLoggingUnitTesting = new CDE3(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 null)) + _EAFLoggingUnitTesting.Logger.LogInformation("Cleanup"); + if (!(_EAFLoggingUnitTesting is null)) + _EAFLoggingUnitTesting.Dispose(); + } + + [TestMethod] + public void Staging__v2_36_1__CDE3__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")); + } + + } + +} + +// dotnet build --runtime win-x64 +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_36_1" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_36_1 & ClassName~CDE3" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_36_1 & ClassName~CDE3 & Staging__v2_36_1__CDE3__RsM" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") \ No newline at end of file diff --git a/Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE5.cs b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE5.cs new file mode 100644 index 0000000..9d0ded5 --- /dev/null +++ b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/CDE5.cs @@ -0,0 +1,65 @@ +using Adaptation.Shared; +using Microsoft.Extensions.Logging; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Shared; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Text.Json; +using System.Threading; + +namespace _Tests.CreateSelfDescription.Staging.v2_36_1 +{ + + [TestClass] + public class CDE5 : EAFLoggingUnitTesting + { + + private static CDE5 _EAFLoggingUnitTesting; + internal static CDE5 EAFLoggingUnitTesting => _EAFLoggingUnitTesting; + + public CDE5() : base(testContext: null, declaringType: null, skipEquipmentDictionary: false) + { + if (_EAFLoggingUnitTesting is null) + throw new Exception(); + } + + public CDE5(TestContext testContext) : base(testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false) + { + } + + [ClassInitialize] + public static void ClassInitialize(TestContext testContext) + { + if (_EAFLoggingUnitTesting is null) + _EAFLoggingUnitTesting = new CDE5(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 null)) + _EAFLoggingUnitTesting.Logger.LogInformation("Cleanup"); + if (!(_EAFLoggingUnitTesting is null)) + _EAFLoggingUnitTesting.Dispose(); + } + + [TestMethod] + public void Staging__v2_36_1__CDE5__() + { + } + + } + +} + +// dotnet build --runtime win-x64 +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_36_1" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_36_1 & ClassName~CDE5" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_36_1 & ClassName~CDE5 & Staging__v2_36_1__CDE5__xlsx" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") \ No newline at end of file diff --git a/Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/MET08RESIMAPCDE.cs b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/MET08RESIMAPCDE.cs new file mode 100644 index 0000000..07f03d6 --- /dev/null +++ b/Adaptation/_Tests/CreateSelfDescription/Staging/v2.36.1/MET08RESIMAPCDE.cs @@ -0,0 +1,183 @@ +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_36_1 +{ + + [TestClass] + public class MET08RESIMAPCDE : EAFLoggingUnitTesting + { + + private static MET08RESIMAPCDE _EAFLoggingUnitTesting; + internal static MET08RESIMAPCDE EAFLoggingUnitTesting => _EAFLoggingUnitTesting; + + public MET08RESIMAPCDE() : base(testContext: null, declaringType: null, skipEquipmentDictionary: false) + { + if (_EAFLoggingUnitTesting is null) + throw new Exception(); + } + + public MET08RESIMAPCDE(TestContext testContext) : base(testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false) + { + } + + [ClassInitialize] + public static void ClassInitialize(TestContext testContext) + { + if (_EAFLoggingUnitTesting is null) + _EAFLoggingUnitTesting = new MET08RESIMAPCDE(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 null)) + _EAFLoggingUnitTesting.Logger.LogInformation("Cleanup"); + if (!(_EAFLoggingUnitTesting is null)) + _EAFLoggingUnitTesting.Dispose(); + } + + [TestMethod] + public void Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE() + { + 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_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE_() + { + 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_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE__() + { + 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_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE___() + { + 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_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE____() + { + 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_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE_____() + { + 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_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE______() + { + 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_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE_______() + { + 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_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE________() + { + 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")); + } + + } + +} + +// dotnet build --runtime win-x64 +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_36_1" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_36_1 & ClassName~MET08RESIMAPCDE" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.CreateSelfDescription.Staging.v2_36_1 & ClassName~MET08RESIMAPCDE & Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE________" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") \ No newline at end of file diff --git a/Adaptation/_Tests/Extract/Staging/v2.36.1/CDE2.cs b/Adaptation/_Tests/Extract/Staging/v2.36.1/CDE2.cs new file mode 100644 index 0000000..e69de29 diff --git a/Adaptation/_Tests/Extract/Staging/v2.36.1/CDE3-EQPT.cs b/Adaptation/_Tests/Extract/Staging/v2.36.1/CDE3-EQPT.cs new file mode 100644 index 0000000..1d40551 --- /dev/null +++ b/Adaptation/_Tests/Extract/Staging/v2.36.1/CDE3-EQPT.cs @@ -0,0 +1,40 @@ +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_36_1 +{ + + [TestClass] + public class CDE3_EQPT + { + + private static CreateSelfDescription.Staging.v2_36_1.CDE3_EQPT _CDE3_EQPT; + + [ClassInitialize] + public static void ClassInitialize(TestContext testContext) + { + CreateSelfDescription.Staging.v2_36_1.CDE3_EQPT.ClassInitialize(testContext); + _CDE3_EQPT = CreateSelfDescription.Staging.v2_36_1.CDE3_EQPT.EAFLoggingUnitTesting; + } + + [TestMethod] + public void Staging__v2_36_1__CDE3_EQPT__DownloadRsMFile() + { + _CDE3_EQPT.Staging__v2_36_1__CDE3_EQPT__DownloadRsMFile(); + } + + } + +} + +// dotnet build --runtime win-x64 +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.Extract.Staging.v2_36_1" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.Extract.Staging.v2_36_1 & ClassName~CDE3_EQPT" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.Extract.Staging.v2_36_1 & ClassName~CDE3_EQPT & Staging__v2_36_1__CDE3_EQPT__DownloadRsMFile" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") \ No newline at end of file diff --git a/Adaptation/_Tests/Extract/Staging/v2.36.1/CDE3.cs b/Adaptation/_Tests/Extract/Staging/v2.36.1/CDE3.cs new file mode 100644 index 0000000..ab5303b --- /dev/null +++ b/Adaptation/_Tests/Extract/Staging/v2.36.1/CDE3.cs @@ -0,0 +1,95 @@ +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_36_1 +{ + + [TestClass] + public class CDE3 + { + + private static CreateSelfDescription.Staging.v2_36_1.CDE3 _CDE3; + + [ClassInitialize] + public static void ClassInitialize(TestContext testContext) + { + CreateSelfDescription.Staging.v2_36_1.CDE3.ClassInitialize(testContext); + _CDE3 = CreateSelfDescription.Staging.v2_36_1.CDE3.EAFLoggingUnitTesting; + } + + [TestMethod] + public void Staging__v2_36_1__CDE3__RsM() + { + _CDE3.Staging__v2_36_1__CDE3__RsM(); + } + + [TestMethod] + public void Staging__v2_36_1__CDE3__RsM643047560320000000__Normal() + { + DateTime dateTime; + string check = "*.RsM"; + _CDE3.Staging__v2_36_1__CDE3__RsM(); + MethodBase methodBase = new StackFrame().GetMethod(); + string[] variables = _CDE3.AdaptationTesting.GetVariables(methodBase, check); + Tuple<string, string[], string[]> pdsf = Helpers.Metrology.GetLogisticsColumnsAndBody(variables[2], variables[4]); + IFileRead fileRead = _CDE3.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false); + Tuple<string, Test[], JsonElement[], List<FileInfo>> 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 Logistics(fileRead); + dateTime = Adaptation.FileHandlers.RsM.ProcessData.GetDateTime(logistics, string.Empty); + Assert.IsTrue(dateTime == logistics.DateTimeFromSequence); + dateTime = Adaptation.FileHandlers.RsM.ProcessData.GetDateTime(logistics, "00:13 09/27/38"); + Assert.IsTrue(dateTime == logistics.DateTimeFromSequence); + string logBody = @" +RUN [59-478796-3978.1] +Recipe LSL_6in \ WACKER2 RESISTIVITY SPEC +EQUIP# ResMap Engineer Engineer +LotID LotID D.L.RATIO 0.9950 +OPERATOR Operator TEMP 19.4 00:13 09/27/38 +AutoOptimizeGain = YES AutoProbeHeightSet = NO +DataReject > 3.0Sigma +0 C:\4p_NT\LSL_6in.prj\WACKER2.rcp\8927A117.RsM 00:13 09/27/38 +pt# R Th Rs[Ohm/sq@T] Merit +1 65.0 -44.5 577.7672 77.79 +2 32.5 -44.5 572.4527 102.7 +3 0.0 0.5 581.8071 108.0 +4 -32.5 -44.5 576.9838 93.04 +5 -65.0 -44.5 577.0866 69.79 +Avg = 577.2195 0.58% SEMI Radial= 0.81% + "; + bool logBodyCheck = logBody.Trim() == extractResult.Item1.Trim(); + if (!logBodyCheck) + { + Process.Start("explorer.exe", variables[5]); + File.WriteAllText(Path.Combine(variables[5], $"{Path.GetFileName(variables[5])}.log"), extractResult.Item1); + } + Assert.IsTrue(logBodyCheck, "Log Body doesn't match!"); + Tuple<string, string[], string[]> 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]); + } + + } + +} + +// dotnet build --runtime win-x64 +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.Extract.Staging.v2_36_1" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.Extract.Staging.v2_36_1 & ClassName~CDE3" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.Extract.Staging.v2_36_1 & ClassName~CDE3 & Staging__v2_36_1__CDE3__RsM643047560320000000__Normal" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") \ No newline at end of file diff --git a/Adaptation/_Tests/Extract/Staging/v2.36.1/CDE5.cs b/Adaptation/_Tests/Extract/Staging/v2.36.1/CDE5.cs new file mode 100644 index 0000000..e69de29 diff --git a/Adaptation/_Tests/Extract/Staging/v2.36.1/MET08RESIMAPCDE.cs b/Adaptation/_Tests/Extract/Staging/v2.36.1/MET08RESIMAPCDE.cs new file mode 100644 index 0000000..5efcd4e --- /dev/null +++ b/Adaptation/_Tests/Extract/Staging/v2.36.1/MET08RESIMAPCDE.cs @@ -0,0 +1,114 @@ +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_36_1 +{ + + [TestClass] + public class MET08RESIMAPCDE + { + + private static CreateSelfDescription.Staging.v2_36_1.MET08RESIMAPCDE _MET08RESIMAPCDE; + + [ClassInitialize] + public static void ClassInitialize(TestContext testContext) + { + CreateSelfDescription.Staging.v2_36_1.MET08RESIMAPCDE.ClassInitialize(testContext); + _MET08RESIMAPCDE = CreateSelfDescription.Staging.v2_36_1.MET08RESIMAPCDE.EAFLoggingUnitTesting; + } + + [TestMethod] + public void Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE() + { + _MET08RESIMAPCDE.Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE(); + } + + [TestMethod] + public void Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE637710931421087642__Normal() + { + string check = "~IsXToOpenInsightMetrologyViewer"; + MethodBase methodBase = new StackFrame().GetMethod(); + _MET08RESIMAPCDE.Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE(); + string[] variables = _MET08RESIMAPCDE.AdaptationTesting.GetVariables(methodBase, check); + Tuple<string, string[], string[]> pdsf = Helpers.Metrology.GetLogisticsColumnsAndBody(variables[2], variables[4]); + IFileRead fileRead = _MET08RESIMAPCDE.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false); + Tuple<string, Test[], JsonElement[], List<FileInfo>> 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 Logistics(fileRead); + Tuple<string, string[], string[]> 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_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE_() + { + _MET08RESIMAPCDE.Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE_(); + } + + [TestMethod] + public void Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE__() + { + _MET08RESIMAPCDE.Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE__(); + } + + [TestMethod] + public void Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE___() + { + _MET08RESIMAPCDE.Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE___(); + } + + [TestMethod] + public void Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE____() + { + _MET08RESIMAPCDE.Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE____(); + } + + [TestMethod] + public void Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE_____() + { + _MET08RESIMAPCDE.Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE_____(); + } + + [TestMethod] + public void Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE______() + { + _MET08RESIMAPCDE.Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE______(); + } + + [TestMethod] + public void Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE_______() + { + _MET08RESIMAPCDE.Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE_______(); + } + + [TestMethod] + public void Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE________() + { + _MET08RESIMAPCDE.Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE________(); + } + + } + +} + +// dotnet build --runtime win-x64 +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.Extract.Staging.v2_36_1" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.Extract.Staging.v2_36_1 & ClassName~MET08RESIMAPCDE" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") +// dotnet test --runtime win-x64 --no-build --filter "FullyQualifiedName~_Tests.Extract.Staging.v2_36_1 & ClassName~MET08RESIMAPCDE & Staging__v2_36_1__MET08RESIMAPCDE__MET08RESIMAPCDE637710931421087642__Normal" --% -- TestRunParameters.Parameter(name=\"Debug\", value=\"Debugger.IsAttached\") \ 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..7b60f92 --- /dev/null +++ b/Adaptation/_Tests/Helpers/Metrology.cs @@ -0,0 +1,160 @@ +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<string, string[], string[]> GetLogisticsColumnsAndBody(string fileFullName) + { + Tuple<string, string[], string[]> 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<string, string[], string[]> GetLogisticsColumnsAndBody(string searchDirectory, string searchPattern) + { + Tuple<string, string[], string[]> 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<string, string[], string[]> GetLogisticsColumnsAndBody(IFileRead fileRead, Logistics logistics, Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResult, Tuple<string, string[], string[]> pdsf) + { + Tuple<string, string[], string[]> 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<string, string[], string[]> pdsf, Tuple<string, string[], string[]> pdsfNew) + { + JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions() { 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<string, string[], string[]> pdsf, Tuple<string, string[], string[]> 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; + connectionNameAndTicks = ticks; + } + 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<string, string[], string[]> pdsf, Tuple<string, string[], string[]> 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..b3028a4 --- /dev/null +++ b/Adaptation/_Tests/Shared/AdaptationTesting.cs @@ -0,0 +1,1119 @@ +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<string, CellInstanceVersion> _CellInstanceVersions; + protected readonly Dictionary<string, EquipmentTypeVersion> _EquipmentTypeVersions; + protected readonly Dictionary<string, string> _ParameterizedModelObjectDefinitionTypes; + protected readonly Dictionary<string, EquipmentDictionaryVersion> _EquipmentDictionaryVersions; + protected readonly Dictionary<string, FileConnectorConfiguration> _FileConnectorConfigurations; + protected readonly Dictionary<string, IList<ModelObjectParameterDefinition>> _ModelObjectParameters; + protected readonly Dictionary<string, List<Tuple<string, string>>> _EquipmentDictionaryEventDescriptions; + + public string Environment => _Environment; + public TestContext TestContext => _TestContext; + public string HostNameAndPort => _HostNameAndPort; + public bool SkipEquipmentDictionary => _SkipEquipmentDictionary; + public Dictionary<string, CellInstanceVersion> CellInstanceVersions => _CellInstanceVersions; + public Dictionary<string, EquipmentTypeVersion> EquipmentTypeVersions => _EquipmentTypeVersions; + public Dictionary<string, IList<ModelObjectParameterDefinition>> ModelObjectParameters => _ModelObjectParameters; + public Dictionary<string, EquipmentDictionaryVersion> EquipmentDictionaryVersions => _EquipmentDictionaryVersions; + public Dictionary<string, FileConnectorConfiguration> FileConnectorConfigurations => _FileConnectorConfigurations; + public Dictionary<string, string> ParameterizedModelObjectDefinitionTypes => _ParameterizedModelObjectDefinitionTypes; + public Dictionary<string, List<Tuple<string, string>>> 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<string, CellInstanceVersion>(); + _EquipmentTypeVersions = new Dictionary<string, EquipmentTypeVersion>(); + _ParameterizedModelObjectDefinitionTypes = new Dictionary<string, string>(); + _EquipmentDictionaryVersions = new Dictionary<string, EquipmentDictionaryVersion>(); + _FileConnectorConfigurations = new Dictionary<string, FileConnectorConfiguration>(); + _ModelObjectParameters = new Dictionary<string, IList<ModelObjectParameterDefinition>>(); + _EquipmentDictionaryEventDescriptions = new Dictionary<string, List<Tuple<string, string>>>(); + } + + protected string GetEnvironment(TestContext testContext) + { + string result = testContext.TestName.Split('_')[0]; + return result; + } + + protected 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 string GetCellInstanceConnectionName(string cellInstanceConnectionName) + { + string result; + if (string.IsNullOrEmpty(cellInstanceConnectionName) || cellInstanceConnectionName[cellInstanceConnectionName.Length - 1] != '_') + result = cellInstanceConnectionName; + else + { + bool check = false; + List<char> chars = new List<char>(); + StringBuilder stringBuilder = new StringBuilder(); + 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<string> 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 long _)) + { + ticks = string.Empty; + comment = string.Empty; + cellInstanceConnectionNameFromMethodBaseName = after; + } + cellInstanceConnectionName = GetCellInstanceConnectionName(cellInstanceConnectionNameFromMethodBaseName); + string methodBaseNameWithActualCICN = GetMethodBaseNameWithActualCICN(methodBaseName, rawCellInstanceName, cellInstanceConnectionNameFromMethodBaseName, cellInstanceConnectionName, ticks); + if (string.IsNullOrEmpty(ticks)) + { + textFiles = new string[] { }; + 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 = new string[] { }; + 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<string> + { + _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 string GetEnvironment(string[] segments) + { + return segments[0]; + } + + internal string GetRawCellInstanceName(string[] segments) + { + return segments[1]; + } + + internal string GetCellInstanceName(string[] segments) + { + return segments[2]; + } + + internal string GetCellInstanceVersionName(string[] segments) + { + return segments[3]; + } + + internal string GetCellInstanceConnectionNameFromMethodBaseName(string[] segments) + { + return segments[4]; + } + + internal string GetCellInstanceConnectionName(string[] segments) + { + return segments[5]; + } + + internal string GetTicks(string[] segments) + { + return segments[6]; + } + + internal string GetComment(string[] segments) + { + return segments[7]; + } + + internal FileInfo GetFileName(string[] segments) + { + return new FileInfo(segments[8]); + } + + internal string[] GetTextFiles(string[] segments) + { + List<string> results = new List<string>(); + if (segments.Length > 8) + { + for (int i = 9; i < segments.Length; i++) + results.Add(segments[i]); + } + return results.ToArray(); + } + + protected Stream ToStream(string @this) + { + MemoryStream memoryStream = new MemoryStream(); + StreamWriter streamWriter = new StreamWriter(memoryStream); + streamWriter.Write(@this); + streamWriter.Flush(); + memoryStream.Position = 0; + return memoryStream; + } + + internal T ParseXML<T>(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 XmlSerializer(typeof(T), typeof(T).GetNestedTypes()); + result = xmlSerializer.Deserialize(xmlReader); + stream.Dispose(); + } + catch (Exception) + { + if (throwExceptions) + throw; + } + return result as T; + } + + protected 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<ConfigurationData>(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<CellInstanceVersion>(decodedCellInstanceConfigurationData, throwExceptions: true); + return result; + } + + protected Tuple<string, CellInstanceVersion> GetCellInstanceVersionTuple(string cellInstanceName, string cellInstanceVersionName) + { + Tuple<string, CellInstanceVersion> 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<string, CellInstanceVersion>(cellInstanceServiceV2, cellInstanceVersion); + return result; + } + + protected Dictionary<string, int[]> GetComponentModelComponentsIndexes(CellInstanceVersion cellInstanceVersion, string cellInstanceConnectionName) + { + Dictionary<string, int[]> results = new Dictionary<string, int[]>(); + ComponentsCellComponent componentsCellComponent; + if (!(cellInstanceVersion.ComponentModel.Components is 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 int[] GetCellInstanceConnectionNameIndexes(string cellInstanceConnectionName, Dictionary<string, int[]> 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 bool GetNoEvents(ComponentsCellComponentCellComponent componentsCellComponentCellComponent) + { + bool result = componentsCellComponentCellComponent.Equipment.EquipmentDictionaries?.CellEquipmentDictionaryReference?.DictionaryName is null; + return result; + } + + protected string GetEquipmentDictionaryName(ComponentsCellComponentCellComponent componentsCellComponentCellComponent, bool noEvents, string defaultEquipmentDictionaryName) + { + string result; + if (noEvents) + result = defaultEquipmentDictionaryName; + else + result = componentsCellComponentCellComponent.Equipment.EquipmentDictionaries.CellEquipmentDictionaryReference.DictionaryName; + return result; + } + + protected string[] GetCSharpTextB(string cellInstanceName, string cellInstanceVersionName, CellInstanceVersion cellInstanceVersion, FileInfo fileInfo) + { + List<string> results = new List<string>(); + string check; + bool noEvents; + string loopName; + string equipmentTypeName; + string equipmentDictionaryName; + string methodName = string.Empty; + string extractText = string.Empty; + string defaultEquipmentDictionaryName; + string createSelfDescriptionText = string.Empty; + StringBuilder stringBuilder = new StringBuilder(); + List<string> componentsCellComponentCellComponentEquipmentNames = new(); + string cellInstanceNameWithoutHyphen = cellInstanceName.Replace('-', '_'); + ComponentsCellComponentCellComponent componentsCellComponentCellComponent; + List<string> componentsCellComponentCellComponentEquipmentTypeNames = new(); + string cellInstanceVersionNameAsCode = cellInstanceVersionName.Replace('.', '_'); + 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(); + defaultEquipmentDictionaryName = string.Empty; + 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]; + noEvents = GetNoEvents(componentsCellComponentCellComponent); + if (noEvents) + continue; + defaultEquipmentDictionaryName = GetEquipmentDictionaryName(componentsCellComponentCellComponent, noEvents, defaultEquipmentDictionaryName); + } + if (string.IsNullOrEmpty(defaultEquipmentDictionaryName)) + throw new Exception("At least one dictionary name should be marked as used in EAF CI!"); + foreach (ComponentsCellComponent componentsCellComponent in cellInstanceVersion.ComponentModel.Components) + { + if (componentsCellComponent.Children.Length != 1) + continue; + componentsCellComponentCellComponent = componentsCellComponent.Children[0]; + 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; + noEvents = GetNoEvents(componentsCellComponentCellComponent); + equipmentDictionaryName = GetEquipmentDictionaryName(componentsCellComponentCellComponent, noEvents, defaultEquipmentDictionaryName); + stringBuilder. + Append("string check = \"").Append(check).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 (string.IsNullOrEmpty(cellInstanceVersion.FrozenBy)) + { + if (!cellInstanceVersion.CellCommunicatingRule.Contains('.') || !(from l in componentsCellComponentCellComponentEquipmentNames where l == cellInstanceVersion.CellCommunicatingRule.Split('.')[0] select true).Any()) + throw new Exception("CellCommunicatingRule not correct in Mango!"); + if (!cellInstanceVersion.CellNotCommunicatingRule.Contains('.') || !(from l in componentsCellComponentCellComponentEquipmentNames where l == cellInstanceVersion.CellNotCommunicatingRule.Split('.')[0] select true).Any()) + throw new Exception("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 FileConnectorConfiguration GetFileConnectorConfiguration(string json, ComponentsCellComponentCellComponent componentsCellComponentCellComponent) + { + FileConnectorConfiguration result; + const string sourceDirectoryCloaking = nameof(FileConnectorConfiguration.SourceDirectoryCloaking); + JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions { Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase) } }; + json = json.Replace(string.Concat("\"", nameof(FileConnectorConfiguration.ConnectionSettings), "\":"), string.Concat("\"Ignore", nameof(FileConnectorConfiguration.ConnectionSettings), "\":")); + result = JsonSerializer.Deserialize<FileConnectorConfiguration>(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<ConnectionSetting>(); + result.SourceFileFilters = result.SourceFileFilter.Split('|').ToList(); + if (!(componentsCellComponentCellComponent.Equipment?.ConnectionSettings is null)) + { + foreach (Setting setting in componentsCellComponentCellComponent.Equipment.ConnectionSettings.Setting) + result.ConnectionSettings.Add(new ConnectionSetting(null, null) { Name = setting.Name, Value = setting.Value }); + } + IEnumerable<ConnectionSetting> 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<string, FileConnectorConfiguration> GetFileConnectorConfigurationTuple(Tuple<string, CellInstanceVersion> cellInstanceVersionTuple, string cellInstanceConnectionName) + { + Tuple<string, FileConnectorConfiguration> result; + FileConnectorConfiguration fileConnectorConfiguration; + string cellInstanceServiceV2With = string.Concat(cellInstanceVersionTuple.Item1, '/', cellInstanceConnectionName); + if (_FileConnectorConfigurations.ContainsKey(cellInstanceServiceV2With)) + fileConnectorConfiguration = _FileConnectorConfigurations[cellInstanceServiceV2With]; + else + { + Dictionary<string, int[]> 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<string, FileConnectorConfiguration>(cellInstanceServiceV2With, fileConnectorConfiguration); + return result; + } + + protected 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<ConfigurationData>(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<EquipmentTypeVersion>(decodedCellInstanceConfigurationData, throwExceptions: true); + return result; + } + + protected Tuple<string, string, string, EquipmentTypeVersion> GetEquipmentTypeVersionTuple(string cellInstanceName, string cellInstanceVersionName, CellInstanceVersion cellInstanceVersion, string cellInstanceConnectionName) + { + Tuple<string, string, string, EquipmentTypeVersion> result; + EquipmentTypeVersion equipmentTypeVersion; + Dictionary<string, int[]> 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<string, string, string, EquipmentTypeVersion>(equipmentTypeServiceV2, componentsCellComponentCellComponent.Equipment.EquipmentType.Name, componentsCellComponentCellComponent.Equipment.EquipmentType.Version, equipmentTypeVersion); + return result; + } + + protected Tuple<string, string> GetParameterizedModelObjectDefinitionTypeTuple(Tuple<string, string, string, EquipmentTypeVersion> equipmentTypeVersionTuple) + { + Tuple<string, string> result; + string parameterizedModelObjectDefinitionType; + if (_FileConnectorConfigurations.ContainsKey(equipmentTypeVersionTuple.Item1)) + parameterizedModelObjectDefinitionType = _ParameterizedModelObjectDefinitionTypes[equipmentTypeVersionTuple.Item1]; + else + parameterizedModelObjectDefinitionType = equipmentTypeVersionTuple.Item4.FileHandlerObjectTypes.ParameterizedModelObjectDefinition.Type; + result = new Tuple<string, string>(equipmentTypeVersionTuple.Item1, parameterizedModelObjectDefinitionType); + return result; + } + + protected IList<ModelObjectParameterDefinition> GetModelObjectParameters(string json) + { + IList<ModelObjectParameterDefinition> results; + JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions { Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase) } }; + JsonElement jsonElement = JsonSerializer.Deserialize<JsonElement>(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<IList<ModelObjectParameterDefinition>>(jsonElement.ToString(), jsonSerializerOptions); + return results; + } + + protected Tuple<string, IList<ModelObjectParameterDefinition>> GetModelObjectParameters(Tuple<string, string, string, EquipmentTypeVersion> equipmentTypeVersionTuple) + { + Tuple<string, IList<ModelObjectParameterDefinition>> result; + IList<ModelObjectParameterDefinition> 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<string, IList<ModelObjectParameterDefinition>>(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; + } + else + { + equipmentDictionaryName = componentsCellComponentCellComponentEquipment.EquipmentDictionaries.CellEquipmentDictionaryReference.DictionaryName; + equipmentDictionaryVersionName = componentsCellComponentCellComponentEquipment.EquipmentDictionaries.CellEquipmentDictionaryReference.DictionaryVersion; + } + } + results = new string[] { equipmentDictionaryName, equipmentDictionaryVersionName }; + return results; + } + + protected 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<ConfigurationData>(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<EquipmentDictionaryVersion>(decodedCellInstanceConfigurationData, throwExceptions: true); + return result; + } + + protected Tuple<string, string, string, EquipmentDictionaryVersion> GetEquipmentDictionaryVersionTuple(string cellInstanceName, string cellInstanceVersionName, CellInstanceVersion cellInstanceVersion, string cellInstanceConnectionName, EquipmentTypeVersion equipmentTypeVersion) + { + Tuple<string, string, string, EquipmentDictionaryVersion> result; + string equipmentDictionaryName; + string equipmentDictionaryVersionName; + EquipmentDictionaryVersion equipmentDictionaryVersion; + Dictionary<string, int[]> 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<string, string, string, EquipmentDictionaryVersion>(equipmentDictionaryServiceV2, equipmentDictionaryName, equipmentDictionaryVersionName, equipmentDictionaryVersion); + return result; + } + + protected Tuple<string, List<Tuple<string, string>>> GetEquipmentDictionaryIsAlwaysEnabledEventsTuple(Tuple<string, string, string, EquipmentDictionaryVersion> equipmentDictionaryVersionTuple) + { + Tuple<string, List<Tuple<string, string>>> result; + List<Tuple<string, string>> results; + if (_SkipEquipmentDictionary) + results = new List<Tuple<string, string>>(); + else if (string.IsNullOrEmpty(equipmentDictionaryVersionTuple.Item1)) + throw new Exception(); + else if (_EquipmentDictionaryEventDescriptions.ContainsKey(equipmentDictionaryVersionTuple.Item1)) + results = _EquipmentDictionaryEventDescriptions[equipmentDictionaryVersionTuple.Item1]; + else + { + results = new List<Tuple<string, string>>(); + foreach (EquipmentDictionaryVersionEventsEvent equipmentDictionaryVersionEventsEvent in equipmentDictionaryVersionTuple.Item4.Events.Event) + { + if (string.IsNullOrEmpty(equipmentDictionaryVersionEventsEvent.Description)) + continue; + if (!equipmentDictionaryVersionEventsEvent.IsAlwaysEnabled) + continue; + results.Add(new Tuple<string, string>(equipmentDictionaryVersionEventsEvent.Name, equipmentDictionaryVersionEventsEvent.Description)); + } + } + result = new Tuple<string, List<Tuple<string, string>>>(equipmentDictionaryVersionTuple.Item1, results); + return result; + } + + protected Dictionary<string, object> GetKeyValuePairs(string cellInstanceName, string cellInstanceVersionName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, List<Tuple<string, string>> equipmentDictionaryIsAlwaysEnabledEvents) + { + Dictionary<string, object> results = new Dictionary<string, object> + { + { nameof(Environment), _Environment }, + { nameof(HostNameAndPort), _HostNameAndPort }, + { nameof(cellInstanceName), cellInstanceName }, + { nameof(equipmentTypeName), equipmentTypeName }, + { nameof(cellInstanceVersionName), cellInstanceVersionName }, + { nameof(cellInstanceConnectionName), cellInstanceConnectionName }, + { nameof(FileConnectorConfiguration), fileConnectorConfiguration }, + { nameof(IList<ModelObjectParameterDefinition>), 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<string, CellInstanceVersion> cellInstanceVersionTuple = GetCellInstanceVersionTuple(cellInstanceName, cellInstanceVersionName); + results = GetCSharpTextB(cellInstanceName, cellInstanceVersionName, cellInstanceVersionTuple.Item2, fileInfo); + 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<string, CellInstanceVersion> cellInstanceVersionTuple = GetCellInstanceVersionTuple(cellInstanceName, cellInstanceVersionName); + Tuple<string, FileConnectorConfiguration> fileConnectorConfigurationTuple = GetFileConnectorConfigurationTuple(cellInstanceVersionTuple, cellInstanceConnectionName); + Tuple<string, string, string, EquipmentTypeVersion> equipmentTypeVersionTuple = GetEquipmentTypeVersionTuple(cellInstanceName, cellInstanceVersionName, cellInstanceVersionTuple.Item2, cellInstanceConnectionName); + Tuple<string, string> parameterizedModelObjectDefinitionTypeTuple = GetParameterizedModelObjectDefinitionTypeTuple(equipmentTypeVersionTuple); + Tuple<string, IList<ModelObjectParameterDefinition>> modelObjectParametersTuple = GetModelObjectParameters(equipmentTypeVersionTuple); + Tuple<string, string, string, EquipmentDictionaryVersion> equipmentDictionaryVersionTuple = GetEquipmentDictionaryVersionTuple(cellInstanceName, cellInstanceVersionName, cellInstanceVersionTuple.Item2, cellInstanceConnectionName, equipmentTypeVersionTuple.Item4); + Tuple<string, List<Tuple<string, string>>> equipmentDictionaryIsAlwaysEnabledEventsTuple = GetEquipmentDictionaryIsAlwaysEnabledEventsTuple(equipmentDictionaryVersionTuple); + Dictionary<string, object> objects = GetKeyValuePairs(cellInstanceName, cellInstanceVersionName, cellInstanceConnectionName, fileConnectorConfigurationTuple.Item2, equipmentTypeVersionTuple.Item2, parameterizedModelObjectDefinitionTypeTuple.Item2, modelObjectParametersTuple.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<string, string> fileParameter = new Dictionary<string, string>(); + string cellInstanceConnectionName = GetCellInstanceConnectionName(segments); + if (!string.IsNullOrEmpty(cellInstanceConnectionName) && !Directory.Exists(fileInfo.DirectoryName)) + Directory.CreateDirectory(fileInfo.Directory.FullName); + Dictionary<string, List<long>> dummyRuns = new Dictionary<string, List<long>>(); + Tuple<string, CellInstanceVersion> cellInstanceVersionTuple = GetCellInstanceVersionTuple(cellInstanceName, cellInstanceVersionName); + Tuple<string, FileConnectorConfiguration> fileConnectorConfigurationTuple = GetFileConnectorConfigurationTuple(cellInstanceVersionTuple, cellInstanceConnectionName); + Tuple<string, string, string, EquipmentTypeVersion> equipmentTypeVersionTuple = GetEquipmentTypeVersionTuple(cellInstanceName, cellInstanceVersionName, cellInstanceVersionTuple.Item2, cellInstanceConnectionName); + Tuple<string, string> parameterizedModelObjectDefinitionTypeTuple = GetParameterizedModelObjectDefinitionTypeTuple(equipmentTypeVersionTuple); + Tuple<string, IList<ModelObjectParameterDefinition>> modelObjectParametersTuple = GetModelObjectParameters(equipmentTypeVersionTuple); + 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, 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<JsonElement>(json); + JsonElement fileConnectorConfigurationJsonElement = jsonElement.GetProperty(nameof(FileConnectorConfiguration)); + if (fileConnectorConfigurationJsonElement.ValueKind != JsonValueKind.Object) + throw new Exception(); + JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions { Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase) } }; + FileConnectorConfiguration fileConnectorConfiguration = JsonSerializer.Deserialize<FileConnectorConfiguration>(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 { } } \ 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..ee6db74 --- /dev/null +++ b/Adaptation/_Tests/Shared/EAFLoggingUnitTesting.cs @@ -0,0 +1,30 @@ +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(); + } + + } + +} \ 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..c24b236 --- /dev/null +++ b/Adaptation/_Tests/Shared/IsEnvironment.cs @@ -0,0 +1,171 @@ +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..d662753 --- /dev/null +++ b/Adaptation/_Tests/Shared/LoggingUnitTesting.cs @@ -0,0 +1,113 @@ +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<object> _Logger; + protected ILoggerFactory _LoggerFactory; + protected readonly LogLevel? _DefaultLogLevel; + protected readonly LogLevel? _Log4netProviderLogLevel; + protected readonly IConfigurationRoot _ConfigurationRoot; + public ILogger<object> 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<LogLevel> logLevels = new List<LogLevel>(); + 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<LogLevel>(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<object>(); + } + + public static string GetEnvironmentSpecialDirectory() + { + string result = string.Empty; + string traceFile; + List<string> directories = new List<string>(); + 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(); + } + + } + +} \ 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..11362da --- /dev/null +++ b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/CellInstance.cs @@ -0,0 +1,4660 @@ +namespace Shared.PasteSpecialXml.EAF.XML.API.CellInstance +{ + + // NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0. + /// <remarks/> + [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 + { + + 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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public string CreatedBy + { + get + { + return this.createdByField; + } + set + { + this.createdByField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public System.DateTime CreationDate + { + get + { + return this.creationDateField; + } + set + { + this.creationDateField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities", IsNullable = true)] + public object Description + { + get + { + return this.descriptionField; + } + set + { + this.descriptionField = value; + } + } + + /// <remarks/> + [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 + { + return this.extensionsField; + } + set + { + this.extensionsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public System.DateTime FreezeDate + { + get + { + return this.freezeDateField; + } + set + { + this.freezeDateField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public string FrozenBy + { + get + { + return this.frozenByField; + } + set + { + this.frozenByField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public bool IsFrozen + { + get + { + return this.isFrozenField; + } + set + { + this.isFrozenField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public bool IsRetired + { + get + { + return this.isRetiredField; + } + set + { + this.isRetiredField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public System.DateTime RetireDate + { + get + { + return this.retireDateField; + } + set + { + this.retireDateField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities", IsNullable = true)] + public object RetiredBy + { + get + { + return this.retiredByField; + } + set + { + this.retiredByField = value; + } + } + + /// <remarks/> + public string CellCommunicatingRule + { + get + { + return this.cellCommunicatingRuleField; + } + set + { + this.cellCommunicatingRuleField = value; + } + } + + /// <remarks/> + public string CellNotCommunicatingRule + { + get + { + return this.cellNotCommunicatingRuleField; + } + set + { + this.cellNotCommunicatingRuleField = value; + } + } + + /// <remarks/> + public CellInstanceVersionCellSetting CellSetting + { + get + { + return this.cellSettingField; + } + set + { + this.cellSettingField = value; + } + } + + /// <remarks/> + public CellInstanceVersionComponentModel ComponentModel + { + get + { + return this.componentModelField; + } + set + { + this.componentModelField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlArrayItemAttribute("SelectedDeploymentPackage", Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Deployme" + + "nt", IsNullable = false)] + public SelectedDeploymentPackage[] DeploymentPackages + { + get + { + return this.deploymentPackagesField; + } + set + { + this.deploymentPackagesField = value; + } + } + + /// <remarks/> + public CellInstanceVersionEdaConnection EdaConnection + { + get + { + return this.edaConnectionField; + } + set + { + this.edaConnectionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlArrayItemAttribute("EquipmentConnectionSettings", Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances", IsNullable = false)] + public EquipmentConnectionSettings[] EquipmentConnections + { + get + { + return this.equipmentConnectionsField; + } + set + { + this.equipmentConnectionsField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + public CellInstanceVersionParentInstance ParentInstance + { + get + { + return this.parentInstanceField; + } + set + { + this.parentInstanceField = value; + } + } + + /// <remarks/> + public CellInstanceVersionEdaTraceHandling EdaTraceHandling + { + get + { + return this.edaTraceHandlingField; + } + set + { + this.edaTraceHandlingField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + public string PackageName + { + get + { + return this.packageNameField; + } + set + { + this.packageNameField = value; + } + } + + /// <remarks/> + public string PackageVersion + { + get + { + return this.packageVersionField; + } + set + { + this.packageVersionField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Ref + { + get + { + return this.refField; + } + set + { + this.refField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Backbone" + + "s")] + public string ClassName + { + get + { + return this.classNameField; + } + set + { + this.classNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Backbone" + + "s", IsNullable = true)] + public object Configuration + { + get + { + return this.configurationField; + } + set + { + this.configurationField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Backbone" + + "s")] + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Equipmen" + + "tAutomationClient")] + public object Editors + { + get + { + return this.editorsField; + } + set + { + this.editorsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute()] + public string i___type + { + get + { + return this.i___typeField; + } + set + { + this.i___typeField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] + public CellType CellType + { + get + { + return this.cellTypeField; + } + set + { + this.cellTypeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Version + { + get + { + return this.versionField; + } + set + { + this.versionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [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 + { + return this.componentsField; + } + set + { + this.componentsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlArrayItemAttribute("CellComponent", IsNullable = false)] + public ComponentsCellComponentCellComponent[] Children + { + get + { + return this.childrenField; + } + set + { + this.childrenField = value; + } + } + + /// <remarks/> + public ComponentsCellComponentEquipment Equipment + { + get + { + return this.equipmentField; + } + set + { + this.equipmentField = value; + } + } + + /// <remarks/> + public object EquipmentObjectType + { + get + { + return this.equipmentObjectTypeField; + } + set + { + this.equipmentObjectTypeField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlArrayItemAttribute("ComponentParameter", IsNullable = false)] + public ComponentsCellComponentComponentParameter[] Parameters + { + get + { + return this.parametersField; + } + set + { + this.parametersField = value; + } + } + + /// <remarks/> + public string Type + { + get + { + return this.typeField; + } + set + { + this.typeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public object Children + { + get + { + return this.childrenField; + } + set + { + this.childrenField = value; + } + } + + /// <remarks/> + public ComponentsCellComponentCellComponentEquipment Equipment + { + get + { + return this.equipmentField; + } + set + { + this.equipmentField = value; + } + } + + /// <remarks/> + public object EquipmentObjectType + { + get + { + return this.equipmentObjectTypeField; + } + set + { + this.equipmentObjectTypeField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlArrayItemAttribute("ComponentParameter", IsNullable = false)] + public ComponentsCellComponentCellComponentComponentParameter[] Parameters + { + get + { + return this.parametersField; + } + set + { + this.parametersField = value; + } + } + + /// <remarks/> + public string Type + { + get + { + return this.typeField; + } + set + { + this.typeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + + /// <remarks/> + public ComponentsCellComponentChildrenCellComponentEquipmentEquipmentDictionaries EquipmentDictionaries + { + get + { + return this.equipmentDictionariesField; + } + set + { + this.equipmentDictionariesField = value; + } + } + + /// <remarks/> + public ComponentsCellComponentCellComponentEquipmentEquipmentType EquipmentType + { + get + { + return this.equipmentTypeField; + } + set + { + this.equipmentTypeField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string AlternateTargetFolder + { + get + { + return this.alternateTargetFolderField; + } + set + { + this.alternateTargetFolderField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ConnectionRetryInterval + { + get + { + return this.connectionRetryIntervalField; + } + set + { + this.connectionRetryIntervalField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public ConnectionSettings ConnectionSettings + { + get + { + return this.connectionSettingsField; + } + set + { + this.connectionSettingsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool CopySourceFolderStructure + { + get + { + return this.copySourceFolderStructureField; + } + set + { + this.copySourceFolderStructureField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string DefaultPlaceHolderValue + { + get + { + return this.defaultPlaceHolderValueField; + } + set + { + this.defaultPlaceHolderValueField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool DeleteEmptySourceSubFolders + { + get + { + return this.deleteEmptySourceSubFoldersField; + } + set + { + this.deleteEmptySourceSubFoldersField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorPostProcessingMode + { + get + { + return this.errorPostProcessingModeField; + } + set + { + this.errorPostProcessingModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorTargetFileLocation + { + get + { + return this.errorTargetFileLocationField; + } + set + { + this.errorTargetFileLocationField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorTargetFileName + { + get + { + return this.errorTargetFileNameField; + } + set + { + this.errorTargetFileNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileAgeFilterMode + { + get + { + return this.fileAgeFilterModeField; + } + set + { + this.fileAgeFilterModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileAgeThreshold + { + get + { + return this.fileAgeThresholdField; + } + set + { + this.fileAgeThresholdField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long FileHandleTimeout + { + get + { + return this.fileHandleTimeoutField; + } + set + { + this.fileHandleTimeoutField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long FileHandleWaitTime + { + get + { + return this.fileHandleWaitTimeField; + } + set + { + this.fileHandleWaitTimeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public int FileScanningIntervalInSeconds + { + get + { + return this.fileScanningIntervalInSecondsField; + } + set + { + this.fileScanningIntervalInSecondsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileScanningOption + { + get + { + return this.fileScanningOptionField; + } + set + { + this.fileScanningOptionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public int IdleEventWaitTimeInSeconds + { + get + { + return this.idleEventWaitTimeInSecondsField; + } + set + { + this.idleEventWaitTimeInSecondsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string IfFileExistAction + { + get + { + return this.ifFileExistActionField; + } + set + { + this.ifFileExistActionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string IfPostProcessingFailsAction + { + get + { + return this.ifPostProcessingFailsActionField; + } + set + { + this.ifPostProcessingFailsActionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool IncludeSubDirectories + { + get + { + return this.includeSubDirectoriesField; + } + set + { + this.includeSubDirectoriesField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string PostProcessingMode + { + get + { + return this.postProcessingModeField; + } + set + { + this.postProcessingModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long PostProcessingRetries + { + get + { + return this.postProcessingRetriesField; + } + set + { + this.postProcessingRetriesField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string PreProcessingMode + { + get + { + return this.preProcessingModeField; + } + set + { + this.preProcessingModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SkipSearchDirectoryNames + { + get + { + return this.skipSearchDirectoryNamesField; + } + set + { + this.skipSearchDirectoryNamesField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SourceFileFilter + { + get + { + return this.sourceFileFilterField; + } + set + { + this.sourceFileFilterField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SourceFileLocation + { + get + { + return this.sourceFileLocationField; + } + set + { + this.sourceFileLocationField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string TargetFileLocation + { + get + { + return this.targetFileLocationField; + } + set + { + this.targetFileLocationField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string TargetFileName + { + get + { + return this.targetFileNameField; + } + set + { + this.targetFileNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool TriggerOnChanged + { + get + { + return this.triggerOnChangedField; + } + set + { + this.triggerOnChangedField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool TriggerOnCreated + { + get + { + return this.triggerOnCreatedField; + } + set + { + this.triggerOnCreatedField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool UseZip64Mode + { + get + { + return this.useZip64ModeField; + } + set + { + this.useZip64ModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipErrorTargetFileName + { + get + { + return this.zipErrorTargetFileNameField; + } + set + { + this.zipErrorTargetFileNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileAmount + { + get + { + return this.zipFileAmountField; + } + set + { + this.zipFileAmountField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileSubFolderLevel + { + get + { + return this.zipFileSubFolderLevelField; + } + set + { + this.zipFileSubFolderLevelField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileTime + { + get + { + return this.zipFileTimeField; + } + set + { + this.zipFileTimeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipMode + { + get + { + return this.zipModeField; + } + set + { + this.zipModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipTargetFileName + { + get + { + return this.zipTargetFileNameField; + } + set + { + this.zipTargetFileNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances")] + public string BaudRate + { + get + { + return this.baudRateField; + } + set + { + this.baudRateField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances")] + public string ConnectionMode + { + get + { + return this.connectionModeField; + } + set + { + this.connectionModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances")] + public byte DeviceId + { + get + { + return this.deviceIdField; + } + set + { + this.deviceIdField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool DeviceIdSpecified + { + get + { + return this.deviceIdFieldSpecified; + } + set + { + this.deviceIdFieldSpecified = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances")] + public string Host + { + get + { + return this.hostField; + } + set + { + this.hostField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string LinkTestTimer + { + get + { + return this.linkTestTimerField; + } + set + { + this.linkTestTimerField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances")] + public ushort Port + { + get + { + return this.portField; + } + set + { + this.portField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool PortSpecified + { + get + { + return this.portFieldSpecified; + } + set + { + this.portFieldSpecified = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances")] + public string PortType + { + get + { + return this.portTypeField; + } + set + { + this.portTypeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances")] + public string SessionMode + { + get + { + return this.sessionModeField; + } + set + { + this.sessionModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T1InterCharacter + { + get + { + return this.t1InterCharacterField; + } + set + { + this.t1InterCharacterField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T2Protocol + { + get + { + return this.t2ProtocolField; + } + set + { + this.t2ProtocolField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T3MessageReply + { + get + { + return this.t3MessageReplyField; + } + set + { + this.t3MessageReplyField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T4InterBlock + { + get + { + return this.t4InterBlockField; + } + set + { + this.t4InterBlockField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T5ConnectionSeperation + { + get + { + return this.t5ConnectionSeperationField; + } + set + { + this.t5ConnectionSeperationField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T6HsmsControlMessage + { + get + { + return this.t6HsmsControlMessageField; + } + set + { + this.t6HsmsControlMessageField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T7ConnectionIdle + { + get + { + return this.t7ConnectionIdleField; + } + set + { + this.t7ConnectionIdleField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Semicond" + + "uctor.CellInstances", DataType = "duration")] + public string T8NetworkIntercharacter + { + get + { + return this.t8NetworkIntercharacterField; + } + set + { + this.t8NetworkIntercharacterField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute()] + public string i___type + { + get + { + return this.i___typeField; + } + set + { + this.i___typeField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public CellEquipmentDictionaryReference CellEquipmentDictionaryReference + { + get + { + return this.cellEquipmentDictionaryReferenceField; + } + set + { + this.cellEquipmentDictionaryReferenceField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public string DictionaryName + { + get + { + return this.dictionaryNameField; + } + set + { + this.dictionaryNameField = value; + } + } + + /// <remarks/> + public string DictionaryVersion + { + get + { + return this.dictionaryVersionField; + } + set + { + this.dictionaryVersionField = value; + } + } + + /// <remarks/> + public byte Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Version + { + get + { + return this.versionField; + } + set + { + this.versionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation", IsNullable = true)] + public object EnumType + { + get + { + return this.enumTypeField; + } + set + { + this.enumTypeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public string Value + { + get + { + return this.valueField; + } + set + { + this.valueField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public string ValueType + { + get + { + return this.valueTypeField; + } + set + { + this.valueTypeField = value; + } + } + + /// <remarks/> + public bool IsOverride + { + get + { + return this.isOverrideField; + } + set + { + this.isOverrideField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + public object EquipmentDictionaries + { + get + { + return this.equipmentDictionariesField; + } + set + { + this.equipmentDictionariesField = value; + } + } + + /// <remarks/> + public ComponentsCellComponentEquipmentEquipmentType EquipmentType + { + get + { + return this.equipmentTypeField; + } + set + { + this.equipmentTypeField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string AlternateTargetFolder + { + get + { + return this.alternateTargetFolderField; + } + set + { + this.alternateTargetFolderField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ConnectionRetryInterval + { + get + { + return this.connectionRetryIntervalField; + } + set + { + this.connectionRetryIntervalField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public ConnectionSettings ConnectionSettings + { + get + { + return this.connectionSettingsField; + } + set + { + this.connectionSettingsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool CopySourceFolderStructure + { + get + { + return this.copySourceFolderStructureField; + } + set + { + this.copySourceFolderStructureField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string DefaultPlaceHolderValue + { + get + { + return this.defaultPlaceHolderValueField; + } + set + { + this.defaultPlaceHolderValueField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool DeleteEmptySourceSubFolders + { + get + { + return this.deleteEmptySourceSubFoldersField; + } + set + { + this.deleteEmptySourceSubFoldersField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorPostProcessingMode + { + get + { + return this.errorPostProcessingModeField; + } + set + { + this.errorPostProcessingModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorTargetFileLocation + { + get + { + return this.errorTargetFileLocationField; + } + set + { + this.errorTargetFileLocationField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorTargetFileName + { + get + { + return this.errorTargetFileNameField; + } + set + { + this.errorTargetFileNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileAgeFilterMode + { + get + { + return this.fileAgeFilterModeField; + } + set + { + this.fileAgeFilterModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileAgeThreshold + { + get + { + return this.fileAgeThresholdField; + } + set + { + this.fileAgeThresholdField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long FileHandleTimeout + { + get + { + return this.fileHandleTimeoutField; + } + set + { + this.fileHandleTimeoutField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long FileHandleWaitTime + { + get + { + return this.fileHandleWaitTimeField; + } + set + { + this.fileHandleWaitTimeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public int FileScanningIntervalInSeconds + { + get + { + return this.fileScanningIntervalInSecondsField; + } + set + { + this.fileScanningIntervalInSecondsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileScanningOption + { + get + { + return this.fileScanningOptionField; + } + set + { + this.fileScanningOptionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public int IdleEventWaitTimeInSeconds + { + get + { + return this.idleEventWaitTimeInSecondsField; + } + set + { + this.idleEventWaitTimeInSecondsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string IfFileExistAction + { + get + { + return this.ifFileExistActionField; + } + set + { + this.ifFileExistActionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string IfPostProcessingFailsAction + { + get + { + return this.ifPostProcessingFailsActionField; + } + set + { + this.ifPostProcessingFailsActionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool IncludeSubDirectories + { + get + { + return this.includeSubDirectoriesField; + } + set + { + this.includeSubDirectoriesField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string PostProcessingMode + { + get + { + return this.postProcessingModeField; + } + set + { + this.postProcessingModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long PostProcessingRetries + { + get + { + return this.postProcessingRetriesField; + } + set + { + this.postProcessingRetriesField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string PreProcessingMode + { + get + { + return this.preProcessingModeField; + } + set + { + this.preProcessingModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SkipSearchDirectoryNames + { + get + { + return this.skipSearchDirectoryNamesField; + } + set + { + this.skipSearchDirectoryNamesField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SourceFileFilter + { + get + { + return this.sourceFileFilterField; + } + set + { + this.sourceFileFilterField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SourceFileLocation + { + get + { + return this.sourceFileLocationField; + } + set + { + this.sourceFileLocationField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string TargetFileLocation + { + get + { + return this.targetFileLocationField; + } + set + { + this.targetFileLocationField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string TargetFileName + { + get + { + return this.targetFileNameField; + } + set + { + this.targetFileNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool TriggerOnChanged + { + get + { + return this.triggerOnChangedField; + } + set + { + this.triggerOnChangedField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool TriggerOnCreated + { + get + { + return this.triggerOnCreatedField; + } + set + { + this.triggerOnCreatedField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool UseZip64Mode + { + get + { + return this.useZip64ModeField; + } + set + { + this.useZip64ModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipErrorTargetFileName + { + get + { + return this.zipErrorTargetFileNameField; + } + set + { + this.zipErrorTargetFileNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileAmount + { + get + { + return this.zipFileAmountField; + } + set + { + this.zipFileAmountField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileSubFolderLevel + { + get + { + return this.zipFileSubFolderLevelField; + } + set + { + this.zipFileSubFolderLevelField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileTime + { + get + { + return this.zipFileTimeField; + } + set + { + this.zipFileTimeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipMode + { + get + { + return this.zipModeField; + } + set + { + this.zipModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipTargetFileName + { + get + { + return this.zipTargetFileNameField; + } + set + { + this.zipTargetFileNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Ref + { + get + { + return this.refField; + } + set + { + this.refField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute()] + public string i___type + { + get + { + return this.i___typeField; + } + set + { + this.i___typeField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Version + { + get + { + return this.versionField; + } + set + { + this.versionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation", IsNullable = true)] + public object EnumType + { + get + { + return this.enumTypeField; + } + set + { + this.enumTypeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public string Value + { + get + { + return this.valueField; + } + set + { + this.valueField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public string ValueType + { + get + { + return this.valueTypeField; + } + set + { + this.valueTypeField = value; + } + } + + /// <remarks/> + public bool IsOverride + { + get + { + return this.isOverrideField; + } + set + { + this.isOverrideField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public int CheckInterval + { + get + { + return this.checkIntervalField; + } + set + { + this.checkIntervalField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public int ConnectionTimeout + { + get + { + return this.connectionTimeoutField; + } + set + { + this.connectionTimeoutField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA", IsNullable = true)] + public object EdaClientProxyFactoryProviderName + { + get + { + return this.edaClientProxyFactoryProviderNameField; + } + set + { + this.edaClientProxyFactoryProviderNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public long MaxLostPings + { + get + { + return this.maxLostPingsField; + } + set + { + this.maxLostPingsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public string PortName + { + get + { + return this.portNameField; + } + set + { + this.portNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public int PortNumber + { + get + { + return this.portNumberField; + } + set + { + this.portNumberField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public string SSLEnabled + { + get + { + return this.sSLEnabledField; + } + set + { + this.sSLEnabledField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public string CurrentActiveVersion + { + get + { + return this.currentActiveVersionField; + } + set + { + this.currentActiveVersionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object CurrentHost + { + get + { + return this.currentHostField; + } + set + { + this.currentHostField = value; + } + } + + /// <remarks/> + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object Info + { + get + { + return this.infoField; + } + set + { + this.infoField = value; + } + } + + /// <remarks/> + public bool IsStarted + { + get + { + return this.isStartedField; + } + set + { + this.isStartedField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object StartTime + { + get + { + return this.startTimeField; + } + set + { + this.startTimeField = value; + } + } + + /// <remarks/> + public bool Startable + { + get + { + return this.startableField; + } + set + { + this.startableField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object StopTime + { + get + { + return this.stopTimeField; + } + set + { + this.stopTimeField = value; + } + } + + /// <remarks/> + public string TargetActiveVersion + { + get + { + return this.targetActiveVersionField; + } + set + { + this.targetActiveVersionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object TargetHost + { + get + { + return this.targetHostField; + } + set + { + this.targetHostField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public long MaxParameterCollectionTimeDelta + { + get + { + return this.maxParameterCollectionTimeDeltaField; + } + set + { + this.maxParameterCollectionTimeDeltaField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA", IsNullable = true)] + public object MergeStrategyClass + { + get + { + return this.mergeStrategyClassField; + } + set + { + this.mergeStrategyClassField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public object MergeStrategyParameters + { + get + { + return this.mergeStrategyParametersField; + } + set + { + this.mergeStrategyParametersField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.EDA")] + public long TraceCleanupDaemonInterval + { + get + { + return this.traceCleanupDaemonIntervalField; + } + set + { + this.traceCleanupDaemonIntervalField = value; + } + } + + /// <remarks/> + [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 + { + return this.traceSourcePrimaryPrioritiesField; + } + set + { + this.traceSourcePrimaryPrioritiesField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] + public object EquipmentDictionaries + { + get + { + return this.equipmentDictionariesField; + } + set + { + this.equipmentDictionariesField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] + public EquipmentType EquipmentType + { + get + { + return this.equipmentTypeField; + } + set + { + this.equipmentTypeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities.CellInstances")] + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string AlternateTargetFolder + { + get + { + return this.alternateTargetFolderField; + } + set + { + this.alternateTargetFolderField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ConnectionRetryInterval + { + get + { + return this.connectionRetryIntervalField; + } + set + { + this.connectionRetryIntervalField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public ConnectionSettings ConnectionSettings + { + get + { + return this.connectionSettingsField; + } + set + { + this.connectionSettingsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool CopySourceFolderStructure + { + get + { + return this.copySourceFolderStructureField; + } + set + { + this.copySourceFolderStructureField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string DefaultPlaceHolderValue + { + get + { + return this.defaultPlaceHolderValueField; + } + set + { + this.defaultPlaceHolderValueField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool DeleteEmptySourceSubFolders + { + get + { + return this.deleteEmptySourceSubFoldersField; + } + set + { + this.deleteEmptySourceSubFoldersField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorPostProcessingMode + { + get + { + return this.errorPostProcessingModeField; + } + set + { + this.errorPostProcessingModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorTargetFileLocation + { + get + { + return this.errorTargetFileLocationField; + } + set + { + this.errorTargetFileLocationField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ErrorTargetFileName + { + get + { + return this.errorTargetFileNameField; + } + set + { + this.errorTargetFileNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileAgeFilterMode + { + get + { + return this.fileAgeFilterModeField; + } + set + { + this.fileAgeFilterModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileAgeThreshold + { + get + { + return this.fileAgeThresholdField; + } + set + { + this.fileAgeThresholdField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long FileHandleTimeout + { + get + { + return this.fileHandleTimeoutField; + } + set + { + this.fileHandleTimeoutField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long FileHandleWaitTime + { + get + { + return this.fileHandleWaitTimeField; + } + set + { + this.fileHandleWaitTimeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public int FileScanningIntervalInSeconds + { + get + { + return this.fileScanningIntervalInSecondsField; + } + set + { + this.fileScanningIntervalInSecondsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string FileScanningOption + { + get + { + return this.fileScanningOptionField; + } + set + { + this.fileScanningOptionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public int IdleEventWaitTimeInSeconds + { + get + { + return this.idleEventWaitTimeInSecondsField; + } + set + { + this.idleEventWaitTimeInSecondsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string IfFileExistAction + { + get + { + return this.ifFileExistActionField; + } + set + { + this.ifFileExistActionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string IfPostProcessingFailsAction + { + get + { + return this.ifPostProcessingFailsActionField; + } + set + { + this.ifPostProcessingFailsActionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool IncludeSubDirectories + { + get + { + return this.includeSubDirectoriesField; + } + set + { + this.includeSubDirectoriesField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string PostProcessingMode + { + get + { + return this.postProcessingModeField; + } + set + { + this.postProcessingModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long PostProcessingRetries + { + get + { + return this.postProcessingRetriesField; + } + set + { + this.postProcessingRetriesField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string PreProcessingMode + { + get + { + return this.preProcessingModeField; + } + set + { + this.preProcessingModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SkipSearchDirectoryNames + { + get + { + return this.skipSearchDirectoryNamesField; + } + set + { + this.skipSearchDirectoryNamesField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SourceFileFilter + { + get + { + return this.sourceFileFilterField; + } + set + { + this.sourceFileFilterField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string SourceFileLocation + { + get + { + return this.sourceFileLocationField; + } + set + { + this.sourceFileLocationField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string TargetFileLocation + { + get + { + return this.targetFileLocationField; + } + set + { + this.targetFileLocationField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string TargetFileName + { + get + { + return this.targetFileNameField; + } + set + { + this.targetFileNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool TriggerOnChanged + { + get + { + return this.triggerOnChangedField; + } + set + { + this.triggerOnChangedField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool TriggerOnCreated + { + get + { + return this.triggerOnCreatedField; + } + set + { + this.triggerOnCreatedField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public bool UseZip64Mode + { + get + { + return this.useZip64ModeField; + } + set + { + this.useZip64ModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipErrorTargetFileName + { + get + { + return this.zipErrorTargetFileNameField; + } + set + { + this.zipErrorTargetFileNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileAmount + { + get + { + return this.zipFileAmountField; + } + set + { + this.zipFileAmountField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileSubFolderLevel + { + get + { + return this.zipFileSubFolderLevelField; + } + set + { + this.zipFileSubFolderLevelField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public long ZipFileTime + { + get + { + return this.zipFileTimeField; + } + set + { + this.zipFileTimeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipMode + { + get + { + return this.zipModeField; + } + set + { + this.zipModeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.CellInstances")] + public string ZipTargetFileName + { + get + { + return this.zipTargetFileNameField; + } + set + { + this.zipTargetFileNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute()] + public string i___type + { + get + { + return this.i___typeField; + } + set + { + this.i___typeField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public long Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.FactoryEntities")] + public string Version + { + get + { + return this.versionField; + } + set + { + this.versionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("VersionExtension")] + public ExtensionsVersionExtension[] VersionExtension + { + get + { + return this.versionExtensionField; + } + set + { + this.versionExtensionField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("CellComponent")] + public ComponentsCellComponent[] CellComponent + { + get + { + return this.cellComponentField; + } + set + { + this.cellComponentField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("Connection")] + public TraceSourcePrimaryPrioritiesConnection[] Connection + { + get + { + return this.connectionField; + } + set + { + this.connectionField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("Setting", Namespace = "http://schemas.datacontract.org/2004/07/Ifx.ManagementInterfaceIfx.Common.Connect" + + "ionSettings")] + public Setting[] Setting + { + get + { + return this.settingField; + } + set + { + this.settingField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + public string Value + { + get + { + return 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..cea6096 --- /dev/null +++ b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/ConfigurationData.cs @@ -0,0 +1,25 @@ +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..419b475 --- /dev/null +++ b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentDictionary.cs @@ -0,0 +1,1956 @@ +namespace Shared.PasteSpecialXml.EAF.XML.API.EquipmentDictionary +{ + + + // NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0. + /// <remarks/> + [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 + { + + 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; + + /// <remarks/> + public EquipmentDictionaryVersionAlarms Alarms + { + get + { + return this.alarmsField; + } + set + { + this.alarmsField = value; + } + } + + /// <remarks/> + public string CreatedBy + { + get + { + return this.createdByField; + } + set + { + this.createdByField = value; + } + } + + /// <remarks/> + public System.DateTime CreationDate + { + get + { + return this.creationDateField; + } + set + { + this.creationDateField = value; + } + } + + /// <remarks/> + public EquipmentDictionaryVersionDataItems DataItems + { + get + { + return this.dataItemsField; + } + set + { + this.dataItemsField = value; + } + } + + /// <remarks/> + public string Description + { + get + { + return this.descriptionField; + } + set + { + this.descriptionField = value; + } + } + + /// <remarks/> + public string DictionaryName + { + get + { + return this.dictionaryNameField; + } + set + { + this.dictionaryNameField = value; + } + } + + /// <remarks/> + public EquipmentDictionaryVersionEquipmentSettings EquipmentSettings + { + get + { + return this.equipmentSettingsField; + } + set + { + this.equipmentSettingsField = value; + } + } + + /// <remarks/> + public EquipmentDictionaryVersionEvents Events + { + get + { + return this.eventsField; + } + set + { + this.eventsField = value; + } + } + + /// <remarks/> + public System.DateTime FreezeDate + { + get + { + return this.freezeDateField; + } + set + { + this.freezeDateField = value; + } + } + + /// <remarks/> + public object FrozenBy + { + get + { + return this.frozenByField; + } + set + { + this.frozenByField = value; + } + } + + /// <remarks/> + public bool IsFrozen + { + get + { + return this.isFrozenField; + } + set + { + this.isFrozenField = value; + } + } + + /// <remarks/> + public bool IsRetired + { + get + { + return this.isRetiredField; + } + set + { + this.isRetiredField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + public EquipmentDictionaryVersionObjectTypes ObjectTypes + { + get + { + return this.objectTypesField; + } + set + { + this.objectTypesField = value; + } + } + + /// <remarks/> + public EquipmentDictionaryVersionReports Reports + { + get + { + return this.reportsField; + } + set + { + this.reportsField = value; + } + } + + /// <remarks/> + public System.DateTime RetireDate + { + get + { + return this.retireDateField; + } + set + { + this.retireDateField = value; + } + } + + /// <remarks/> + public object RetiredBy + { + get + { + return this.retiredByField; + } + set + { + this.retiredByField = value; + } + } + + /// <remarks/> + public string SchemaVersion + { + get + { + return this.schemaVersionField; + } + set + { + this.schemaVersionField = value; + } + } + + /// <remarks/> + public EquipmentDictionaryVersionValidityMapDataItemToEvent ValidityMapDataItemToEvent + { + get + { + return this.validityMapDataItemToEventField; + } + set + { + this.validityMapDataItemToEventField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("Alarm")] + public EquipmentDictionaryVersionAlarmsAlarm[] Alarm + { + get + { + return this.alarmField; + } + set + { + this.alarmField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public object Context + { + get + { + return this.contextField; + } + set + { + this.contextField = value; + } + } + + /// <remarks/> + public string Description + { + get + { + return this.descriptionField; + } + set + { + this.descriptionField = value; + } + } + + /// <remarks/> + public bool IsEnabled + { + get + { + return this.isEnabledField; + } + set + { + this.isEnabledField = value; + } + } + + /// <remarks/> + public bool IsVirtual + { + get + { + return this.isVirtualField; + } + set + { + this.isVirtualField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool IsVirtualSpecified + { + get + { + return this.isVirtualFieldSpecified; + } + set + { + this.isVirtualFieldSpecified = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + public object Severity + { + get + { + return this.severityField; + } + set + { + this.severityField = value; + } + } + + /// <remarks/> + public int SourceID + { + get + { + return this.sourceIDField; + } + set + { + this.sourceIDField = value; + } + } + + /// <remarks/> + public object Text + { + get + { + return this.textField; + } + set + { + this.textField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("Item")] + public EquipmentDictionaryVersionDataItemsItem[] Item + { + get + { + return this.itemField; + } + set + { + this.itemField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public string DataType + { + get + { + return this.dataTypeField; + } + set + { + this.dataTypeField = value; + } + } + + /// <remarks/> + public string Description + { + get + { + return this.descriptionField; + } + set + { + this.descriptionField = value; + } + } + + /// <remarks/> + public bool IsQueryable + { + get + { + return this.isQueryableField; + } + set + { + this.isQueryableField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + public uint SourceID + { + get + { + return this.sourceIDField; + } + set + { + this.sourceIDField = value; + } + } + + /// <remarks/> + public object Unit + { + get + { + return this.unitField; + } + set + { + this.unitField = value; + } + } + + /// <remarks/> + public string ValidityContext + { + get + { + return this.validityContextField; + } + set + { + this.validityContextField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("Setting")] + public EquipmentDictionaryVersionEquipmentSettingsSetting[] Setting + { + get + { + return this.settingField; + } + set + { + this.settingField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object Context + { + get + { + return this.contextField; + } + set + { + this.contextField = value; + } + } + + /// <remarks/> + public string DataType + { + get + { + return this.dataTypeField; + } + set + { + this.dataTypeField = value; + } + } + + /// <remarks/> + public string Description + { + get + { + return this.descriptionField; + } + set + { + this.descriptionField = value; + } + } + + /// <remarks/> + public string InitialValue + { + get + { + return this.initialValueField; + } + set + { + this.initialValueField = value; + } + } + + /// <remarks/> + public bool Initialize + { + get + { + return this.initializeField; + } + set + { + this.initializeField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + public uint SourceID + { + get + { + return this.sourceIDField; + } + set + { + this.sourceIDField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("Event")] + public EquipmentDictionaryVersionEventsEvent[] Event + { + get + { + return this.eventField; + } + set + { + this.eventField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public object Context + { + get + { + return this.contextField; + } + set + { + this.contextField = value; + } + } + + /// <remarks/> + public string Description + { + get + { + return this.descriptionField; + } + set + { + this.descriptionField = value; + } + } + + /// <remarks/> + public bool IsAlwaysEnabled + { + get + { + return this.isAlwaysEnabledField; + } + set + { + this.isAlwaysEnabledField = value; + } + } + + /// <remarks/> + public bool IsVirtual + { + get + { + return this.isVirtualField; + } + set + { + this.isVirtualField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + public string SourceID + { + get + { + return this.sourceIDField; + } + set + { + this.sourceIDField = value; + } + } + + /// <remarks/> + public EquipmentDictionaryVersionEventsEventValidDataItems ValidDataItems + { + get + { + return this.validDataItemsField; + } + set + { + this.validDataItemsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("Type")] + public EquipmentDictionaryVersionObjectTypesType[] Type + { + get + { + return this.typeField; + } + set + { + this.typeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public EquipmentDictionaryVersionObjectTypesTypeAlarms Alarms + { + get + { + return this.alarmsField; + } + set + { + this.alarmsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object BaseType + { + get + { + return this.baseTypeField; + } + set + { + this.baseTypeField = value; + } + } + + /// <remarks/> + public EquipmentDictionaryVersionObjectTypesTypeDataItems DataItems + { + get + { + return this.dataItemsField; + } + set + { + this.dataItemsField = value; + } + } + + /// <remarks/> + public EquipmentDictionaryVersionObjectTypesTypeEvents Events + { + get + { + return this.eventsField; + } + set + { + this.eventsField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + public EquipmentDictionaryVersionObjectTypesTypeSettings Settings + { + get + { + return this.settingsField; + } + set + { + this.settingsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("Item")] + public EquipmentDictionaryVersionObjectTypesTypeDataItemsItem[] Item + { + get + { + return this.itemField; + } + set + { + this.itemField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public EquipmentDictionaryVersionObjectTypesTypeDataItemsItemEquipmentDataItems EquipmentDataItems + { + get + { + return this.equipmentDataItemsField; + } + set + { + this.equipmentDataItemsField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + public object Unit + { + get + { + return this.unitField; + } + set + { + this.unitField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("Item")] + public EquipmentDictionaryVersionObjectTypesTypeDataItemsItemEquipmentDataItemsItem[] Item + { + get + { + return this.itemField; + } + set + { + this.itemField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Ref + { + get + { + return this.refField; + } + set + { + this.refField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("Event")] + public EquipmentDictionaryVersionObjectTypesTypeEventsEvent[] Event + { + get + { + return this.eventField; + } + set + { + this.eventField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public EquipmentDictionaryVersionObjectTypesTypeEventsEventEquipmentEvents EquipmentEvents + { + get + { + return this.equipmentEventsField; + } + set + { + this.equipmentEventsField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + public string StateModel + { + get + { + return this.stateModelField; + } + set + { + this.stateModelField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public EquipmentDictionaryVersionObjectTypesTypeEventsEventEquipmentEventsEvent Event + { + get + { + return this.eventField; + } + set + { + this.eventField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Ref + { + get + { + return this.refField; + } + set + { + this.refField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("Report")] + public EquipmentDictionaryVersionReportsReport[] Report + { + get + { + return this.reportField; + } + set + { + this.reportField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public EquipmentDictionaryVersionReportsReportDataItems DataItems + { + get + { + return this.dataItemsField; + } + set + { + this.dataItemsField = value; + } + } + + /// <remarks/> + public bool IsPreDefined + { + get + { + return this.isPreDefinedField; + } + set + { + this.isPreDefinedField = value; + } + } + + /// <remarks/> + public EquipmentDictionaryVersionReportsReportLinkEvents LinkEvents + { + get + { + return this.linkEventsField; + } + set + { + this.linkEventsField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + public EquipmentDictionaryVersionReportsReportPreLinkedEvents PreLinkedEvents + { + get + { + return this.preLinkedEventsField; + } + set + { + this.preLinkedEventsField = value; + } + } + + /// <remarks/> + public object SourceId + { + get + { + return this.sourceIdField; + } + set + { + this.sourceIdField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("Item")] + public EquipmentDictionaryVersionReportsReportDataItemsItem[] Item + { + get + { + return this.itemField; + } + set + { + this.itemField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Ref + { + get + { + return this.refField; + } + set + { + this.refField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("Event")] + public EquipmentDictionaryVersionReportsReportLinkEventsEvent[] Event + { + get + { + return this.eventField; + } + set + { + this.eventField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Ref + { + get + { + return this.refField; + } + set + { + this.refField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public object DataItems + { + get + { + return 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..6366266 --- /dev/null +++ b/Adaptation/_Tests/Shared/PasteSpecialXml/EAF XML API/EquipmentType.cs @@ -0,0 +1,1437 @@ +namespace Shared.PasteSpecialXml.EAF.XML.API.EquipmentType +{ + + // NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0. + /// <remarks/> + [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 + { + + 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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public string CreatedBy + { + get + { + return this.createdByField; + } + set + { + this.createdByField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public System.DateTime CreationDate + { + get + { + return this.creationDateField; + } + set + { + this.creationDateField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities", IsNullable = true)] + public object Description + { + get + { + return this.descriptionField; + } + set + { + this.descriptionField = value; + } + } + + /// <remarks/> + [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 + { + return this.extensionsField; + } + set + { + this.extensionsField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public System.DateTime FreezeDate + { + get + { + return this.freezeDateField; + } + set + { + this.freezeDateField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public string FrozenBy + { + get + { + return this.frozenByField; + } + set + { + this.frozenByField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public byte Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public bool IsFrozen + { + get + { + return this.isFrozenField; + } + set + { + this.isFrozenField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public bool IsRetired + { + get + { + return this.isRetiredField; + } + set + { + this.isRetiredField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities")] + public System.DateTime RetireDate + { + get + { + return this.retireDateField; + } + set + { + this.retireDateField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.FactoryE" + + "ntities", IsNullable = true)] + public object RetiredBy + { + get + { + return this.retiredByField; + } + set + { + this.retiredByField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlArrayItemAttribute("SelectedDeploymentPackage", Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Deployme" + + "nt", IsNullable = false)] + public SelectedDeploymentPackage[] DeploymentPackages + { + get + { + return this.deploymentPackagesField; + } + set + { + this.deploymentPackagesField = value; + } + } + + /// <remarks/> + public EquipmentTypeVersionDictionaries Dictionaries + { + get + { + return this.dictionariesField; + } + set + { + this.dictionariesField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + public EquipmentTypeVersionParentType ParentType + { + get + { + return this.parentTypeField; + } + set + { + this.parentTypeField = value; + } + } + + /// <remarks/> + [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 + { + return this.equipmentComponentsField; + } + set + { + this.equipmentComponentsField = value; + } + } + + /// <remarks/> + [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 + { + return this.eventActionSequencesField; + } + set + { + this.eventActionSequencesField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes")] + public object FileCommunicatorObjectTypes + { + get + { + return this.fileCommunicatorObjectTypesField; + } + set + { + this.fileCommunicatorObjectTypesField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes")] + public FileConfiguration FileConfiguration + { + get + { + return this.fileConfigurationField; + } + set + { + this.fileConfigurationField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/EafRuntimeIfx.ManagementInterfaceIfx.File" + + "Connector.EquipmentTypes")] + public FileHandlerObjectTypes FileHandlerObjectTypes + { + get + { + return this.fileHandlerObjectTypesField; + } + set + { + this.fileHandlerObjectTypesField = value; + } + } + + /// <remarks/> + [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 + { + return this.transientEquipmentObjectTypesField; + } + set + { + this.transientEquipmentObjectTypesField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute()] + public string i___type + { + get + { + return this.i___typeField; + } + set + { + this.i___typeField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public byte Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + public string PackageName + { + get + { + return this.packageNameField; + } + set + { + this.packageNameField = value; + } + } + + /// <remarks/> + public string PackageVersion + { + get + { + return this.packageVersionField; + } + set + { + this.packageVersionField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public byte Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Backbone" + + "s")] + public string ClassName + { + get + { + return this.classNameField; + } + set + { + this.classNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Backbone" + + "s", IsNullable = true)] + public object Configuration + { + get + { + return this.configurationField; + } + set + { + this.configurationField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.Backbone" + + "s")] + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute()] + public string i___type + { + get + { + return this.i___typeField; + } + set + { + this.i___typeField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public EquipmentTypeVersionDictionariesEquipmentTypeDictionaryReference EquipmentTypeDictionaryReference + { + get + { + return this.equipmentTypeDictionaryReferenceField; + } + set + { + this.equipmentTypeDictionaryReferenceField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public string DictionaryName + { + get + { + return this.dictionaryNameField; + } + set + { + this.dictionaryNameField = value; + } + } + + /// <remarks/> + public string DictionaryVersion + { + get + { + return this.dictionaryVersionField; + } + set + { + this.dictionaryVersionField = value; + } + } + + /// <remarks/> + public byte Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public byte Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public byte Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlArrayItemAttribute("ModelObjectParameterDefinition", IsNullable = false)] + public ParameterizedModelObjectDefinitionModelObjectParameterDefinition[] Parameters + { + get + { + return this.parametersField; + } + set + { + this.parametersField = value; + } + } + + /// <remarks/> + public string Type + { + get + { + return this.typeField; + } + set + { + this.typeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string EnumType + { + get + { + return this.enumTypeField; + } + set + { + this.enumTypeField = value; + } + } + + /// <remarks/> + public byte Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + public string Value + { + get + { + return this.valueField; + } + set + { + this.valueField = value; + } + } + + /// <remarks/> + public string ValueType + { + get + { + return this.valueTypeField; + } + set + { + this.valueTypeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlArrayItemAttribute("EventActionParameterDefinition", IsNullable = false)] + public EventActionSequenceDefinitionEventActionParameterDefinition[] Actions + { + get + { + return this.actionsField; + } + set + { + this.actionsField = value; + } + } + + /// <remarks/> + public string EventType + { + get + { + return this.eventTypeField; + } + set + { + this.eventTypeField = value; + } + } + + /// <remarks/> + public string HandledEvent + { + get + { + return this.handledEventField; + } + set + { + this.handledEventField = value; + } + } + + /// <remarks/> + public byte Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public ParameterizedModelObjectDefinition ParameterizedModelObjectDefinition + { + get + { + return this.parameterizedModelObjectDefinitionField; + } + set + { + this.parameterizedModelObjectDefinitionField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("VersionExtension")] + public ExtensionsVersionExtension[] VersionExtension + { + get + { + return this.versionExtensionField; + } + set + { + this.versionExtensionField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("ParameterizedModelObjectDefinition", Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public ParameterizedModelObjectDefinition[] ParameterizedModelObjectDefinition + { + get + { + return this.parameterizedModelObjectDefinitionField; + } + set + { + this.parameterizedModelObjectDefinitionField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("EventActionSequenceDefinition", Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public EventActionSequenceDefinition[] EventActionSequenceDefinition + { + get + { + return this.eventActionSequenceDefinitionField; + } + set + { + this.eventActionSequenceDefinitionField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute("ParameterizedModelObjectDefinition", Namespace = "http://schemas.datacontract.org/2004/07/Eaf.Management.ConfigurationData.CellAuto" + + "mation")] + public ParameterizedModelObjectDefinition[] ParameterizedModelObjectDefinition + { + get + { + return this.parameterizedModelObjectDefinitionField; + } + set + { + this.parameterizedModelObjectDefinitionField = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + public byte Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlArrayItemAttribute("ModelObjectParameterDefinition", IsNullable = false)] + public EventActionSequenceDefinitionEventActionParameterDefinitionModelObjectParameterDefinition[] Parameters + { + get + { + return this.parametersField; + } + set + { + this.parametersField = value; + } + } + + /// <remarks/> + public string Type + { + get + { + return this.typeField; + } + set + { + this.typeField = value; + } + } + + /// <remarks/> + public byte Position + { + get + { + return this.positionField; + } + set + { + this.positionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return this.id1Field; + } + set + { + this.id1Field = value; + } + } + } + + /// <remarks/> + [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; + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object Category + { + get + { + return this.categoryField; + } + set + { + this.categoryField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object Description + { + get + { + return this.descriptionField; + } + set + { + this.descriptionField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object DisplayName + { + get + { + return this.displayNameField; + } + set + { + this.displayNameField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public object EnumType + { + get + { + return this.enumTypeField; + } + set + { + this.enumTypeField = value; + } + } + + /// <remarks/> + public byte Id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// <remarks/> + public bool IsMandatory + { + get + { + return this.isMandatoryField; + } + set + { + this.isMandatoryField = value; + } + } + + /// <remarks/> + public string Name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// <remarks/> + public byte Order + { + get + { + return this.orderField; + } + set + { + this.orderField = value; + } + } + + /// <remarks/> + public string Value + { + get + { + return this.valueField; + } + set + { + this.valueField = value; + } + } + + /// <remarks/> + public string ValueType + { + get + { + return this.valueTypeField; + } + set + { + this.valueTypeField = value; + } + } + + /// <remarks/> + [System.Xml.Serialization.XmlAttributeAttribute("Id", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")] + public string Id1 + { + get + { + return 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..b2dacf8 --- /dev/null +++ b/Adaptation/_Tests/Shared/UnitTesting.cs @@ -0,0 +1,93 @@ +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 null)) + { + TestCategoryAttribute testCategoryAttribute = methodBase.GetCustomAttribute<TestCategoryAttribute>(); + if (!(testCategoryAttribute is 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 StringBuilder(); + result. + AppendLine("{"). + AppendLine(" \"configurations\": ["). + AppendLine(" {"). + AppendLine(" \"name\": \".NET Core Attach\","). + AppendLine(" \"type\": \"coreclr\","). + AppendLine(" \"request\": \"attach\","). + AppendLine($" \"processId\": {System.Diagnostics.Process.GetCurrentProcess().Id}"). + 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 new file mode 100644 index 0000000..8247f48 --- /dev/null +++ b/Adaptation/package.json @@ -0,0 +1,8 @@ +{ + "scripts": { + "build": "dotnet build --runtime win-x64 --self-contained", + "dotnet-format": "dotnet format --report .vscode --verbosity detailed --severity error", + "pull": "git pull", + "garbage-collect": "git gc" + } +} \ No newline at end of file diff --git a/FileHandlers/FileRead.cs b/FileHandlers/FileRead.cs new file mode 100644 index 0000000..bc7f46b --- /dev/null +++ b/FileHandlers/FileRead.cs @@ -0,0 +1,356 @@ +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.Text.Json.Serialization; +using System.Threading; + +namespace MET08RESIMAPCDE.FileHandlers +{ + + public partial class FileRead : FileReaderHandler, ISMTP + { + + private readonly ILog _Log; + private IFileRead _FileRead; + private EquipmentEvent _EquipmentEvent; + private readonly bool _UseCyclicalForDescription; + private FilePathGenerator _FilePathGeneratorForError; + private FilePathGenerator _FilePathGeneratorForTarget; + private readonly List<EquipmentParameter> _EquipmentParameters; + private static readonly Dictionary<string, List<long>> _DummyRuns; + + static FileRead() + { + _DummyRuns = new Dictionary<string, List<long>>(); + } + + public FileRead() + { + if (FileParameter is null) + FileParameter = new Dictionary<string, string>(); + _FileRead = null; + _UseCyclicalForDescription = false; + _Log = LogManager.GetLogger(typeof(FileRead)); + _EquipmentParameters = new List<EquipmentParameter>(); + } + + public override void CreateSelfDescription() + { + MethodBase methodBase = new StackFrame().GetMethod(); + _Log.Debug(string.Concat(methodBase.Name, " - Entry")); + try + { + if (Equipment is null) + throw new Exception(); + CreateSelfDescription(methodBase); + _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 override bool Extract(string reportFullPath, string eventName) + { + MethodBase methodBase = new StackFrame().GetMethod(); + _Log.Debug(string.Concat(methodBase.Name, " - Entry - {", reportFullPath, "}")); + Tuple<string, Test[], JsonElement[], List<FileInfo>> 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<ISmtp>().SingleOrDefault(); + if (!(smtp is 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<string, string> keyValuePairs = _FileRead.GetDisplayNamesJsonElement(); + Dictionary<JsonValueKind, ParameterTypeDefinition> parameterTypeDefinitions = new(); + FileConnectorParameterTypeDefinitionProvider fileConnectorParameterTypeDefinitionProvider = new(); + foreach (ParameterTypeDefinition parameterTypeDefinition in fileConnectorParameterTypeDefinitionProvider.GetAllParameterTypeDefinition()) + { + switch (parameterTypeDefinition.Name) + { + 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; + } + } + foreach (JsonProperty jsonProperty in jsonProperties) + { + if (jsonProperty.Value.ValueKind == JsonValueKind.Object && !parameterTypeDefinitions.ContainsKey(JsonValueKind.Object)) + { + StructuredType structuredType = new(nameof(StructuredType), string.Empty, new List<Field>()); + parameterTypeDefinitions.Add(JsonValueKind.Object, structuredType); + Equipment.SelfDescriptionBuilder.AddParameterTypeDefinition(structuredType); + } + if (!parameterTypeDefinitions.ContainsKey(jsonProperty.Value.ValueKind)) + throw new Exception(string.Concat('{', jsonProperty.Value.ValueKind, "} is not mapped!")); + } + foreach (JsonProperty jsonProperty in jsonProperties) + { + 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<ModelObjectParameterDefinition> 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 + { + 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<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception = null) + { + bool isErrorFile = !(exception is null); + object filePathGeneratorInfo = GetFilePathGeneratorInfo(_FileRead.ReportFullPath, isErrorFile); + if (!(filePathGeneratorInfo is null) && filePathGeneratorInfo is FilePathGeneratorInfo filePathGenerator) + { + string[] exceptionLines = _FileRead.Move(extractResults, filePathGenerator.To, filePathGenerator.From, filePathGenerator.ResolvedFileLocation, exception); + if (isErrorFile) + { + try + { + StringBuilder stringBuilder = new(); + foreach (string item in exceptionLines) + stringBuilder.Append("<").Append(item).AppendLine(">"); + ISmtp smtp = Backbone.Instance.GetBackboneComponentsOfType<ISmtp>().SingleOrDefault(); + EmailMessage emailMessage = new(_FileRead.ExceptionSubject, stringBuilder.ToString(), MailPriority.High); + smtp.Send(emailMessage); + } + catch (Exception) { } + } + } + } + + private List<ParameterValue> GetParameterValues(List<string> headerNames, JsonElement[] jsonElements, int i) + { + List<ParameterValue> results = new(); + if (_UseCyclicalForDescription && i > 0) + throw new Exception(); + object value; + List<object[]> 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<object[]>(); + 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<string, Test[], JsonElement[], List<FileInfo>> extractResults) + { + List<string> headerNames; + List<ParameterValue> 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 null)) + Equipment.DataCollection.TriggerEvent(_EquipmentEvent, parameters); + if (_UseCyclicalForDescription) + break; + } + } + } + + public Tuple<string, Test[], JsonElement[], List<FileInfo>> ReExtract(string json) + { + Tuple<string, Test[], JsonElement[], List<FileInfo>> 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<ModelObjectParameterDefinition>))) + throw new Exception(); + string parameterizedModelObjectDefinitionType; + if (!json.Contains(nameof(parameterizedModelObjectDefinitionType))) + throw new Exception(); + Dictionary<string, List<long>> dummyRuns = new(); + Dictionary<string, string> fileParameter = new(); + MethodBase methodBase = new StackFrame().GetMethod(); + JsonElement jsonElement = JsonSerializer.Deserialize<JsonElement>(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<FileConnectorConfiguration>(fileConnectorConfigurationJsonElement.ToString(), jsonSerializerOptions); + JsonElement modelObjectParameterDefinitionJsonElement = jsonElement.GetProperty(nameof(IList<ModelObjectParameterDefinition>)); + if (modelObjectParameterDefinitionJsonElement.ValueKind != JsonValueKind.Array) + throw new Exception(); + IList<ModelObjectParameterDefinition> modelObjectParameters = JsonSerializer.Deserialize<IList<ModelObjectParameterDefinition>>(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; + } + + } + +} +// 2021-12-16 -> FileRead \ No newline at end of file diff --git a/MET08RESIMAPCDE.csproj b/MET08RESIMAPCDE.csproj new file mode 100644 index 0000000..e947a54 --- /dev/null +++ b/MET08RESIMAPCDE.csproj @@ -0,0 +1,160 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProjectGuid>{54729740-EA41-4EDC-9730-3C2690A289D2}</ProjectGuid> + <LangVersion>9.0</LangVersion> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>MET08RESIMAPCDE</RootNamespace> + <AssemblyName>MET08RESIMAPCDE</AssemblyName> + <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <SccProjectName>SAK</SccProjectName> + <SccLocalPath>SAK</SccLocalPath> + <SccAuxPath>SAK</SccAuxPath> + <SccProvider>SAK</SccProvider> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + <PlatformTarget>x86</PlatformTarget> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'None|AnyCPU'"> + <DebugSymbols>true</DebugSymbols> + <OutputPath>bin\None\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <DebugType>full</DebugType> + <PlatformTarget>x86</PlatformTarget> + <ErrorReport>prompt</ErrorReport> + <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Core" /> + <Reference Include="System.IO.Compression" /> + <Reference Include="System.IO.Compression.FileSystem" /> + <Reference Include="System.Runtime.Serialization" /> + <Reference Include="System.Xml.Linq" /> + <Reference Include="System.Data.DataSetExtensions" /> + <Reference Include="Microsoft.CSharp" /> + <Reference Include="System.Data" /> + <Reference Include="System.Net.Http" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Adaptation\Eaf\Core\AutoGenerated\BackboneComponent.cs" /> + <Compile Include="Adaptation\Eaf\Core\AutoGenerated\BackboneStatusCache.cs" /> + <Compile Include="Adaptation\Eaf\Core\AutoGenerated\ILoggingSetupManager.cs" /> + <Compile Include="Adaptation\Eaf\Core\AutoGenerated\StatusItem.cs" /> + <Compile Include="Adaptation\Eaf\Core\Backbone.cs" /> + <Compile Include="Adaptation\Eaf\Core\Smtp\EmailMessage.cs" /> + <Compile Include="Adaptation\Eaf\Core\Smtp\ISmtp.cs" /> + <Compile Include="Adaptation\Eaf\Core\Smtp\MailPriority.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\ChangeDataCollectionHandler.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\DataCollectionRequest.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\EquipmentEvent.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\EquipmentException.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\EquipmentSelfDescription.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\GetParameterValuesHandler.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\IConnectionControl.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\IDataTracingHandler.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\IEquipmentCommandService.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\IEquipmentControl.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\IEquipmentSelfDescriptionBuilder.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\IPackage.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\ISelfDescriptionLookup.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\IVirtualParameterValuesHandler.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\SetParameterValuesHandler.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\AutoGenerated\TraceRequest.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\IEquipmentDataCollection.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\Control\IPackageSource.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\DataCollection\Reporting\ParameterValue.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\SelfDescription\ElementDescription\EquipmentParameter.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\SelfDescription\ParameterTypes\Field.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\SelfDescription\ParameterTypes\ParameterTypeDefinition.cs" /> + <Compile Include="Adaptation\Eaf\EquipmentCore\SelfDescription\ParameterTypes\StructuredType.cs" /> + <Compile Include="Adaptation\Eaf\Management\ConfigurationData\CellAutomation\IConfigurationObject.cs" /> + <Compile Include="Adaptation\Eaf\Management\ConfigurationData\CellAutomation\ModelObjectParameterDefinition.cs" /> + <Compile Include="Adaptation\Eaf\Management\ConfigurationData\CellAutomation\ModelObjectParameterType.cs" /> + <Compile Include="Adaptation\Eaf\Management\ConfigurationData\Semiconductor\CellInstances\SecsConnectionConfiguration.cs" /> + <Compile Include="Adaptation\FileHandlers\CellInstanceConnectionName.cs" /> + <Compile Include="Adaptation\FileHandlers\DownloadRsMFile\NginxFileSystem.cs" /> + <Compile Include="Adaptation\FileHandlers\MET08RESIMAPCDE\ProcessData.cs" /> + <Compile Include="Adaptation\FileHandlers\MET08RESIMAPCDE\Hyphen.cs" /> + <Compile Include="Adaptation\FileHandlers\MET08RESIMAPCDE\WSRequest.cs" /> + <Compile Include="Adaptation\FileHandlers\pcl\Description.cs" /> + <Compile Include="Adaptation\FileHandlers\pcl\FileRead.cs" /> + <Compile Include="Adaptation\FileHandlers\pcl\Detail.cs" /> + <Compile Include="Adaptation\FileHandlers\pcl\ProcessData.cs" /> + <Compile Include="Adaptation\FileHandlers\DownloadRsMFile\FileRead.cs" /> + <Compile Include="Adaptation\FileHandlers\MET08RESIMAPCDE\FileRead.cs" /> + <Compile Include="Adaptation\FileHandlers\RsM\Description.cs" /> + <Compile Include="Adaptation\FileHandlers\RsM\FileRead.cs" /> + <Compile Include="Adaptation\FileHandlers\RsM\ProcessData.cs" /> + <Compile Include="Adaptation\Ifx\Eaf\Common\Configuration\ConnectionSetting.cs" /> + <Compile Include="Adaptation\Ifx\Eaf\EquipmentConnector\File\Component\File.cs" /> + <Compile Include="Adaptation\Ifx\Eaf\EquipmentConnector\File\Component\FilePathGenerator.cs" /> + <Compile Include="Adaptation\Ifx\Eaf\EquipmentConnector\File\Configuration\FileConnectorConfiguration.cs" /> + <Compile Include="Adaptation\Ifx\Eaf\EquipmentConnector\File\SelfDescription\FileConnectorParameterTypeDefinitionProvider.cs" /> + <Compile Include="Adaptation\PeerGroup\GCL\Annotations\NotNullAttribute.cs" /> + <Compile Include="Adaptation\PeerGroup\GCL\SecsDriver\HsmsConnectionMode.cs" /> + <Compile Include="Adaptation\PeerGroup\GCL\SecsDriver\HsmsSessionMode.cs" /> + <Compile Include="Adaptation\PeerGroup\GCL\SecsDriver\SecsTransportType.cs" /> + <Compile Include="Adaptation\PeerGroup\GCL\SecsDriver\SerialBaudRate.cs" /> + <Compile Include="Adaptation\Shared\Duplicator\Description.cs" /> + <Compile Include="Adaptation\Shared\FileRead.cs" /> + <Compile Include="Adaptation\Shared\Methods\ILogistics.cs" /> + <Compile Include="Adaptation\Shared\Methods\ILogistics2.cs" /> + <Compile Include="Adaptation\Shared\Methods\ISMTP.cs" /> + <Compile Include="Adaptation\Shared\Properties\IDescription.cs" /> + <Compile Include="Adaptation\Shared\Properties\IFileRead.cs" /> + <Compile Include="Adaptation\Shared\Methods\IDescription.cs" /> + <Compile Include="Adaptation\Shared\Methods\IFileRead.cs" /> + <Compile Include="Adaptation\Shared\Methods\IProcessData.cs" /> + <Compile Include="Adaptation\Shared\Properties\ILogistics.cs" /> + <Compile Include="Adaptation\Shared\Properties\ILogistics2.cs" /> + <Compile Include="Adaptation\Shared\Properties\IScopeInfo.cs" /> + <Compile Include="Adaptation\Shared\Logistics.cs" /> + <Compile Include="Adaptation\Shared\Logistics2.cs" /> + <Compile Include="Adaptation\Shared\Metrology\ScopeInfo.cs" /> + <Compile Include="Adaptation\Shared\Metrology\WS.Attachment.cs" /> + <Compile Include="Adaptation\Shared\Metrology\WS.cs" /> + <Compile Include="Adaptation\Shared\Metrology\WS.Results.cs" /> + <Compile Include="Adaptation\Shared\ParameterType.cs" /> + <Compile Include="Adaptation\Shared\ProcessDataStandardFormat.cs" /> + <Compile Include="Adaptation\Shared\Properties\IProcessData.cs" /> + <Compile Include="Adaptation\Shared\Test.cs" /> + <Compile Include="FileHandlers\FileRead.cs" /> + <Compile Include="Adaptation\FileHandlers\RsM\Detail.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="Shared\FilePathGenerator.cs" /> + <Compile Include="Shared\FilePathGeneratorInfo.cs" /> + <Compile Include="Shared\Mapper.cs" /> + </ItemGroup> + <ItemGroup> + <PackageReference Include="Infineon.EAF.Runtime"> + <Version>2.36.0</Version> + </PackageReference> + <PackageReference Include="System.Text.Json"> + <Version>5.0.1</Version> + </PackageReference> + </ItemGroup> + <ItemGroup /> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> +</Project> \ No newline at end of file diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d2d79ba --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MET08RESIMAPCDE")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MET08RESIMAPCDE")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("54729740-ea41-4edc-9730-3c2690a289d2")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// 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.1.0")] +[assembly: AssemblyFileVersion("2.36.1.0")] diff --git a/README.md b/README.md index 0ca446a..43c4312 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,20 @@ # Introduction -TODO: Give a short introduction of your project. Let this section explain the objectives or the motivation behind this project. +MET08RESIMAPCDE EAF adaptation # Getting Started -TODO: Guide users through getting your code up and running on their own system. In this section you can talk about: -1. Installation process -2. Software dependencies -3. Latest releases -4. API references +1. Framework - MET08RESIMAPCDE.csproj +2. dotnet core - Adaptation\MET08RESIMAPCDE.Tests.csproj +3. https://tfs.intra.infineon.com/tfs/ManufacturingIT/_packaging/eaf/nuget/v3/index.json +4. https://packagemanagement.eu.infineon.com:4430/packages # Build and Test -TODO: Describe and show how to build your code and run the tests. +See Adaptation\_Tests for dotnet core tests -# Contribute -TODO: Explain how other users and developers can contribute to make your code better. +# TFS +$/MIT_EAF_Adaptations/Trunk/MET08RESIMAPCDE/06_SourceCode -If you want to learn more about creating good readme files then refer the following [guidelines](https://docs.microsoft.com/en-us/azure/devops/repos/git/create-a-readme?view=azure-devops). You can also seek inspiration from the below readme files: -- [ASP.NET Core](https://github.com/aspnet/Home) -- [Visual Studio Code](https://github.com/Microsoft/vscode) -- [Chakra Core](https://github.com/Microsoft/ChakraCore) \ No newline at end of file +# Last TFS Changeset +303348 Phares Mike (IFAM IT FI MES) 2/1/2022 6:02:05 PM MET08RESIMAPCDE - Move solution for Azure DevOps git + +# Git +git@tfs.intra.infineon.com:22/tfs/ManufacturingIT/Mesa_FI/_git/MET08RESIMAPCDE diff --git a/Shared/FilePathGenerator.cs b/Shared/FilePathGenerator.cs new file mode 100644 index 0000000..c8d1fcd --- /dev/null +++ b/Shared/FilePathGenerator.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using Ifx.Eaf.EquipmentConnector.File.Component; +using Ifx.Eaf.EquipmentConnector.File.Configuration; + +namespace Shared +{ + + public class FilePathGenerator : Ifx.Eaf.EquipmentConnector.File.Component.FilePathGenerator + { + + public FileConnectorConfiguration FileConnectorConfiguration { get; private set; } + + public FilePathGenerator(FileConnectorConfiguration config, Dictionary<string, string> customPattern = null) : base(config, customPattern) + { + FileConnectorConfiguration = config; + } + + public FilePathGenerator(FileConnectorConfiguration config, File file, bool isErrorFile = false, Dictionary<string, string> customPattern = null) : base(config, file, isErrorFile, customPattern) + { + FileConnectorConfiguration = config; + } + + public FilePathGenerator(FileConnectorConfiguration config, string sourceFilePath, bool isErrorFile = false, Dictionary<string, string> customPattern = null) : base(config, sourceFilePath, isErrorFile, customPattern) + { + FileConnectorConfiguration = config; + } + + public string GetSubFolderPath() + { + return SubFolderPath; + } + + } + +} diff --git a/Shared/FilePathGeneratorInfo.cs b/Shared/FilePathGeneratorInfo.cs new file mode 100644 index 0000000..827a893 --- /dev/null +++ b/Shared/FilePathGeneratorInfo.cs @@ -0,0 +1,66 @@ +using System.IO; + +namespace Shared +{ + + 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<string, string> fileParameter) + { + ReportFullPath = reportFullPath; + IsErrorFile = isErrorFile; + if (originalFilePathGenerator is null || originalFilePathGenerator is not FilePathGenerator original) + { + 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 null) && fileParameter.Count == 1 && To.Contains(original.FileConnectorConfiguration.DefaultPlaceHolderValue)) + { + foreach (System.Collections.Generic.KeyValuePair<string, string> 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..4408cc8 --- /dev/null +++ b/Shared/Mapper.cs @@ -0,0 +1,77 @@ +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<Adaptation.Ifx.Eaf.Common.Configuration.ConnectionSetting>(), + 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<Adaptation.Eaf.Management.ConfigurationData.CellAutomation.ModelObjectParameterDefinition> Map(IList<ModelObjectParameterDefinition> configuredParameters) + { + List<Adaptation.Eaf.Management.ConfigurationData.CellAutomation.ModelObjectParameterDefinition> 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; + } + + } + +}