diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6ba6148
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,338 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+bld/
+[Bb]in/
+[Oo]bj/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+**/Properties/launchSettings.json
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_i.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding add-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# JetBrains Rider
+.idea/
+*.sln.iml
+
+# CodeRush
+.cr/
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+##
+## Visual Studio Code
+##
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
diff --git a/.groovy b/.groovy
new file mode 100644
index 0000000..a376ae4
--- /dev/null
+++ b/.groovy
@@ -0,0 +1,172 @@
+#!/usr/bin/env groovy
+/* groovylint-disable CompileStatic, ConsecutiveStringConcatenation, DuplicateNumberLiteral, DuplicateStringLiteral, LineLength, NestedBlockDepth, NoDef, VariableTypeRequired */
+import groovy.transform.Field
+
+@Field String _DDrive = 'D:/'
+@Field String _AssemblyName = '...'
+@Field String _TargetLocation = '...'
+@Field String _GitCommitSeven = '...'
+@Field String _GitName = 'DEP08SIHTRPLC'
+@Field String _TestProjectDirectory = 'Adaptation'
+@Field String _AgentStaging = 'mestsa07ec-ecmeseaf'
+@Field String _DDriveNet = "${_DDrive}Framework4.8"
+@Field String _AgentProduction = 'messa08ec-ecmeseaf'
+@Field String _AgentDevelopment = 'mestsa003-mesedasvc'
+@Field String _ProgramFilesDotnet = 'C:/Program Files/dotnet/dotnet.exe'
+@Field String _ProgramFilesMSBuild = 'C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin/MSBuild.exe'
+
+pipeline {
+ agent {
+ label env.JENKINS_ENVIRONMENT == 'Development' ? _AgentDevelopment : env.JENKINS_ENVIRONMENT == 'Staging' ? _AgentStaging : env.JENKINS_ENVIRONMENT == 'Production' ? _AgentProduction : 'Else'
+ }
+ parameters {
+ string(name: 'GIT_SERVER', defaultValue: env.JENKINS_ENVIRONMENT == 'Development' ? 'mestsa003.infineon.com' : 'mestsa07ec.ec.local', description: 'git server')
+ string(name: 'DEFAULT_FILE_SERVER', defaultValue: env.JENKINS_ENVIRONMENT == 'Development' ? 'messv02ecc1_ec_local' : 'messv02ecc1.ec.local', description: 'Default file server...')
+ }
+ stages {
+ stage('Git') {
+ steps {
+ bat(returnStatus: true, script: 'git init')
+ bat(returnStatus: true, script: 'git remote add origin \\\\' + params.GIT_SERVER + '\\Git\\' + _GitName + '.git')
+ bat(returnStatus: true, script: 'git pull origin master')
+ }
+ }
+ stage('Setup') {
+ steps {
+ script {
+ _AssemblyName = "${env.JOB_NAME}"
+ _GitCommitSeven = '1234567'
+ // _GitCommitSeven = env.GIT_COMMIT.substring(0, 7)
+ def files = findFiles(glob: '*.csproj')
+ if (files.length != 1) {
+ error("Build failed because couldn't find a *.csproj file")
+ }
+ echo """
+ ${files[0].name}
+ ${files[0].path}
+ ${files[0].directory}
+ ${files[0].length}
+ ${files[0].lastModified}
+ """
+ _AssemblyName = files[0].name.split('[.]csproj')[0]
+ _TargetLocation = "\\\\${params.DEFAULT_FILE_SERVER}\\EC_EAFRepository\\${env.JENKINS_ENVIRONMENT}\\DeploymentStorage\\Adaptation_${_AssemblyName}"
+ }
+ }
+ }
+ stage('Info') {
+ steps {
+ echo "_AssemblyName ${_AssemblyName}" // ...
+ echo "BUILD_NUMBER ${env.BUILD_NUMBER}" // 11
+ echo "DEFAULT_FILE_SERVER ${params.DEFAULT_FILE_SERVER}" // 11
+ echo "GIT_BRANCH ${env.GIT_BRANCH}" // origin/master
+ echo "GIT_COMMIT ${env.GIT_COMMIT}" // 73b814069f2cf0173a62a8228815a9bc9ba93c41
+ echo "GIT_SERVER ${params.GIT_SERVER}" // ...
+ echo "GIT_URL ${env.GIT_URL}" // D:\ProgramData\Git\....git
+ echo "JENKINS_ENVIRONMENT ${env.JENKINS_ENVIRONMENT}" // 11
+ echo "JENKINS_URL ${env.JENKINS_URL}" // http://localhost:8080/
+ echo "JOB_NAME ${env.JOB_NAME}" // ...
+ echo "WORKSPACE ${env.WORKSPACE}" // D:\.jenkins\_\...
+ }
+ }
+ // stage('Restore') {
+ // steps {
+ // bat(returnStatus: true, script: 'dotnet --info')
+ // }
+ // }
+ stage('Safe storage of app secrets') {
+ steps {
+ dir(_TestProjectDirectory) {
+ bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
+ 'user-secrets init')
+ bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
+ 'user-secrets set "BuildNumber" "' + env.BUILD_NUMBER + '"')
+ bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
+ 'user-secrets set "GitCommitSeven" "' + _GitCommitSeven + '"')
+ bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
+ 'user-secrets set "Server" "' + params.DEFAULT_FILE_SERVER + '"')
+ }
+ }
+ }
+ stage('Core Build') {
+ steps {
+ echo "Build number is ${currentBuild.number}"
+ dir(_TestProjectDirectory) {
+ bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
+ 'build --runtime win-x64 --self-contained --verbosity quiet')
+ }
+ }
+ }
+ // stage('Test') {
+ // options {
+ // timeout(time: 10, unit: 'MINUTES')
+ // }
+ // steps {
+ // dir(_TestProjectDirectory) {
+ // bat('dotnet --info')
+ // }
+ // }
+ // }
+ stage('Framework Build') {
+ steps {
+ echo "Build number is ${currentBuild.number}"
+ bat(returnStatus: true, script: '"' + _ProgramFilesMSBuild + '" ' +
+ '/target:Restore ' +
+ '/detailedsummary ' +
+ '/consoleloggerparameters:PerformanceSummary;ErrorsOnly; ' +
+ '/property:Configuration=Debug;TargetFrameworkVersion=v4.8 ' +
+ _AssemblyName + '.csproj')
+ bat(returnStatus: true, script: '"' + _ProgramFilesMSBuild + '" ' +
+ '/target:Build ' +
+ '/detailedsummary ' +
+ '/consoleloggerparameters:PerformanceSummary;ErrorsOnly; ' +
+ '/property:Configuration=Debug;TargetFrameworkVersion=v4.8 ' +
+ _AssemblyName + '.csproj')
+ }
+ }
+ stage('Commit Id') {
+ steps {
+ dir('bin/Debug') {
+ writeFile file: "${_AssemblyName}.txt", text: "${env.GIT_COMMIT}-${env.BUILD_NUMBER}-${env.GIT_URL}"
+ }
+ }
+ }
+ stage('Package') {
+ steps {
+ fileOperations([fileZipOperation(folderPath: 'bin/Debug', outputFolderPath: "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${env.JOB_NAME}-Debug")])
+ fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*", renameFiles: false, sourceCaptureExpression: '', targetLocation: "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${env.JOB_NAME}-Debug", targetNameExpression: '')])
+ }
+ }
+ // stage('Force Fail') {
+ // steps {
+ // error("Build failed because of this and that..")
+ // }
+ // }
+ stage('Copy Files to: file-share') {
+ steps {
+ dir('bin/Debug') {
+ fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.txt", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')])
+ fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.dll", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')])
+ fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.exe", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')])
+ fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.pdb", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')])
+ }
+ }
+ }
+ }
+ post {
+ always {
+ dir('bin') {
+ deleteDir()
+ }
+ dir('obj') {
+ deleteDir()
+ }
+ dir(_TestProjectDirectory + '/bin') {
+ deleteDir()
+ }
+ dir(_TestProjectDirectory + '/obj') {
+ deleteDir()
+ }
+ // cleanWs()
+ }
+ }
+}
diff --git a/Adaptation/.editorconfig b/Adaptation/.editorconfig
new file mode 100644
index 0000000..2220133
--- /dev/null
+++ b/Adaptation/.editorconfig
@@ -0,0 +1,243 @@
+[*.cs]
+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
+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
+csharp_prefer_braces = false
+csharp_prefer_simple_default_expression = true:warning
+csharp_prefer_simple_using_statement = true:warning
+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
+csharp_preserve_single_line_blocks = true
+csharp_preserve_single_line_statements = false
+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
+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
+csharp_style_conditional_delegate_call = true
+csharp_style_deconstructed_variable_declaration = false
+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
+csharp_style_implicit_object_creation_when_type_is_apparent = true:warning
+csharp_style_inlined_variable_declaration = false
+csharp_style_namespace_declarations = file_scoped:warning
+csharp_style_pattern_local_over_anonymous_function = true:warning
+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_index_operator = false:warning
+csharp_style_prefer_not_pattern = true:warning
+csharp_style_prefer_null_check_over_type_check = true
+csharp_style_prefer_pattern_matching = true:warning
+csharp_style_prefer_range_operator = false:warning
+csharp_style_prefer_switch_expression = true: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
+csharp_style_var_elsewhere = false:warning
+csharp_style_var_for_built_in_types = false:warning
+csharp_style_var_when_type_is_apparent = false:warning
+csharp_using_directive_placement = outside_namespace
+dotnet_code_quality_unused_parameters = all
+dotnet_code_quality_unused_parameters = non_public # IDE0060: Remove unused parameter
+dotnet_code_quality.CAXXXX.api_surface = private, internal
+dotnet_diagnostic.CA1825.severity = warning # CA1823: Avoid zero-length array allocations
+dotnet_diagnostic.CA1829.severity = warning # CA1829: Use Length/Count property instead of Count() when available
+dotnet_diagnostic.CA1834.severity = warning # CA1834: Consider using 'StringBuilder.Append(char)' when applicable
+dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name
+dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2");
+dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary
+dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed
+dotnet_diagnostic.IDE0060.severity = warning # IDE0060: Remove unused parameter
+dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning
+dotnet_naming_rule.abstract_method_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method
+dotnet_naming_rule.class_should_be_pascal_case.severity = warning
+dotnet_naming_rule.class_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.class_should_be_pascal_case.symbols = class
+dotnet_naming_rule.delegate_should_be_pascal_case.severity = warning
+dotnet_naming_rule.delegate_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.delegate_should_be_pascal_case.symbols = delegate
+dotnet_naming_rule.enum_should_be_pascal_case.severity = warning
+dotnet_naming_rule.enum_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.enum_should_be_pascal_case.symbols = enum
+dotnet_naming_rule.event_should_be_pascal_case.severity = warning
+dotnet_naming_rule.event_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.event_should_be_pascal_case.symbols = event
+dotnet_naming_rule.interface_should_be_begins_with_i.severity = warning
+dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
+dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
+dotnet_naming_rule.method_should_be_pascal_case.severity = warning
+dotnet_naming_rule.method_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.method_should_be_pascal_case.symbols = method
+dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = warning
+dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
+dotnet_naming_rule.private_method_should_be_pascal_case.severity = warning
+dotnet_naming_rule.private_method_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.private_method_should_be_pascal_case.symbols = private_method
+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.style = private_of_internal_field
+dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.symbols = private_or_internal_field
+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.style = private_of_internal_field
+dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.symbols = private_or_internal_static_field
+dotnet_naming_rule.property_should_be_pascal_case.severity = warning
+dotnet_naming_rule.property_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.property_should_be_pascal_case.symbols = property
+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.style = private_of_internal_field
+dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.symbols = public_or_protected_field
+dotnet_naming_rule.static_field_should_be_pascal_case.severity = warning
+dotnet_naming_rule.static_field_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.static_field_should_be_pascal_case.symbols = static_field
+dotnet_naming_rule.static_method_should_be_pascal_case.severity = warning
+dotnet_naming_rule.static_method_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.static_method_should_be_pascal_case.symbols = static_method
+dotnet_naming_rule.struct_should_be_pascal_case.severity = warning
+dotnet_naming_rule.struct_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.struct_should_be_pascal_case.symbols = struct
+dotnet_naming_rule.types_should_be_pascal_case.severity = warning
+dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.types_should_be_pascal_case.symbols = types
+dotnet_naming_style.begins_with_i.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.pascal_case.capitalization = pascal_case
+dotnet_naming_style.pascal_case.required_prefix =
+dotnet_naming_style.pascal_case.required_suffix =
+dotnet_naming_style.pascal_case.word_separator =
+dotnet_naming_style.private_of_internal_field.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_symbols.abstract_method.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.abstract_method.applicable_kinds = method
+dotnet_naming_symbols.abstract_method.required_modifiers = abstract
+dotnet_naming_symbols.class.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.class.applicable_kinds = class
+dotnet_naming_symbols.class.required_modifiers =
+dotnet_naming_symbols.delegate.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.delegate.applicable_kinds = delegate
+dotnet_naming_symbols.delegate.required_modifiers =
+dotnet_naming_symbols.enum.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.enum.applicable_kinds = enum
+dotnet_naming_symbols.enum.required_modifiers =
+dotnet_naming_symbols.event.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.event.applicable_kinds = event
+dotnet_naming_symbols.event.required_modifiers =
+dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.interface.applicable_kinds = interface
+dotnet_naming_symbols.interface.required_modifiers =
+dotnet_naming_symbols.method.applicable_accessibilities = public
+dotnet_naming_symbols.method.applicable_kinds = method
+dotnet_naming_symbols.method.required_modifiers =
+dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
+dotnet_naming_symbols.non_field_members.required_modifiers =
+dotnet_naming_symbols.private_method.applicable_accessibilities = private
+dotnet_naming_symbols.private_method.applicable_kinds = method
+dotnet_naming_symbols.private_method.required_modifiers =
+dotnet_naming_symbols.private_or_internal_field.applicable_accessibilities = internal, private, private_protected
+dotnet_naming_symbols.private_or_internal_field.applicable_kinds = field
+dotnet_naming_symbols.private_or_internal_field.required_modifiers =
+dotnet_naming_symbols.private_or_internal_static_field.applicable_accessibilities = internal, private, private_protected
+dotnet_naming_symbols.private_or_internal_static_field.applicable_kinds = field
+dotnet_naming_symbols.private_or_internal_static_field.required_modifiers = static
+dotnet_naming_symbols.property.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.property.applicable_kinds = property
+dotnet_naming_symbols.property.required_modifiers =
+dotnet_naming_symbols.public_or_protected_field.applicable_accessibilities = public, protected
+dotnet_naming_symbols.public_or_protected_field.applicable_kinds = field
+dotnet_naming_symbols.public_or_protected_field.required_modifiers =
+dotnet_naming_symbols.static_field.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.static_field.applicable_kinds = field
+dotnet_naming_symbols.static_field.required_modifiers = static
+dotnet_naming_symbols.static_method.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.static_method.applicable_kinds = method
+dotnet_naming_symbols.static_method.required_modifiers = static
+dotnet_naming_symbols.struct.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.struct.applicable_kinds = struct
+dotnet_naming_symbols.struct.required_modifiers =
+dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
+dotnet_naming_symbols.types.required_modifiers =
+dotnet_remove_unnecessary_suppression_exclusions = 0
+dotnet_separate_import_directive_groups = false
+dotnet_sort_system_directives_first = false
+dotnet_style_allow_multiple_blank_lines_experimental = false:warning
+dotnet_style_allow_statement_immediately_after_block_experimental = true
+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_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
+dotnet_style_predefined_type_for_locals_parameters_members = true
+dotnet_style_predefined_type_for_member_access = true
+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
+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
+dotnet_style_readonly_field = true:warning
+dotnet_style_require_accessibility_modifiers = for_non_interface_members
+end_of_line = crlf
+file_header_template = unset
+indent_size = 4
+indent_style = space
+insert_final_newline = false
+root = true
+tab_width = 4
+# https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1822
+# https://github.com/dotnet/aspnetcore/blob/main/.editorconfig
+# https://github.com/dotnet/project-system/blob/main/.editorconfig
\ No newline at end of file
diff --git a/Adaptation/.vscode/extensions.json b/Adaptation/.vscode/extensions.json
new file mode 100644
index 0000000..26a6234
--- /dev/null
+++ b/Adaptation/.vscode/extensions.json
@@ -0,0 +1,46 @@
+{
+ "recommendations": [
+ "adrianwilczynski.asp-net-core-switcher",
+ "adrianwilczynski.namespace",
+ "adrianwilczynski.terminal-commands",
+ "aliasadidev.nugetpackagemanagergui",
+ "bodil.file-browser",
+ "codezombiech.gitignore",
+ "cweijan.vscode-office",
+ "donjayamanne.githistory",
+ "EditorConfig.EditorConfig",
+ "eg2.vscode-npm-script",
+ "esbenp.prettier-vscode",
+ "formulahendry.dotnet-test-explorer",
+ "GitHub.remotehub",
+ "GitHub.vscode-pull-request-github",
+ "hashhar.gitattributes",
+ "hediet.vscode-drawio",
+ "mikeburgh.xml-format",
+ "ms-dotnettools.blazorwasm-companion",
+ "ms-dotnettools.csharp",
+ "ms-dotnettools.vscode-dotnet-runtime",
+ "ms-edgedevtools.vscode-edge-devtools",
+ "ms-vscode-remote.remote-ssh",
+ "ms-vscode-remote.remote-ssh-edit",
+ "ms-vscode.powershell",
+ "patcx.vscode-nuget-gallery",
+ "rangav.vscode-thunder-client",
+ "streetsidesoftware.code-spell-checker",
+ "VirtusLab.codetale",
+ "VisualStudioExptTeam.vscodeintellicode",
+ "vscode-icons-team.vscode-icons"
+ ],
+ "unwantedRecommendations": [
+ "virtuslab.codetale",
+ "ms-azuretools.vscode-docker",
+ "christian-kohler.npm-intellisense",
+ "firefox-devtools.vscode-firefox-debug",
+ "dbaeumer.vscode-eslint",
+ "dbaeumer.jshint",
+ "felipecaputo.git-project-manager",
+ "eamodio.gitlens",
+ "hookyqr.beautify",
+ "davidanson.vscode-markdownlint"
+ ]
+}
\ No newline at end of file
diff --git a/Adaptation/.vscode/format-report.json b/Adaptation/.vscode/format-report.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/Adaptation/.vscode/format-report.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/Adaptation/.vscode/launch.json b/Adaptation/.vscode/launch.json
new file mode 100644
index 0000000..d478184
--- /dev/null
+++ b/Adaptation/.vscode/launch.json
@@ -0,0 +1,10 @@
+{
+ "configurations": [
+ {
+ "name": ".NET Core Attach",
+ "type": "coreclr",
+ "request": "attach",
+ "processId": 24076
+ }
+ ]
+}
diff --git a/Adaptation/.vscode/settings.json b/Adaptation/.vscode/settings.json
new file mode 100644
index 0000000..94fe746
--- /dev/null
+++ b/Adaptation/.vscode/settings.json
@@ -0,0 +1,76 @@
+{
+ "cSpell.words": [
+ "Analyte",
+ "CICN",
+ "EGANAIXG",
+ "ELODS",
+ "EQPT",
+ "etcs",
+ "GRATXT",
+ "grpf",
+ "Hmmssfff",
+ "hvfet",
+ "Icpms",
+ "IPDSF",
+ "Irmn",
+ "IRMNSPC",
+ "ISMTP",
+ "ISNULL",
+ "JOBID",
+ "JVXRD",
+ "Klarf",
+ "Lehighton",
+ "Lian",
+ "messa",
+ "milli",
+ "mvfet",
+ "MVIN",
+ "PDSF",
+ "pdsfc",
+ "PPID",
+ "pptst",
+ "reactno",
+ "RPMPL",
+ "RPMXY",
+ "rtsp",
+ "RUNMO",
+ "SIASM",
+ "statusdtm",
+ "stddev",
+ "Stks",
+ "SUMMO",
+ "Tesseract",
+ "TIBCO",
+ "TMAL",
+ "TMGA",
+ "TXTAPC",
+ "TXTIQS",
+ "Villach",
+ "XRDAI",
+ "XRDFWHM",
+ "XRDSL",
+ "XRDXRR",
+ "XRDXY"
+ ],
+ "workbench.colorCustomizations": {
+ "activityBar.activeBackground": "#7ea1d9",
+ "activityBar.activeBorder": "#f8e6ed",
+ "activityBar.background": "#7ea1d9",
+ "activityBar.foreground": "#15202b",
+ "activityBar.inactiveForeground": "#15202b99",
+ "activityBarBadge.background": "#f8e6ed",
+ "activityBarBadge.foreground": "#15202b",
+ "sash.hoverBorder": "#7ea1d9",
+ "statusBar.background": "#5684ce",
+ "statusBar.foreground": "#e7e7e7",
+ "statusBarItem.hoverBackground": "#7ea1d9",
+ "statusBarItem.remoteBackground": "#5684ce",
+ "statusBarItem.remoteForeground": "#e7e7e7",
+ "titleBar.activeBackground": "#5684ce",
+ "titleBar.activeForeground": "#e7e7e7",
+ "titleBar.inactiveBackground": "#5684ce99",
+ "titleBar.inactiveForeground": "#e7e7e799"
+ },
+ "peacock.color": "#5684ce",
+ "cSpell.enabled": false
+}
\ No newline at end of file
diff --git a/Adaptation/DEP08SIHTRPLC.Tests.csproj b/Adaptation/DEP08SIHTRPLC.Tests.csproj
new file mode 100644
index 0000000..b67b464
--- /dev/null
+++ b/Adaptation/DEP08SIHTRPLC.Tests.csproj
@@ -0,0 +1,95 @@
+
+
+ SAK
+ SAK
+ SAK
+ SAK
+
+
+ disable
+ false
+ 10.0
+ disable
+ win-x64
+ net6.0
+
+
+ trx
+ ../../../../DEP08SIHTRPLC/05_TestResults/TestResults
+
+
+ true
+ true
+ true
+
+
+ Windows
+
+
+ OSX
+
+
+ Linux
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
+
+
+
+ NU1701
+ NU1701
+ NU1701
+
+
+ NU1701
+ NU1701
+ NU1701
+ NU1701
+ NU1701
+ NU1701
+ NU1701
+ NU1701
+
+
+
+ Always
+
+
+ Always
+
+
+
\ No newline at end of file
diff --git a/Adaptation/Eaf/Core/AutoGenerated/BackboneComponent.cs b/Adaptation/Eaf/Core/AutoGenerated/BackboneComponent.cs
new file mode 100644
index 0000000..06ec233
--- /dev/null
+++ b/Adaptation/Eaf/Core/AutoGenerated/BackboneComponent.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.Core;
+
+public class BackboneComponent
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/Core/AutoGenerated/BackboneStatusCache.cs b/Adaptation/Eaf/Core/AutoGenerated/BackboneStatusCache.cs
new file mode 100644
index 0000000..69d3b7a
--- /dev/null
+++ b/Adaptation/Eaf/Core/AutoGenerated/BackboneStatusCache.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.Core;
+
+public class BackboneStatusCache
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/Core/AutoGenerated/ILoggingSetupManager.cs b/Adaptation/Eaf/Core/AutoGenerated/ILoggingSetupManager.cs
new file mode 100644
index 0000000..62e12d8
--- /dev/null
+++ b/Adaptation/Eaf/Core/AutoGenerated/ILoggingSetupManager.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.Core;
+
+public interface ILoggingSetupManager
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/Core/AutoGenerated/StatusItem.cs b/Adaptation/Eaf/Core/AutoGenerated/StatusItem.cs
new file mode 100644
index 0000000..f981297
--- /dev/null
+++ b/Adaptation/Eaf/Core/AutoGenerated/StatusItem.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.Core;
+
+public class StatusItem
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/Core/Backbone.cs b/Adaptation/Eaf/Core/Backbone.cs
new file mode 100644
index 0000000..f39f081
--- /dev/null
+++ b/Adaptation/Eaf/Core/Backbone.cs
@@ -0,0 +1,53 @@
+using Adaptation.PeerGroup.GCL.Annotations;
+using System;
+using System.Collections.Generic;
+
+namespace Adaptation.Eaf.Core;
+
+public class Backbone
+{
+
+#pragma warning disable CA1822
+#pragma warning disable CA2254
+#pragma warning disable IDE0060
+
+ public const string STATE_ERROR = "Error";
+ public const string STATE_OFFLINE = "Offline";
+ public const string STATE_RUNNING = "Running";
+ public const string STATE_SHUTDOWN = "Shutting Down";
+ public const string STATE_STARTING = "Starting";
+
+ protected Backbone() { }
+
+ [NotNull]
+ public static Backbone Instance { get; }
+ [NotNull]
+ public ILoggingSetupManager LoggingConfigurationManager { get; set; }
+ public BackboneStatusCache Status { get; }
+ public bool IsAutomatedRestartActive { get; }
+ public bool IsReadyForRestart { get; }
+ public string StartTime { get; }
+ public string State { get; }
+ public string Name { get; }
+ public string ConfigurationServiceAddress { get; }
+ public string CellName { get; }
+ protected bool IsInitialized { get; set; }
+ protected Dictionary BackboneComponents { get; }
+
+ public void AddBackboneComponent(BackboneComponent backboneComponent) { }
+ public bool ContainsBackboneComponent(string id) => throw new NotImplementedException();
+ [Obsolete("Use the capabilities exposed via the Status property -> GetAll. Will be removed with next major release.")]
+ public List GetAllStatuses() => throw new NotImplementedException();
+ public BackboneComponent GetBackboneComponentById(string id) => throw new NotImplementedException();
+ public List GetBackboneComponentsOfType() => throw new NotImplementedException();
+ public List GetBackboneComponentsOfType(Type type) => throw new NotImplementedException();
+ public void RegisterSubprocess(int pid) { }
+ [Obsolete("Use the capabilities exposed via the Status property -> SetValue. Will be removed with next major release.")]
+ public void SetStatus(string statusName, string statusValue) { }
+ [Obsolete("Use the capabilities exposed via the Status property -> SetValue. Will be removed with next major release.")]
+ public void SetStatus(BackboneComponent source, string statusName, string statusValue) { }
+ protected void CloseConnectionOfComponents(List components) { }
+ protected virtual void StopAllComponents() { }
+ protected void StopComponents(List components) { }
+
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/Core/Smtp/EmailMessage.cs b/Adaptation/Eaf/Core/Smtp/EmailMessage.cs
new file mode 100644
index 0000000..90163d6
--- /dev/null
+++ b/Adaptation/Eaf/Core/Smtp/EmailMessage.cs
@@ -0,0 +1,24 @@
+using System;
+
+namespace Adaptation.Eaf.Core.Smtp;
+
+public class EmailMessage
+{
+
+#pragma warning disable IDE0060
+
+ public EmailMessage() { }
+ public EmailMessage(string subject, string body, MailPriority priority = MailPriority.Normal) { }
+
+ public string Body { get; }
+ public MailPriority Priority { get; }
+ public string Subject { get; }
+
+ public EmailMessage PriorityHigh() => throw new NotImplementedException();
+ public EmailMessage PriorityLow() => throw new NotImplementedException();
+ public EmailMessage PriorityNormal() => throw new NotImplementedException();
+ public EmailMessage SetBody(string body) => throw new NotImplementedException();
+ public EmailMessage SetPriority(MailPriority priority) => throw new NotImplementedException();
+ public EmailMessage SetSubject(string subject) => throw new NotImplementedException();
+
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/Core/Smtp/ISmtp.cs b/Adaptation/Eaf/Core/Smtp/ISmtp.cs
new file mode 100644
index 0000000..0446065
--- /dev/null
+++ b/Adaptation/Eaf/Core/Smtp/ISmtp.cs
@@ -0,0 +1,6 @@
+namespace Adaptation.Eaf.Core.Smtp;
+
+public interface ISmtp
+{
+ void Send(EmailMessage message);
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/Core/Smtp/MailPriority.cs b/Adaptation/Eaf/Core/Smtp/MailPriority.cs
new file mode 100644
index 0000000..b59d146
--- /dev/null
+++ b/Adaptation/Eaf/Core/Smtp/MailPriority.cs
@@ -0,0 +1,8 @@
+namespace Adaptation.Eaf.Core.Smtp;
+
+public enum MailPriority
+{
+ Low = 0,
+ Normal = 1,
+ High = 2
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ChangeDataCollectionHandler.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ChangeDataCollectionHandler.cs
new file mode 100644
index 0000000..80e911e
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ChangeDataCollectionHandler.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public class ChangeDataCollectionHandler
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/DataCollectionRequest.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/DataCollectionRequest.cs
new file mode 100644
index 0000000..d49c557
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/DataCollectionRequest.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public class DataCollectionRequest
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentEvent.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentEvent.cs
new file mode 100644
index 0000000..9d45cb1
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentEvent.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public class EquipmentEvent
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentException.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentException.cs
new file mode 100644
index 0000000..c0cf1c3
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentException.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public class EquipmentException
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentSelfDescription.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentSelfDescription.cs
new file mode 100644
index 0000000..92d7722
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/EquipmentSelfDescription.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public class EquipmentSelfDescription
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/GetParameterValuesHandler.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/GetParameterValuesHandler.cs
new file mode 100644
index 0000000..dca26fc
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/GetParameterValuesHandler.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public class GetParameterValuesHandler
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IConnectionControl.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IConnectionControl.cs
new file mode 100644
index 0000000..7481501
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IConnectionControl.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public interface IConnectionControl
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IDataTracingHandler.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IDataTracingHandler.cs
new file mode 100644
index 0000000..cf0602a
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IDataTracingHandler.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public interface IDataTracingHandler
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentCommandService.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentCommandService.cs
new file mode 100644
index 0000000..9f6000e
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentCommandService.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public interface IEquipmentCommandService
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentControl.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentControl.cs
new file mode 100644
index 0000000..8b4f8d1
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentControl.cs
@@ -0,0 +1,15 @@
+using Adaptation.PeerGroup.GCL.Annotations;
+
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public interface IEquipmentControl : IPackageSource
+{
+ [NotNull]
+ IEquipmentSelfDescriptionBuilder SelfDescriptionBuilder { get; }
+ [NotNull]
+ IEquipmentDataCollection DataCollection { get; }
+ [NotNull]
+ IEquipmentCommandService Commands { get; }
+ [NotNull]
+ IConnectionControl Connection { get; }
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentSelfDescriptionBuilder.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentSelfDescriptionBuilder.cs
new file mode 100644
index 0000000..f34413f
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IEquipmentSelfDescriptionBuilder.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public interface IEquipmentSelfDescriptionBuilder
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IPackage.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IPackage.cs
new file mode 100644
index 0000000..eef26c3
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IPackage.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public interface IPackage
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ISelfDescriptionLookup.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ISelfDescriptionLookup.cs
new file mode 100644
index 0000000..be924e9
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/ISelfDescriptionLookup.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public interface ISelfDescriptionLookup
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IVirtualParameterValuesHandler.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IVirtualParameterValuesHandler.cs
new file mode 100644
index 0000000..e7a76fc
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/IVirtualParameterValuesHandler.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public interface IVirtualParameterValuesHandler
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/SetParameterValuesHandler.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/SetParameterValuesHandler.cs
new file mode 100644
index 0000000..2615f40
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/SetParameterValuesHandler.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public class SetParameterValuesHandler
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/TraceRequest.cs b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/TraceRequest.cs
new file mode 100644
index 0000000..8d26e7b
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/AutoGenerated/TraceRequest.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public class TraceRequest
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/IEquipmentDataCollection.cs b/Adaptation/Eaf/EquipmentCore/Control/IEquipmentDataCollection.cs
new file mode 100644
index 0000000..d0980ee
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/IEquipmentDataCollection.cs
@@ -0,0 +1,38 @@
+using Adaptation.Eaf.EquipmentCore.DataCollection.Reporting;
+using Adaptation.Eaf.EquipmentCore.SelfDescription.ElementDescription;
+using System;
+using System.Collections.Generic;
+
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public interface IEquipmentDataCollection
+{
+ IVirtualParameterValuesHandler VirtualParameterValuesHandler { get; }
+ ISelfDescriptionLookup SelfDescriptionLookup { get; }
+ EquipmentSelfDescription SelfDescription { get; }
+ IEnumerable ActiveRequests { get; }
+ IDataTracingHandler DataTracingHandler { get; }
+
+ ParameterValue CreateParameterValue(EquipmentParameter parameter, object value);
+ void NotifyDataTracingAvailable(bool isAvailable);
+ void RegisterChangeDataCollectionHandler(ChangeDataCollectionHandler handler);
+ void RegisterDataTracingHandler(IDataTracingHandler handler);
+ void RegisterGetParameterValuesHandler(GetParameterValuesHandler handler);
+ void RegisterSetParameterValuesHandler(SetParameterValuesHandler handler);
+ void TriggerDeactivate(DataCollectionRequest deactivateRequest);
+ void TriggerEvent(EquipmentEvent equipmentEvent, IEnumerable parameters);
+ void TriggerEvent(EquipmentEvent equipmentEvent, IEnumerable parameters, IPackage sourcePackage);
+ void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters);
+ void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters, IPackage sourcePackage);
+ void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride);
+ void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride, IPackage sourcePackage);
+ void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride, IPackage sourcePackage);
+ void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters, string severityOverride, string descriptionOverride);
+ void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters, IPackage sourcePackage);
+ void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable parameters);
+ void TriggerPerformanceRestored();
+ void TriggerPerformanceWarning();
+ void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable parameters);
+ void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable parameters, IPackage sourcePackage);
+ void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable parameters, DateTime equipmentTimeStamp);
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/Control/IPackageSource.cs b/Adaptation/Eaf/EquipmentCore/Control/IPackageSource.cs
new file mode 100644
index 0000000..86760aa
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/Control/IPackageSource.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.EquipmentCore.Control;
+
+public interface IPackageSource
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/DataCollection/Reporting/ParameterValue.cs b/Adaptation/Eaf/EquipmentCore/DataCollection/Reporting/ParameterValue.cs
new file mode 100644
index 0000000..864fa32
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/DataCollection/Reporting/ParameterValue.cs
@@ -0,0 +1,23 @@
+using Adaptation.Eaf.EquipmentCore.SelfDescription.ElementDescription;
+using Adaptation.PeerGroup.GCL.Annotations;
+using System;
+
+namespace Adaptation.Eaf.EquipmentCore.DataCollection.Reporting;
+
+public class ParameterValue
+{
+
+#pragma warning disable IDE0060
+
+ public ParameterValue(EquipmentParameter definition, object value) { }
+ public ParameterValue(EquipmentParameter definition, object value, DateTime timestamp) { }
+
+ public virtual object Value { get; protected internal set; }
+ [NotNull]
+ public EquipmentParameter Definition { get; }
+ public DateTime Timestamp { get; protected set; }
+
+ public virtual ParameterValue Clone(EquipmentParameter newDefinition) => throw new NotImplementedException();
+ public override string ToString() => base.ToString();
+
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/SelfDescription/ElementDescription/EquipmentParameter.cs b/Adaptation/Eaf/EquipmentCore/SelfDescription/ElementDescription/EquipmentParameter.cs
new file mode 100644
index 0000000..3a3a0e2
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/SelfDescription/ElementDescription/EquipmentParameter.cs
@@ -0,0 +1,26 @@
+using Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes;
+
+namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ElementDescription;
+
+public class EquipmentParameter
+{
+
+#pragma warning disable IDE0060
+
+ public EquipmentParameter(EquipmentParameter source, ParameterTypeDefinition typeDefinition) { }
+ public EquipmentParameter(string name, ParameterTypeDefinition typeDefinition, string description, bool isTransient = false, bool isReadOnly = true) { }
+ public EquipmentParameter(string id, string name, ParameterTypeDefinition typeDefinition, string description, bool isTransient = false, bool isReadOnly = true) { }
+
+ public string Name { get; }
+ public string Id { get; }
+ public string Description { get; }
+ public string SourcePath { get; }
+ public string SourceEquipment { get; }
+ public ParameterTypeDefinition TypeDefinition { get; }
+ public bool IsTransient { get; }
+ public bool IsReadOnly { get; }
+
+ public override string ToString() => base.ToString();
+ public string ToStringWithDetails() => base.ToString();
+
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/Field.cs b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/Field.cs
new file mode 100644
index 0000000..baf938a
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/Field.cs
@@ -0,0 +1,15 @@
+namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes;
+
+public class Field
+{
+
+#pragma warning disable IDE0060
+
+ public Field(string name, string description, bool canBeNull, ParameterTypeDefinition typeDefinition) { }
+
+ public string Name { get; }
+ public string Description { get; }
+ public ParameterTypeDefinition TypeDefinition { get; }
+ public bool CanBeNull { get; }
+
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/ParameterTypeDefinition.cs b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/ParameterTypeDefinition.cs
new file mode 100644
index 0000000..6037e47
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/ParameterTypeDefinition.cs
@@ -0,0 +1,15 @@
+namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes;
+
+public abstract class ParameterTypeDefinition
+{
+
+#pragma warning disable IDE0060
+
+ public ParameterTypeDefinition(string name, string description) { }
+
+ public string Name { get; }
+ public string Description { get; }
+
+ public override string ToString() => base.ToString();
+
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/StructuredType.cs b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/StructuredType.cs
new file mode 100644
index 0000000..b808fc9
--- /dev/null
+++ b/Adaptation/Eaf/EquipmentCore/SelfDescription/ParameterTypes/StructuredType.cs
@@ -0,0 +1,14 @@
+using System.Collections.Generic;
+
+namespace Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes;
+
+public class StructuredType : ParameterTypeDefinition
+{
+
+#pragma warning disable IDE0060
+
+ public StructuredType(string name, string description, IList fields) : base(name, description) { }
+
+ public IList Fields { get; }
+
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/IConfigurationObject.cs b/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/IConfigurationObject.cs
new file mode 100644
index 0000000..70ef834
--- /dev/null
+++ b/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/IConfigurationObject.cs
@@ -0,0 +1,5 @@
+namespace Adaptation.Eaf.Management.ConfigurationData.CellAutomation;
+
+public interface IConfigurationObject
+{
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterDefinition.cs b/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterDefinition.cs
new file mode 100644
index 0000000..5742acc
--- /dev/null
+++ b/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterDefinition.cs
@@ -0,0 +1,29 @@
+using System;
+
+namespace Adaptation.Eaf.Management.ConfigurationData.CellAutomation;
+
+[System.Runtime.Serialization.DataContract(IsReference = true)]
+public class ModelObjectParameterDefinition : IConfigurationObject
+{
+
+#pragma warning disable IDE0060
+
+ public ModelObjectParameterDefinition() { }
+ public ModelObjectParameterDefinition(string name, ModelObjectParameterType valueType, object defaultValue) { }
+ public ModelObjectParameterDefinition(string name, Type enumType, object defaultValue) { }
+
+ [System.Runtime.Serialization.DataMember]
+ public virtual long Id { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual string Name { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual string Value { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual ModelObjectParameterType ValueType { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual string EnumType { get; set; }
+
+ public virtual ModelObjectParameterDefinition Clone() => null;
+ public virtual bool IsValidValue(string value) => false;
+
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterType.cs b/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterType.cs
new file mode 100644
index 0000000..c5a85c2
--- /dev/null
+++ b/Adaptation/Eaf/Management/ConfigurationData/CellAutomation/ModelObjectParameterType.cs
@@ -0,0 +1,16 @@
+namespace Adaptation.Eaf.Management.ConfigurationData.CellAutomation;
+
+public enum ModelObjectParameterType
+{
+ String = 0,
+ Bool = 1,
+ Byte = 2,
+ SignedByte = 3,
+ Integer = 4,
+ UnsignedInteger = 5,
+ LongInteger = 6,
+ UnsignedLongInteger = 7,
+ Double = 8,
+ Float = 9,
+ Enum = 10
+}
\ No newline at end of file
diff --git a/Adaptation/Eaf/Management/ConfigurationData/Semiconductor/CellInstances/SecsConnectionConfiguration.cs b/Adaptation/Eaf/Management/ConfigurationData/Semiconductor/CellInstances/SecsConnectionConfiguration.cs
new file mode 100644
index 0000000..b8c1bd3
--- /dev/null
+++ b/Adaptation/Eaf/Management/ConfigurationData/Semiconductor/CellInstances/SecsConnectionConfiguration.cs
@@ -0,0 +1,43 @@
+using Adaptation.PeerGroup.GCL.SecsDriver;
+using System;
+
+namespace Adaptation.Eaf.Management.ConfigurationData.Semiconductor.CellInstances;
+
+[System.Runtime.Serialization.DataContract]
+public class SecsConnectionConfiguration
+{
+ public SecsConnectionConfiguration() { }
+
+ [System.Runtime.Serialization.DataMember]
+ public virtual TimeSpan T6HsmsControlMessage { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual TimeSpan T5ConnectionSeperation { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual TimeSpan T4InterBlock { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual TimeSpan T3MessageReply { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual TimeSpan T2Protocol { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual TimeSpan T1InterCharacter { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual SerialBaudRate? BaudRate { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual SecsTransportType? PortType { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual long? Port { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual TimeSpan LinkTestTimer { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual string Host { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual long? DeviceId { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual HsmsSessionMode? SessionMode { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual HsmsConnectionMode? ConnectionMode { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual TimeSpan T7ConnectionIdle { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual TimeSpan T8NetworkIntercharacter { get; set; }
+}
\ No newline at end of file
diff --git a/Adaptation/FileHandlers/CellInstanceConnectionName.cs b/Adaptation/FileHandlers/CellInstanceConnectionName.cs
new file mode 100644
index 0000000..8f6d931
--- /dev/null
+++ b/Adaptation/FileHandlers/CellInstanceConnectionName.cs
@@ -0,0 +1,22 @@
+using Adaptation.Eaf.Management.ConfigurationData.CellAutomation;
+using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration;
+using Adaptation.Shared.Methods;
+using System;
+using System.Collections.Generic;
+
+namespace Adaptation.FileHandlers;
+
+public class CellInstanceConnectionName
+{
+
+ internal static IFileRead Get(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, Dictionary> staticRuns, bool useCyclicalForDescription, bool isEAFHosted)
+ {
+ IFileRead result = cellInstanceConnectionName switch
+ {
+ nameof(ZipFilesByDate) => new ZipFilesByDate.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted),
+ _ => throw new Exception($"\"{cellInstanceConnectionName}\" not mapped")
+ };
+ return result;
+ }
+
+}
\ No newline at end of file
diff --git a/Adaptation/FileHandlers/ZipFilesByDate/FileRead.cs b/Adaptation/FileHandlers/ZipFilesByDate/FileRead.cs
new file mode 100644
index 0000000..fddaba8
--- /dev/null
+++ b/Adaptation/FileHandlers/ZipFilesByDate/FileRead.cs
@@ -0,0 +1,341 @@
+using Adaptation.Eaf.Management.ConfigurationData.CellAutomation;
+using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration;
+using Adaptation.Shared;
+using Adaptation.Shared.Duplicator;
+using Adaptation.Shared.Methods;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Globalization;
+using System.IO;
+using System.IO.Compression;
+using System.Linq;
+using System.Text.Json;
+using System.Text.RegularExpressions;
+using System.Threading;
+
+namespace Adaptation.FileHandlers.ZipFilesByDate;
+
+public class FileRead : Shared.FileRead, IFileRead
+{
+
+ private readonly Timer _Timer;
+
+ public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, Dictionary> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) :
+ base(new Description(), false, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted)
+ {
+ _MinFileLength = 10;
+ _NullData = string.Empty;
+ _Logistics = new(this);
+ if (_FileParameter is null)
+ throw new Exception(cellInstanceConnectionName);
+ if (_ModelObjectParameterDefinitions is null)
+ throw new Exception(cellInstanceConnectionName);
+ if (!_IsDuplicator)
+ throw new Exception(cellInstanceConnectionName);
+ if (!Debugger.IsAttached && fileConnectorConfiguration.PreProcessingMode != FileConnectorConfiguration.PreProcessingModeEnum.Process)
+ _Timer = new Timer(Callback, null, (int)(fileConnectorConfiguration.FileScanningIntervalInSeconds * 1000), Timeout.Infinite);
+ else
+ {
+ _Timer = new Timer(Callback, null, Timeout.Infinite, Timeout.Infinite);
+ Callback(null);
+ }
+ }
+
+ void IFileRead.Move(Tuple> extractResults, Exception exception)
+ {
+ bool isErrorFile = exception is not null;
+ if (!isErrorFile && !string.IsNullOrEmpty(_Logistics.ReportFullPath))
+ {
+ FileInfo fileInfo = new(_Logistics.ReportFullPath);
+ if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime)
+ File.SetLastWriteTime(_Logistics.ReportFullPath, fileInfo.CreationTime);
+ }
+ Move(extractResults);
+ }
+
+ void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null);
+
+ string IFileRead.GetEventDescription()
+ {
+ string result = _Description.GetEventDescription();
+ return result;
+ }
+
+ List IFileRead.GetHeaderNames()
+ {
+ List results = _Description.GetHeaderNames();
+ return results;
+ }
+
+ string[] IFileRead.Move(Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception)
+ {
+ string[] results = Move(extractResults, to, from, resolvedFileLocation, exception);
+ return results;
+ }
+
+ JsonProperty[] IFileRead.GetDefault()
+ {
+ JsonProperty[] results = _Description.GetDefault(this, _Logistics);
+ return results;
+ }
+
+ Dictionary IFileRead.GetDisplayNamesJsonElement()
+ {
+ Dictionary results = _Description.GetDisplayNamesJsonElement(this);
+ return results;
+ }
+
+ List IFileRead.GetDescriptions(IFileRead fileRead, List tests, IProcessData processData)
+ {
+ List results = _Description.GetDescriptions(fileRead, _Logistics, tests, processData);
+ return results;
+ }
+
+ Tuple> IFileRead.GetExtractResult(string reportFullPath, string eventName)
+ {
+ Tuple> results;
+ if (string.IsNullOrEmpty(eventName))
+ throw new Exception();
+ _ReportFullPath = reportFullPath;
+ DateTime dateTime = DateTime.Now;
+ results = GetExtractResult(reportFullPath, dateTime);
+ if (results.Item3 is null)
+ results = new Tuple>(results.Item1, Array.Empty(), JsonSerializer.Deserialize("[]"), results.Item4);
+ if (results.Item3.Length > 0 && _IsEAFHosted)
+ WritePDSF(this, results.Item3);
+ UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks);
+ return results;
+ }
+
+ Tuple> IFileRead.ReExtract()
+ {
+ Tuple> results;
+ List headerNames = _Description.GetHeaderNames();
+ Dictionary keyValuePairs = _Description.GetDisplayNamesJsonElement(this);
+ results = ReExtract(this, headerNames, keyValuePairs);
+ return results;
+ }
+
+ private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime)
+ {
+ if (reportFullPath is null)
+ { }
+ if (dateTime == DateTime.MinValue)
+ { }
+ throw new Exception(string.Concat("See ", nameof(Callback)));
+ }
+
+ private static bool DeleteEmptyDirectories(string rootDirectory)
+ {
+ bool result;
+ if (!Directory.Exists(rootDirectory))
+ result = false;
+ else
+ {
+ string[] files;
+ string[] directories = Directory.GetDirectories(rootDirectory, "*", SearchOption.TopDirectoryOnly);
+ if (directories.Length > 0)
+ files = Array.Empty();
+ else
+ files = Directory.GetFiles(rootDirectory, "*", SearchOption.AllDirectories);
+ if (directories.Length == 0 && files.Length == 0)
+ {
+ result = true;
+ Directory.Delete(rootDirectory);
+ }
+ else
+ {
+ result = false;
+ foreach (string directory in directories)
+ {
+ result = DeleteEmptyDirectories(directory);
+ if (result)
+ result = DeleteEmptyDirectories(directory);
+ }
+ if (files is null)
+ {
+ directories = Directory.GetDirectories(rootDirectory, "*", SearchOption.TopDirectoryOnly);
+ result = directories.Length == 0;
+ }
+ }
+ }
+ return result;
+ }
+
+ private void ZipFilesByDate(string sourceDirectory, SearchOption searchOption, string dayFormat)
+ {
+ string key;
+ bool addFile;
+ string fileName;
+ string[] segments;
+ string[] subFiles;
+ string weekOfYear;
+ FileInfo fileInfo;
+ DateTime creationTime;
+ DateTime lastWriteTime;
+ DateTime nowDateTime = DateTime.Now;
+ Regex regex = new("[a-zA-Z0-9]{1,}");
+ DateTime dateTime = DateTime.MinValue;
+ DateTime firstEmail = new(2019, 3, 8);
+ CultureInfo cultureInfo = new("en-US");
+ Calendar calendar = cultureInfo.Calendar;
+ Dictionary weeks = new();
+ int ticksLength = nowDateTime.AddDays(-6).Ticks.ToString().Length;
+ for (int i = 0; i < int.MaxValue; i++)
+ {
+ dateTime = firstEmail.AddDays(i);
+ if (dateTime > nowDateTime)
+ break;
+ weekOfYear = calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
+ key = string.Concat(dateTime.ToString("yyyy"), "_Week_", weekOfYear);
+ if (!weeks.ContainsKey(key))
+ weeks.Add(key, dateTime);
+ }
+ weekOfYear = calendar.GetWeekOfYear(nowDateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
+ string skipKey = string.Concat(nowDateTime.ToString("yyyy"), "_Week_", weekOfYear);
+ Dictionary> keyValuePairs = new();
+ string[] topDirectories = Directory.GetDirectories(sourceDirectory, "*", SearchOption.TopDirectoryOnly);
+ if (topDirectories.Length == 0)
+ topDirectories = new string[] { sourceDirectory };
+ foreach (string topDirectory in topDirectories)
+ {
+ keyValuePairs.Clear();
+ subFiles = Directory.GetFiles(topDirectory, "*", searchOption);
+ foreach (string subFile in subFiles)
+ {
+ addFile = false;
+ if (subFile.EndsWith(".zip"))
+ continue;
+ fileName = Path.GetFileName(subFile);
+ fileInfo = new FileInfo(subFile);
+ creationTime = fileInfo.CreationTime;
+ if (creationTime > dateTime)
+ continue;
+ lastWriteTime = fileInfo.LastWriteTime;
+ if (fileName.Contains(lastWriteTime.ToString("yyyyMMdd")) || fileName.Contains(lastWriteTime.ToString("yyyy-MM-dd")) ||
+ fileName.Contains(creationTime.ToString("yyyyMMdd")) || fileName.Contains(creationTime.ToString("yyyy-MM-dd")) ||
+ fileName.Contains(lastWriteTime.ToString("yyMMdd")) || fileName.Contains(lastWriteTime.ToString("yy-MM-dd")) ||
+ fileName.Contains(creationTime.ToString("yyMMdd")) || fileName.Contains(creationTime.ToString("yy-MM-dd")) ||
+ fileName.Contains(lastWriteTime.AddDays(-1).ToString("yyyyMMdd")) || fileName.Contains(lastWriteTime.AddDays(-1).ToString("yyyy-MM-dd")) ||
+ fileName.Contains(creationTime.AddDays(-1).ToString("yyyyMMdd")) || fileName.Contains(creationTime.AddDays(-1).ToString("yyyy-MM-dd")) ||
+ fileName.Contains(lastWriteTime.AddDays(-1).ToString("yyMMdd")) || fileName.Contains(lastWriteTime.AddDays(-1).ToString("yy-MM-dd")) ||
+ fileName.Contains(creationTime.AddDays(-1).ToString("yyMMdd")) || fileName.Contains(creationTime.AddDays(-1).ToString("yy-MM-dd")))
+ addFile = true;
+ if (!addFile && fileName.Length > ticksLength)
+ {
+ MatchCollection matches = regex.Matches(fileName);
+ foreach (Match match in matches.Cast())
+ {
+ if (match.Value.Length != ticksLength)
+ continue;
+ if (!long.TryParse(match.Value, out long ticks))
+ continue;
+ addFile = true;
+ break;
+ }
+ if (addFile)
+ break;
+ }
+ if (addFile)
+ {
+ weekOfYear = calendar.GetWeekOfYear(lastWriteTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
+ if (string.IsNullOrEmpty(dayFormat))
+ key = string.Concat(lastWriteTime.ToString("yyyy"), "_Week_", weekOfYear);
+ else
+ key = string.Concat(lastWriteTime.ToString("yyyy"), "_Week_", weekOfYear, "_", lastWriteTime.ToString(dayFormat));
+ if (key == skipKey)
+ continue;
+ if (!keyValuePairs.ContainsKey(key))
+ keyValuePairs.Add(key, new List());
+ keyValuePairs[key].Add(subFile);
+ }
+ }
+ foreach (KeyValuePair> element in keyValuePairs)
+ {
+ key = Path.Combine(topDirectory, $"{element.Key}.zip");
+ if (File.Exists(key))
+ {
+ for (short i = 101; i < short.MaxValue; i++)
+ {
+ key = Path.Combine(topDirectory, $"{element.Key}_{i}.zip");
+ if (!File.Exists(key))
+ break;
+ }
+ }
+ using ZipArchive zip = ZipFile.Open(key, ZipArchiveMode.Create);
+ foreach (string file in element.Value)
+ {
+ _ = zip.CreateEntryFromFile(file, Path.GetFileName(file));
+ File.Delete(file);
+ }
+ }
+ subFiles = Directory.GetFiles(topDirectory, "*.zip", SearchOption.TopDirectoryOnly);
+ foreach (string subFile in subFiles)
+ {
+ fileName = Path.GetFileNameWithoutExtension(subFile);
+ segments = fileName.Split('_');
+ if (segments.Length > 2)
+ fileName = string.Concat(segments[0], '_', segments[1], '_', segments[2]);
+ if (weeks.ContainsKey(fileName))
+ {
+ try
+ { File.SetLastWriteTime(subFile, weeks[fileName]); }
+ catch (Exception) { }
+ }
+ }
+ if (topDirectory != sourceDirectory)
+ {
+ try
+ { _ = DeleteEmptyDirectories(topDirectory); }
+ catch (Exception) { }
+ }
+ _Log.Info(topDirectory);
+ }
+ }
+
+ private void ZipFilesByDate()
+ {
+ string checkDirectory;
+ string dayFormat = string.Empty;
+ string[] equipmentDirectories = Directory.GetDirectories(_FileConnectorConfiguration.SourceFileLocation, "*", SearchOption.TopDirectoryOnly);
+ foreach (string equipmentDirectory in equipmentDirectories)
+ {
+ checkDirectory = Path.Combine(equipmentDirectory, "PollPath");
+ if (!Directory.Exists(checkDirectory))
+ continue;
+ if (_IsEAFHosted)
+ ZipFilesByDate(checkDirectory, SearchOption.TopDirectoryOnly, dayFormat);
+ }
+ }
+
+ private void Callback(object state)
+ {
+ try
+ {
+ ZipFilesByDate();
+ }
+ catch (Exception exception)
+ {
+ string subject = string.Concat("Exception:", _CellInstanceConnectionName);
+ string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace);
+ try
+ { _SMTP.SendHighPriorityEmailMessage(subject, body); }
+ catch (Exception) { }
+ }
+ try
+ {
+ TimeSpan timeSpan = new(DateTime.Now.AddSeconds(_FileConnectorConfiguration.FileScanningIntervalInSeconds.Value).Ticks - DateTime.Now.Ticks);
+ _ = _Timer.Change((long)timeSpan.TotalMilliseconds, Timeout.Infinite);
+ }
+ catch (Exception exception)
+ {
+ string subject = string.Concat("Exception:", _CellInstanceConnectionName);
+ string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace);
+ try
+ { _SMTP.SendHighPriorityEmailMessage(subject, body); }
+ catch (Exception) { }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/Adaptation/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs b/Adaptation/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs
new file mode 100644
index 0000000..7cd0603
--- /dev/null
+++ b/Adaptation/Ifx/Eaf/Common/Configuration/ConnectionSetting.cs
@@ -0,0 +1,16 @@
+namespace Adaptation.Ifx.Eaf.Common.Configuration;
+
+[System.Runtime.Serialization.DataContract]
+public class ConnectionSetting
+{
+
+#pragma warning disable IDE0060
+
+ public ConnectionSetting(string name, string value) { }
+
+ [System.Runtime.Serialization.DataMember]
+ public string Name { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public string Value { get; set; }
+
+}
\ No newline at end of file
diff --git a/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/File.cs b/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/File.cs
new file mode 100644
index 0000000..bb50d23
--- /dev/null
+++ b/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/File.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+
+namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.Component;
+
+public class File
+{
+
+#pragma warning disable IDE0060
+
+ public File(string filePath) => throw new NotImplementedException();
+ public File(string filePath, DateTime timeFileFound) => throw new NotImplementedException();
+
+ public string Path { get; }
+ public DateTime TimeFound { get; }
+ public bool IsErrorFile { get; }
+ public Dictionary ContentParameters { get; }
+
+ public File UpdateContentParameters(Dictionary contentParameters) => throw new NotImplementedException();
+ public File UpdateParsingStatus(bool isErrorFile) => throw new NotImplementedException();
+
+}
\ No newline at end of file
diff --git a/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/FilePathGenerator.cs b/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/FilePathGenerator.cs
new file mode 100644
index 0000000..2d3132c
--- /dev/null
+++ b/Adaptation/Ifx/Eaf/EquipmentConnector/File/Component/FilePathGenerator.cs
@@ -0,0 +1,38 @@
+using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration;
+using System;
+using System.Collections.Generic;
+
+namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.Component;
+
+public class FilePathGenerator
+{
+
+#pragma warning disable IDE0060
+
+ public const char PLACEHOLDER_IDENTIFIER = '%';
+ public const char PLACEHOLDER_SEPARATOR = ':';
+ public const string PLACEHOLDER_NOT_AVAILABLE = "NA";
+ public const string PLACEHOLDER_ORIGINAL_FILE_NAME = "OriginalFileName";
+ public const string PLACEHOLDER_ORIGINAL_FILE_EXTENSION = "OriginalFileExtension";
+ public const string PLACEHOLDER_DATE_TIME = "DateTime";
+ public const string PLACEHOLDER_SUB_FOLDER = "SubFolder";
+ public const string PLACEHOLDER_CELL_NAME = "CellName";
+
+ public FilePathGenerator(FileConnectorConfiguration config, Dictionary customPattern = null) => throw new NotImplementedException();
+ public FilePathGenerator(FileConnectorConfiguration config, File file, bool isErrorFile = false, Dictionary customPattern = null) => throw new NotImplementedException();
+ public FilePathGenerator(FileConnectorConfiguration config, string sourceFilePath, bool isErrorFile = false, Dictionary customPattern = null) => throw new NotImplementedException();
+
+ protected string SubFolderPath { get; }
+ protected FileConnectorConfiguration Configuration { get; }
+ protected File File { get; }
+ protected bool IsErrorFile { get; }
+ protected string DefaultPlaceHolderValue { get; }
+
+ public string GetFullTargetPath() => throw new NotImplementedException();
+ public virtual string GetTargetFileName() => throw new NotImplementedException();
+ public string GetTargetFolder(bool throwExceptionIfNotExist = true) => throw new NotImplementedException();
+ protected virtual string GetSubFolder(string folderPattern, string subFolderPath) => throw new NotImplementedException();
+ protected virtual string PrepareFolderPath(string targetFolderPath, string subFolderPath) => throw new NotImplementedException();
+ protected string ReplacePlaceholder(string inputPath) => throw new NotImplementedException();
+
+}
\ No newline at end of file
diff --git a/Adaptation/Ifx/Eaf/EquipmentConnector/File/Configuration/FileConnectorConfiguration.cs b/Adaptation/Ifx/Eaf/EquipmentConnector/File/Configuration/FileConnectorConfiguration.cs
new file mode 100644
index 0000000..05fe1cc
--- /dev/null
+++ b/Adaptation/Ifx/Eaf/EquipmentConnector/File/Configuration/FileConnectorConfiguration.cs
@@ -0,0 +1,134 @@
+using Adaptation.Ifx.Eaf.Common.Configuration;
+using System;
+using System.Collections.Generic;
+
+namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration;
+
+[System.Runtime.Serialization.DataContract]
+public class FileConnectorConfiguration
+{
+ public const ulong IDLE_EVENT_WAIT_TIME_DEFAULT = 360;
+ public const ulong FILE_HANDLE_TIMEOUT_DEFAULT = 15;
+
+ [System.Runtime.Serialization.DataMember]
+ public virtual bool? TriggerOnChanged { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual long? PostProcessingRetries { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual bool? CopySourceFolderStructure { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public IfPostProcessingFailsEnum? IfPostProcessingFailsAction { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public string AlternateTargetFolder { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public long? FileHandleTimeout { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public bool? DeleteEmptySourceSubFolders { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public long? IdleEventWaitTimeInSeconds { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public string FileAgeThreshold { get; set; }
+ public bool? FolderAgeCheckIndividualSubFolders { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual ZipModeEnum? ZipMode { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public FileAgeFilterEnum? FileAgeFilterMode { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public string ZipTargetFileName { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public string ZipErrorTargetFileName { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public long? ZipFileSubFolderLevel { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public string DefaultPlaceHolderValue { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public bool? UseZip64Mode { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public List ConnectionSettings { get; set; }
+ public string SourceDirectoryCloaking { get; set; }
+ public string FolderAgeThreshold { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual long? FileScanningIntervalInSeconds { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual bool? TriggerOnCreated { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual long? ZipFileTime { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public string SourceFileLocation { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public string SourceFileFilter { get; set; }
+ public List SourceFileFilters { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual bool? IncludeSubDirectories { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual FileScanningOptionEnum? FileScanningOption { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public string TargetFileLocation { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public string ErrorTargetFileLocation { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public string TargetFileName { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual long? FileHandleWaitTime { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public IfFileExistEnum? IfFileExistAction { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public long? ConnectionRetryInterval { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public PreProcessingModeEnum? PreProcessingMode { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public PostProcessingModeEnum? PostProcessingMode { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public PostProcessingModeEnum? ErrorPostProcessingMode { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public virtual long? ZipFileAmount { get; set; }
+ [System.Runtime.Serialization.DataMember]
+ public string ErrorTargetFileName { get; set; }
+
+ public void Initialize() => throw new NotImplementedException();
+
+ public enum PostProcessingModeEnum
+ {
+ None = 0,
+ Move = 1,
+ Copy = 2,
+ Rename = 3,
+ Zip = 4,
+ Delete = 5,
+ MoveFolder = 6,
+ CopyFolder = 7,
+ DeleteFolder = 8
+ }
+ public enum PreProcessingModeEnum
+ {
+ None = 0,
+ Process = 1
+ }
+ public enum IfFileExistEnum
+ {
+ Overwrite = 0,
+ LeaveFiles = 1,
+ Delete = 2
+ }
+ public enum IfPostProcessingFailsEnum
+ {
+ LeaveFiles = 0,
+ Delete = 1
+ }
+ public enum FileScanningOptionEnum
+ {
+ FileWatcher = 0,
+ TimeBased = 1
+ }
+ public enum ZipModeEnum
+ {
+ ZipByAmountOrTime = 0,
+ ZipByFileName = 1,
+ ZipBySubFolderName = 2
+ }
+ public enum FileAgeFilterEnum
+ {
+ IgnoreNewer = 0,
+ IgnoreOlder = 1
+ }
+}
\ No newline at end of file
diff --git a/Adaptation/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs b/Adaptation/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs
new file mode 100644
index 0000000..57475d5
--- /dev/null
+++ b/Adaptation/Ifx/Eaf/EquipmentConnector/File/SelfDescription/FileConnectorParameterTypeDefinitionProvider.cs
@@ -0,0 +1,18 @@
+using Adaptation.Eaf.EquipmentCore.SelfDescription.ParameterTypes;
+using System.Collections.Generic;
+
+namespace Adaptation.Ifx.Eaf.EquipmentConnector.File.SelfDescription;
+
+public class FileConnectorParameterTypeDefinitionProvider
+{
+
+#pragma warning disable CA1822
+#pragma warning disable CA2254
+#pragma warning disable IDE0060
+
+ public FileConnectorParameterTypeDefinitionProvider() { }
+
+ public IEnumerable GetAllParameterTypeDefinition() => null;
+ public ParameterTypeDefinition GetParameterTypeDefinition(string name) => null;
+
+}
\ No newline at end of file
diff --git a/Adaptation/PeerGroup/GCL/Annotations/NotNullAttribute.cs b/Adaptation/PeerGroup/GCL/Annotations/NotNullAttribute.cs
new file mode 100644
index 0000000..e32df4c
--- /dev/null
+++ b/Adaptation/PeerGroup/GCL/Annotations/NotNullAttribute.cs
@@ -0,0 +1,9 @@
+using System;
+
+namespace Adaptation.PeerGroup.GCL.Annotations;
+
+[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.Delegate, AllowMultiple = false, Inherited = true)]
+public sealed class NotNullAttribute : Attribute
+{
+ public NotNullAttribute() { }
+}
\ No newline at end of file
diff --git a/Adaptation/PeerGroup/GCL/SecsDriver/HsmsConnectionMode.cs b/Adaptation/PeerGroup/GCL/SecsDriver/HsmsConnectionMode.cs
new file mode 100644
index 0000000..af1ea65
--- /dev/null
+++ b/Adaptation/PeerGroup/GCL/SecsDriver/HsmsConnectionMode.cs
@@ -0,0 +1,7 @@
+namespace Adaptation.PeerGroup.GCL.SecsDriver;
+
+public enum HsmsConnectionMode
+{
+ Active = 0,
+ Passive = 1
+}
\ No newline at end of file
diff --git a/Adaptation/PeerGroup/GCL/SecsDriver/HsmsSessionMode.cs b/Adaptation/PeerGroup/GCL/SecsDriver/HsmsSessionMode.cs
new file mode 100644
index 0000000..eecd8b7
--- /dev/null
+++ b/Adaptation/PeerGroup/GCL/SecsDriver/HsmsSessionMode.cs
@@ -0,0 +1,7 @@
+namespace Adaptation.PeerGroup.GCL.SecsDriver;
+
+public enum HsmsSessionMode
+{
+ MultiSession = 0,
+ SingleSession = 1
+}
\ No newline at end of file
diff --git a/Adaptation/PeerGroup/GCL/SecsDriver/SecsTransportType.cs b/Adaptation/PeerGroup/GCL/SecsDriver/SecsTransportType.cs
new file mode 100644
index 0000000..5e68d64
--- /dev/null
+++ b/Adaptation/PeerGroup/GCL/SecsDriver/SecsTransportType.cs
@@ -0,0 +1,7 @@
+namespace Adaptation.PeerGroup.GCL.SecsDriver;
+
+public enum SecsTransportType
+{
+ HSMS = 0,
+ Serial = 1
+}
\ No newline at end of file
diff --git a/Adaptation/PeerGroup/GCL/SecsDriver/SerialBaudRate.cs b/Adaptation/PeerGroup/GCL/SecsDriver/SerialBaudRate.cs
new file mode 100644
index 0000000..a5bd2c3
--- /dev/null
+++ b/Adaptation/PeerGroup/GCL/SecsDriver/SerialBaudRate.cs
@@ -0,0 +1,15 @@
+namespace Adaptation.PeerGroup.GCL.SecsDriver;
+
+public enum SerialBaudRate
+{
+ Baud9600 = 0,
+ Baud19200 = 1,
+ Baud4800 = 2,
+ Baud2400 = 3,
+ Baud1200 = 4,
+ Baud300 = 5,
+ Baud150 = 6,
+ Baud38400 = 7,
+ Baud57600 = 8,
+ Baud115200 = 9
+}
\ No newline at end of file
diff --git a/Adaptation/Shared/Duplicator/Description.cs b/Adaptation/Shared/Duplicator/Description.cs
new file mode 100644
index 0000000..abbb7a4
--- /dev/null
+++ b/Adaptation/Shared/Duplicator/Description.cs
@@ -0,0 +1,142 @@
+using Adaptation.Shared.Methods;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.Json;
+
+namespace Adaptation.Shared.Duplicator;
+
+public class Description : IDescription, Properties.IDescription
+{
+
+ public int Test { get; set; }
+ public int Count { get; set; }
+ public int Index { get; set; }
+ //
+ public string EventName { get; set; }
+ public string NullData { get; set; }
+ public string JobID { get; set; }
+ public string Sequence { get; set; }
+ public string MesEntity { get; set; }
+ public string ReportFullPath { get; set; }
+ public string ProcessJobID { get; set; }
+ public string MID { get; set; }
+ public string Date { get; set; } //2021-10-23
+
+ string IDescription.GetEventDescription() => "File Has been read and parsed";
+
+ List IDescription.GetNames(IFileRead fileRead, Logistics logistics)
+ {
+ List results = new();
+ IDescription description = GetDefault(fileRead, logistics);
+ string json = JsonSerializer.Serialize(description, description.GetType());
+ object @object = JsonSerializer.Deserialize