Match TFS Changeset 303329
This commit is contained in:
parent
6b39700a26
commit
9de7b67ed6
9
.gitignore
vendored
9
.gitignore
vendored
@ -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
|
||||
|
336
Adaptation/.editorconfig
Normal file
336
Adaptation/.editorconfig
Normal file
@ -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
|
956
Adaptation/.vscode/format-report.json
vendored
Normal file
956
Adaptation/.vscode/format-report.json
vendored
Normal file
@ -0,0 +1,956 @@
|
||||
[
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "d9f60266-24bb-47b9-b90b-505448626929"
|
||||
},
|
||||
"FileName": "FileRead.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\FileHandlers\\MapEafDrives\\FileRead.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 1,
|
||||
"CharNumber": 1,
|
||||
"DiagnosticId": "WHITESPACE",
|
||||
"FormatDescription": "Fix whitespace formatting."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "de53d871-2af5-4e72-a249-4706287d2495"
|
||||
},
|
||||
"FileName": "Description.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Duplicator\\Description.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 1,
|
||||
"CharNumber": 1,
|
||||
"DiagnosticId": "WHITESPACE",
|
||||
"FormatDescription": "Fix whitespace formatting."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "de538843-3afc-4f93-8d4b-a7336d8c0663"
|
||||
},
|
||||
"FileName": "FileRead.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\FileRead.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 1,
|
||||
"CharNumber": 1,
|
||||
"DiagnosticId": "WHITESPACE",
|
||||
"FormatDescription": "Fix whitespace formatting."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "3117d767-6c30-478c-bf1d-cbb545918be9"
|
||||
},
|
||||
"FileName": "Logistics.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Logistics.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 1,
|
||||
"CharNumber": 1,
|
||||
"DiagnosticId": "WHITESPACE",
|
||||
"FormatDescription": "Fix whitespace formatting."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "9901695b-af4f-43cf-aa10-ce95320d6ee4"
|
||||
},
|
||||
"FileName": "Logistics2.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Logistics2.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 1,
|
||||
"CharNumber": 1,
|
||||
"DiagnosticId": "WHITESPACE",
|
||||
"FormatDescription": "Fix whitespace formatting."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "95b11142-f663-40fa-847c-33edfd59bd3e"
|
||||
},
|
||||
"FileName": "IDrive.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Methods\\IDrive.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 1,
|
||||
"CharNumber": 1,
|
||||
"DiagnosticId": "WHITESPACE",
|
||||
"FormatDescription": "Fix whitespace formatting."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "d2139ba2-0b1c-4874-872c-c3a577261b71"
|
||||
},
|
||||
"FileName": "IProcessData.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Methods\\IProcessData.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 1,
|
||||
"CharNumber": 1,
|
||||
"DiagnosticId": "WHITESPACE",
|
||||
"FormatDescription": "Fix whitespace formatting."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "2301c874-bc87-4c16-92b1-77fac0472818"
|
||||
},
|
||||
"FileName": "IFileRead.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Properties\\IFileRead.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 1,
|
||||
"CharNumber": 1,
|
||||
"DiagnosticId": "WHITESPACE",
|
||||
"FormatDescription": "Fix whitespace formatting."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "e52d0c25-4154-4afe-8bba-22def5765f09"
|
||||
},
|
||||
"FileName": "IProcessData.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Properties\\IProcessData.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 1,
|
||||
"CharNumber": 1,
|
||||
"DiagnosticId": "WHITESPACE",
|
||||
"FormatDescription": "Fix whitespace formatting."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "60578405-c12c-40bb-9155-35fb6b6bb7e9"
|
||||
},
|
||||
"FileName": "RijndaelEncryption.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\RijndaelEncryption.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 1,
|
||||
"CharNumber": 1,
|
||||
"DiagnosticId": "WHITESPACE",
|
||||
"FormatDescription": "Fix whitespace formatting."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "09a03f4f-43c5-4e44-ab07-7e36f92295bf"
|
||||
},
|
||||
"FileName": "Backbone.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Eaf\\Core\\Backbone.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 48,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "7d964d7e-b115-4ca4-b114-12bee52e0643"
|
||||
},
|
||||
"FileName": "EmailMessage.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Eaf\\Core\\Smtp\\EmailMessage.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 24,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "3a200b51-0c41-4a2d-bccb-2fa8796bb3c5"
|
||||
},
|
||||
"FileName": "ISmtp.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Eaf\\Core\\Smtp\\ISmtp.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 9,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "66de3251-be58-4b16-90c1-33c03dd09031"
|
||||
},
|
||||
"FileName": "MailPriority.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Eaf\\Core\\Smtp\\MailPriority.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 11,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "10443daf-832a-4106-be1e-3fa7c6a04276"
|
||||
},
|
||||
"FileName": "ParameterValue.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Eaf\\EquipmentCore\\DataCollection\\Reporting\\ParameterValue.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 20,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "c3508e46-1b52-4c6a-872e-f28d031db8e2"
|
||||
},
|
||||
"FileName": "EquipmentParameter.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Eaf\\EquipmentCore\\SelfDescription\\ElementDescription\\EquipmentParameter.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 24,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "92146d96-c33e-47e6-8638-caf4eca88475"
|
||||
},
|
||||
"FileName": "Field.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Eaf\\EquipmentCore\\SelfDescription\\ParameterTypes\\Field.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 12,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "50cb7671-7ac7-49c7-87ea-2a426e0b78ca"
|
||||
},
|
||||
"FileName": "ParameterTypeDefinition.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Eaf\\EquipmentCore\\SelfDescription\\ParameterTypes\\ParameterTypeDefinition.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 12,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "56927a86-2a2e-45a7-abff-e90398fe70ff"
|
||||
},
|
||||
"FileName": "StructuredType.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Eaf\\EquipmentCore\\SelfDescription\\ParameterTypes\\StructuredType.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 12,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "e21e86a2-fc06-4ead-8a75-5bb18fa58d5f"
|
||||
},
|
||||
"FileName": "CellInstanceConnectionName.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\FileHandlers\\CellInstanceConnectionName.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 29,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "d9f60266-24bb-47b9-b90b-505448626929"
|
||||
},
|
||||
"FileName": "FileRead.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\FileHandlers\\MapEafDrives\\FileRead.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 144,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "6ee264c9-fd4e-404d-a587-044a5a2a6dc0"
|
||||
},
|
||||
"FileName": "FileRead.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\FileHandlers\\RijndaelEncryption\\FileRead.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 149,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "1cc13acb-fed0-4082-a6d4-78a70ad10de8"
|
||||
},
|
||||
"FileName": "FileConnectorParameterTypeDefinitionProvider.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Ifx\\Eaf\\EquipmentConnector\\File\\SelfDescription\\FileConnectorParameterTypeDefinitionProvider.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 14,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "00770792-9f9b-427f-b0f5-f169e00f734e"
|
||||
},
|
||||
"FileName": "AppSettings.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\AppSettings.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 8,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "3e5b157e-bdf5-4478-9380-5b8bbde33474"
|
||||
},
|
||||
"FileName": "Drive.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Drive.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 79,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "de53d871-2af5-4e72-a249-4706287d2495"
|
||||
},
|
||||
"FileName": "Description.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Duplicator\\Description.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 148,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "de538843-3afc-4f93-8d4b-a7336d8c0663"
|
||||
},
|
||||
"FileName": "FileRead.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\FileRead.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 832,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "11c599c1-e39a-4d7e-bf69-6602107aa43f"
|
||||
},
|
||||
"FileName": "IsEnvironment.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\IsEnvironment.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 153,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "3117d767-6c30-478c-bf1d-cbb545918be9"
|
||||
},
|
||||
"FileName": "Logistics.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Logistics.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 223,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "9901695b-af4f-43cf-aa10-ce95320d6ee4"
|
||||
},
|
||||
"FileName": "Logistics2.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Logistics2.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 81,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "aa929740-8282-4f53-a017-9f4fd0bc52de"
|
||||
},
|
||||
"FileName": "IAppSettings.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Methods\\IAppSettings.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 7,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "daa0c510-3814-4d60-a2f7-ddcbdac284f7"
|
||||
},
|
||||
"FileName": "IDescription.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Methods\\IDescription.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 25,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "95b11142-f663-40fa-847c-33edfd59bd3e"
|
||||
},
|
||||
"FileName": "IDrive.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Methods\\IDrive.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 13,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "082bf78f-326d-4598-9624-de7b8c41589e"
|
||||
},
|
||||
"FileName": "IFileRead.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Methods\\IFileRead.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 26,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "c31d006f-a0ea-4d2b-9e35-c6c3a87d8707"
|
||||
},
|
||||
"FileName": "ILogistics.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Methods\\ILogistics.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 8,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "a04628a6-fd18-47e5-9eb7-9b05bdd61fad"
|
||||
},
|
||||
"FileName": "ILogistics2.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Methods\\ILogistics2.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 8,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "d2139ba2-0b1c-4874-872c-c3a577261b71"
|
||||
},
|
||||
"FileName": "IProcessData.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Methods\\IProcessData.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 17,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "aa4a15be-be39-4035-94c5-b6ed92316c24"
|
||||
},
|
||||
"FileName": "ISMTP.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Methods\\ISMTP.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 9,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "f995a138-de8c-4110-be73-e415454cb9b8"
|
||||
},
|
||||
"FileName": "ParameterType.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\ParameterType.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 13,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "1e670147-df4e-4f24-98f4-576d4a408290"
|
||||
},
|
||||
"FileName": "ProcessDataStandardFormat.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\ProcessDataStandardFormat.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 426,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "b970c7f4-17ff-403e-908f-316e5ee1bb98"
|
||||
},
|
||||
"FileName": "IAppSettings.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Properties\\IAppSettings.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 9,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "c84aae6c-a6ea-43d2-948e-5b5bf93286fb"
|
||||
},
|
||||
"FileName": "IDescription.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Properties\\IDescription.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 13,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "bf19c0ca-5466-4f95-accc-256e2aaad068"
|
||||
},
|
||||
"FileName": "IDrive.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Properties\\IDrive.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 12,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "2301c874-bc87-4c16-92b1-77fac0472818"
|
||||
},
|
||||
"FileName": "IFileRead.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Properties\\IFileRead.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 20,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "252dfa2d-fcdc-4d7f-96f2-57bd3e8f1756"
|
||||
},
|
||||
"FileName": "ILogistics.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Properties\\ILogistics.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 25,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "1a39af2c-fdf3-44e3-b174-0eaa16ca826d"
|
||||
},
|
||||
"FileName": "ILogistics2.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Properties\\ILogistics2.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 17,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "e52d0c25-4154-4afe-8bba-22def5765f09"
|
||||
},
|
||||
"FileName": "IProcessData.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Properties\\IProcessData.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 13,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "60da3853-999e-4ebf-a4f5-ed0ea26551a6"
|
||||
},
|
||||
"FileName": "IScopeInfo.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Properties\\IScopeInfo.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 20,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "60578405-c12c-40bb-9155-35fb6b6bb7e9"
|
||||
},
|
||||
"FileName": "RijndaelEncryption.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\RijndaelEncryption.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 96,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "0d60a51d-8dcc-4653-bc2f-f69e8809e824"
|
||||
},
|
||||
"FileName": "Test.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Test.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 57,
|
||||
"CharNumber": 2,
|
||||
"DiagnosticId": "FINALNEWLINE",
|
||||
"FormatDescription": "Fix final newline. Delete 2 characters."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "3e5b157e-bdf5-4478-9380-5b8bbde33474"
|
||||
},
|
||||
"FileName": "Drive.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Drive.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 1,
|
||||
"CharNumber": 1,
|
||||
"DiagnosticId": "IMPORTS",
|
||||
"FormatDescription": "Fix imports ordering."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "3117d767-6c30-478c-bf1d-cbb545918be9"
|
||||
},
|
||||
"FileName": "Logistics.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Logistics.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 1,
|
||||
"CharNumber": 1,
|
||||
"DiagnosticId": "IMPORTS",
|
||||
"FormatDescription": "Fix imports ordering."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DocumentId": {
|
||||
"ProjectId": {
|
||||
"Id": "e377a3ee-8088-4e2c-9e03-2f86769f945f"
|
||||
},
|
||||
"Id": "3117d767-6c30-478c-bf1d-cbb545918be9"
|
||||
},
|
||||
"FileName": "Logistics.cs",
|
||||
"FilePath": "L:\\Workspaces\\33_CS29_79_72\\MIT_EAF_Adaptations\\Trunk\\MET08AFMD3100\\06_SourceCode\\EC\\Adaptation\\Shared\\Logistics.cs",
|
||||
"FileChanges": [
|
||||
{
|
||||
"LineNumber": 186,
|
||||
"CharNumber": 31,
|
||||
"DiagnosticId": "IDE0003",
|
||||
"FormatDescription": "error IDE0003: Name can be simplified."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
103
Adaptation/EC.csproj
Normal file
103
Adaptation/EC.csproj
Normal file
@ -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/EC/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>
|
6
Adaptation/Eaf/Core/AutoGenerated/BackboneComponent.cs
Normal file
6
Adaptation/Eaf/Core/AutoGenerated/BackboneComponent.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.Core
|
||||
{
|
||||
public class BackboneComponent
|
||||
{
|
||||
}
|
||||
}
|
6
Adaptation/Eaf/Core/AutoGenerated/BackboneStatusCache.cs
Normal file
6
Adaptation/Eaf/Core/AutoGenerated/BackboneStatusCache.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.Core
|
||||
{
|
||||
public class BackboneStatusCache
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.Core
|
||||
{
|
||||
public interface ILoggingSetupManager
|
||||
{
|
||||
}
|
||||
}
|
6
Adaptation/Eaf/Core/AutoGenerated/StatusItem.cs
Normal file
6
Adaptation/Eaf/Core/AutoGenerated/StatusItem.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.Core
|
||||
{
|
||||
public class StatusItem
|
||||
{
|
||||
}
|
||||
}
|
48
Adaptation/Eaf/Core/Backbone.cs
Normal file
48
Adaptation/Eaf/Core/Backbone.cs
Normal file
@ -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<string, BackboneComponent> 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<StatusItem> GetAllStatuses() { throw new NotImplementedException(); }
|
||||
public BackboneComponent GetBackboneComponentById(string id) { throw new NotImplementedException(); }
|
||||
public List<T> GetBackboneComponentsOfType<T>() { throw new NotImplementedException(); }
|
||||
public List<BackboneComponent> 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<BackboneComponent> components) { }
|
||||
protected virtual void StopAllComponents() { }
|
||||
protected void StopComponents(List<BackboneComponent> components) { }
|
||||
}
|
||||
}
|
24
Adaptation/Eaf/Core/Smtp/EmailMessage.cs
Normal file
24
Adaptation/Eaf/Core/Smtp/EmailMessage.cs
Normal file
@ -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(); }
|
||||
|
||||
}
|
||||
|
||||
}
|
9
Adaptation/Eaf/Core/Smtp/ISmtp.cs
Normal file
9
Adaptation/Eaf/Core/Smtp/ISmtp.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace Adaptation.Eaf.Core.Smtp
|
||||
{
|
||||
|
||||
public interface ISmtp
|
||||
{
|
||||
void Send(EmailMessage message);
|
||||
}
|
||||
|
||||
}
|
11
Adaptation/Eaf/Core/Smtp/MailPriority.cs
Normal file
11
Adaptation/Eaf/Core/Smtp/MailPriority.cs
Normal file
@ -0,0 +1,11 @@
|
||||
namespace Adaptation.Eaf.Core.Smtp
|
||||
{
|
||||
|
||||
public enum MailPriority
|
||||
{
|
||||
Low = 0,
|
||||
Normal = 1,
|
||||
High = 2
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public class ChangeDataCollectionHandler
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public class DataCollectionRequest
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public class EquipmentEvent
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public class EquipmentException
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public class EquipmentSelfDescription
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public class GetParameterValuesHandler
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public interface IConnectionControl
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public interface IDataTracingHandler
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public interface IEquipmentCommandService
|
||||
{
|
||||
}
|
||||
}
|
@ -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; }
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public interface IEquipmentSelfDescriptionBuilder
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public interface IPackage
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public interface ISelfDescriptionLookup
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public interface IVirtualParameterValuesHandler
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public class SetParameterValuesHandler
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public class TraceRequest
|
||||
{
|
||||
}
|
||||
}
|
@ -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<DataCollectionRequest> 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<ParameterValue> parameters);
|
||||
void TriggerEvent(EquipmentEvent equipmentEvent, IEnumerable<ParameterValue> parameters, IPackage sourcePackage);
|
||||
void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters);
|
||||
void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters, IPackage sourcePackage);
|
||||
void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters, string severityOverride, string descriptionOverride);
|
||||
void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters, string severityOverride, string descriptionOverride, IPackage sourcePackage);
|
||||
void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters, string severityOverride, string descriptionOverride, IPackage sourcePackage);
|
||||
void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters, string severityOverride, string descriptionOverride);
|
||||
void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters, IPackage sourcePackage);
|
||||
void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters);
|
||||
void TriggerPerformanceRestored();
|
||||
void TriggerPerformanceWarning();
|
||||
void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable<ParameterValue> parameters);
|
||||
void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable<ParameterValue> parameters, IPackage sourcePackage);
|
||||
void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable<ParameterValue> parameters, DateTime equipmentTimeStamp);
|
||||
}
|
||||
}
|
6
Adaptation/Eaf/EquipmentCore/Control/IPackageSource.cs
Normal file
6
Adaptation/Eaf/EquipmentCore/Control/IPackageSource.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.EquipmentCore.Control
|
||||
{
|
||||
public interface IPackageSource
|
||||
{
|
||||
}
|
||||
}
|
@ -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(); }
|
||||
}
|
||||
}
|
@ -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(); }
|
||||
}
|
||||
|
||||
}
|
@ -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; }
|
||||
}
|
||||
}
|
@ -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(); }
|
||||
}
|
||||
}
|
@ -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<Field> fields) : base(name, description) { }
|
||||
|
||||
public IList<Field> Fields { get; }
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
namespace Adaptation.Eaf.Management.ConfigurationData.CellAutomation
|
||||
{
|
||||
public interface IConfigurationObject
|
||||
{
|
||||
}
|
||||
}
|
@ -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; }
|
||||
}
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
@ -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; }
|
||||
}
|
||||
}
|
29
Adaptation/FileHandlers/CellInstanceConnectionName.cs
Normal file
29
Adaptation/FileHandlers/CellInstanceConnectionName.cs
Normal file
@ -0,0 +1,29 @@
|
||||
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<string, string> fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, Dictionary<string, List<long>> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted)
|
||||
{
|
||||
int levelIsArchive = 6;
|
||||
int levelIsXToArchive = 5;
|
||||
bool isDuplicator = cellInstanceConnectionName.StartsWith(cellInstanceName);
|
||||
IFileRead result = cellInstanceConnectionName switch
|
||||
{
|
||||
nameof(MapEafDrives) => new MapEafDrives.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, dummyRuns, useCyclicalForDescription, isEAFHosted, levelIsXToArchive, levelIsArchive),
|
||||
nameof(RijndaelEncryption) => new RijndaelEncryption.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, dummyRuns, useCyclicalForDescription, isEAFHosted, levelIsXToArchive, levelIsArchive),
|
||||
_ => throw new Exception(),
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
144
Adaptation/FileHandlers/MapEafDrives/FileRead.cs
Normal file
144
Adaptation/FileHandlers/MapEafDrives/FileRead.cs
Normal file
@ -0,0 +1,144 @@
|
||||
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 log4net;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Adaptation.FileHandlers.MapEafDrives
|
||||
{
|
||||
|
||||
public class FileRead : Shared.FileRead, IFileRead
|
||||
{
|
||||
|
||||
private readonly AppSettings _AppSettings;
|
||||
|
||||
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 (isEAFHosted)
|
||||
{
|
||||
ILog log = LogManager.GetLogger(typeof(FileRead));
|
||||
IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: Debugger.IsAttached, nullASPNetCoreEnvironmentIsProduction: !Debugger.IsAttached);
|
||||
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
|
||||
.AddEnvironmentVariables()
|
||||
.AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true);
|
||||
IConfigurationRoot configurationRoot = configurationBuilder.Build();
|
||||
_AppSettings = new AppSettings();
|
||||
configurationRoot.Bind(_AppSettings);
|
||||
Drive.MapEafDrives(log, _AppSettings);
|
||||
}
|
||||
}
|
||||
|
||||
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>());
|
||||
if (reportFullPath is null)
|
||||
{ }
|
||||
if (dateTime == DateTime.MinValue)
|
||||
{ }
|
||||
return results;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
149
Adaptation/FileHandlers/RijndaelEncryption/FileRead.cs
Normal file
149
Adaptation/FileHandlers/RijndaelEncryption/FileRead.cs
Normal file
@ -0,0 +1,149 @@
|
||||
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 Microsoft.Extensions.Configuration;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Adaptation.FileHandlers.RijndaelEncryption
|
||||
{
|
||||
|
||||
public class FileRead : Shared.FileRead, IFileRead
|
||||
{
|
||||
|
||||
private readonly AppSettings _AppSettings;
|
||||
|
||||
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 (isEAFHosted)
|
||||
{
|
||||
IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: Debugger.IsAttached, nullASPNetCoreEnvironmentIsProduction: !Debugger.IsAttached);
|
||||
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
|
||||
.AddEnvironmentVariables()
|
||||
.AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true);
|
||||
IConfigurationRoot configurationRoot = configurationBuilder.Build();
|
||||
_AppSettings = new AppSettings();
|
||||
configurationRoot.Bind(_AppSettings);
|
||||
}
|
||||
}
|
||||
|
||||
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>());
|
||||
string[] lines = File.ReadAllLines(reportFullPath);
|
||||
for (int i = 0; i < lines.Length; i++)
|
||||
{
|
||||
if (string.IsNullOrEmpty(lines[i]) || lines[i].Contains('\t'))
|
||||
continue;
|
||||
if (Shared.RijndaelEncryption.IsBase64String(lines[i]))
|
||||
lines[i] = string.Concat(lines[i], '\t', dateTime.Ticks, '\t', Shared.RijndaelEncryption.Decrypt(lines[i], _AppSettings.Company));
|
||||
else
|
||||
lines[i] = string.Concat(lines[i], '\t', dateTime.Ticks, '\t', Shared.RijndaelEncryption.Encrypt(lines[i], _AppSettings.Company));
|
||||
}
|
||||
File.WriteAllLines(reportFullPath, lines);
|
||||
return results;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
13
Adaptation/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs
Normal file
13
Adaptation/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs
Normal file
@ -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; }
|
||||
}
|
||||
}
|
19
Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/File.cs
Normal file
19
Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/File.cs
Normal file
@ -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(); }
|
||||
}
|
||||
}
|
@ -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(); }
|
||||
}
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
@ -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; }
|
||||
}
|
||||
}
|
10
Adaptation/PeerGroup/GCL/Annotations/NotNullAttribute.cs
Normal file
10
Adaptation/PeerGroup/GCL/Annotations/NotNullAttribute.cs
Normal file
@ -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() { }
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
namespace Adaptation.PeerGroup.GCL.SecsDriver
|
||||
{
|
||||
public enum HsmsConnectionMode
|
||||
{
|
||||
Active = 0,
|
||||
Passive = 1
|
||||
}
|
||||
}
|
8
Adaptation/PeerGroup/GCL/SecsDriver/HsmsSessionMode.cs
Normal file
8
Adaptation/PeerGroup/GCL/SecsDriver/HsmsSessionMode.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace Adaptation.PeerGroup.GCL.SecsDriver
|
||||
{
|
||||
public enum HsmsSessionMode
|
||||
{
|
||||
MultiSession = 0,
|
||||
SingleSession = 1
|
||||
}
|
||||
}
|
8
Adaptation/PeerGroup/GCL/SecsDriver/SecsTransportType.cs
Normal file
8
Adaptation/PeerGroup/GCL/SecsDriver/SecsTransportType.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace Adaptation.PeerGroup.GCL.SecsDriver
|
||||
{
|
||||
public enum SecsTransportType
|
||||
{
|
||||
HSMS = 0,
|
||||
Serial = 1
|
||||
}
|
||||
}
|
16
Adaptation/PeerGroup/GCL/SecsDriver/SerialBaudRate.cs
Normal file
16
Adaptation/PeerGroup/GCL/SecsDriver/SerialBaudRate.cs
Normal file
@ -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
|
||||
}
|
||||
}
|
8
Adaptation/Shared/AppSettings.cs
Normal file
8
Adaptation/Shared/AppSettings.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace Adaptation.Shared
|
||||
{
|
||||
public class AppSettings : Methods.IAppSettings
|
||||
{
|
||||
public string Company { get; set; }
|
||||
public Drive[] Drives { get; set; }
|
||||
}
|
||||
}
|
79
Adaptation/Shared/Drive.cs
Normal file
79
Adaptation/Shared/Drive.cs
Normal file
@ -0,0 +1,79 @@
|
||||
using log4net;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
|
||||
namespace Adaptation.Shared
|
||||
{
|
||||
|
||||
public class Drive : Methods.IDrive
|
||||
{
|
||||
public bool Use { get; set; }
|
||||
public string Letter { get; set; }
|
||||
public string Share { get; set; }
|
||||
public string User { get; set; }
|
||||
public string Password { get; set; }
|
||||
|
||||
void Methods.IDrive.MapEafDrives(ILog log, Properties.IAppSettings appSettings)
|
||||
{
|
||||
MapEafDrives(log, appSettings);
|
||||
}
|
||||
|
||||
public static void MapEafDrives(ILog log, Properties.IAppSettings appSettings)
|
||||
{
|
||||
Process process;
|
||||
string decrypted;
|
||||
string arguments;
|
||||
string[] segments;
|
||||
string standardError;
|
||||
string standardOutput;
|
||||
string fileName = "net";
|
||||
StringBuilder stringBuilder = new();
|
||||
foreach (Drive drive in appSettings.Drives)
|
||||
{
|
||||
if (!drive.Use)
|
||||
continue;
|
||||
if (string.IsNullOrEmpty(drive.Password))
|
||||
decrypted = string.Empty;
|
||||
else
|
||||
decrypted = RijndaelEncryption.Decrypt(drive.Password, appSettings.Company);
|
||||
arguments = $"use {drive.Letter}: \"{drive.Share}\" /p:yes /user:{drive.User} {decrypted}";
|
||||
stringBuilder.Clear();
|
||||
segments = arguments.Split(' ');
|
||||
for (int j = 0; j < segments.Length - 1; j++)
|
||||
stringBuilder.Append(segments[j]).Append(' ');
|
||||
log.Info($"// {stringBuilder}");
|
||||
ProcessStartInfo processStartInfo = new(fileName, arguments)
|
||||
{
|
||||
RedirectStandardError = true,
|
||||
RedirectStandardOutput = true,
|
||||
UseShellExecute = false
|
||||
};
|
||||
try
|
||||
{
|
||||
process = Process.Start(processStartInfo);
|
||||
for (int j = 1; j < 45; j++)
|
||||
{
|
||||
process.WaitForExit(1000);
|
||||
if (process.HasExited)
|
||||
break;
|
||||
}
|
||||
if (!process.HasExited)
|
||||
log.Error("// Never exited!");
|
||||
else
|
||||
{
|
||||
standardError = process.StandardError.ReadToEnd();
|
||||
standardOutput = process.StandardOutput.ReadToEnd();
|
||||
log.Info($"// {standardError}{Environment.NewLine}{Environment.NewLine}{"// "}{standardOutput}");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Error("Error:", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
148
Adaptation/Shared/Duplicator/Description.cs
Normal file
148
Adaptation/Shared/Duplicator/Description.cs
Normal file
@ -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()
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
832
Adaptation/Shared/FileRead.cs
Normal file
832
Adaptation/Shared/FileRead.cs
Normal file
@ -0,0 +1,832 @@
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
153
Adaptation/Shared/IsEnvironment.cs
Normal file
153
Adaptation/Shared/IsEnvironment.cs
Normal file
@ -0,0 +1,153 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Adaptation.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.Contains(nameof(Staging));
|
||||
OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX);
|
||||
Development = testCategory.Contains(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));
|
||||
}
|
||||
SetProfile();
|
||||
SetAppSettingsFileName(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");
|
||||
SetProfile();
|
||||
SetAppSettingsFileName(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.EndsWith(nameof(Staging));
|
||||
Production = ASPNetCoreEnvironment.EndsWith(nameof(Production));
|
||||
Development = ASPNetCoreEnvironment.EndsWith(nameof(Development));
|
||||
}
|
||||
SetProfile();
|
||||
SetAppSettingsFileName(processesCount);
|
||||
}
|
||||
|
||||
private void SetProfile()
|
||||
{
|
||||
if (Windows && Production)
|
||||
Profile = nameof(Production);
|
||||
else if (Windows && Staging)
|
||||
Profile = nameof(Staging);
|
||||
else if (Windows && Development)
|
||||
Profile = nameof(Development);
|
||||
else if (Linux && Production)
|
||||
Profile = nameof(Name.LinuxProduction);
|
||||
else if (Linux && Staging)
|
||||
Profile = nameof(Name.LinuxStaging);
|
||||
else if (Linux && Development)
|
||||
Profile = nameof(Name.LinuxDevelopment);
|
||||
else if (OSX && Production)
|
||||
Profile = nameof(Name.OSXProduction);
|
||||
else if (OSX && Staging)
|
||||
Profile = nameof(Name.OSXStaging);
|
||||
else if (OSX && Development)
|
||||
Profile = nameof(Name.OSXDevelopment);
|
||||
else
|
||||
throw new Exception();
|
||||
}
|
||||
|
||||
private void SetAppSettingsFileName(int? processesCount)
|
||||
{
|
||||
if (Production)
|
||||
{
|
||||
if (processesCount is null)
|
||||
AppSettingsFileName = "appsettings.json";
|
||||
else
|
||||
AppSettingsFileName = $"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)
|
||||
AppSettingsFileName = $"appsettings.{environment}.json";
|
||||
else
|
||||
AppSettingsFileName = $"appsettings.{environment}.{processesCount}.json";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
223
Adaptation/Shared/Logistics.cs
Normal file
223
Adaptation/Shared/Logistics.cs
Normal file
@ -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>();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
81
Adaptation/Shared/Logistics2.cs
Normal file
81
Adaptation/Shared/Logistics2.cs
Normal file
@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
7
Adaptation/Shared/Methods/IAppSettings.cs
Normal file
7
Adaptation/Shared/Methods/IAppSettings.cs
Normal file
@ -0,0 +1,7 @@
|
||||
namespace Adaptation.Shared.Methods
|
||||
{
|
||||
|
||||
public interface IAppSettings : Properties.IAppSettings
|
||||
{
|
||||
}
|
||||
}
|
25
Adaptation/Shared/Methods/IDescription.cs
Normal file
25
Adaptation/Shared/Methods/IDescription.cs
Normal file
@ -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> GetIgnoreParameterNames();
|
||||
List<string> GetPairedParameterNames();
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
}
|
13
Adaptation/Shared/Methods/IDrive.cs
Normal file
13
Adaptation/Shared/Methods/IDrive.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using log4net;
|
||||
|
||||
namespace Adaptation.Shared.Methods
|
||||
{
|
||||
|
||||
public interface IDrive : Properties.IDrive
|
||||
{
|
||||
|
||||
void MapEafDrives(ILog log, Properties.IAppSettings appSettings);
|
||||
|
||||
}
|
||||
|
||||
}
|
26
Adaptation/Shared/Methods/IFileRead.cs
Normal file
26
Adaptation/Shared/Methods/IFileRead.cs
Normal file
@ -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);
|
||||
}
|
||||
|
||||
}
|
8
Adaptation/Shared/Methods/ILogistics.cs
Normal file
8
Adaptation/Shared/Methods/ILogistics.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace Adaptation.Shared.Methods
|
||||
{
|
||||
|
||||
public interface ILogistics : Properties.ILogistics
|
||||
{
|
||||
}
|
||||
|
||||
}
|
8
Adaptation/Shared/Methods/ILogistics2.cs
Normal file
8
Adaptation/Shared/Methods/ILogistics2.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace Adaptation.Shared.Methods
|
||||
{
|
||||
|
||||
public interface ILogistics2 : Properties.ILogistics2
|
||||
{
|
||||
}
|
||||
|
||||
}
|
17
Adaptation/Shared/Methods/IProcessData.cs
Normal file
17
Adaptation/Shared/Methods/IProcessData.cs
Normal file
@ -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);
|
||||
|
||||
}
|
||||
|
||||
}
|
9
Adaptation/Shared/Methods/ISMTP.cs
Normal file
9
Adaptation/Shared/Methods/ISMTP.cs
Normal file
@ -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);
|
||||
}
|
||||
}
|
13
Adaptation/Shared/ParameterType.cs
Normal file
13
Adaptation/Shared/ParameterType.cs
Normal file
@ -0,0 +1,13 @@
|
||||
namespace Adaptation.Shared
|
||||
{
|
||||
|
||||
public enum ParameterType
|
||||
{
|
||||
String = 0,
|
||||
Integer = 2,
|
||||
Double = 3,
|
||||
Boolean = 4,
|
||||
StructuredType = 5
|
||||
}
|
||||
|
||||
}
|
426
Adaptation/Shared/ProcessDataStandardFormat.cs
Normal file
426
Adaptation/Shared/ProcessDataStandardFormat.cs
Normal file
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
9
Adaptation/Shared/Properties/IAppSettings.cs
Normal file
9
Adaptation/Shared/Properties/IAppSettings.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace Adaptation.Shared.Properties
|
||||
{
|
||||
|
||||
public interface IAppSettings
|
||||
{
|
||||
public string Company { get; set; }
|
||||
public Drive[] Drives { get; set; }
|
||||
}
|
||||
}
|
13
Adaptation/Shared/Properties/IDescription.cs
Normal file
13
Adaptation/Shared/Properties/IDescription.cs
Normal file
@ -0,0 +1,13 @@
|
||||
namespace Adaptation.Shared.Properties
|
||||
{
|
||||
|
||||
public interface IDescription
|
||||
{
|
||||
|
||||
int Test { get; }
|
||||
int Count { get; }
|
||||
int Index { get; }
|
||||
|
||||
}
|
||||
|
||||
}
|
12
Adaptation/Shared/Properties/IDrive.cs
Normal file
12
Adaptation/Shared/Properties/IDrive.cs
Normal file
@ -0,0 +1,12 @@
|
||||
namespace Adaptation.Shared.Properties
|
||||
{
|
||||
|
||||
public interface IDrive
|
||||
{
|
||||
public bool Use { get; set; }
|
||||
public string Letter { get; set; }
|
||||
public string Share { get; set; }
|
||||
public string User { get; set; }
|
||||
public string Password { get; set; }
|
||||
}
|
||||
}
|
20
Adaptation/Shared/Properties/IFileRead.cs
Normal file
20
Adaptation/Shared/Properties/IFileRead.cs
Normal file
@ -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; }
|
||||
}
|
||||
|
||||
}
|
25
Adaptation/Shared/Properties/ILogistics.cs
Normal file
25
Adaptation/Shared/Properties/ILogistics.cs
Normal file
@ -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; }
|
||||
|
||||
}
|
||||
|
||||
}
|
17
Adaptation/Shared/Properties/ILogistics2.cs
Normal file
17
Adaptation/Shared/Properties/ILogistics2.cs
Normal file
@ -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; }
|
||||
|
||||
}
|
||||
|
||||
}
|
13
Adaptation/Shared/Properties/IProcessData.cs
Normal file
13
Adaptation/Shared/Properties/IProcessData.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Adaptation.Shared.Properties
|
||||
{
|
||||
|
||||
public interface IProcessData
|
||||
{
|
||||
|
||||
List<object> Details { get; }
|
||||
|
||||
}
|
||||
|
||||
}
|
20
Adaptation/Shared/Properties/IScopeInfo.cs
Normal file
20
Adaptation/Shared/Properties/IScopeInfo.cs
Normal file
@ -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; }
|
||||
|
||||
}
|
||||
|
||||
}
|
96
Adaptation/Shared/RijndaelEncryption.cs
Normal file
96
Adaptation/Shared/RijndaelEncryption.cs
Normal file
@ -0,0 +1,96 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace Adaptation.Shared
|
||||
{
|
||||
|
||||
public static class RijndaelEncryption
|
||||
{
|
||||
/// <summary>
|
||||
/// Change the Inputkey GUID when you use this code in your own program.
|
||||
/// Keep this inputkey very safe and prevent someone from decoding it some way!!
|
||||
/// Generated 2021-08-10
|
||||
/// </summary>
|
||||
internal const string Inputkey = "970CCEF6-4307-4F6A-9AC8-377DADB889BD";
|
||||
|
||||
/// <summary>
|
||||
/// Encrypt the given text and give the byte array back as a BASE64 string
|
||||
/// </summary>
|
||||
/// <param name="text">The text to encrypt</param>
|
||||
/// <param name="salt">The pasword salt</param>
|
||||
/// <returns>The encrypted text</returns>
|
||||
public static string Encrypt(string text, string salt)
|
||||
{
|
||||
string result;
|
||||
if (string.IsNullOrEmpty(text))
|
||||
throw new ArgumentNullException("text");
|
||||
RijndaelManaged aesAlg = NewRijndaelManaged(salt);
|
||||
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
|
||||
MemoryStream msEncrypt = new();
|
||||
using (CryptoStream csEncrypt = new(msEncrypt, encryptor, CryptoStreamMode.Write))
|
||||
using (StreamWriter swEncrypt = new(csEncrypt))
|
||||
swEncrypt.Write(text);
|
||||
result = Convert.ToBase64String(msEncrypt.ToArray());
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if a string is base64 encoded
|
||||
/// </summary>
|
||||
/// <param name="base64String">The base64 encoded string</param>
|
||||
/// <returns></returns>
|
||||
public static bool IsBase64String(string base64String)
|
||||
{
|
||||
bool result;
|
||||
base64String = base64String.Trim();
|
||||
result = (base64String.Length % 4 == 0) && Regex.IsMatch(base64String, @"^[a-zA-Z0-9\+/]*={0,3}$", RegexOptions.None);
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Decrypts the given text
|
||||
/// </summary>
|
||||
/// <param name="cipherText">The encrypted BASE64 text</param>
|
||||
/// <param name="salt">The pasword salt</param>
|
||||
/// <returns>De gedecrypte text</returns>
|
||||
public static string Decrypt(string cipherText, string salt)
|
||||
{
|
||||
if (string.IsNullOrEmpty(cipherText))
|
||||
throw new ArgumentNullException("cipherText");
|
||||
if (!IsBase64String(cipherText))
|
||||
throw new Exception("The cipherText input parameter is not base64 encoded");
|
||||
string text;
|
||||
RijndaelManaged aesAlg = NewRijndaelManaged(salt);
|
||||
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
|
||||
byte[] cipher = Convert.FromBase64String(cipherText);
|
||||
using (MemoryStream msDecrypt = new(cipher))
|
||||
{
|
||||
using CryptoStream csDecrypt = new(msDecrypt, decryptor, CryptoStreamMode.Read);
|
||||
using StreamReader srDecrypt = new(csDecrypt);
|
||||
text = srDecrypt.ReadToEnd();
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a new RijndaelManaged class and initialize it
|
||||
/// </summary>
|
||||
/// <param name="salt">The pasword salt</param>
|
||||
/// <returns></returns>
|
||||
private static RijndaelManaged NewRijndaelManaged(string salt)
|
||||
{
|
||||
if (salt == null)
|
||||
throw new ArgumentNullException("salt");
|
||||
byte[] saltBytes = Encoding.ASCII.GetBytes(salt);
|
||||
Rfc2898DeriveBytes key = new(Inputkey, saltBytes);
|
||||
RijndaelManaged aesAlg = new();
|
||||
aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
|
||||
aesAlg.IV = key.GetBytes(aesAlg.BlockSize / 8);
|
||||
return aesAlg;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
57
Adaptation/Shared/Test.cs
Normal file
57
Adaptation/Shared/Test.cs
Normal file
@ -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
|
||||
}
|
||||
|
||||
}
|
139
Adaptation/appsettings.Development.json
Normal file
139
Adaptation/appsettings.Development.json
Normal file
@ -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": ""
|
||||
}
|
||||
]
|
||||
}
|
139
Adaptation/appsettings.json
Normal file
139
Adaptation/appsettings.json
Normal file
@ -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": ""
|
||||
}
|
||||
]
|
||||
}
|
8
Adaptation/package.json
Normal file
8
Adaptation/package.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
166
EC.csproj
Normal file
166
EC.csproj
Normal file
@ -0,0 +1,166 @@
|
||||
<?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>{F2A3E685-D145-456E-867F-5A3E0D941FEE}</ProjectGuid>
|
||||
<LangVersion>9.0</LangVersion>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>EC</RootNamespace>
|
||||
<AssemblyName>EC</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="Microsoft.VisualBasic" />
|
||||
<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\FileHandlers\MapEafDrives\FileRead.cs" />
|
||||
<Compile Include="Adaptation\Shared\AppSettings.cs" />
|
||||
<Compile Include="Adaptation\Shared\FileRead.cs" />
|
||||
<Compile Include="Adaptation\FileHandlers\RijndaelEncryption\FileRead.cs" />
|
||||
<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\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\IsEnvironment.cs" />
|
||||
<Compile Include="Adaptation\Shared\Methods\IDescription.cs" />
|
||||
<Compile Include="Adaptation\Shared\Methods\IAppSettings.cs" />
|
||||
<Compile Include="Adaptation\Shared\Methods\IDrive.cs" />
|
||||
<Compile Include="Adaptation\Shared\Methods\ILogistics2.cs" />
|
||||
<Compile Include="Adaptation\Shared\Methods\IProcessData.cs" />
|
||||
<Compile Include="Adaptation\Shared\Methods\ISMTP.cs" />
|
||||
<Compile Include="Adaptation\Shared\Drive.cs" />
|
||||
<Compile Include="Adaptation\Shared\Methods\ILogistics.cs" />
|
||||
<Compile Include="Adaptation\Shared\Properties\IAppSettings.cs" />
|
||||
<Compile Include="Adaptation\Shared\Properties\IDrive.cs" />
|
||||
<Compile Include="Adaptation\Shared\Properties\IDescription.cs" />
|
||||
<Compile Include="Adaptation\Shared\Properties\IFileRead.cs" />
|
||||
<Compile Include="Adaptation\Shared\Methods\IFileRead.cs" />
|
||||
<Compile Include="Adaptation\Shared\Properties\ILogistics2.cs" />
|
||||
<Compile Include="Adaptation\Shared\Properties\ILogistics.cs" />
|
||||
<Compile Include="Adaptation\Shared\Properties\IScopeInfo.cs" />
|
||||
<Compile Include="Adaptation\Shared\ParameterType.cs" />
|
||||
<Compile Include="Adaptation\Shared\Logistics.cs" />
|
||||
<Compile Include="Adaptation\Shared\Logistics2.cs" />
|
||||
<Compile Include="Adaptation\Shared\ProcessDataStandardFormat.cs" />
|
||||
<Compile Include="Adaptation\Shared\Properties\IProcessData.cs" />
|
||||
<Compile Include="Adaptation\Shared\RijndaelEncryption.cs" />
|
||||
<Compile Include="Adaptation\Shared\Test.cs" />
|
||||
<Compile Include="FileHandlers\FileRead.cs" />
|
||||
<Compile Include="Shared\FilePathGenerator.cs" />
|
||||
<Compile Include="Shared\FilePathGeneratorInfo.cs" />
|
||||
<Compile Include="Shared\Mapper.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Infineon.EAF.Runtime">
|
||||
<Version>2.36.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting">
|
||||
<Version>5.0.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="System.Text.Json">
|
||||
<Version>5.0.1</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="EventActions\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="appsettings.Development.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="appsettings.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
347
FileHandlers/FileRead.cs
Normal file
347
FileHandlers/FileRead.cs
Normal file
@ -0,0 +1,347 @@
|
||||
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 EC.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;
|
||||
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, _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++)
|
||||
{
|
||||
_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 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();
|
||||
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, _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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
36
Properties/AssemblyInfo.cs
Normal file
36
Properties/AssemblyInfo.cs
Normal file
@ -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("EC")]
|
||||
[assembly: AssemblyDescription("v2.19.1 Update the references to Kernel v2.36.2.0")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Infineon Technologies")]
|
||||
[assembly: AssemblyProduct("EC")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2021")]
|
||||
[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("595066f6-6dcb-4d6d-8547-e14293f05f9e")]
|
||||
|
||||
// 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")]
|
27
README.md
27
README.md
@ -1,20 +1,21 @@
|
||||
# Introduction
|
||||
TODO: Give a short introduction of your project. Let this section explain the objectives or the motivation behind this project.
|
||||
EC 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 - EC.csproj
|
||||
2. dotnet core - Adaptation\EC.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/MET08AFMD3100/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)
|
||||
# Last TFS Changeset
|
||||
303329 Phares Mike (IFAM IT FI MES) 2/1/2022 4:03:22 PM EC - Move solution for Azure DevOps git
|
||||
|
||||
|
||||
# Git
|
||||
git@tfs.intra.infineon.com:22/tfs/ManufacturingIT/Mesa_FI/_git/EC
|
||||
|
35
Shared/FilePathGenerator.cs
Normal file
35
Shared/FilePathGenerator.cs
Normal file
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
66
Shared/FilePathGeneratorInfo.cs
Normal file
66
Shared/FilePathGeneratorInfo.cs
Normal file
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
77
Shared/Mapper.cs
Normal file
77
Shared/Mapper.cs
Normal file
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
139
appsettings.Development.json
Normal file
139
appsettings.Development.json
Normal file
@ -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": ""
|
||||
}
|
||||
]
|
||||
}
|
139
appsettings.json
Normal file
139
appsettings.json
Normal file
@ -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": ""
|
||||
}
|
||||
]
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user