diff --git a/.DS_Store b/.DS_Store
new file mode 100755
index 000000000..a403536d2
Binary files /dev/null and b/.DS_Store differ
diff --git a/src/.DS_Store b/src/.DS_Store
new file mode 100755
index 000000000..5008ddfcf
Binary files /dev/null and b/src/.DS_Store differ
diff --git a/src/AasxAmlImExport/AasxAmlImExport.csproj b/src/AasxAmlImExport/AasxAmlImExport.csproj
index 24af1f382..84793ecdd 100644
--- a/src/AasxAmlImExport/AasxAmlImExport.csproj
+++ b/src/AasxAmlImExport/AasxAmlImExport.csproj
@@ -6,7 +6,7 @@
false
-
+
@@ -15,7 +15,7 @@
-
+
diff --git a/src/AasxPackageExplorer.sln b/src/AasxPackageExplorer.sln
index 286b0978e..6cc15bb6f 100644
--- a/src/AasxPackageExplorer.sln
+++ b/src/AasxPackageExplorer.sln
@@ -12,10 +12,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AasxToolkit", "AasxToolkit\
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AasxWpfControlLibrary", "AasxWpfControlLibrary\AasxWpfControlLibrary.csproj", "{EBAE658A-3ECE-4C98-89BC-F79809AB4A5E}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AasxRestServerLibrary", "AasxRestServerLibrary\AasxRestServerLibrary.csproj", "{967E60E3-D668-42A3-AA0B-1A031C20D871}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AasxRestConsoleServer", "AasxRestConsoleServer\AasxRestConsoleServer.csproj", "{6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AasxIntegrationBase", "AasxIntegrationBase\AasxIntegrationBase.csproj", "{5A05DF78-216B-4A0B-9E30-7B2557C7E867}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AasxIntegrationEmptySample", "AasxIntegrationEmptySample\AasxIntegrationEmptySample.csproj", "{7B8F763F-39FE-4947-B0E6-B9D97A3B6F8B}"
@@ -46,12 +42,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AasxPluginTechnicalData", "
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{9264D68F-5269-420F-A486-6B8F39BEEB8B}"
ProjectSection(SolutionItems) = preProject
- Notes_V3.md = Notes_V3.md
- README-packages.md = README-packages.md
..\CHANGELOG.md = ..\CHANGELOG.md
..\CODE_OF_CONDUCT.md = ..\CODE_OF_CONDUCT.md
..\CONTRIBUTING.md = ..\CONTRIBUTING.md
..\CONTRIBUTORS.md = ..\CONTRIBUTORS.md
+ Notes_V3.md = Notes_V3.md
+ README-packages.md = README-packages.md
..\README.md = ..\README.md
EndProjectSection
EndProject
@@ -77,22 +73,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ProgsUserInterface", "Progs
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataStore", "DataStore", "{9490C085-8FDC-4EDE-BDCF-280FC19E43FF}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WpfMtpControl", "WpfMtpControl\WpfMtpControl.csproj", "{F6CF3948-C67A-40FC-812A-3733F673EA21}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AasxPluginMtpViewer", "AasxPluginMtpViewer\AasxPluginMtpViewer.csproj", "{7A612803-BAE2-4FED-BBCE-56079EDB8594}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WpfMtpVisuViewer", "WpfMtpVisuViewer\WpfMtpVisuViewer.csproj", "{1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FunctionalUiLibs", "FunctionalUiLibs", "{C1752DB5-0157-4666-A25D-2666089457BB}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AasxUaNetServer", "AasxUaNetServer\AasxUaNetServer.csproj", "{C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AasxPluginUaNetServer", "AasxPluginUaNetServer\AasxPluginUaNetServer.csproj", "{32EEDE14-8622-42E6-81AE-33941B7A6EFC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AasxPluginUaNetClient", "AasxPluginUaNetClient\AasxPluginUaNetClient.csproj", "{9EB71E8B-EC41-4054-BAB4-F419B4D13A36}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AasxUaNetConsoleServer", "AasxUaNetConsoleServer\AasxUaNetConsoleServer.csproj", "{232852C2-358B-4577-9D29-1E48ED75C342}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UserSpecific", "UserSpecific", "{4FD813E9-EC97-4E85-BAFC-5280BC07C302}"
ProjectSection(SolutionItems) = preProject
MIHO.NUnit.runsettings = MIHO.NUnit.runsettings
@@ -264,66 +246,6 @@ Global
{EBAE658A-3ECE-4C98-89BC-F79809AB4A5E}.ReleaseWithoutCEF|x64.Build.0 = Release|Any CPU
{EBAE658A-3ECE-4C98-89BC-F79809AB4A5E}.ReleaseWithoutCEF|x86.ActiveCfg = Release|Any CPU
{EBAE658A-3ECE-4C98-89BC-F79809AB4A5E}.ReleaseWithoutCEF|x86.Build.0 = Release|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.Debug|x64.ActiveCfg = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.Debug|x64.Build.0 = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.Debug|x86.ActiveCfg = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.Debug|x86.Build.0 = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.DebugSlow|Any CPU.ActiveCfg = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.DebugSlow|Any CPU.Build.0 = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.DebugSlow|x64.ActiveCfg = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.DebugSlow|x64.Build.0 = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.DebugSlow|x86.ActiveCfg = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.DebugSlow|x86.Build.0 = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.DebugWithoutCEF|Any CPU.ActiveCfg = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.DebugWithoutCEF|Any CPU.Build.0 = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.DebugWithoutCEF|x64.ActiveCfg = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.DebugWithoutCEF|x64.Build.0 = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.DebugWithoutCEF|x86.ActiveCfg = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.DebugWithoutCEF|x86.Build.0 = Debug|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.Release|Any CPU.Build.0 = Release|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.Release|x64.ActiveCfg = Release|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.Release|x64.Build.0 = Release|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.Release|x86.ActiveCfg = Release|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.Release|x86.Build.0 = Release|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.ReleaseWithoutCEF|Any CPU.ActiveCfg = Release|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.ReleaseWithoutCEF|Any CPU.Build.0 = Release|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.ReleaseWithoutCEF|x64.ActiveCfg = Release|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.ReleaseWithoutCEF|x64.Build.0 = Release|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.ReleaseWithoutCEF|x86.ActiveCfg = Release|Any CPU
- {967E60E3-D668-42A3-AA0B-1A031C20D871}.ReleaseWithoutCEF|x86.Build.0 = Release|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.Debug|x64.ActiveCfg = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.Debug|x64.Build.0 = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.Debug|x86.ActiveCfg = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.Debug|x86.Build.0 = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.DebugSlow|Any CPU.ActiveCfg = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.DebugSlow|Any CPU.Build.0 = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.DebugSlow|x64.ActiveCfg = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.DebugSlow|x64.Build.0 = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.DebugSlow|x86.ActiveCfg = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.DebugSlow|x86.Build.0 = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.DebugWithoutCEF|Any CPU.ActiveCfg = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.DebugWithoutCEF|Any CPU.Build.0 = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.DebugWithoutCEF|x64.ActiveCfg = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.DebugWithoutCEF|x64.Build.0 = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.DebugWithoutCEF|x86.ActiveCfg = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.DebugWithoutCEF|x86.Build.0 = Debug|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.Release|Any CPU.Build.0 = Release|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.Release|x64.ActiveCfg = Release|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.Release|x64.Build.0 = Release|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.Release|x86.ActiveCfg = Release|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.Release|x86.Build.0 = Release|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.ReleaseWithoutCEF|Any CPU.ActiveCfg = Release|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.ReleaseWithoutCEF|Any CPU.Build.0 = Release|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.ReleaseWithoutCEF|x64.ActiveCfg = Release|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.ReleaseWithoutCEF|x64.Build.0 = Release|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.ReleaseWithoutCEF|x86.ActiveCfg = Release|Any CPU
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF}.ReleaseWithoutCEF|x86.Build.0 = Release|Any CPU
{5A05DF78-216B-4A0B-9E30-7B2557C7E867}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5A05DF78-216B-4A0B-9E30-7B2557C7E867}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5A05DF78-216B-4A0B-9E30-7B2557C7E867}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -892,216 +814,6 @@ Global
{B540EBF4-C026-45A4-9721-909AF0CC14C1}.ReleaseWithoutCEF|x64.Build.0 = Release|Any CPU
{B540EBF4-C026-45A4-9721-909AF0CC14C1}.ReleaseWithoutCEF|x86.ActiveCfg = Release|Any CPU
{B540EBF4-C026-45A4-9721-909AF0CC14C1}.ReleaseWithoutCEF|x86.Build.0 = Release|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.Debug|x64.ActiveCfg = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.Debug|x64.Build.0 = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.Debug|x86.ActiveCfg = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.Debug|x86.Build.0 = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.DebugSlow|Any CPU.ActiveCfg = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.DebugSlow|Any CPU.Build.0 = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.DebugSlow|x64.ActiveCfg = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.DebugSlow|x64.Build.0 = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.DebugSlow|x86.ActiveCfg = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.DebugSlow|x86.Build.0 = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.DebugWithoutCEF|Any CPU.ActiveCfg = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.DebugWithoutCEF|Any CPU.Build.0 = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.DebugWithoutCEF|x64.ActiveCfg = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.DebugWithoutCEF|x64.Build.0 = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.DebugWithoutCEF|x86.ActiveCfg = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.DebugWithoutCEF|x86.Build.0 = Debug|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.Release|Any CPU.Build.0 = Release|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.Release|x64.ActiveCfg = Release|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.Release|x64.Build.0 = Release|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.Release|x86.ActiveCfg = Release|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.Release|x86.Build.0 = Release|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.ReleaseWithoutCEF|Any CPU.ActiveCfg = Release|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.ReleaseWithoutCEF|Any CPU.Build.0 = Release|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.ReleaseWithoutCEF|x64.ActiveCfg = Release|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.ReleaseWithoutCEF|x64.Build.0 = Release|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.ReleaseWithoutCEF|x86.ActiveCfg = Release|Any CPU
- {F6CF3948-C67A-40FC-812A-3733F673EA21}.ReleaseWithoutCEF|x86.Build.0 = Release|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.Debug|x64.ActiveCfg = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.Debug|x64.Build.0 = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.Debug|x86.ActiveCfg = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.Debug|x86.Build.0 = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.DebugSlow|Any CPU.ActiveCfg = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.DebugSlow|Any CPU.Build.0 = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.DebugSlow|x64.ActiveCfg = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.DebugSlow|x64.Build.0 = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.DebugSlow|x86.ActiveCfg = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.DebugSlow|x86.Build.0 = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.DebugWithoutCEF|Any CPU.ActiveCfg = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.DebugWithoutCEF|Any CPU.Build.0 = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.DebugWithoutCEF|x64.ActiveCfg = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.DebugWithoutCEF|x64.Build.0 = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.DebugWithoutCEF|x86.ActiveCfg = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.DebugWithoutCEF|x86.Build.0 = Debug|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.Release|Any CPU.Build.0 = Release|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.Release|x64.ActiveCfg = Release|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.Release|x64.Build.0 = Release|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.Release|x86.ActiveCfg = Release|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.Release|x86.Build.0 = Release|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.ReleaseWithoutCEF|Any CPU.ActiveCfg = Release|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.ReleaseWithoutCEF|Any CPU.Build.0 = Release|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.ReleaseWithoutCEF|x64.ActiveCfg = Release|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.ReleaseWithoutCEF|x64.Build.0 = Release|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.ReleaseWithoutCEF|x86.ActiveCfg = Release|Any CPU
- {7A612803-BAE2-4FED-BBCE-56079EDB8594}.ReleaseWithoutCEF|x86.Build.0 = Release|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.Debug|x64.ActiveCfg = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.Debug|x64.Build.0 = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.Debug|x86.ActiveCfg = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.Debug|x86.Build.0 = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.DebugSlow|Any CPU.ActiveCfg = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.DebugSlow|Any CPU.Build.0 = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.DebugSlow|x64.ActiveCfg = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.DebugSlow|x64.Build.0 = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.DebugSlow|x86.ActiveCfg = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.DebugSlow|x86.Build.0 = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.DebugWithoutCEF|Any CPU.ActiveCfg = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.DebugWithoutCEF|Any CPU.Build.0 = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.DebugWithoutCEF|x64.ActiveCfg = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.DebugWithoutCEF|x64.Build.0 = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.DebugWithoutCEF|x86.ActiveCfg = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.DebugWithoutCEF|x86.Build.0 = Debug|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.Release|Any CPU.Build.0 = Release|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.Release|x64.ActiveCfg = Release|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.Release|x64.Build.0 = Release|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.Release|x86.ActiveCfg = Release|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.Release|x86.Build.0 = Release|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.ReleaseWithoutCEF|Any CPU.ActiveCfg = Release|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.ReleaseWithoutCEF|Any CPU.Build.0 = Release|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.ReleaseWithoutCEF|x64.ActiveCfg = Release|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.ReleaseWithoutCEF|x64.Build.0 = Release|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.ReleaseWithoutCEF|x86.ActiveCfg = Release|Any CPU
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C}.ReleaseWithoutCEF|x86.Build.0 = Release|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.Debug|x64.ActiveCfg = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.Debug|x64.Build.0 = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.Debug|x86.ActiveCfg = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.Debug|x86.Build.0 = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.DebugSlow|Any CPU.ActiveCfg = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.DebugSlow|Any CPU.Build.0 = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.DebugSlow|x64.ActiveCfg = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.DebugSlow|x64.Build.0 = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.DebugSlow|x86.ActiveCfg = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.DebugSlow|x86.Build.0 = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.DebugWithoutCEF|Any CPU.ActiveCfg = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.DebugWithoutCEF|Any CPU.Build.0 = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.DebugWithoutCEF|x64.ActiveCfg = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.DebugWithoutCEF|x64.Build.0 = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.DebugWithoutCEF|x86.ActiveCfg = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.DebugWithoutCEF|x86.Build.0 = Debug|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.Release|Any CPU.Build.0 = Release|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.Release|x64.ActiveCfg = Release|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.Release|x64.Build.0 = Release|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.Release|x86.ActiveCfg = Release|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.Release|x86.Build.0 = Release|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.ReleaseWithoutCEF|Any CPU.ActiveCfg = Release|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.ReleaseWithoutCEF|Any CPU.Build.0 = Release|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.ReleaseWithoutCEF|x64.ActiveCfg = Release|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.ReleaseWithoutCEF|x64.Build.0 = Release|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.ReleaseWithoutCEF|x86.ActiveCfg = Release|Any CPU
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58}.ReleaseWithoutCEF|x86.Build.0 = Release|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.Debug|x64.ActiveCfg = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.Debug|x64.Build.0 = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.Debug|x86.ActiveCfg = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.Debug|x86.Build.0 = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.DebugSlow|Any CPU.ActiveCfg = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.DebugSlow|Any CPU.Build.0 = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.DebugSlow|x64.ActiveCfg = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.DebugSlow|x64.Build.0 = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.DebugSlow|x86.ActiveCfg = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.DebugSlow|x86.Build.0 = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.DebugWithoutCEF|Any CPU.ActiveCfg = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.DebugWithoutCEF|Any CPU.Build.0 = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.DebugWithoutCEF|x64.ActiveCfg = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.DebugWithoutCEF|x64.Build.0 = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.DebugWithoutCEF|x86.ActiveCfg = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.DebugWithoutCEF|x86.Build.0 = Debug|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.Release|Any CPU.Build.0 = Release|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.Release|x64.ActiveCfg = Release|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.Release|x64.Build.0 = Release|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.Release|x86.ActiveCfg = Release|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.Release|x86.Build.0 = Release|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.ReleaseWithoutCEF|Any CPU.ActiveCfg = Release|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.ReleaseWithoutCEF|Any CPU.Build.0 = Release|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.ReleaseWithoutCEF|x64.ActiveCfg = Release|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.ReleaseWithoutCEF|x64.Build.0 = Release|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.ReleaseWithoutCEF|x86.ActiveCfg = Release|Any CPU
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC}.ReleaseWithoutCEF|x86.Build.0 = Release|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.Debug|x64.ActiveCfg = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.Debug|x64.Build.0 = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.Debug|x86.ActiveCfg = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.Debug|x86.Build.0 = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.DebugSlow|Any CPU.ActiveCfg = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.DebugSlow|Any CPU.Build.0 = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.DebugSlow|x64.ActiveCfg = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.DebugSlow|x64.Build.0 = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.DebugSlow|x86.ActiveCfg = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.DebugSlow|x86.Build.0 = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.DebugWithoutCEF|Any CPU.ActiveCfg = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.DebugWithoutCEF|Any CPU.Build.0 = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.DebugWithoutCEF|x64.ActiveCfg = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.DebugWithoutCEF|x64.Build.0 = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.DebugWithoutCEF|x86.ActiveCfg = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.DebugWithoutCEF|x86.Build.0 = Debug|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.Release|Any CPU.Build.0 = Release|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.Release|x64.ActiveCfg = Release|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.Release|x64.Build.0 = Release|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.Release|x86.ActiveCfg = Release|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.Release|x86.Build.0 = Release|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.ReleaseWithoutCEF|Any CPU.ActiveCfg = Release|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.ReleaseWithoutCEF|Any CPU.Build.0 = Release|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.ReleaseWithoutCEF|x64.ActiveCfg = Release|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.ReleaseWithoutCEF|x64.Build.0 = Release|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.ReleaseWithoutCEF|x86.ActiveCfg = Release|Any CPU
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36}.ReleaseWithoutCEF|x86.Build.0 = Release|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.Debug|x64.ActiveCfg = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.Debug|x64.Build.0 = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.Debug|x86.ActiveCfg = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.Debug|x86.Build.0 = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.DebugSlow|Any CPU.ActiveCfg = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.DebugSlow|Any CPU.Build.0 = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.DebugSlow|x64.ActiveCfg = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.DebugSlow|x64.Build.0 = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.DebugSlow|x86.ActiveCfg = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.DebugSlow|x86.Build.0 = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.DebugWithoutCEF|Any CPU.ActiveCfg = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.DebugWithoutCEF|Any CPU.Build.0 = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.DebugWithoutCEF|x64.ActiveCfg = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.DebugWithoutCEF|x64.Build.0 = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.DebugWithoutCEF|x86.ActiveCfg = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.DebugWithoutCEF|x86.Build.0 = Debug|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.Release|Any CPU.Build.0 = Release|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.Release|x64.ActiveCfg = Release|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.Release|x64.Build.0 = Release|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.Release|x86.ActiveCfg = Release|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.Release|x86.Build.0 = Release|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.ReleaseWithoutCEF|Any CPU.ActiveCfg = Release|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.ReleaseWithoutCEF|Any CPU.Build.0 = Release|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.ReleaseWithoutCEF|x64.ActiveCfg = Release|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.ReleaseWithoutCEF|x64.Build.0 = Release|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.ReleaseWithoutCEF|x86.ActiveCfg = Release|Any CPU
- {232852C2-358B-4577-9D29-1E48ED75C342}.ReleaseWithoutCEF|x86.Build.0 = Release|Any CPU
{96FBCF5F-BBF3-4076-8DB6-BF9D8420F3DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{96FBCF5F-BBF3-4076-8DB6-BF9D8420F3DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{96FBCF5F-BBF3-4076-8DB6-BF9D8420F3DC}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -1702,30 +1414,6 @@ Global
{AB60370B-DC87-414D-8A6C-7B095F940A1B}.ReleaseWithoutCEF|x64.Build.0 = Release|Any CPU
{AB60370B-DC87-414D-8A6C-7B095F940A1B}.ReleaseWithoutCEF|x86.ActiveCfg = Release|Any CPU
{AB60370B-DC87-414D-8A6C-7B095F940A1B}.ReleaseWithoutCEF|x86.Build.0 = Release|Any CPU
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.Debug|Any CPU.ActiveCfg = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.Debug|x64.ActiveCfg = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.Debug|x86.ActiveCfg = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.Debug|x86.Build.0 = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.DebugSlow|Any CPU.ActiveCfg = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.DebugSlow|x64.ActiveCfg = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.DebugSlow|x86.ActiveCfg = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.DebugWithoutCEF|Any CPU.ActiveCfg = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.DebugWithoutCEF|Any CPU.Build.0 = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.DebugWithoutCEF|x64.ActiveCfg = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.DebugWithoutCEF|x64.Build.0 = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.DebugWithoutCEF|x86.ActiveCfg = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.DebugWithoutCEF|x86.Build.0 = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.Release|Any CPU.ActiveCfg = Release|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.Release|Any CPU.Build.0 = Release|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.Release|x64.ActiveCfg = Release|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.Release|x86.ActiveCfg = Release|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.Release|x86.Build.0 = Release|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.ReleaseWithoutCEF|Any CPU.ActiveCfg = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.ReleaseWithoutCEF|Any CPU.Build.0 = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.ReleaseWithoutCEF|x64.ActiveCfg = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.ReleaseWithoutCEF|x64.Build.0 = Debug|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.ReleaseWithoutCEF|x86.ActiveCfg = Release|x86
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34}.ReleaseWithoutCEF|x86.Build.0 = Release|x86
{4EB64F40-1A01-46BB-BEED-D1A75313C7F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4EB64F40-1A01-46BB-BEED-D1A75313C7F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4EB64F40-1A01-46BB-BEED-D1A75313C7F8}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -1944,8 +1632,6 @@ Global
{569B369E-9393-4F57-994E-6B84398FD7CC} = {98C89299-C429-4F0B-9938-4B7775943393}
{294FC59A-5645-412F-8216-702FB66528C1} = {1A282279-9375-4714-96B6-89A00985C9DC}
{EBAE658A-3ECE-4C98-89BC-F79809AB4A5E} = {98C89299-C429-4F0B-9938-4B7775943393}
- {967E60E3-D668-42A3-AA0B-1A031C20D871} = {F9AE9D23-200C-455B-B14E-2EF20B13432E}
- {6C45112D-B7F0-4463-BE6D-A8A2B5A547BF} = {1A282279-9375-4714-96B6-89A00985C9DC}
{5A05DF78-216B-4A0B-9E30-7B2557C7E867} = {DDA9C372-F8ED-4099-A53C-01B9333FD985}
{7B8F763F-39FE-4947-B0E6-B9D97A3B6F8B} = {66D730EB-B9D7-4C3A-8954-0F86240AD612}
{6D1A03B2-EBA7-4CE2-9237-DF9AD7128947} = {F9AE9D23-200C-455B-B14E-2EF20B13432E}
@@ -1965,13 +1651,6 @@ Global
{7788AC2B-7F97-4755-B343-C4196FA90198} = {F9AE9D23-200C-455B-B14E-2EF20B13432E}
{2F21FEFF-F0EF-40B5-BA05-09FC9F499AE9} = {DDA9C372-F8ED-4099-A53C-01B9333FD985}
{B540EBF4-C026-45A4-9721-909AF0CC14C1} = {F9AE9D23-200C-455B-B14E-2EF20B13432E}
- {F6CF3948-C67A-40FC-812A-3733F673EA21} = {C1752DB5-0157-4666-A25D-2666089457BB}
- {7A612803-BAE2-4FED-BBCE-56079EDB8594} = {66D730EB-B9D7-4C3A-8954-0F86240AD612}
- {1E2E9A75-3C8C-4CD9-BE11-32190FD4313C} = {98C89299-C429-4F0B-9938-4B7775943393}
- {C1E3F0D9-2BEA-4668-AFF4-454FDF527A58} = {F9AE9D23-200C-455B-B14E-2EF20B13432E}
- {32EEDE14-8622-42E6-81AE-33941B7A6EFC} = {66D730EB-B9D7-4C3A-8954-0F86240AD612}
- {9EB71E8B-EC41-4054-BAB4-F419B4D13A36} = {66D730EB-B9D7-4C3A-8954-0F86240AD612}
- {232852C2-358B-4577-9D29-1E48ED75C342} = {1A282279-9375-4714-96B6-89A00985C9DC}
{4FD813E9-EC97-4E85-BAFC-5280BC07C302} = {9264D68F-5269-420F-A486-6B8F39BEEB8B}
{96FBCF5F-BBF3-4076-8DB6-BF9D8420F3DC} = {98C89299-C429-4F0B-9938-4B7775943393}
{8D09D103-1B97-4D54-BAA9-841B2F93FF36} = {66D730EB-B9D7-4C3A-8954-0F86240AD612}
@@ -1992,7 +1671,6 @@ Global
{00F5EA49-F66D-4104-A621-AF668DD58C05} = {F9AE9D23-200C-455B-B14E-2EF20B13432E}
{A713E962-38FB-4FD0-9687-30F530E95E91} = {98C89299-C429-4F0B-9938-4B7775943393}
{AB60370B-DC87-414D-8A6C-7B095F940A1B} = {98C89299-C429-4F0B-9938-4B7775943393}
- {8E42C60A-2576-47C2-B0EE-B40BBDDA0F34} = {5BA4D327-1907-4F5A-BC90-5EA939497BFC}
{4EB64F40-1A01-46BB-BEED-D1A75313C7F8} = {F9AE9D23-200C-455B-B14E-2EF20B13432E}
{BE68E42C-28CB-4298-9F34-A18AF92FC4DE} = {F9AE9D23-200C-455B-B14E-2EF20B13432E}
{6A1F717C-8F43-4260-98A6-49345F983EFC} = {DDA9C372-F8ED-4099-A53C-01B9333FD985}
diff --git a/src/AasxPackageLogic/ExplorerMenuFactory.cs b/src/AasxPackageLogic/ExplorerMenuFactory.cs
index 9cde2ad03..62b5dc072 100644
--- a/src/AasxPackageLogic/ExplorerMenuFactory.cs
+++ b/src/AasxPackageLogic/ExplorerMenuFactory.cs
@@ -99,7 +99,7 @@ public static AasxMenu CreateMainMenu()
.AddSeparator()
.AddMenu(header: "Further connect options ", childs: (new AasxMenu())
.AddWpfBlazor(name: "ConnectSecure", header: "Secure Connect ", inputGesture: "Ctrl+Shift+S")
- .AddWpfBlazor(name: "ConnectOpcUa", header: "Connect via OPC-UA ")
+ //.AddWpfBlazor(name: "ConnectOpcUa", header: "Connect via OPC-UA ")
.AddWpfBlazor(name: "ConnectRest", header: "Connect via REST ", inputGesture: "F6"))
.AddSeparator()
.AddMenu(header: "AASX File Repository ", childs: (new AasxMenu())
@@ -158,8 +158,8 @@ public static AasxMenu CreateMainMenu()
help: "Import OPC UA nodeset.xml into an existing Submodel.",
args: new AasxMenuListOfArgDefs()
.Add("File", "OPC UA Nodeset file."))
- .AddWpfBlazor(name: "OPCRead", header: "Read OPC values into SubModel ",
- help: "Use Qualifiers attributed in a Submodel to read actual OPC UA values.")
+ /*.AddWpfBlazor(name: "OPCRead", header: "Read OPC values into SubModel ",
+ help: "Use Qualifiers attributed in a Submodel to read actual OPC UA values.")*/
.AddWpfBlazor(name: "RDFRead", header: "Import BAMM RDF into AASX ",
help: "Import BAMM RDF into AASX.",
args: new AasxMenuListOfArgDefs()
@@ -195,13 +195,13 @@ public static AasxMenu CreateMainMenu()
args: new AasxMenuListOfArgDefs()
.Add("File", "OPC UA Nodeset2.xml file to write.")
.Add("Location", "Location selection", hidden: true))
- .AddWpfBlazor(name: "OpcUaExportNodeSetUaPlugin",
+ /*.AddWpfBlazor(name: "OpcUaExportNodeSetUaPlugin",
header: "Export OPC UA Nodeset2.xml (via UA server plug-in) ",
help: "Export OPC UA Nodeset2.xml format by starting OPC UA server in plugin and " +
"execute a post-process command.",
args: new AasxMenuListOfArgDefs()
.Add("File", "OPC UA Nodeset2.xml file to write.")
- .Add("Location", "Location selection", hidden: true))
+ .Add("Location", "Location selection", hidden: true))*/
.AddWpfBlazor(name: "CopyClipboardElementJson",
header: "Copy selected element JSON to clipboard", inputGesture: "Shift+Ctrl+C")
.AddWpfBlazor(name: "ExportGenericForms",
@@ -233,7 +233,7 @@ public static AasxMenu CreateMainMenu()
.AddWpf(name: "MQTTPub", header: "Publish AAS via MQTT ")
.AddSeparator()
.AddWpf(name: "ServerPluginEmptySample", header: "Plugin: Empty Sample ")
- .AddWpf(name: "ServerPluginOPCUA", header: "Plugin: OPC UA ")
+ //.AddWpf(name: "ServerPluginOPCUA", header: "Plugin: OPC UA ")
.AddWpf(name: "ServerPluginMQTT", header: "Plugin: MQTT "))
.AddSeparator(filter: AasxMenuFilter.NotBlazor)
.AddMenu(header: "System ", filter: AasxMenuFilter.NotBlazor,
diff --git a/src/AasxPluginMtpViewer/AasxPluginMtpViewer.csproj b/src/AasxPluginMtpViewer/AasxPluginMtpViewer.csproj
deleted file mode 100644
index 16174b82f..000000000
--- a/src/AasxPluginMtpViewer/AasxPluginMtpViewer.csproj
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
- net6.0-windows
- library
- false
- true
-
-
-
- true
- false
-
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PreserveNewest
-
-
-
-
-
-
diff --git a/src/AasxPluginMtpViewer/AasxPluginMtpViewer.options.json b/src/AasxPluginMtpViewer/AasxPluginMtpViewer.options.json
deleted file mode 100644
index 5cba39956..000000000
--- a/src/AasxPluginMtpViewer/AasxPluginMtpViewer.options.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "Records": [
- {
- "RecordType": 0,
- "AllowSubmodelSemanticId": [
- {
- "type": "Submodel",
- "local": false,
- "value": "http://www.admin-shell.io/mtp/v1/submodel",
- "index": 0,
- "idType": "IRI"
- }
- ]
- },
- {
- "RecordType": 1,
- "AllowSubmodelSemanticId": [
- {
- "type": "Submodel",
- "local": false,
- "value": "http://www.admin-shell.io/mtp/v1/mtp-instance-submodel",
- "index": 0,
- "idType": "IRI"
- }
- ]
- }
- ],
- "SymbolMappings": [
- {
- "EClassVersions": null,
- "EClassClasses": "37010201",
- "EClassIRDIs": null,
- "SymbolDefault": "PNID_Festo.manual_valve_active-u-nozzled",
- "SymbolActive": null,
- "SymbolIntermediate": null,
- "Comment": "V003,45fd1be7-d9fe-426a-aec7-ca16a09cb64b"
- }
- ],
- "VisuOptions": {
- "Background": "#707070",
- "StateColorActive": "#2020ff",
- "StateColorNonActive": "#202020",
- "StateColorForward": "#2020ff",
- "StateColorReverse": "#20ff20"
- }
-}
\ No newline at end of file
diff --git a/src/AasxPluginMtpViewer/AasxPluginMtpViewer.plugin b/src/AasxPluginMtpViewer/AasxPluginMtpViewer.plugin
deleted file mode 100644
index 3beebdf2d..000000000
--- a/src/AasxPluginMtpViewer/AasxPluginMtpViewer.plugin
+++ /dev/null
@@ -1 +0,0 @@
-This file tags the according .ddl to be a plug-in for AasxPackageExplorer.
\ No newline at end of file
diff --git a/src/AasxPluginMtpViewer/LICENSE.TXT b/src/AasxPluginMtpViewer/LICENSE.TXT
deleted file mode 100644
index 21bf04b1f..000000000
--- a/src/AasxPluginMtpViewer/LICENSE.TXT
+++ /dev/null
@@ -1,244 +0,0 @@
-Copyright (c) 2018-2023 Festo SE & Co. KG
-,
-author: Michael Hoffmeister
-
-This software is licensed under the Apache Public License 2.0 (APL-2.0)
-(see below).
-The AutomationML.Engine is licensed under the MIT license (MIT)
-(see below).
-
-This application is a sample application for demonstration of the features
-of the Administration Shell.
-It is not allowed for productive use. The implementation uses the concepts
-of the document "Details of the Asset
-Administration Shell" published on www.plattform-i40.de which is licensed
-under Creative Commons CC BY-ND 3.0 DE.
-
-The MIT License (MIT)
-
-Copyright (c) 2007 James Newton-King
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-(http://www.apache.org/licenses/LICENSE-2.0)
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
-
-With respect to AutomationML.Engine
-===================================
-
-(https://raw.githubusercontent.com/AutomationML/AMLEngine2.1/master/license.txt)
-
-The MIT License (MIT)
-
-Copyright 2017 AutomationML e.V.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
diff --git a/src/AasxPluginMtpViewer/MtpViewerOptions.cs b/src/AasxPluginMtpViewer/MtpViewerOptions.cs
deleted file mode 100644
index 66086a5ca..000000000
--- a/src/AasxPluginMtpViewer/MtpViewerOptions.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-Copyright (c) 2018-2023 Festo SE & Co. KG
-Author: Michael Hoffmeister
-
-This source code is licensed under the Apache License 2.0 (see LICENSE.txt).
-
-This source code may use other Open Source software components (see LICENSE.txt).
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using AasxPredefinedConcepts;
-using Aas = AasCore.Aas3_0;
-using AdminShellNS;
-using Extensions;
-using WpfMtpControl;
-using AasxIntegrationBase;
-
-namespace AasxPluginMtpViewer
-{
- public class MtpViewerOptionsRecord : AasxPluginOptionsLookupRecordBase
- {
- public enum MtpRecordType { MtpType, MtpInstance }
-
- public MtpRecordType RecordType = MtpRecordType.MtpType;
- }
-
- public class MtpViewerOptions : AasxPluginLookupOptionsBase
- {
- public List Records = new List();
-
- public WpfMtpControl.MtpSymbolMapRecordList SymbolMappings = new WpfMtpControl.MtpSymbolMapRecordList();
-
- public MtpVisuOptions VisuOptions = new MtpVisuOptions();
-
- ///
- /// Create a set of minimal options
- ///
- public static MtpViewerOptions CreateDefault()
- {
- var defs = new DefinitionsMTP.ModuleTypePackage();
-
- var rec1 = new MtpViewerOptionsRecord();
- rec1.RecordType = MtpViewerOptionsRecord.MtpRecordType.MtpType;
- rec1.AllowSubmodelSemanticId = defs.SEM_MtpSubmodel.Keys.ToKeyList();
-
- var rec2 = new MtpViewerOptionsRecord();
- rec2.RecordType = MtpViewerOptionsRecord.MtpRecordType.MtpInstance;
- rec2.AllowSubmodelSemanticId = defs.SEM_MtpInstanceSubmodel.Keys.ToKeyList();
-
- var opt = new MtpViewerOptions();
- opt.Records.Add(rec1);
- opt.Records.Add(rec2);
-
- return opt;
- }
- }
-}
diff --git a/src/AasxPluginMtpViewer/Opc.Ua.SampleClient.Config.xml b/src/AasxPluginMtpViewer/Opc.Ua.SampleClient.Config.xml
deleted file mode 100644
index 8c8ea824f..000000000
--- a/src/AasxPluginMtpViewer/Opc.Ua.SampleClient.Config.xml
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
- UA Core Sample Client
- urn:localhost:OPCFoundation:CoreSampleClient
- http://opcfoundation.org/UA/CoreSampleClient
- Client_1
-
-
-
-
-
- X509Store
- CurrentUser\My
- CN=UA Core Sample Client, C=US, S=Arizona, O=OPC Foundation, DC=localhost
-
-
-
-
- Directory
- %LocalApplicationData%/OPC Foundation/pki/issuer
-
-
-
-
- Directory
- %LocalApplicationData%/OPC Foundation/pki/trusted
-
-
-
-
- Directory
- %LocalApplicationData%/OPC Foundation/pki/rejected
-
-
-
- false
-
-
-
-
-
-
- 600000
- 1048576
- 4194304
- 65535
- 4194304
- 65535
- 300000
- 3600000
-
-
-
-
-
-
- 600000
-
-
-
- opc.tcp://{0}:4840/UADiscovery
-
-
-
-
-
-
- 10000
-
-
-
- %LocalApplicationData%/Logs/Opc.Ua.CoreSampleClient.log.txt
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
\ No newline at end of file
diff --git a/src/AasxPluginMtpViewer/Plugin.cs b/src/AasxPluginMtpViewer/Plugin.cs
deleted file mode 100644
index b88929648..000000000
--- a/src/AasxPluginMtpViewer/Plugin.cs
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
-Copyright (c) 2018-2023 Festo SE & Co. KG
-Author: Michael Hoffmeister
-
-This source code is licensed under the Apache License 2.0 (see LICENSE.txt).
-
-This source code may use other Open Source software components (see LICENSE.txt).
-*/
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
-using Aas = AasCore.Aas3_0;
-using AdminShellNS;
-using Extensions;
-using Newtonsoft.Json;
-using AasxPluginMtpViewer;
-
-namespace AasxIntegrationBase // the namespace has to be: AasxIntegrationBase
-{
- // the class names has to be: AasxPlugin and subclassing IAasxPluginInterface
- // ReSharper disable UnusedType.Global
- public class AasxPlugin : AasxPluginBase
- // ReSharper enable UnusedType.Global
- {
- private AasxPluginMtpViewer.MtpViewerOptions _options = new AasxPluginMtpViewer.MtpViewerOptions();
-
- private AasxPluginMtpViewer.WpfMtpControlWrapper _viewerControl
- = new AasxPluginMtpViewer.WpfMtpControlWrapper();
-
- public new void InitPlugin(string[] args)
- {
- // start ..
- PluginName = "AasxPluginMtpViewer";
- _log.Info("InitPlugin() called with args = {0}", (args == null) ? "" : string.Join(", ", args));
-
- // .. with built-in options
- _options = AasxPluginMtpViewer.MtpViewerOptions.CreateDefault();
-
- // try load defaults options from assy directory
- try
- {
- var newOpt =
- AasxPluginOptionsBase.LoadDefaultOptionsFromAssemblyDir(
- this.GetPluginName(), Assembly.GetExecutingAssembly());
- if (newOpt != null)
- this._options = newOpt;
- }
- catch (Exception ex)
- {
- _log.Error(ex, "Exception when reading default options {1}");
- }
-
- // index them!
- _options.IndexListOfRecords(_options.Records);
- }
-
- public new AasxPluginActionDescriptionBase[] ListActions()
- {
- _log.Info("ListActions() called");
- var res = new List();
- // for speed reasons, have the most often used at top!
- res.Add(new AasxPluginActionDescriptionBase("call-check-visual-extension",
- "When called with Referable, returns possibly visual extension for it."));
- // rest follows
- res.Add(new AasxPluginActionDescriptionBase("set-json-options",
- "Sets plugin-options according to provided JSON string."));
- res.Add(new AasxPluginActionDescriptionBase("get-json-options", "Gets plugin-options as a JSON string."));
- res.Add(new AasxPluginActionDescriptionBase("get-licenses", "Reports about used licenses."));
- res.Add(new AasxPluginActionDescriptionBase("get-events",
- "Pops and returns the earliest event from the event stack."));
- res.Add(new AasxPluginActionDescriptionBase("get-check-visual-extension",
- "Returns true, if plug-ins checks for visual extension."));
- res.Add(new AasxPluginActionDescriptionBase("fill-panel-visual-extension",
- "When called, fill given WPF panel with control for graph display."));
- return res.ToArray();
- }
-
- public new AasxPluginResultBase ActivateAction(string action, params object[] args)
- {
- // for speed reasons, have the most often used at top!
- if (action == "call-check-visual-extension")
- {
- // arguments
- if (args.Length < 1)
- return null;
-
- // looking only for Submodels
- var sm = args[0] as Aas.Submodel;
- if (sm == null)
- return null;
-
- // check for a record in options, that matches Submodel
- var found = false;
- // ReSharper disable once UnusedVariable
- foreach (var rec in _options.LookupAllIndexKey(
- sm.SemanticId?.GetAsExactlyOneKey()))
- found = true;
- if (!found)
- return null;
-
- // success prepare record
- var cve = new AasxPluginResultVisualExtension("MTP", "Module Type Package - View");
-
- // ok
- return cve;
- }
-
- // can basic helper help to reduce lines of code?
- var help = ActivateActionBasicHelper(action, ref _options, args,
- disableDefaultLicense: true,
- enableGetCheckVisuExt: true);
- if (help != null)
- return help;
-
- // rest follows
-
- if (action == "get-licenses")
- {
- var lic = new AasxPluginResultLicense();
- lic.shortLicense = "The AutomationML.Engine is licensed under the MIT license (MIT) (see below).";
-
- lic.isStandardLicense = true;
- lic.longLicense = AasxPluginHelper.LoadLicenseTxtFromAssemblyDir(
- "LICENSE.txt", Assembly.GetExecutingAssembly());
-
- return lic;
- }
-
- if (action == "fill-panel-visual-extension" && this._viewerControl != null)
- {
- // arguments
- if (args?.Length < 3)
- return null;
-
- // call
- var resobj = AasxPluginMtpViewer.WpfMtpControlWrapper.FillWithWpfControls(args?[0], args?[1],
- this._options, this._eventStack, this._log, args?[2]);
-
- // give object back
- var res = new AasxPluginResultBaseObject();
- res.obj = resobj;
- return res;
- }
-
- // default
- return null;
- }
-
- }
-}
diff --git a/src/AasxPluginMtpViewer/Properties/AssemblyInfo.cs b/src/AasxPluginMtpViewer/Properties/AssemblyInfo.cs
deleted file mode 100644
index e6987bb2d..000000000
--- a/src/AasxPluginMtpViewer/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System.Reflection;
-using System.Resources;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using System.Windows;
-
-// Allgemeine Informationen über eine Assembly werden über die folgenden
-// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
-// die einer Assembly zugeordnet sind.
-[assembly: AssemblyTitle("AasxPluginMtpViewer")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("AasxPluginMtpViewer")]
-[assembly: AssemblyCopyright("Copyright © 2020")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
-// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
-// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
-[assembly: ComVisible(false)]
-
-//Um mit dem Erstellen lokalisierbarer Anwendungen zu beginnen, legen Sie
-//ImCodeVerwendeteKultur in der .csproj-Datei
-//in einer fest. Wenn Sie in den Quelldateien beispielsweise Deutsch
-//(Deutschland) verwenden, legen Sie auf \"de-DE\" fest. Heben Sie dann die Auskommentierung
-//des nachstehenden NeutralResourceLanguage-Attributs auf. Aktualisieren Sie "en-US" in der nachstehenden Zeile,
-//sodass es mit der UICulture-Einstellung in der Projektdatei übereinstimmt.
-
-//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
-
-
-[assembly: ThemeInfo(
- ResourceDictionaryLocation.None, //Speicherort der designspezifischen Ressourcenwörterbücher
- //(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
- // oder in den Anwendungsressourcen-Wörterbüchern nicht gefunden werden kann.)
- ResourceDictionaryLocation.SourceAssembly //Speicherort des generischen Ressourcenwörterbuchs
- //(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
- // designspezifischen Ressourcenwörterbuch nicht gefunden werden kann.)
-)]
-
-
-// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
-//
-// Hauptversion
-// Nebenversion
-// Buildnummer
-// Revision
-//
-// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
-// übernehmen, indem Sie "*" eingeben:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/AasxPluginMtpViewer/Properties/Resources.Designer.cs b/src/AasxPluginMtpViewer/Properties/Resources.Designer.cs
deleted file mode 100644
index c9b1f962f..000000000
--- a/src/AasxPluginMtpViewer/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// Dieser Code wurde von einem Tool generiert.
-// Laufzeitversion: 4.0.30319.42000
-//
-// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
-// der Code neu generiert wird.
-//
-//------------------------------------------------------------------------------
-
-namespace AasxPluginMtpViewer.Properties {
-
-
- ///
- /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
- ///
- // Diese Klasse wurde von der StronglyTypedResourceBuilder-Klasse
- // über ein Tool wie ResGen oder Visual Studio automatisch generiert.
- // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
- // mit der Option /str erneut aus, oder erstellen Sie Ihr VS-Projekt neu.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if ((resourceMan == null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AasxPluginMtpViewer.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
- /// Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
- }
-}
diff --git a/src/AasxPluginMtpViewer/Properties/Resources.resx b/src/AasxPluginMtpViewer/Properties/Resources.resx
deleted file mode 100644
index af7dbebba..000000000
--- a/src/AasxPluginMtpViewer/Properties/Resources.resx
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/src/AasxPluginMtpViewer/Properties/Settings.Designer.cs b/src/AasxPluginMtpViewer/Properties/Settings.Designer.cs
deleted file mode 100644
index ef16259b6..000000000
--- a/src/AasxPluginMtpViewer/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace AasxPluginMtpViewer.Properties
-{
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
- {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default
- {
- get
- {
- return defaultInstance;
- }
- }
- }
-}
diff --git a/src/AasxPluginMtpViewer/Properties/Settings.settings b/src/AasxPluginMtpViewer/Properties/Settings.settings
deleted file mode 100644
index 033d7a5e9..000000000
--- a/src/AasxPluginMtpViewer/Properties/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/AasxPluginMtpViewer/Resources/LICENSE.TXT b/src/AasxPluginMtpViewer/Resources/LICENSE.TXT
deleted file mode 100644
index fc70527e2..000000000
--- a/src/AasxPluginMtpViewer/Resources/LICENSE.TXT
+++ /dev/null
@@ -1,651 +0,0 @@
-Copyright (c) 2018-2023 Festo SE & Co. KG , author: Michael Hoffmeister
-Copyright (c) 2019 PHOENIX CONTACT GmbH & Co. KG , author: Andreas Orzelski
-This software is licensed under the Eclipse Public License 2.0 (EPL-2.0) (see below)
-The browser functionality is licensed under the cefSharp license (see below)
-The Newtonsoft.JSON serialization is licensed under the MIT License (MIT) (see below)
-The QR code generation is licensed under the MIT license (MIT) (see below)
-The Zxing.Net Dot Matrix Code (DMC) generation is licensed under the Apache License 2.0 (Apache-2.0) (see below)
-The Grapevine REST server framework is licensed under Apache License 2.0 (Apache-2.0) (see below)
-The AutomationML.Engine is licensed under the MIT license (MIT) (see below)
-The MQTT server and client is licensed under the MIT license (MIT) (see below)
-
-This application is a sample application for demonstration of the features of the Administration Shell.
-It is not allowed for productive use. The implementation uses the concepts of the document "Details of the Asset
-Administration Shell" published on www.plattform-i40.de which is licensed under Creative Commons CC BY-ND 3.0 DE.
-
-Eclipse Public License 2.0 (EPL-2.0)
-====================================
-
-(https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt)
-
- THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
- PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
- OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
- a) in the case of the initial Contributor, the initial content
- Distributed under this Agreement, and
-
- b) in the case of each subsequent Contributor:
- i) changes to the Program, and
- ii) additions to the Program;
- where such changes and/or additions to the Program originate from
- and are Distributed by that particular Contributor. A Contribution
- "originates" from a Contributor if it was added to the Program by
- such Contributor itself or anyone acting on such Contributor's behalf.
- Contributions do not include changes or additions to the Program that
- are not Modified Works.
-
-"Contributor" means any person or entity that Distributes the Program.
-
-"Licensed Patents" mean patent claims licensable by a Contributor which
-are necessarily infringed by the use or sale of its Contribution alone
-or when combined with the Program.
-
-"Program" means the Contributions Distributed in accordance with this
-Agreement.
-
-"Recipient" means anyone who receives the Program under this Agreement
-or any Secondary License (as applicable), including Contributors.
-
-"Derivative Works" shall mean any work, whether in Source Code or other
-form, that is based on (or derived from) the Program and for which the
-editorial revisions, annotations, elaborations, or other modifications
-represent, as a whole, an original work of authorship.
-
-"Modified Works" shall mean any work in Source Code or other form that
-results from an addition to, deletion from, or modification of the
-contents of the Program, including, for purposes of clarity any new file
-in Source Code form that contains any contents of the Program. Modified
-Works shall not include works that contain only declarations,
-interfaces, types, classes, structures, or files of the Program solely
-in each case in order to link to, bind by name, or subclass the Program
-or Modified Works thereof.
-
-"Distribute" means the acts of a) distributing or b) making available
-in any manner that enables the transfer of a copy.
-
-"Source Code" means the form of a Program preferred for making
-modifications, including but not limited to software source code,
-documentation source, and configuration files.
-
-"Secondary License" means either the GNU General Public License,
-Version 2.0, or any later versions of that license, including any
-exceptions or additional permissions as identified by the initial
-Contributor.
-
-2. GRANT OF RIGHTS
-
- a) Subject to the terms of this Agreement, each Contributor hereby
- grants Recipient a non-exclusive, worldwide, royalty-free copyright
- license to reproduce, prepare Derivative Works of, publicly display,
- publicly perform, Distribute and sublicense the Contribution of such
- Contributor, if any, and such Derivative Works.
-
- b) Subject to the terms of this Agreement, each Contributor hereby
- grants Recipient a non-exclusive, worldwide, royalty-free patent
- license under Licensed Patents to make, use, sell, offer to sell,
- import and otherwise transfer the Contribution of such Contributor,
- if any, in Source Code or other form. This patent license shall
- apply to the combination of the Contribution and the Program if, at
- the time the Contribution is added by the Contributor, such addition
- of the Contribution causes such combination to be covered by the
- Licensed Patents. The patent license shall not apply to any other
- combinations which include the Contribution. No hardware per se is
- licensed hereunder.
-
- c) Recipient understands that although each Contributor grants the
- licenses to its Contributions set forth herein, no assurances are
- provided by any Contributor that the Program does not infringe the
- patent or other intellectual property rights of any other entity.
- Each Contributor disclaims any liability to Recipient for claims
- brought by any other entity based on infringement of intellectual
- property rights or otherwise. As a condition to exercising the
- rights and licenses granted hereunder, each Recipient hereby
- assumes sole responsibility to secure any other intellectual
- property rights needed, if any. For example, if a third party
- patent license is required to allow Recipient to Distribute the
- Program, it is Recipient's responsibility to acquire that license
- before distributing the Program.
-
- d) Each Contributor represents that to its knowledge it has
- sufficient copyright rights in its Contribution, if any, to grant
- the copyright license set forth in this Agreement.
-
- e) Notwithstanding the terms of any Secondary License, no
- Contributor makes additional grants to any Recipient (other than
- those set forth in this Agreement) as a result of such Recipient's
- receipt of the Program under the terms of a Secondary License
- (if permitted under the terms of Section 3).
-
-3. REQUIREMENTS
-
-3.1 If a Contributor Distributes the Program in any form, then:
-
- a) the Program must also be made available as Source Code, in
- accordance with section 3.2, and the Contributor must accompany
- the Program with a statement that the Source Code for the Program
- is available under this Agreement, and informs Recipients how to
- obtain it in a reasonable manner on or through a medium customarily
- used for software exchange; and
-
- b) the Contributor may Distribute the Program under a license
- different than this Agreement, provided that such license:
- i) effectively disclaims on behalf of all other Contributors all
- warranties and conditions, express and implied, including
- warranties or conditions of title and non-infringement, and
- implied warranties or conditions of merchantability and fitness
- for a particular purpose;
-
- ii) effectively excludes on behalf of all other Contributors all
- liability for damages, including direct, indirect, special,
- incidental and consequential damages, such as lost profits;
-
- iii) does not attempt to limit or alter the recipients' rights
- in the Source Code under section 3.2; and
-
- iv) requires any subsequent distribution of the Program by any
- party to be under a license that satisfies the requirements
- of this section 3.
-
-3.2 When the Program is Distributed as Source Code:
-
- a) it must be made available under this Agreement, or if the
- Program (i) is combined with other material in a separate file or
- files made available under a Secondary License, and (ii) the initial
- Contributor attached to the Source Code the notice described in
- Exhibit A of this Agreement, then the Program may be made available
- under the terms of such Secondary Licenses, and
-
- b) a copy of this Agreement must be included with each copy of
- the Program.
-
-3.3 Contributors may not remove or alter any copyright, patent,
-trademark, attribution notices, disclaimers of warranty, or limitations
-of liability ("notices") contained within the Program from any copy of
-the Program which they Distribute, provided that Contributors may add
-their own appropriate notices.
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain responsibilities
-with respect to end users, business partners and the like. While this
-license is intended to facilitate the commercial use of the Program,
-the Contributor who includes the Program in a commercial product
-offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes
-the Program in a commercial product offering, such Contributor
-("Commercial Contributor") hereby agrees to defend and indemnify every
-other Contributor ("Indemnified Contributor") against any losses,
-damages and costs (collectively "Losses") arising from claims, lawsuits
-and other legal actions brought by a third party against the Indemnified
-Contributor to the extent caused by the acts or omissions of such
-Commercial Contributor in connection with its distribution of the Program
-in a commercial product offering. The obligations in this section do not
-apply to any claims or Losses relating to any actual or alleged
-intellectual property infringement. In order to qualify, an Indemnified
-Contributor must: a) promptly notify the Commercial Contributor in
-writing of such claim, and b) allow the Commercial Contributor to control,
-and cooperate with the Commercial Contributor in, the defense and any
-related settlement negotiations. The Indemnified Contributor may
-participate in any such claim at its own expense.
-
-For example, a Contributor might include the Program in a commercial
-product offering, Product X. That Contributor is then a Commercial
-Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance
-claims and warranties are such Commercial Contributor's responsibility
-alone. Under this section, the Commercial Contributor would have to
-defend claims against the other Contributors related to those performance
-claims and warranties, and if a court requires any other Contributor to
-pay any damages as a result, the Commercial Contributor must pay
-those damages.
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
-PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
-BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
-IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
-TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
-PURPOSE. Each Recipient is solely responsible for determining the
-appropriateness of using and distributing the Program and assumes all
-risks associated with its exercise of rights under this Agreement,
-including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs
-or equipment, and unavailability or interruption of operations.
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
-PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
-SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
-PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
-EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-7. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of
-the remainder of the terms of this Agreement, and without further
-action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against any entity
-(including a cross-claim or counterclaim in a lawsuit) alleging that the
-Program itself (excluding combinations of the Program with other software
-or hardware) infringes such Recipient's patent(s), then such Recipient's
-rights granted under Section 2(b) shall terminate as of the date such
-litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it
-fails to comply with any of the material terms or conditions of this
-Agreement and does not cure such failure in a reasonable period of
-time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use
-and distribution of the Program as soon as reasonably practicable.
-However, Recipient's obligations under this Agreement and any licenses
-granted by Recipient relating to the Program shall continue and survive.
-
-Everyone is permitted to copy and distribute copies of this Agreement,
-but in order to avoid inconsistency the Agreement is copyrighted and
-may only be modified in the following manner. The Agreement Steward
-reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement
-Steward has the right to modify this Agreement. The Eclipse Foundation
-is the initial Agreement Steward. The Eclipse Foundation may assign the
-responsibility to serve as the Agreement Steward to a suitable separate
-entity. Each new version of the Agreement will be given a distinguishing
-version number. The Program (including Contributions) may always be
-Distributed subject to the version of the Agreement under which it was
-received. In addition, after a new version of the Agreement is published,
-Contributor may elect to Distribute the Program (including its
-Contributions) under the new version.
-
-Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
-receives no rights or licenses to the intellectual property of any
-Contributor under this Agreement, whether expressly, by implication,
-estoppel or otherwise. All rights in the Program not expressly granted
-under this Agreement are reserved. Nothing in this Agreement is intended
-to be enforceable by any entity that is not a Contributor or Recipient.
-No third-party beneficiary rights are created under this Agreement.
-
-Exhibit A - Form of Secondary Licenses Notice
-
-"This Source Code may also be made available under the following
-Secondary Licenses when the conditions for such availability set forth
-in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
-version(s), and exceptions or additional permissions here}."
-
- Simply including a copy of this Agreement, including this Exhibit A
- is not sufficient to license the Source Code under Secondary Licenses.
-
- If it is not possible or desirable to put the notice in a particular
- file, then You may include the notice in a location (such as a LICENSE
- file in a relevant directory) where a recipient would be likely to
- look for such a notice.
-
- You may add additional accurate notices of copyright ownership.
-
-With respect to cefSharp
-========================
-
-(https://raw.githubusercontent.com/cefsharp/CefSharp/master/LICENSE)
-
-// Copyright © The CefSharp Authors. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//
-// * Neither the name of Google Inc. nor the name Chromium Embedded
-// Framework nor the name CefSharp nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-With respect to Newtonsoft.Json
-===============================
-
-(https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md)
-
-The MIT License (MIT)
-
-Copyright (c) 2007 James Newton-King
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-With respect to QRcoder
-=======================
-
-(https://github.com/codebude/QRCoder/blob/master/LICENSE.txt)
-
-The MIT License (MIT)
-
-Copyright (c) 2013-2018 Raffael Herrmann
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-With respect to ZXing.Net
-=========================
-With respect to Grapevine
-=========================
-
-(http://www.apache.org/licenses/LICENSE-2.0)
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
-
-With respect to AutomationML.Engine
-===================================
-
-(https://raw.githubusercontent.com/AutomationML/AMLEngine2.1/master/license.txt)
-
-The MIT License (MIT)
-
-Copyright 2017 AutomationML e.V.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
-associated documentation files (the "Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
-following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-With respect to MQTTnet
-=======================
-
-(https://github.com/chkr1011/MQTTnet/blob/master/LICENSE)
-
-MIT License
-
-MQTTnet Copyright (c) 2016-2019 Christian Kratky
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-With respect to MSAGL (Microsoft Automatic Graph Layout)
-========================================================
-(see: https://github.com/microsoft/automatic-graph-layout/blob/master/LICENSE)
-
-Microsoft Automatic Graph Layout, MSAGL
-
-Copyright (c) Microsoft Corporation
-
-All rights reserved.
-
-MIT License
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-""Software""), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
diff --git a/src/AasxPluginMtpViewer/WpfMtpControlWrapper.xaml b/src/AasxPluginMtpViewer/WpfMtpControlWrapper.xaml
deleted file mode 100644
index 413575130..000000000
--- a/src/AasxPluginMtpViewer/WpfMtpControlWrapper.xaml
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- (c) 2019 by Michael Hoffmeister, Festo AG & Co. KG
-
-
-
diff --git a/src/AasxPluginMtpViewer/WpfMtpControlWrapper.xaml.cs b/src/AasxPluginMtpViewer/WpfMtpControlWrapper.xaml.cs
deleted file mode 100644
index 2e2d3592e..000000000
--- a/src/AasxPluginMtpViewer/WpfMtpControlWrapper.xaml.cs
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
-Copyright (c) 2018-2023 Festo SE & Co. KG
-Author: Michael Hoffmeister
-
-This source code is licensed under the Apache License 2.0 (see LICENSE.txt).
-
-This source code may use other Open Source software components (see LICENSE.txt).
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using AasxIntegrationBase;
-using AasxPredefinedConcepts;
-using Aas = AasCore.Aas3_0;
-using AdminShellNS;
-using Extensions;
-using Newtonsoft.Json;
-using WpfMtpControl;
-using WpfMtpControl.DataSources;
-
-namespace AasxPluginMtpViewer
-{
- public partial class WpfMtpControlWrapper : UserControl
- {
- // internal members
-
- private LogInstance theLog = null;
- private AdminShellPackageEnv thePackage = null;
- private Aas.Submodel theSubmodel = null;
- private AasxPluginMtpViewer.MtpViewerOptions theOptions = null;
- private PluginEventStack theEventStack = null;
-
- private AasxPredefinedConcepts.DefinitionsExperimental.InteropRelations defsInterop = null;
- private DefinitionsMTP.ModuleTypePackage defsMtp = null;
-
- public MtpDataSourceOpcUaPreLoadInfo thePreLoadInfo = new MtpDataSourceOpcUaPreLoadInfo();
-
- private WpfMtpControl.MtpSymbolLib theSymbolLib = null;
- private WpfMtpControl.MtpVisualObjectLib activeVisualObjectLib = null;
- private WpfMtpControl.MtpData activeMtpData = null;
-
- private Aas.File activeMtpFileElem = null;
- private string activeMtpFileFn = null;
-
- public WpfMtpControl.MtpVisuOpcUaClient client = new WpfMtpControl.MtpVisuOpcUaClient();
-
- private MtpDataSourceSubscriber activeSubscriber = null;
-
- private MtpSymbolMapRecordList hintsForConfigRecs = null;
-
- // window / plugin mechanics
-
- public WpfMtpControlWrapper()
- {
- InitializeComponent();
-
- // use pre-definitions
- this.defsInterop = new AasxPredefinedConcepts.DefinitionsExperimental.InteropRelations();
- this.defsMtp = new DefinitionsMTP.ModuleTypePackage();
- }
-
- public void Start(
- AdminShellPackageEnv thePackage,
- Aas.Submodel theSubmodel,
- AasxPluginMtpViewer.MtpViewerOptions theOptions,
- PluginEventStack eventStack,
- LogInstance log)
- {
- this.thePackage = thePackage;
- this.theSubmodel = theSubmodel;
- this.theOptions = theOptions;
- this.theEventStack = eventStack;
- this.theLog = log;
- }
-
- public static WpfMtpControlWrapper FillWithWpfControls(
- object opackage, object osm,
- AasxPluginMtpViewer.MtpViewerOptions options,
- PluginEventStack eventStack,
- LogInstance log,
- object masterDockPanel)
- {
- // access
- var package = opackage as AdminShellPackageEnv;
- var sm = osm as Aas.Submodel;
- var master = masterDockPanel as DockPanel;
- if (package == null || sm == null || master == null)
- return null;
-
- // the Submodel elements need to have parents
- sm.SetAllParents();
-
- // create TOP control
- var wrapperCntl = new WpfMtpControlWrapper();
- wrapperCntl.Start(package, sm, options, eventStack, log);
- master.Children.Add(wrapperCntl);
-
- // return shelf
- return wrapperCntl;
- }
-
- private void UserControl_Loaded(object sender, RoutedEventArgs e)
- {
- // initialize symbol library
- this.theSymbolLib = new MtpSymbolLib();
-
- var ISO10628 = new ResourceDictionary();
- ISO10628.Source = new Uri(
- "pack://application:,,,/WpfMtpControl;component/Resources/PNID_DIN_EN_ISO_10628.xaml");
- this.theSymbolLib.ImportResourceDicrectory("PNID_ISO10628", ISO10628);
-
- var FESTO = new ResourceDictionary();
- FESTO.Source = new Uri(
- "pack://application:,,,/WpfMtpControl;component/Resources/PNID_Festo.xaml");
- this.theSymbolLib.ImportResourceDicrectory("PNID_Festo", FESTO);
-
- // initialize visual object libraries
- activeVisualObjectLib = new WpfMtpControl.MtpVisualObjectLib();
- activeVisualObjectLib.LoadStatic(this.theSymbolLib);
-
- // gather infos
- var ok = GatherMtpInfos(this.thePreLoadInfo);
- if (ok && this.activeMtpFileFn != null)
- {
- // access file
- var inputFn = this.activeMtpFileFn;
- if (CheckIfPackageFile(inputFn))
- inputFn = thePackage.MakePackageFileAvailableAsTempFile(inputFn);
-
- // load file
- LoadFile(inputFn);
-
- // fit it
- this.mtpVisu.ZoomToFitCanvas();
-
- // double click handler
- this.mtpVisu.MtpObjectDoubleClick += MtpVisu_MtpObjectDoubleClick;
- }
-
- // Timer for status
- System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
- // ReSharper disable once RedundantDelegateCreation
- dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
- dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100);
- dispatcherTimer.Start();
- }
-
- private void dispatcherTimer_Tick(object sender, EventArgs e)
- {
- if (this.client == null)
- textBoxDataSourceStatus.Text = "(no OPC UA client enabled)";
- else
- {
- this.client.Tick(100);
- textBoxDataSourceStatus.Text = this.client.GetStatus();
- }
- }
-
- // handle Submodel data
-
- private bool GatherMtpInfos(MtpDataSourceOpcUaPreLoadInfo preLoadInfo)
- {
- // access
- var env = this.thePackage?.AasEnv;
- if (this.theSubmodel?.SemanticId == null || this.theSubmodel.SubmodelElements == null
- || this.defsMtp == null
- || env?.AssetAdministrationShells == null
- || this.thePackage.AasEnv.Submodels == null)
- return false;
-
- // need to find the type Submodel
- Aas.ISubmodel mtpTypeSm = null;
-
- // check, if the user pointed to the instance submodel
- if (this.theSubmodel.SemanticId.Matches(this.defsMtp.SEM_MtpInstanceSubmodel))
- {
- // Source list
- foreach (var srcLst in this.theSubmodel.SubmodelElements
- .FindAllSemanticIdAs(
- this.defsMtp.CD_SourceList?.GetReference(), MatchMode.Relaxed))
- {
- // found a source list, might contain sources
- if (srcLst?.Value == null)
- continue;
-
- // UA Server?
- foreach (var src in srcLst.Value.FindAllSemanticIdAs(
- this.defsMtp.CD_SourceOpcUaServer?.GetReference(), MatchMode.Relaxed))
- if (src?.Value != null)
- {
- // UA server
- var ep = src.Value.FindFirstSemanticIdAs(
- this.defsMtp.CD_Endpoint.GetReference(), MatchMode.Relaxed)?.Value;
-
- // add
- if (preLoadInfo?.EndpointMapping != null)
- preLoadInfo.EndpointMapping.Add(
- new MtpDataSourceOpcUaEndpointMapping(
- "" + ep, ForName: ("" + src.IdShort).Trim()));
- }
- }
-
- // Identifier renaming?
- foreach (var ren in theSubmodel.SubmodelElements
- .FindAllSemanticIdAs(
- this.defsMtp.CD_IdentifierRenaming?.GetReference(), MatchMode.Relaxed))
- if (ren?.Value != null)
- {
- var oldtxt = ren.Value.FindFirstSemanticIdAs(
- this.defsMtp.CD_RenamingOldText?.GetReference(), MatchMode.Relaxed)?.Value;
- var newtxt = ren.Value.FindFirstSemanticIdAs(
- this.defsMtp.CD_RenamingNewText?.GetReference(), MatchMode.Relaxed)?.Value;
- if (oldtxt.HasContent() && newtxt.HasContent() &&
- preLoadInfo?.IdentifierRenaming != null)
- preLoadInfo.IdentifierRenaming.Add(new MtpDataSourceStringReplacement(oldtxt, newtxt));
- }
-
- // Namespace renaming?
- foreach (var ren in theSubmodel.SubmodelElements
- .FindAllSemanticIdAs(
- this.defsMtp.CD_NamespaceRenaming?.GetReference(), MatchMode.Relaxed))
- if (ren?.Value != null)
- {
- var oldtxt = ren?.Value.FindFirstSemanticIdAs(
- this.defsMtp.CD_RenamingOldText?.GetReference(), MatchMode.Relaxed)?.Value;
- var newtxt = ren?.Value.FindFirstSemanticIdAs(
- this.defsMtp.CD_RenamingNewText?.GetReference(), MatchMode.Relaxed)?.Value;
- if (oldtxt.HasContent() && newtxt.HasContent() &&
- preLoadInfo?.NamespaceRenaming != null)
- preLoadInfo.NamespaceRenaming.Add(new MtpDataSourceStringReplacement(oldtxt, newtxt));
- }
-
- // according spec from Sten Gruener, the derivedFrom relationship shall be exploited.
- // How to get from subModel to AAS?
- var instanceAas = env.FindAasWithSubmodelId(this.theSubmodel.Id);
- var typeAas = env.FindReferableByReference(instanceAas?.DerivedFrom) as Aas.AssetAdministrationShell;
- if (instanceAas?.DerivedFrom != null && typeAas != null)
- foreach (var msm in env.FindAllSubmodelGroupedByAAS((aas, sm) =>
- {
- return aas == typeAas && true == sm?.SemanticId?.Matches(this.defsMtp.SEM_MtpSubmodel);
- }))
- {
- mtpTypeSm = msm;
- break;
- }
-
- // another possibility: direct reference
- var dirLink = this.theSubmodel.SubmodelElements
- .FindFirstSemanticIdAs(
- this.defsMtp.CD_MtpTypeSubmodel?.GetReference(), MatchMode.Relaxed);
- var dirLinkSm = env.FindReferableByReference(dirLink?.Value) as Aas.Submodel;
- if (mtpTypeSm == null)
- mtpTypeSm = dirLinkSm;
-
- }
-
- // other (not intended) case: user points to type submodel directly
- if (mtpTypeSm == null
- && this.theSubmodel.SemanticId.Matches(this.defsMtp.SEM_MtpSubmodel))
- mtpTypeSm = this.theSubmodel;
-
- // ok, is there a type submodel?
- if (mtpTypeSm == null)
- return false;
-
- // find file, remember Submodel element for it, find filename
- // (ConceptDescription)(no-local)[IRI]http://www.admin-shell.io/mtp/v1/MTPSUCLib/ModuleTypePackage
- this.activeMtpFileElem = mtpTypeSm.SubmodelElements?
- .FindFirstSemanticIdAs(this.defsMtp.CD_MtpFile.GetReference(),
- MatchMode.Relaxed);
- var inputFn = this.activeMtpFileElem?.Value;
- if (inputFn == null)
- return false;
- this.activeMtpFileFn = inputFn;
-
- return true;
- }
-
- // MTP handlings
-
- private bool CheckIfPackageFile(string fn)
- {
- return fn.StartsWith(@"/");
- }
-
- private void LoadFile(string fn)
- {
- if (!".aml .zip .mtp".Contains(System.IO.Path.GetExtension(fn.Trim().ToLower())))
- return;
-
- this.client = new WpfMtpControl.MtpVisuOpcUaClient();
- this.client.ItemChanged += Client_ItemChanged;
- this.activeSubscriber = new MtpDataSourceSubscriber();
- this.hintsForConfigRecs = new MtpSymbolMapRecordList();
-
- this.activeMtpData = new WpfMtpControl.MtpData();
- this.activeMtpData.LoadAmlOrMtp(activeVisualObjectLib,
- this.client, this.thePreLoadInfo, this.activeSubscriber, fn);
-
- if (this.activeMtpData.PictureCollection.Count > 0)
- mtpVisu.SetPicture(this.activeMtpData.PictureCollection.Values.ElementAt(0));
- mtpVisu.RedrawMtp();
- }
-
- private void Client_ItemChanged(WpfMtpControl.DataSources.IMtpDataSourceStatus dataSource,
- MtpVisuOpcUaClient.DetailItem itemRef, MtpVisuOpcUaClient.ItemChangeType changeType)
- {
- if (dataSource == null || itemRef == null || itemRef.MtpSourceItemId == null
- || this.activeSubscriber == null)
- return;
-
- if (changeType == MtpVisuOpcUaClient.ItemChangeType.Value)
- this.activeSubscriber.Invoke(itemRef.MtpSourceItemId, MtpDataSourceSubscriber.ChangeType.Value,
- itemRef.Value);
- }
-
- private void MtpVisu_MtpObjectDoubleClick(MtpData.MtpBaseObject source)
- {
- // access
- var sme = this.theSubmodel?.SubmodelElements;
- var first = this.activeMtpFileElem.GetReference();
- if (source == null || this.activeMtpFileElem == null || sme == null || first == null)
- return;
-
- // for the active file, find a Reference for it
-
- foreach (var searchId in new[] { source.Name, source.RefID })
- {
- // access
- if (searchId == null)
- continue;
- //
- // Search for FileToNavigateElement
- //
-
- var firstFtn = first.Add(new Aas.Key(Aas.KeyTypes.GlobalReference, searchId));
- this.theLog?.Info($"DblClick MTP .. search reference: {firstFtn.ToStringExtended(1)}");
-
- foreach (var fileToNav in sme.FindAllSemanticIdAs(
- this.defsInterop?.CD_FileToNavigateElement?.GetReference(), MatchMode.Relaxed))
- if (fileToNav.First?.Matches(firstFtn, MatchMode.Relaxed) == true)
- {
- // try activate
- var ev = new AasxIntegrationBase.AasxPluginResultEventNavigateToReference();
- ev.targetReference = fileToNav.Second.Copy();
- this.theEventStack?.PushEvent(ev);
- return;
- }
-
- //
- // Search for FileToEntity
- //
-
- var firstFte = first.Add(new Aas.Key(Aas.KeyTypes.GlobalReference, searchId));
- this.theLog?.Info($"DblClick MTP .. search reference: {firstFte.ToStringExtended(1)}");
-
- foreach (var fileToEnt in sme.FindAllSemanticIdAs(
- this.defsInterop?.CD_FileToEntity?.GetReference(), MatchMode.Relaxed))
- if (fileToEnt.First?.Matches(firstFte, MatchMode.Relaxed) == true)
- {
- // debug
- this.theLog?.Info($"try find Entity {"" + fileToEnt.Second} ..");
-
- // find Entity, check if self-contained
- var foundRef = this.thePackage?.AasEnv?.FindReferableByReference(fileToEnt.Second);
- if (foundRef is Aas.Entity foundEnt
- && foundEnt.EntityType == Aas.EntityType.SelfManagedEntity
- && foundEnt.GlobalAssetId != null)
- {
- // try activate
- var ev = new AasxIntegrationBase.AasxPluginResultEventNavigateToReference();
- ev.targetReference = new Aas.Reference(Aas.ReferenceTypes.ExternalReference,
- new Aas.IKey[] { new Aas.Key(Aas.KeyTypes.GlobalReference, foundEnt.GlobalAssetId) }
- .ToList());
- this.theEventStack?.PushEvent(ev);
- return;
- }
- }
- }
- }
-
- // visual window handling
-
- private int overlayPanelMode = 0;
-
- private void SetOverlayPanelMode(int newMode)
- {
- this.overlayPanelMode = newMode;
-
- switch (this.overlayPanelMode)
- {
- case 2:
- this.ScrollViewerDataSources.Visibility = Visibility.Visible;
- DataGridDataSources.ItemsSource = this.client.Items;
- this.RichTextReport.Visibility = Visibility.Collapsed;
- break;
-
- case 1:
- this.ScrollViewerDataSources.Visibility = Visibility.Collapsed;
- DataGridDataSources.ItemsSource = null;
- this.RichTextReport.Visibility = Visibility.Visible;
- ReportOnConfiguration(this.RichTextReport);
- break;
-
- default:
- this.ScrollViewerDataSources.Visibility = Visibility.Collapsed;
- DataGridDataSources.ItemsSource = null;
- this.RichTextReport.Visibility = Visibility.Collapsed;
- break;
- }
- }
-
- private void Button_Click(object sender, RoutedEventArgs e)
- {
- if (sender == buttonDataSourceDetails)
- {
- if (this.overlayPanelMode != 2)
- SetOverlayPanelMode(2);
- else
- SetOverlayPanelMode(0);
- }
-
- if (sender == buttonConfig)
- {
- if (this.overlayPanelMode != 1)
- SetOverlayPanelMode(1);
- else
- SetOverlayPanelMode(0);
- }
- }
-
- private void AddToRichTextBox(RichTextBox rtb, string text, bool bold = false, double? fontSize = null,
- bool monoSpaced = false)
- {
- var p = new Paragraph();
- if (bold)
- p.FontWeight = FontWeights.Bold;
- if (fontSize.HasValue)
- p.FontSize = fontSize.Value;
- if (monoSpaced)
- p.FontFamily = new System.Windows.Media.FontFamily("Courier New");
- p.Inlines.Add(new Run(text));
- rtb.Document.Blocks.Add(p);
- }
-
- private void ReportOnConfiguration(RichTextBox rtb)
- {
- // access
- if (rtb == null)
- return;
-
- rtb.Document.Blocks.Clear();
-
- //
- // Report on available library symbols
- //
-
- if (this.theSymbolLib != null)
- {
-
- AddToRichTextBox(rtb, "Library symbols", bold: true, fontSize: 18);
-
- AddToRichTextBox(rtb, "The following lists shows available symbol full names.");
-
- foreach (var x in this.theSymbolLib.Values)
- {
- AddToRichTextBox(rtb, "" + x.FullName, monoSpaced: true);
- }
-
- AddToRichTextBox(rtb, "");
- }
-
- //
- // Hints for configurations
- //
-
- if (this.hintsForConfigRecs != null)
- {
- AddToRichTextBox(rtb, "Preformatted configuration records", bold: true, fontSize: 18);
- AddToRichTextBox(rtb,
- "The following JSON elements could be pasted into the options file named " + "" +
- "'AasxPluginMtpViewer.options.json'. " +
- "Prior to pasting, an appropriate symbol full name needs to be chosen from above list. " +
- "For the eClass strings, multiples choices can be delimited by ';'. " +
- "For EClassVersions, 'null' disables version checking. " +
- "Either EClassClasses or EClassIRDIs shall be different to 'null'.");
-
- foreach (var x in this.hintsForConfigRecs)
- {
- var txt = JsonConvert.SerializeObject(x, Formatting.None);
- AddToRichTextBox(rtb, "" + txt, monoSpaced: true);
- }
-
- AddToRichTextBox(rtb, "");
- }
- }
- }
-}
diff --git a/src/AasxPluginUaNetClient/AasxPluginUaNetClient.csproj b/src/AasxPluginUaNetClient/AasxPluginUaNetClient.csproj
deleted file mode 100644
index 2b60de449..000000000
--- a/src/AasxPluginUaNetClient/AasxPluginUaNetClient.csproj
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
- net6.0-windows
- Library
- AasxIntegrationBase
- false
- true
- false
-
-
-
- PreserveNewest
-
-
-
-
-
-
-
- PreserveNewest
-
-
-
-
-
-
-
-
diff --git a/src/AasxPluginUaNetClient/AasxPluginUaNetClient.plugin b/src/AasxPluginUaNetClient/AasxPluginUaNetClient.plugin
deleted file mode 100644
index 3beebdf2d..000000000
--- a/src/AasxPluginUaNetClient/AasxPluginUaNetClient.plugin
+++ /dev/null
@@ -1 +0,0 @@
-This file tags the according .ddl to be a plug-in for AasxPackageExplorer.
\ No newline at end of file
diff --git a/src/AasxPluginUaNetClient/ExitCode.cs b/src/AasxPluginUaNetClient/ExitCode.cs
deleted file mode 100644
index 539d7b9db..000000000
--- a/src/AasxPluginUaNetClient/ExitCode.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-Copyright (c) 2018-2023 Festo SE & Co. KG
-Author: Michael Hoffmeister
-
-This source code is licensed under the Apache License 2.0 (see LICENSE.txt).
-
-This source code may use other Open Source software components (see LICENSE.txt).
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace SampleClient
-{
-
- public enum ExitCode
- {
- Ok = 0,
- ErrorCreateApplication = 0x11,
- ErrorDiscoverEndpoints = 0x12,
- ErrorCreateSession = 0x13,
- ErrorBrowseNamespace = 0x14,
- ErrorCreateSubscription = 0x15,
- ErrorMonitoredItem = 0x16,
- ErrorAddSubscription = 0x17,
- ErrorRunning = 0x18,
- ErrorNoKeepAlive = 0x30,
- ErrorInvalidCommandLine = 0x100
- };
-}
diff --git a/src/AasxPluginUaNetClient/LICENSE.txt b/src/AasxPluginUaNetClient/LICENSE.txt
deleted file mode 100644
index e41b57159..000000000
--- a/src/AasxPluginUaNetClient/LICENSE.txt
+++ /dev/null
@@ -1 +0,0 @@
-Please see LICENSE.txt of the AASX Package Explorer main application.
\ No newline at end of file
diff --git a/src/AasxPluginUaNetClient/Plugin.cs b/src/AasxPluginUaNetClient/Plugin.cs
deleted file mode 100644
index 0334c6902..000000000
--- a/src/AasxPluginUaNetClient/Plugin.cs
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
-Copyright (c) 2018-2023 Festo SE & Co. KG ,
-Author: Michael Hoffmeister.
-
-Copyright (c) 2019 Phoenix Contact GmbH & Co. KG <>
-Author: Andreas Orzelski
-
-For OPC Content:
-
-Copyright (c) 1996-2016, OPC Foundation. All rights reserved.
-The source code in this file is covered under a dual-license scenario:
- - RCL: for OPC Foundation members in good-standing
- - GPL V2: everybody else
-RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/
-GNU General Public License as published by the Free Software Foundation
-version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2
-This source code is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace AasxIntegrationBase // the namespace has to be: AasxIntegrationBase
-{
- // the class names has to be: AasxPlugin and subclassing IAasxPluginInterface
- // ReSharper disable once UnusedType.Global
- public class AasxPlugin : AasxPluginBase
- {
- public new void InitPlugin(string[] args)
- {
- PluginName = "AasxPluginOpcUaClient";
- _log.Info("InitPlugin() called with args = {0}", (args == null) ? "" : string.Join(", ", args));
- }
-
- public AasxPluginActionDescriptionBase[] ListActions()
- {
- var res = ListActionsBasicHelper(
- enableCheckVisualExt: false,
- enableLicenses: true);
- res.Add(new AasxPluginActionDescriptionBase("create-client",
- "Creates a OPC UA client and returns as plain object. Arguments: (string _endpointURL, "
- + "bool _autoAccept, int _stopTimeout, string _userName, string _password)."));
- res.Add(new AasxPluginActionDescriptionBase("read-sme-value",
- "Reads a value and returns as plain object. Arguments: (UASampleClient client, string nodeName, "
- + "int index)."));
- return res.ToArray();
- }
-
- public new AasxPluginResultBase ActivateAction(string action, params object[] args)
- {
- if (action == "get-licenses")
- {
- var lic = new AasxPluginResultLicense();
- lic.shortLicense =
- "This application uses the OPC Foundation .NET Standard stack. See: OPC REDISTRIBUTABLES "
- + "Agreement of Use." + Environment.NewLine +
- "The OPC UA Example Code of OPC UA Standard is licensed under the MIT license (MIT).";
-
- lic.isStandardLicense = true;
- lic.longLicense = AasxPluginHelper.LoadLicenseTxtFromAssemblyDir(
- "LICENSE.txt", Assembly.GetExecutingAssembly());
-
- return lic;
- }
-
- if (action == "create-client")
- {
- // OPC Copyright
- MessageBox.Show(
- "Copyright (c) 2018-2023 PHOENIX CONTACT GmbH & Co. KG , " +
- "author: Andreas Orzelski\n\n" +
- "Portions copyright (c) by OPC Foundation, Inc. and licensed under the Reciprocal Community " +
- "License (RCL)\n" + "see https://opcfoundation.org/license/rcl.html",
- "Plugin Notice"
- );
-
- // check for arguments
- if (args == null || args.Length != 5 || !(args[0] is string && args[1] is bool && args[2] is int
- && args[3] is string && args[4] is string))
- {
- _log.Info("create-client() call with wrong arguments. Expected: (string _endpointURL, "
- + "bool _autoAccept, int _stopTimeout, string _userName, string _password)");
- return null;
- }
-
- // re-establish arguments
- var _endpointURL = args[0] as string;
- var _autoAccept = (bool)args[1];
- var _stopTimeout = (int)args[2];
- var _userName = args[3] as string;
- var _password = args[4] as string;
-
- // make client
- var client = new SampleClient.UASampleClient(_endpointURL, _autoAccept, _stopTimeout,
- _userName, _password);
- client.ConsoleSampleClient().Wait();
-
- // return as plain object
- var res = new AasxPluginResultBaseObject();
- res.strType = "UASampleClient";
- res.obj = client;
- return res;
- }
-
- if (action == "read-sme-value")
- {
- // check for arguments
- if (args == null || args.Length != 3 || !(args[0] is SampleClient.UASampleClient
- && args[1] is string && args[2] is int))
- {
- _log.Info("read-sme-value() call with wrong arguments. Expected: (UASampleClient client, "
- + "string nodeName, int index)");
- return null;
- }
-
- // re-establish arguments
- var client = args[0] as SampleClient.UASampleClient;
- var nodeName = args[1] as string;
- var Namespace = (int)args[2];
-
- // make the call
- var value = client?.ReadSubmodelElementValue(nodeName, Namespace);
-
- // return as plain object
- var res = new AasxPluginResultBaseObject();
- res.strType = "value object";
- res.obj = value;
- return res;
- }
-
- return null;
- }
- }
-}
diff --git a/src/AasxPluginUaNetClient/Properties/AssemblyInfo.cs b/src/AasxPluginUaNetClient/Properties/AssemblyInfo.cs
deleted file mode 100644
index 08be6b047..000000000
--- a/src/AasxPluginUaNetClient/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// Allgemeine Informationen über eine Assembly werden über die folgenden
-// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
-// die einer Assembly zugeordnet sind.
-[assembly: AssemblyTitle("AasxPluginOpcUaClient")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("AasxPluginOpcUaClient")]
-[assembly: AssemblyCopyright("Copyright © 2019")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
-// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
-// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
-[assembly: ComVisible(false)]
-
-// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
-[assembly: Guid("9eb71e8b-ec41-4054-bab4-f419b4d13a36")]
-
-// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
-//
-// Hauptversion
-// Nebenversion
-// Buildnummer
-// Revision
-//
-// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
-// indem Sie "*" wie unten gezeigt eingeben:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/AasxPluginUaNetClient/Properties/Settings.Designer.cs b/src/AasxPluginUaNetClient/Properties/Settings.Designer.cs
deleted file mode 100644
index f16feb8a0..000000000
--- a/src/AasxPluginUaNetClient/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// Dieser Code wurde von einem Tool generiert.
-// Laufzeitversion:4.0.30319.42000
-//
-// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
-// der Code erneut generiert wird.
-//
-//------------------------------------------------------------------------------
-
-namespace AasxIntegrationBase.Properties {
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.3.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default {
- get {
- return defaultInstance;
- }
- }
- }
-}
diff --git a/src/AasxPluginUaNetClient/Properties/Settings.settings b/src/AasxPluginUaNetClient/Properties/Settings.settings
deleted file mode 100644
index 049245f40..000000000
--- a/src/AasxPluginUaNetClient/Properties/Settings.settings
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/src/AasxPluginUaNetClient/UASampleClient.cs b/src/AasxPluginUaNetClient/UASampleClient.cs
deleted file mode 100644
index 0fe1261bd..000000000
--- a/src/AasxPluginUaNetClient/UASampleClient.cs
+++ /dev/null
@@ -1,206 +0,0 @@
-// TODO (MIHO, 2020-08-06): lookup SOURCE!
-
-/* Copyright (c) 1996-2016, OPC Foundation. All rights reserved
- The source code in this file is covered under a dual-license scenario
- - RCL: for OPC Foundation members in good-standing
- - GPL V2: everybody else
- RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/
- GNU General Public License as published by the Free Software Foundation
- version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2
- This source code is distributed in the hope that it will be useful
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
-*/
-
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-using AdminShellNS;
-using Opc.Ua;
-using Opc.Ua.Client;
-using Opc.Ua.Configuration;
-
-namespace SampleClient
-{
- public class UASampleClient
- {
- const int ReconnectPeriod = 10;
- ISession session;
- SessionReconnectHandler reconnectHandler;
- string endpointURL;
- int clientRunTime = Timeout.Infinite;
- static bool autoAccept = true;
- static ExitCode exitCode;
- string userName;
- string password;
-
- public UASampleClient(string _endpointURL, bool _autoAccept, int _stopTimeout,
- string _userName, string _password)
- {
- endpointURL = _endpointURL;
- autoAccept = _autoAccept;
- clientRunTime = _stopTimeout <= 0 ? Timeout.Infinite : _stopTimeout * 1000;
- userName = _userName;
- password = _password;
- }
-
- public void Run()
- {
- try
- {
- ConsoleSampleClient().Wait();
- }
- catch (Exception ex)
- {
- AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex);
- return;
- }
-
- ManualResetEvent quitEvent = new ManualResetEvent(false);
- try
- {
- Console.CancelKeyPress += (sender, eArgs) =>
- {
- quitEvent.Set();
- eArgs.Cancel = true;
- };
- }
- catch (Exception ex)
- {
- AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex);
- }
-
- // wait for timeout or Ctrl-C
- quitEvent.WaitOne(clientRunTime);
-
- // return error conditions
- if (session.KeepAliveStopped)
- {
- exitCode = ExitCode.ErrorNoKeepAlive;
- return;
- }
-
- exitCode = ExitCode.Ok;
- }
-
- public static ExitCode ExitCode { get => exitCode; }
-
- public async Task ConsoleSampleClient()
- {
- Console.WriteLine("1 - Create an Application Configuration.");
- exitCode = ExitCode.ErrorCreateApplication;
-
- ApplicationInstance application = new ApplicationInstance
- {
- ApplicationName = "UA Core Sample Client",
- ApplicationType = ApplicationType.Client,
- ConfigSectionName = Utils.IsRunningOnMono() ? "Opc.Ua.MonoSampleClient" : "Opc.Ua.SampleClient"
- };
-
- // load the application configuration.
- ApplicationConfiguration config = await application.LoadApplicationConfiguration(false);
-
- // check the application certificate.
- bool haveAppCertificate = await application.CheckApplicationInstanceCertificate(false, 0);
- if (!haveAppCertificate)
- {
- throw new Exception("Application instance certificate invalid!");
- }
-
- config.ApplicationUri = X509Utils.GetApplicationUriFromCertificate(
- config.SecurityConfiguration.ApplicationCertificate.Certificate);
- if (config.SecurityConfiguration.AutoAcceptUntrustedCertificates)
- {
- autoAccept = true;
- }
- config.CertificateValidator.CertificateValidation +=
- // ReSharper disable once RedundantDelegateCreation
- new CertificateValidationEventHandler(CertificateValidator_CertificateValidation);
-
- Console.WriteLine("2 - Discover endpoints of {0}.", endpointURL);
- exitCode = ExitCode.ErrorDiscoverEndpoints;
- var selectedEndpoint = CoreClientUtils.SelectEndpoint(endpointURL, true, 15000);
- Console.WriteLine(" Selected endpoint uses: {0}",
- selectedEndpoint.SecurityPolicyUri.Substring(selectedEndpoint.SecurityPolicyUri.LastIndexOf('#') + 1));
-
- Console.WriteLine("3 - Create a session with OPC UA server.");
- exitCode = ExitCode.ErrorCreateSession;
- var endpointConfiguration = EndpointConfiguration.Create(config);
- var endpoint = new ConfiguredEndpoint(null, selectedEndpoint, endpointConfiguration);
-
- session = await Session.Create(config, endpoint, false, "OPC UA Console Client", 60000,
- new UserIdentity(userName, password), null);
-
- // register keep alive handler
- session.KeepAlive += Client_KeepAlive;
- }
-
- private void Client_KeepAlive(ISession sender, KeepAliveEventArgs e)
- {
- if (e.Status != null && ServiceResult.IsNotGood(e.Status))
- {
- Console.WriteLine("{0} {1}/{2}", e.Status, sender.OutstandingRequestCount, sender.DefunctRequestCount);
-
- if (reconnectHandler == null)
- {
- Console.WriteLine("--- RECONNECTING ---");
- reconnectHandler = new SessionReconnectHandler();
- reconnectHandler.BeginReconnect(sender, ReconnectPeriod * 1000, Client_ReconnectComplete);
- }
- }
- }
-
- private void Client_ReconnectComplete(object sender, EventArgs e)
- {
- // ignore callbacks from discarded objects.
- if (!Object.ReferenceEquals(sender, reconnectHandler))
- {
- return;
- }
-
- if (reconnectHandler != null)
- {
- session = reconnectHandler.Session;
- reconnectHandler.Dispose();
- }
-
- reconnectHandler = null;
-
- Console.WriteLine("--- RECONNECTED ---");
- }
-
- private static void OnNotification(MonitoredItem item, MonitoredItemNotificationEventArgs e)
- {
- foreach (var value in item.DequeueValues())
- {
- Console.WriteLine("{0}: {1}, {2}, {3}", item.DisplayName, value.Value, value.SourceTimestamp,
- value.StatusCode);
- }
- }
-
- private static void CertificateValidator_CertificateValidation(CertificateValidator validator,
- CertificateValidationEventArgs e)
- {
- if (e.Error.StatusCode == StatusCodes.BadCertificateUntrusted)
- {
- e.Accept = autoAccept;
- if (autoAccept)
- {
- Console.WriteLine("Accepted Certificate: {0}", e.Certificate.Subject);
- }
- else
- {
- Console.WriteLine("Rejected Certificate: {0}", e.Certificate.Subject);
- }
- }
- }
-
- public string ReadSubmodelElementValue(string nodeName, int index)
-
- {
- NodeId node = new NodeId(nodeName, (ushort)index);
- return (session.ReadValue(node).ToString());
- }
-
- }
-}
diff --git a/src/AasxPluginUaNetServer/AasxPluginUaNetServer.Config.xml b/src/AasxPluginUaNetServer/AasxPluginUaNetServer.Config.xml
deleted file mode 100644
index bd5e13525..000000000
--- a/src/AasxPluginUaNetServer/AasxPluginUaNetServer.Config.xml
+++ /dev/null
@@ -1,224 +0,0 @@
-
-
-
- UA Core Sample Server
- urn:localhost:OPCFoundation:CoreSampleServer
- http://opcfoundation.org/UA/CoreSampleServer
- Server_0
-
-
-
-
-
- X509Store
- CurrentUser\My
- CN=UA Core Sample Server, C=US, S=Arizona, O=IDTA, DC=localhost
-
-
-
-
- Directory
- %LocalApplicationData%/OPC Foundation/pki/issuer
-
-
-
-
- Directory
- %LocalApplicationData%/OPC Foundation/pki/trusted
-
-
-
-
- Directory
- %LocalApplicationData%/OPC Foundation/pki/rejected
-
-
-
- true
-
-
-
-
-
-
- 600000
- 1048576
- 4194304
- 65535
- 4194304
- 65535
- 300000
- 3600000
-
-
-
-
- opc.tcp://localhost:51210/UA/SampleServer
-
-
-
-
-
-
-
-
- SignAndEncrypt_3
- http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256
-
-
-
- None_1
- http://opcfoundation.org/UA/SecurityPolicy#None
-
-
- Sign_2
-
-
-
- SignAndEncrypt_3
-
-
-
-
- 5
- 100
- 2000
-
-
-
- Anonymous_0
- http://opcfoundation.org/UA/SecurityPolicy#None
-
-
- UserName_1
-
-
- Certificate_2
-
-
-
- false
- 100
- 10000
- 3600000
- 10
- 10
- 100
- 600000
- 100
- 3600000
- 50
- 3600000
- 100
- 100
- 1000
- 1000
-
-
-
- opc.tcp://localhost:4840
-
- opc.tcp://localhost:4840
- DiscoveryServer_3
-
- opc.tcp://localhost:48400
-
-
- SignAndEncrypt_3
-
-
-
-
- 30000
- Opc.Ua.Server.nodes.xml
-
- 20
- 100
- 10000
- 10000
-
-
-
- Standard UA Server Profile
- Data Access Server Facet
- Method Server Facet
-
- 2
-
- DA
-
-
- PFX
- PEM
-
- 0
- false
-
-
-
-
-
-
-
-
- UInt32
- 100
- UInt32
-
-
- Double
- 100
- Double
-
-
-
-
-
-
-
- %LocalApplicationData%/Logs/Opc.Ua.CoreSampleServer.log.txt
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
\ No newline at end of file
diff --git a/src/AasxPluginUaNetServer/AasxPluginUaNetServer.csproj b/src/AasxPluginUaNetServer/AasxPluginUaNetServer.csproj
deleted file mode 100644
index baad25d03..000000000
--- a/src/AasxPluginUaNetServer/AasxPluginUaNetServer.csproj
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
- net6.0-windows
- Library
- false
-
- true
- false
-
-
-
-
- true
-
-
-
-
-
-
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
-
-
-
-
-
diff --git a/src/AasxPluginUaNetServer/AasxPluginUaNetServer.options.json b/src/AasxPluginUaNetServer/AasxPluginUaNetServer.options.json
deleted file mode 100644
index e54e27db3..000000000
--- a/src/AasxPluginUaNetServer/AasxPluginUaNetServer.options.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- /* This plug-ins comes with this sample options to show, how multiple Submodel semantic ids can
- be matched. This could be used, e.g., to enable a general "operational data" with this feature. */
- "Args": [
- "-single-nodeids", // recommended for SiOME & Open62541
- "-single-keys", // recommended for SiOME & Open62541
- // "-add-root-item", // do not use!
- "-link-root-as-component", // recommended for SiOME & Open62541
- "-simple-data-types",
- "-ns",
- "2",
- "-ns",
- "3"
- ]
-}
\ No newline at end of file
diff --git a/src/AasxPluginUaNetServer/AasxPluginUaNetServer.plugin b/src/AasxPluginUaNetServer/AasxPluginUaNetServer.plugin
deleted file mode 100644
index 3beebdf2d..000000000
--- a/src/AasxPluginUaNetServer/AasxPluginUaNetServer.plugin
+++ /dev/null
@@ -1 +0,0 @@
-This file tags the according .ddl to be a plug-in for AasxPackageExplorer.
\ No newline at end of file
diff --git a/src/AasxPluginUaNetServer/LICENSE.txt b/src/AasxPluginUaNetServer/LICENSE.txt
deleted file mode 100644
index e41b57159..000000000
--- a/src/AasxPluginUaNetServer/LICENSE.txt
+++ /dev/null
@@ -1 +0,0 @@
-Please see LICENSE.txt of the AASX Package Explorer main application.
\ No newline at end of file
diff --git a/src/AasxPluginUaNetServer/Plugin.cs b/src/AasxPluginUaNetServer/Plugin.cs
deleted file mode 100644
index 4ae0164a4..000000000
--- a/src/AasxPluginUaNetServer/Plugin.cs
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
-Copyright (c) 2018-2023 Festo SE & Co. KG
-Author: Michael Hoffmeister
-
-This source code is licensed under the Apache License 2.0 (see LICENSE.txt).
-
-This source code may use other Open Source software components (see LICENSE.txt).
-*/
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using AasOpcUaServer;
-using AasxUaNetServer;
-using AdminShellNS;
-using Newtonsoft.Json;
-using Opc.Ua;
-using Opc.Ua.Configuration;
-using Opc.Ua.Server;
-
-namespace AasxIntegrationBase // the namespace has to be: AasxIntegrationBase
-{
- // the class names has to be: AasxPlugin and subclassing IAasxPluginInterface
- // ReSharper disable once UnusedType.Global
- public class AasxPlugin : AasxPluginBase
- {
- #region // Plug In
- private AasxUaNetServer.UaNetServerOptions _options = new AasxUaNetServer.UaNetServerOptions();
- private bool _stop = false;
- private UaServerWrapper _server = null;
- // dead-csharp off
- /* TODO (MIHO, 2021-11-17): damned, weird dependency reasons between
- *
- * .net6.0 and .net472 seem NOT TO ALLOW referring to AasxIntegrationBase.
- * Fix */
- //private static T LoadDefaultOptionsFromAssemblyDirXXXX(
- // string pluginName, Assembly assy = null,
- // JsonSerializerSettings settings = null) where T : AasxPluginOptionsBase
- //{
- // // expand assy?
- // if (assy == null)
- // assy = Assembly.GetExecutingAssembly();
- // if (pluginName == null || pluginName == "")
- // return null;
-
- // // build fn
- // var optfn = System.IO.Path.Combine(
- // System.IO.Path.GetDirectoryName(assy.Location),
- // pluginName + ".options.json");
-
- // if (File.Exists(optfn))
- // {
- // var optText = File.ReadAllText(optfn);
-
- // return Newtonsoft.Json.JsonConvert.DeserializeObject(optText, settings);
- // }
-
- // // no
- // return null;
- //}
- // dead-csharp on
-
- public new void InitPlugin(string[] args)
- {
- PluginName = "AasxPluginUaNetServer";
- _log.Info("InitPlugin() called with args = {0}", (args == null) ? "" : string.Join(", ", args));
-
- // .. with built-in options
- _options = AasxUaNetServer.UaNetServerOptions.CreateDefault();
-
- // try load defaults options from assy directory
- try
- {
- var newOpt =
- AasxPluginOptionsBase
- .LoadDefaultOptionsFromAssemblyDir(
- this.GetPluginName(), Assembly.GetExecutingAssembly());
- if (newOpt != null)
- this._options = newOpt;
- }
- catch (Exception ex)
- {
- _log?.Error(ex, "Exception when reading default options {1}");
- }
-
- // index them!
- _options.IndexListOfRecords(_options.Records);
- }
-
- public new AasxPluginActionDescriptionBase[] ListActions()
- {
- var res = ListActionsBasicHelper(
- enableCheckVisualExt: false,
- enableLicenses: true);
- res.Add(new AasxPluginActionDescriptionBase("server-start", "Start OPC UA Server for AASX."));
- res.Add(new AasxPluginActionDescriptionBase("server-stop", "Stops server function."));
- return res.ToArray();
- }
-
- public new AasxPluginResultBase ActivateAction(string action, params object[] args)
- {
- if (action == "get-licenses")
- {
- var lic = new AasxPluginResultLicense();
- lic.shortLicense =
- "This application uses the OPC Foundation .NET Standard stack. See: OPC REDISTRIBUTABLES "
- + "Agreement of Use." + Environment.NewLine +
- "The OPC UA Example Code of OPC UA Standard is licensed under the MIT license (MIT).";
-
- lic.isStandardLicense = true;
- lic.longLicense = AasxPluginHelper.LoadLicenseTxtFromAssemblyDir(
- "LICENSE.txt", Assembly.GetExecutingAssembly());
-
- return lic;
- }
-
- if (action == "server-stop")
- this._stop = true;
-
- if (action == "server-start")
- {
- // init
- this._stop = false;
- _log.Info("Starting OPC UA AASX Server. Based on the OPC Foundation UA Net Standard stack.");
- _log.Info("Copyright (c) 2018-2023 Festo SE & Co. KG " +
- ", author: Michael Hoffmeister.");
- _log.Info("Portions copyright (c) by OPC Foundation, Inc. and licensed under the Reciprocal "
- + "Community License (RCL).");
- _log.Info("See https://opcfoundation.org/license/rcl.html.");
-
- // access AASX
- if (args == null || args.Length < 1)
- {
- _log.Info("No AASX package environment passed to plug-in. Stopping...");
- System.Threading.Thread.Sleep(5000);
- return null;
- }
-
- var package = args[0] as AdminShellPackageEnv;
- if (package == null)
- {
- _log.Info("No AASX package environment passed to plug-in. Stopping...");
- System.Threading.Thread.Sleep(5000);
- return null;
- }
- _log.Info("AASX package env has filename {0}", package.Filename);
-
- // configure UA here a little bit
- ApplicationInstance.MessageDlg = new ApplicationMessageDlg(_log);
-
- // arguments
- var externalOptions = new List();
- if (_options?.Args != null)
- foreach (var o1 in _options.Args)
- externalOptions.Add(o1);
-
- if (args.Length >= 2 && args[1] is string[])
- {
- var pluginArgs = args[1] as string[];
- if (pluginArgs != null && pluginArgs.Length > 0)
- {
- foreach (var o2 in pluginArgs)
- externalOptions.Add(o2);
- }
- }
-
- // debug
- var lstr = $"Taking over {externalOptions.Count} arguments: ";
- foreach (var ls in externalOptions)
- lstr += ls + " ";
- _log.Info("{0}", lstr);
-
- // parse
- var internalOptions = new AasOpcUaServer.AasxUaServerOptions();
- internalOptions.ParseArgs(externalOptions.ToArray());
-
- // run the server
- try
- {
- this._server = new UaServerWrapper(_stopTimeout: 0, _aasxEnv: package, logger: _log, _serverOptions: internalOptions);
- this._server.Run();
- }
- catch (Exception ex)
- {
- _log.Info("Exception whenn running server: {0}", ex.Message);
- }
-
- // do as long as user wants
- int i = 0;
- while (true)
- {
- if (this._stop)
- {
- _log.Info("Stopping ...");
- if (this._server != null)
- this._server.Stop();
- break;
- }
-
- //TODO (MIHO, 0000-00-00): Temporary disabled
- // seems not to work anymore
- ////if (this.server != null && this.server.IsNotRunningAnymore())
- //// break;
-
- // new option
- if (true == this._server?.FinallyStopped)
- break;
-
- System.Threading.Thread.Sleep(50);
- if (i % 200 == 0)
- _log.Info("Heartbeat {0} x 50ms ..", i);
- i++;
- }
- _log.Info("Stopped.");
- }
-
- var res = new AasxPluginResultBase();
- return res;
- }
-
- }
-
- #endregion
-
- #region // taken form Net46 Console Server
- //
- //
- //
-
- public class ApplicationMessageDlg : IApplicationMessageDlg
- {
- private LogInstance logger = null;
- private string message = string.Empty;
- private bool ask = false;
-
- public ApplicationMessageDlg(LogInstance logger)
- {
- this.logger = logger;
- }
-
- public override void Message(string text, bool ask = false)
- {
- this.message = text;
- this.ask = ask;
- }
-
- public override async Task ShowAsync()
- {
- if (ask)
- {
- message += " (y/n, default y): ";
- logger.Info("{0}", message);
- Console.Write(message);
- }
- else
- {
- logger.Info("{0}", message);
- Console.WriteLine(message);
- }
- if (ask)
- {
- // always say yes!
- return await Task.FromResult(true);
- }
- return await Task.FromResult(true);
- }
- }
-
-
-
- #endregion
-}
diff --git a/src/AasxPluginUaNetServer/Properties/AssemblyInfo.cs b/src/AasxPluginUaNetServer/Properties/AssemblyInfo.cs
deleted file mode 100644
index 754b62d7b..000000000
--- a/src/AasxPluginUaNetServer/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// Allgemeine Informationen über eine Assembly werden über die folgenden
-// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
-// die einer Assembly zugeordnet sind.
-[assembly: AssemblyTitle("AasxPluginUaNetServer")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("AasxPluginUaNetServer")]
-[assembly: AssemblyCopyright("Copyright © 2020")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
-// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
-// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
-[assembly: ComVisible(false)]
-
-// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
-[assembly: Guid("32eede14-8622-42e6-81ae-33941b7a6efc")]
-
-// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
-//
-// Hauptversion
-// Nebenversion
-// Buildnummer
-// Revision
-//
-// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
-// indem Sie "*" wie unten gezeigt eingeben:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/AasxPluginUaNetServer/UaNetServerOptions.cs b/src/AasxPluginUaNetServer/UaNetServerOptions.cs
deleted file mode 100644
index f3f9ac144..000000000
--- a/src/AasxPluginUaNetServer/UaNetServerOptions.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-Copyright (c) 2018-2023 Festo SE & Co. KG
-Author: Michael Hoffmeister
-
-This source code is licensed under the Apache License 2.0 (see LICENSE.txt).
-
-This source code may use other Open Source software components (see LICENSE.txt).
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Aas = AasCore.Aas3_0;
-using AdminShellNS;
-using AasxIntegrationBase;
-
-// ReSharper disable ClassNeverInstantiated.Global
-// ReSharper disable UnassignedField.Global
-
-namespace AasxUaNetServer
-{
- public class UaNetServerOptionsRecord : AasxPluginOptionsLookupRecordBase
- {
- }
-
- public class UaNetServerOptions : AasxPluginLookupOptionsBase
- {
- public string[] Args;
-
- public List Records = new List();
-
- ///
- /// Create a set of minimal options
- ///
- public static UaNetServerOptions CreateDefault()
- {
- var opt = new UaNetServerOptions();
- return opt;
- }
- }
-}
diff --git a/src/AasxRestConsoleServer/AasxRestConsoleServer.csproj b/src/AasxRestConsoleServer/AasxRestConsoleServer.csproj
deleted file mode 100644
index 436479c9b..000000000
--- a/src/AasxRestConsoleServer/AasxRestConsoleServer.csproj
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
- net6.0
- Exe
- false
- false
-
-
-
-
-
-
- PreserveNewest
-
-
-
diff --git a/src/AasxRestConsoleServer/LICENSE.txt b/src/AasxRestConsoleServer/LICENSE.txt
deleted file mode 100644
index 75f36a4ff..000000000
--- a/src/AasxRestConsoleServer/LICENSE.txt
+++ /dev/null
@@ -1,1475 +0,0 @@
-Copyright (c) 2018-2023 Festo AG & Co. KG
-,
-author: Michael Hoffmeister
-
-Copyright (c) 2019-2021 PHOENIX CONTACT GmbH & Co. KG
-,
-author: Andreas Orzelski
-
-Copyright (c) 2019-2020 Fraunhofer IOSB-INA Lemgo,
- eine rechtlich nicht selbstaendige Einrichtung der Fraunhofer-Gesellschaft
- zur Foerderung der angewandten Forschung e.V.
-
-Copyright (c) 2020 Schneider Electric Automation GmbH
-,
-author: Marco Mendes
-
-Copyright (c) 2020 SICK AG
-
-Copyright (c) 2021 KEB Automation KG
-
-Copyright (c) 2021 Lenze SE
-author: Jonas Grote, Denis Göllner, Sebastian Bischof
-
-The AASX Package Explorer is licensed under the Apache License 2.0
-(Apache-2.0, see below).
-
-The AASX Package Explorer is a sample application for demonstration of the
-features of the Asset Administration Shell.
-The implementation uses the concepts of the document "Details of the Asset
-Administration Shell" published on www.plattform-i40.de which is licensed
-under Creative Commons CC BY-ND 3.0 DE.
-
-When using eCl@ss or IEC CDD data, please check the corresponding license
-conditions.
-
--------------------------------------------------------------------------------
-
-The components below are used in AASX Package Explorer.
-The related licenses are listed for information purposes only.
-Some licenses may only apply to their related plugins.
-
-The browser functionality is licensed under the cefSharp license (see below).
-
-The Newtonsoft.JSON serialization is licensed under the MIT License
-(MIT, see below).
-
-The QR code generation is licensed under the MIT license (MIT, see below).
-
-The Zxing.Net Dot Matrix Code (DMC) generation is licensed under
-the Apache License 2.0 (Apache-2.0, see below).
-
-The Grapevine REST server framework is licensed under Apache License 2.0
-(Apache-2.0, see below).
-
-The AutomationML.Engine is licensed under the MIT license (MIT, see below).
-
-The MQTT server and client is licensed under the MIT license (MIT, see below).
-
-The ClosedXML Excel reader/writer is licensed under the MIT license (MIT,
-see below).
-
-The CountryFlag WPF control is licensed under the Code Project Open License
-(CPOL, see below).
-
-The DocumentFormat.OpenXml SDK is licensed under the MIT license (MIT,
-see below).
-
-The ExcelNumberFormat number parser is licensed under the MIT license (MIT,
-see below).
-
-The FastMember reflection access is licensed under Apache License 2.0
-(Apache-2.0, see below).
-
-The IdentityModel OpenID client is licensed under Apache License 2.0
-(Apache-2.0, see below).
-
-The jose-jwt object signing and encryption is licensed under the
-MIT license (MIT, see below).
-
-The ExcelDataReader is licensed under the MIT license (MIT, see below).
-
-Portions copyright (c) by OPC Foundation, Inc. and licensed under the
-Reciprocal Community License (RCL, see below)
-
-The OPC UA Example Code of OPC UA Standard is licensed under the MIT license
-(MIT, see below).
-
-The MSAGL (Microsoft Automatic Graph Layout) is licensed under the MIT license
-(MIT, see below)
-
-Glob (https://www.nuget.org/packages/Glob/) is licensed under the MIT license
-(MIT, see below).
-
-The Magick.NET library is licensed under Apache License 2.0
-(Apache-2.0, see below).
-
-The SSharp.NET library (https://github.com/PetroProtsyk/SSharp) is licensed
-under Apache License 2.0 (Apache-2.0, see below).
-
--------------------------------------------------------------------------------
-
-
-With respect to AASX Package Explorer
-=====================================
-
-(http://www.apache.org/licenses/LICENSE-2.0)
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
-
-With respect to cefSharp
-========================
-
-(https://raw.githubusercontent.com/cefsharp/CefSharp/master/LICENSE)
-
-Copyright © The CefSharp Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following disclaimer
- in the documentation and/or other materials provided with the
- distribution.
-
- * Neither the name of Google Inc. nor the name Chromium Embedded
- Framework nor the name CefSharp nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-With respect to Newtonsoft.Json
-===============================
-
-(https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md)
-
-The MIT License (MIT)
-
-Copyright (c) 2007 James Newton-King
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-With respect to QRcoder
-=======================
-
-(https://github.com/codebude/QRCoder/blob/master/LICENSE.txt)
-
-The MIT License (MIT)
-
-Copyright (c) 2013-2018 Raffael Herrmann
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-With respect to ZXing.Net
-=========================
-With respect to Grapevine
-=========================
-With respect to FastMember
-==========================
-With respect to IdentityModel
-=============================
-
-(http://www.apache.org/licenses/LICENSE-2.0)
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
-
-With respect to AutomationML.Engine
-===================================
-
-(https://raw.githubusercontent.com/AutomationML/AMLEngine2.1/master/license.txt)
-
-The MIT License (MIT)
-
-Copyright 2017 AutomationML e.V.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-
-With respect to MQTTnet
-=======================
-
-(https://github.com/chkr1011/MQTTnet/blob/master/LICENSE)
-
-MIT License
-
-MQTTnet Copyright (c) 2016-2019 Christian Kratky
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-With resepct to ClosedXML
-=========================
-
-(https://github.com/ClosedXML/ClosedXML/blob/develop/LICENSE)
-
-MIT License
-
-Copyright (c) 2016 ClosedXML
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-With resepct to CountryFlag
-===========================
-
-(https://www.codeproject.com/Articles/190722/WPF-CountryFlag-Control)
-
-The Code Project Open License (CPOL) 1.02
-
-Copyright © 2017 Meshack Musundi
-
-Preamble
-
-This License governs Your use of the Work. This License is intended to allow
-developers to use the Source Code and Executable Files provided as part of
-the Work in any application in any form.
-
-The main points subject to the terms of the License are:
-
- Source Code and Executable Files can be used in commercial applications;
- Source Code and Executable Files can be redistributed; and
- Source Code can be modified to create derivative works.
- No claim of suitability, guarantee, or any warranty whatsoever is provided.
- The software is provided "as-is".
- The Article(s) accompanying the Work may not be distributed or republished
- without the Author's consent
-
-This License is entered between You, the individual or other entity reading or
-otherwise making use of the Work licensed pursuant to this License and the
-individual or other entity which offers the Work under the terms of this
-License ("Author").
-
-License
-
-THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS
-CODE PROJECT OPEN LICENSE ("LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT
-AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED
-UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
-
-BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HEREIN, YOU ACCEPT AND AGREE
-TO BE BOUND BY THE TERMS OF THIS LICENSE. THE AUTHOR GRANTS YOU THE RIGHTS
-CONTAINED HEREIN IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
-CONDITIONS. IF YOU DO NOT AGREE TO ACCEPT AND BE BOUND BY THE TERMS OF THIS
-LICENSE, YOU CANNOT MAKE ANY USE OF THE WORK.
-
-Definitions.
- "Articles" means, collectively, all articles written by Author which
-describes how the Source Code and Executable Files for the Work may
-be used by a user.
- "Author" means the individual or entity that offers the Work under
-the terms of this License.
- "Derivative Work" means a work based upon the Work or upon the Work
-and other pre-existing works.
- "Executable Files" refer to the executables, binary files,
-configuration and any required data files included in the Work.
- "Publisher" means the provider of the website, magazine, CD-ROM,
-DVD or other medium from or by which the Work is obtained by You.
- "Source Code" refers to the collection of source code and
-configuration files used to create the Executable Files.
- "Standard Version" refers to such a Work if it has not been modified,
-or has been modified in accordance with the consent of the Author,
-such consent being in the full discretion of the Author.
- "Work" refers to the collection of files distributed by the Publisher,
-including the Source Code, Executable Files, binaries, data files,
-documentation, whitepapers and the Articles.
- "You" is you, an individual or entity wishing to use the Work and
-exercise your rights under this License.
-
-Fair Use/Fair Use Rights. Nothing in this License is intended to reduce,
-limit, or restrict any rights arising from fair use, fair dealing,
-first sale or other limitations on the exclusive rights of the
-copyright owner under copyright law or other applicable laws.
-
-License Grant. Subject to the terms and conditions of this License, the
-Author hereby grants You a worldwide, royalty-free, non-exclusive,
-perpetual (for the duration of the applicable copyright) license
-to exercise the rights in the Work as stated below:
- You may use the standard version of the Source Code or Executable
-Files in Your own applications.
- You may apply bug fixes, portability fixes and other modifications
-obtained from the Public Domain or from the Author. A Work modified
-in such a way shall still be considered the standard version and will
-be subject to this License.
- You may otherwise modify Your copy of this Work (excluding the Articles)
-in any way to create a Derivative Work, provided that You insert a prominent
-notice in each changed file stating how, when and where You changed that file.
- You may distribute the standard version of the Executable Files and Source
-Code or Derivative Work in aggregate with other (possibly commercial)
-programs as part of a larger (possibly commercial) software distribution.
- The Articles discussing the Work published in any form by the author may
-not be distributed or republished without the Author's consent. The author
-retains copyright to any such Articles. You may use the Executable Files and
-Source Code pursuant to this License but you may not repost or republish or
-otherwise distribute or make available the Articles, without the prior written
-consent of the Author.
-
-Any subroutines or modules supplied by You and linked into the Source Code
-or Executable Files of this Work shall not be considered part of this Work
-and will not be subject to the terms of this License.
-
-Patent License. Subject to the terms and conditions of this License, each
-Author hereby grants to You a perpetual, worldwide, non-exclusive, no-charge,
-royalty-free, irrevocable (except as stated in this section) patent license
-to make, have made, use, import, and otherwise transfer the Work.
-
-Restrictions. The license granted in Section 3 above is expressly made subject
-to and limited by the following restrictions:
- You agree not to remove any of the original copyright, patent, trademark,
-and attribution notices and associated disclaimers that may appear in the
-Source Code or Executable Files.
- You agree not to advertise or in any way imply that this Work is a product
-of Your own.
- The name of the Author may not be used to endorse or promote products
-derived from the Work without the prior written consent of the Author.
- You agree not to sell, lease, or rent any part of the Work. This does
-not restrict you from including the Work or any part of the Work inside
-a larger software distribution that itself is being sold. The Work by itself,
-though, cannot be sold, leased or rented.
- You may distribute the Executable Files and Source Code only under the terms
-of this License, and You must include a copy of, or the Uniform Resource
-Identifier for, this License with every copy of the Executable Files or
-Source Code You distribute and ensure that anyone receiving such Executable
-Files and Source Code agrees that the terms of this License apply to such
-Executable Files and/or Source Code. You may not offer or impose any terms
-on the Work that alter or restrict the terms of this License or the
-recipients' exercise of the rights granted hereunder. You may not sublicense
-the Work. You must keep intact all notices that refer to this License and to
-the disclaimer of warranties. You may not distribute the Executable Files or
-Source Code with any technological measures that control access or use of the
-Work in a manner inconsistent with the terms of this License.
- You agree not to use the Work for illegal, immoral or improper
-purposes, or on pages containing illegal, immoral or improper material.
-The Work is subject to applicable export laws. You agree to comply with all
-such laws and regulations that may apply to the Work after Your receipt of
-the Work.
-
-Representations, Warranties and Disclaimer. THIS WORK IS PROVIDED "AS IS",
-"WHERE IS" AND "AS AVAILABLE", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR
-CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE,
-INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC.
-AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES
-OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS
-OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR
-PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK
-(OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES.
-YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE
-WORKS.
-
-Indemnity. You agree to defend, indemnify and hold harmless the Author and the
-Publisher from and against any claims, suits, losses, damages, liabilities,
-costs, and expenses (including reasonable legal or attorneys’ fees)
-resulting from or relating to any use of the Work by You.
-
-Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW,
-IN NO EVENT WILL THE AUTHOR OR THE PUBLISHER BE LIABLE TO YOU ON ANY LEGAL
-THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY
-DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK OR OTHERWISE,
-EVEN IF THE AUTHOR OR THE PUBLISHER HAS BEEN ADVISED OF THE POSSIBILITY
-OF SUCH DAMAGES.
-
-Termination.
- This License and the rights granted hereunder will terminate
-automatically upon any breach by You of any term of this License.
-Individuals or entities who have received Derivative Works from You under
-this License, however, will not have their licenses terminated provided such
-individuals or entities remain in full compliance with those licenses.
-Sections 1, 2, 6, 7, 8, 9, 10 and 11 will survive any termination of
-this License.
- If You bring a copyright, trademark, patent or any other infringement
-claim against any contributor over infringements You claim are made by the
-Work, your License from such contributor to the Work ends automatically.
- Subject to the above terms and conditions, this License is perpetual
-(for the duration of the applicable copyright in the Work).
-Notwithstanding the above, the Author reserves the right to release the Work
-under different license terms or to stop distributing the Work at any time;
-provided, however that any such election will not serve to withdraw this
-License (or any other license that has been, or is required to be,
-granted under the terms of this License), and this License will continue
-in full force and effect unless terminated as stated above.
-
-Publisher. The parties hereby confirm that the Publisher shall not, under
-any circumstances, be responsible for and shall not have any liability
-in respect of the subject matter of this License. The Publisher makes no
-warranty whatsoever in connection with the Work and shall not be liable
-to You or any party on any legal theory for any damages whatsoever, including
-without limitation any general, special, incidental or consequential damages
-arising in connection to this license. The Publisher reserves the right to
-cease making the Work available to You at any time without notice
-
-Miscellaneous
- This License shall be governed by the laws of the location of the head
-office of the Author or if the Author is an individual, the laws of
-location of the principal place of residence of the Author.
- If any provision of this License is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of the
-remainder of the terms of this License, and without further action by the
-parties to this License, such provision shall be reformed to the minimum
-extent necessary to make such provision valid and enforceable.
- No term or provision of this License shall be deemed waived and no
-breach consented to unless such waiver or consent shall be in writing
-and signed by the party to be charged with such waiver or consent.
- This License constitutes the entire agreement between the parties
-with respect to the Work licensed herein. There are no understandings,
-agreements or representations with respect to the Work not specified herein.
-The Author shall not be bound by any additional provisions that may appear
-in any communication from You. This License may not be modified without
-the mutual written agreement of the Author and You.
-
-
-With respect to DocumentFormat.OpenXml
-======================================
-
-(https://github.com/OfficeDev/Open-XML-SDK/blob/master/LICENSE)
-
-The MIT License (MIT)
-
-Copyright (c) Microsoft Corporation
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-With respect to ExcelNumberFormat
-=================================
-
-(https://github.com/andersnm/ExcelNumberFormat/blob/master/LICENSE)
-
-The MIT License (MIT)
-
-Copyright (c) 2017 andersnm
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-With respect to jose-jwt
-========================
-
-(https://github.com/dvsekhvalnov/jose-jwt/blob/master/LICENSE)
-
-The MIT License (MIT)
-
-Copyright (c) 2014-2019 dvsekhvalnov
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
-With resepect to ExcelDataReader
-================================
-
-(https://github.com/ExcelDataReader/ExcelDataReader/blob/develop/LICENSE)
-
-The MIT License (MIT)
-
-Copyright (c) 2014 ExcelDataReader
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-With resepect to OPC UA Example Code
-====================================
-
- * Copyright (c) 2005-2019 The OPC Foundation, Inc. All rights reserved.
- *
- * OPC Foundation MIT License 1.00
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * The complete license agreement can be found here:
- * http://opcfoundation.org/License/MIT/1.00/
-
-
-With respect to OPC Foundation
-==============================
-
-RCL License
-Reciprocal Community License 1.00 (RCL1.00)
-Version 1.00, June 24, 2009
-Copyright (C) 2008,2009 OPC Foundation, Inc., All Rights Reserved.
-
-https://opcfoundation.org/license/rcl.html
-
-Remark: PHOENIX CONTACT GmbH & Co. KG and Festo SE & Co. KG are members
-of OPC foundation.
-
-With respect to MSAGL (Microsoft Automatic Graph Layout)
-========================================================
-(see: https://github.com/microsoft/automatic-graph-layout/blob/master/LICENSE)
-
-Microsoft Automatic Graph Layout, MSAGL
-
-Copyright (c) Microsoft Corporation
-
-All rights reserved.
-
-MIT License
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-""Software""), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
-With respect to Glob (https://www.nuget.org/packages/Glob/)
-===========================================================
-(see: https://raw.githubusercontent.com/kthompson/glob/master/LICENSE)
-
-The MIT License (MIT)
-
-Copyright (c) 2013-2019 Kevin Thompson
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-With respect to Magick.NET
-==========================
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-With respect to SSharp.NET library
-==================================
-
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/src/AasxRestConsoleServer/Program.cs b/src/AasxRestConsoleServer/Program.cs
deleted file mode 100644
index 56e5cadf0..000000000
--- a/src/AasxRestConsoleServer/Program.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-Copyright (c) 2018-2023 Festo AG & Co. KG
-Author: Michael Hoffmeister
-
-This source code is licensed under the Apache License 2.0 (see LICENSE.txt).
-
-This source code may use other Open Source software components (see LICENSE.txt).
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using AasxRestServerLibrary;
-using AdminShellNS;
-
-namespace AasxRestConsoleServer
-{
- public static class Program
- {
- static void Main(string[] args)
- {
- Console.Error.WriteLine(
- "AAS Console Server. (c) 2019 Michael Hoffmeister, Festo AG & Co. KG. See LICENSE.TXT.");
-
- // default command line options
- var fn = "usb-stick-REST-demo.aasx";
- var host = "localhost";
- var port = "1111";
-
- // parse
- int i = 0;
- while (i < args.Length)
- {
- var x = args[i].Trim().ToLower();
-
- // real option?
- if (i < args.Length - 1)
- {
- if (x == "-host")
- {
- host = args[i + 1];
- i += 2;
- continue;
- }
-
- if (x == "-port")
- {
- port = args[i + 1];
- i += 2;
- continue;
- }
- }
-
- // last??
- fn = args[i];
- i += 1;
- }
-
- // load?
- var package = new AdminShellPackageEnv(fn);
- AasxRestServer.Start(package, host, port, new GrapevineLoggerToConsole());
-
- // wait for RETURN
- Console.ReadLine();
- AasxRestServer.Stop();
- }
- }
-}
diff --git a/src/AasxRestConsoleServer/Properties/AssemblyInfo.cs b/src/AasxRestConsoleServer/Properties/AssemblyInfo.cs
deleted file mode 100644
index d3b5e5d78..000000000
--- a/src/AasxRestConsoleServer/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// Allgemeine Informationen über eine Assembly werden über die folgenden
-// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
-// die einer Assembly zugeordnet sind.
-[assembly: AssemblyTitle("AasxRestConsoleServer")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("AasxRestConsoleServer")]
-[assembly: AssemblyCopyright("Copyright © 2019")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
-// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
-// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
-[assembly: ComVisible(false)]
-
-// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
-[assembly: Guid("6c45112d-b7f0-4463-be6d-a8a2b5a547bf")]
-
-// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
-//
-// Hauptversion
-// Nebenversion
-// Buildnummer
-// Revision
-//
-// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
-// übernehmen, indem Sie "*" eingeben:
-//// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/AasxRestServerLibrary/AasxHttpContextHelper.cs b/src/AasxRestServerLibrary/AasxHttpContextHelper.cs
deleted file mode 100644
index 4f229061a..000000000
--- a/src/AasxRestServerLibrary/AasxHttpContextHelper.cs
+++ /dev/null
@@ -1,1611 +0,0 @@
-/*
-Copyright (c) 2018-2023 Festo AG & Co. KG
-Author: Michael Hoffmeister
-
-This source code is licensed under the Apache License 2.0 (see LICENSE.txt).
-
-This source code may use other Open Source software components (see LICENSE.txt).
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Dynamic;
-using System.Globalization;
-using System.IO;
-using System.Linq;
-using System.Net;
-using System.Reflection;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
-using AasxCompatibilityModels;
-using AdminShellNS;
-using Grapevine.Interfaces.Server;
-using Grapevine.Server;
-using Grapevine.Server.Attributes;
-using Grapevine.Shared;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Serialization;
-
-/*
-Please notice:
-The API and REST routes implemented in this version of the source code are not specified and standardised by the
-specification Details of the Administration Shell. The hereby stated approach is solely the opinion of its author(s).
-*/
-
-namespace AasxRestServerLibrary
-{
- public class AasxHttpContextHelper
- {
-
- public AdminShellPackageEnv Package = null;
-
- public AasxHttpHandleStore IdRefHandleStore = new AasxHttpHandleStore();
-
- #region // Path helpers
-
- public bool PathEndsWith(string path, string tag)
- {
- return path.Trim().ToLower().TrimEnd('/').EndsWith(tag);
- }
-
- public bool PathEndsWith(IHttpContext context, string tag)
- {
- return PathEndsWith(context.Request.PathInfo, tag);
- }
-
- // see also: https://stackoverflow.com/questions/33619469/
- // how-do-i-write-a-regular-expression-to-route-traffic-with-grapevine-when-my-requ
-
- public Match PathInfoRegexMatch(MethodBase methodWithRestRoute, string input)
- {
- if (methodWithRestRoute == null)
- return null;
- string piRegex = null;
- foreach (var attr in methodWithRestRoute.GetCustomAttributes())
- if (attr.PathInfo != null)
- piRegex = attr.PathInfo;
- if (piRegex == null)
- return null;
- var m = Regex.Match(input, piRegex);
- return m;
- }
-
- public List CreateHandlesFromQueryString(
- System.Collections.Specialized.NameValueCollection queryStrings)
- {
- // start
- var res = new List();
- if (queryStrings == null)
- return res;
-
- // over all query strings
- foreach (var kr in queryStrings.AllKeys)
- {
- try
- {
- var k = kr.Trim().ToLower();
- var v = queryStrings[k];
- if (k.StartsWith("q") && k.Length > 1 && v.Contains(','))
- {
- var vl = v.Split(',');
- if (vl.Length == 2)
- {
- var id = new AdminShell.Identification(vl[0], vl[1]);
- var h = new AasxHttpHandleIdentification(id, "@" + k);
- res.Add(h);
- }
- }
- }
- catch (Exception ex)
- {
- AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex);
- }
- }
-
- // done
- return res;
- }
-
- public List CreateHandlesFromRawUrl(string rawUrl)
- {
- // start
- var res = new List();
- if (rawUrl == null)
- return res;
-
- // un-escape
- var url = System.Uri.UnescapeDataString(rawUrl);
-
- // split for query string traditional
- var i = url.IndexOf('?');
- if (i < 0 || i == url.Length - 1)
- return res;
- var query = url.Substring(i + 1);
-
- // try make a Regex wonder, again
- var m = Regex.Match(query, @"(\s*([^&]+)(&|))+");
- if (m.Success && m.Groups.Count >= 3)
- foreach (var cp in m.Groups[2].Captures)
- {
- var m2 = Regex.Match(cp.ToString(), @"\s*(\w+)\s*=\s*([^,]+),(.+)$");
- if (m2.Success && m2.Groups.Count >= 4)
- {
- var k = m2.Groups[1].ToString();
- var idt = m2.Groups[2].ToString();
- var ids = m2.Groups[3].ToString();
-
- var id = new AdminShell.Identification(idt, ids);
- var h = new AasxHttpHandleIdentification(id, "@" + k);
- res.Add(h);
- }
- }
-
- // done
- return res;
- }
-
- #endregion
-
- #region // Access package structures
-
- public AdminShell.AdministrationShell FindAAS(
- string aasid, System.Collections.Specialized.NameValueCollection queryStrings = null, string rawUrl = null)
- {
- // trivial
- if (Package == null || Package.AasEnv == null || Package.AasEnv.AdministrationShells == null ||
- Package.AasEnv.AdministrationShells.Count < 1)
- return null;
-
- // default aas?
- if (aasid == null || aasid.Trim() == "" || aasid.Trim().ToLower() == "id")
- return Package.AasEnv.AdministrationShells[0];
-
- // resolve an ID?
- var specialHandles = this.CreateHandlesFromRawUrl(rawUrl);
- var handleId = IdRefHandleStore.ResolveSpecific(aasid, specialHandles);
- if (handleId != null && handleId.identification != null)
- return Package.AasEnv.FindAAS(handleId.identification);
-
- // no, iterate over idShort
- return Package.AasEnv.FindAAS(aasid);
- }
-
- public AdminShell.SubmodelRef FindSubmodelRefWithinAas(
- AdminShell.AdministrationShell aas, string smid,
- System.Collections.Specialized.NameValueCollection queryStrings = null, string rawUrl = null)
- {
- // trivial
- if (Package == null || Package.AasEnv == null || aas == null || smid == null || smid.Trim() == "")
- return null;
-
- // via handle
- var specialHandles = this.CreateHandlesFromRawUrl(rawUrl);
- var handleId = IdRefHandleStore.ResolveSpecific(smid, specialHandles);
-
- // no, iterate & find
- foreach (var smref in aas.submodelRefs)
- {
- if (handleId != null && handleId.identification != null)
- {
- if (smref.Matches(handleId.identification))
- return smref;
- }
- else
- {
- var sm = this.Package.AasEnv.FindSubmodel(smref);
- if (sm != null && sm.idShort != null && sm.idShort.Trim().ToLower() == smid.Trim().ToLower())
- return smref;
- }
- }
-
- // no
- return null;
- }
-
- public AdminShell.Submodel FindSubmodelWithinAas(
- AdminShell.AdministrationShell aas, string smid,
- System.Collections.Specialized.NameValueCollection queryStrings = null, string rawUrl = null)
- {
- // trivial
- if (Package == null || Package.AasEnv == null || aas == null || smid == null || smid.Trim() == "")
- return null;
-
- // via handle
- var specialHandles = this.CreateHandlesFromRawUrl(rawUrl);
- var handleId = IdRefHandleStore.ResolveSpecific(smid, specialHandles);
- if (handleId != null && handleId.identification != null)
- return Package.AasEnv.FindSubmodel(handleId.identification);
-
- // no, iterate & find
- foreach (var smref in aas.submodelRefs)
- {
- var sm = this.Package.AasEnv.FindSubmodel(smref);
- if (sm != null && sm.idShort != null && sm.idShort.Trim().ToLower() == smid.Trim().ToLower())
- return sm;
- }
-
- // no
- return null;
- }
-
- public AdminShell.Submodel FindSubmodelWithoutAas(
- string smid, System.Collections.Specialized.NameValueCollection queryStrings = null,
- string rawUrl = null)
- {
- // trivial
- if (Package == null || Package.AasEnv == null || smid == null || smid.Trim() == "")
- return null;
-
- // via handle
- var specialHandles = this.CreateHandlesFromRawUrl(rawUrl);
- var handleId = IdRefHandleStore.ResolveSpecific(smid, specialHandles);
- if (handleId != null && handleId.identification != null)
- return Package.AasEnv.FindSubmodel(handleId.identification);
-
- // no, iterate & find
- foreach (var sm in this.Package.AasEnv.Submodels)
- {
- if (sm != null && sm.idShort != null && sm.idShort.Trim().ToLower() == smid.Trim().ToLower())
- return sm;
- }
-
- // no
- return null;
- }
-
- public AdminShell.ConceptDescription FindCdWithoutAas(
- AdminShell.AdministrationShell aas, string cdid,
- System.Collections.Specialized.NameValueCollection queryStrings = null, string rawUrl = null)
- {
- // trivial
- if (Package == null || Package.AasEnv == null || aas == null || cdid == null || cdid.Trim() == "")
- return null;
-
- // via handle
- var specialHandles = this.CreateHandlesFromRawUrl(rawUrl);
- var handleId = IdRefHandleStore.ResolveSpecific(cdid, specialHandles);
- if (handleId != null && handleId.identification != null)
- return Package.AasEnv.FindConceptDescription(handleId.identification);
-
- // no, iterate & find
- foreach (var cd in Package.AasEnv.ConceptDescriptions)
- {
- if (cd.idShort != null && cd.idShort.Trim().ToLower() == cdid.Trim().ToLower())
- return cd;
- }
-
- // no
- return null;
- }
-
-
- public class FindSubmodelElementResult
- {
- public AdminShell.Referable elem = null;
- public AdminShell.SubmodelElementWrapper wrapper = null;
- public AdminShell.Referable parent = null;
-
- public FindSubmodelElementResult(
- AdminShell.Referable elem = null, AdminShell.SubmodelElementWrapper wrapper = null,
- AdminShell.Referable parent = null)
- {
- this.elem = elem;
- this.wrapper = wrapper;
- this.parent = parent;
- }
- }
-
- public FindSubmodelElementResult FindSubmodelElement(
- AdminShell.Referable parent, List wrappers,
- string[] elemids, int elemNdx = 0)
- {
- // trivial
- if (wrappers == null || elemids == null || elemNdx >= elemids.Length)
- return null;
-
- // dive into each
- foreach (var smw in wrappers)
- if (smw.submodelElement != null)
- {
- // idShort need to match
- if (smw.submodelElement.idShort.Trim().ToLower() != elemids[elemNdx].Trim().ToLower())
- continue;
-
- // leaf
- if (elemNdx == elemids.Length - 1)
- {
- return new FindSubmodelElementResult(elem: smw.submodelElement, wrapper: smw, parent: parent);
- }
- else
- {
- // recurse into?
- var xsmc = smw.submodelElement as AdminShell.SubmodelElementCollection;
- if (xsmc != null)
- {
- var r = FindSubmodelElement(xsmc, xsmc.value, elemids, elemNdx + 1);
- if (r != null)
- return r;
- }
-
- var xop = smw.submodelElement as AdminShell.Operation;
- if (xop != null)
- {
- var w2 = new List();
- for (int i = 0; i < 2; i++)
- foreach (var opv in xop[i])
- if (opv.value != null)
- w2.Add(opv.value);
-
- var r = FindSubmodelElement(xop, w2, elemids, elemNdx + 1);
- if (r != null)
- return r;
- }
- }
- }
-
- // nothing
- return null;
- }
-
- #endregion
-
- #region // Generate responses
-
-
- protected static void SendJsonResponse(
- IHttpContext context, object obj, IContractResolver contractResolver = null)
- {
- var settings = new JsonSerializerSettings();
- if (contractResolver != null)
- settings.ContractResolver = contractResolver;
- var json = JsonConvert.SerializeObject(obj, Formatting.Indented, settings);
- var buffer = context.Request.ContentEncoding.GetBytes(json);
- var length = buffer.Length;
-
- context.Response.ContentType = ContentType.JSON;
- context.Response.ContentEncoding = Encoding.UTF8;
- context.Response.ContentLength64 = length;
- context.Response.SendResponse(buffer);
- }
-
- protected static void SendTextResponse(IHttpContext context, string txt, string mimeType = null)
- {
- context.Response.ContentType = ContentType.TEXT;
- if (mimeType != null)
- context.Response.Advanced.ContentType = mimeType;
- context.Response.ContentEncoding = Encoding.UTF8;
- context.Response.ContentLength64 = txt.Length;
- context.Response.SendResponse(txt);
- }
-
- protected static void SendStreamResponse(
- IHttpContext context, Stream stream, string headerAttachmentFileName = null)
- {
- context.Response.ContentType = ContentType.APPLICATION;
- context.Response.ContentLength64 = stream.Length;
- context.Response.SendChunked = true;
-
- if (headerAttachmentFileName != null)
- context.Response.AddHeader("Content-Disposition", $"attachment; filename={headerAttachmentFileName}");
-
- stream.CopyTo(context.Response.Advanced.OutputStream);
- context.Response.Advanced.Close();
- }
-
- #endregion
-
- #region AAS and Asset
-
- public void EvalGetAasAndAsset(IHttpContext context, string aasid, bool deep = false, bool complete = false)
- {
- // access the first AAS
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- if (aas == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with id '{aasid}' found.");
- return;
- }
-
- // try to get the asset as well
- var asset = this.Package.AasEnv.FindAsset(aas.assetRef);
-
- // result
- dynamic res = new ExpandoObject();
- res.AAS = aas;
- res.Asset = asset;
-
- // return as JSON
- var cr = new AdminShellConverters.AdaptiveFilterContractResolver(deep: deep, complete: complete);
- SendJsonResponse(context, res, cr);
- }
-
- public void EvalGetAasEnv(IHttpContext context, string aasid)
- {
- if (this.Package == null || this.Package.AasEnv == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.InternalServerError, $"Error accessing internal data structures.");
- return;
- }
-
- // access the first AAS
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- if (aas == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with id '{aasid}' found.");
- return;
- }
-
- // create a new, filtered AasEnv
- AdminShell.AdministrationShellEnv copyenv = null;
- try
- {
- copyenv = AdminShell.AdministrationShellEnv.CreateFromExistingEnv(
- this.Package.AasEnv, filterForAas: new List(new[] { aas }));
- }
- catch (Exception ex)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot filter aas envioronment: {ex.Message}.");
- return;
- }
-
- // return as FILE
- try
- {
- using (var ms = new MemoryStream())
- {
- // build a file name
- var fn = "aasenv.json";
- if (aas.idShort != null)
- fn = aas.idShort + "." + fn;
- // serialize via helper
- var jsonwriter = copyenv.SerialiazeJsonToStream(new StreamWriter(ms), leaveJsonWriterOpen: true);
- // write out again
- ms.Position = 0;
- SendStreamResponse(context, ms, Path.GetFileName(fn));
- // bit ugly
- jsonwriter.Close();
- }
- }
- catch (Exception ex)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest,
- $"Cannot serialize and send aas envioronment: {ex.Message}.");
- }
- }
-
-
- public void EvalGetAasThumbnail(IHttpContext context, string aasid)
- {
- if (this.Package == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.InternalServerError, $"Error accessing internal data structures.");
- return;
- }
-
- // access the first AAS
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- if (aas == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with id '{aasid}' found.");
- return;
- }
-
- // access the thumbnail
- // Note: in this version, the thumbnail is not specific to the AAS, but maybe in later versions ;-)
- Uri thumbUri = null;
- var thumbStream = this.Package.GetLocalThumbnailStream(ref thumbUri);
- if (thumbStream == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound, $"No thumbnail available in package.");
- return;
- }
-
- // return as FILE
- SendStreamResponse(context, thumbStream, Path.GetFileName(thumbUri?.ToString() ?? ""));
- thumbStream.Close();
- }
-
- public void EvalPutAas(IHttpContext context)
- {
- // first check
- if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"No payload or content type is not JSON.");
- return;
- }
-
- // list of Identification
- AdminShell.AdministrationShell aas = null;
- try
- {
- aas = Newtonsoft.Json.JsonConvert.DeserializeObject(
- context.Request.Payload);
- }
- catch (Exception ex)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot deserialize payload: {ex.Message}.");
- return;
- }
-
- // need id for idempotent behaviour
- if (aas.identification == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest,
- $"Identification of entity is (null); PUT cannot be performed.");
- return;
- }
-
- // datastructure update
- if (this.Package == null || this.Package.AasEnv == null ||
- this.Package.AasEnv.AdministrationShells == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.InternalServerError, $"Error accessing internal data structures.");
- return;
- }
- context.Server.Logger.Debug(
- $"Putting AdministrationShell with idShort {aas.idShort ?? "--"} and " +
- $"id {aas.identification.ToString()}");
- var existingAas = this.Package.AasEnv.FindAAS(aas.identification);
- if (existingAas != null)
- this.Package.AasEnv.AdministrationShells.Remove(existingAas);
- this.Package.AasEnv.AdministrationShells.Add(aas);
-
- // simple OK
- SendTextResponse(context, "OK" + ((existingAas != null) ? " (updated)" : " (new)"));
- }
-
- public void EvalDeleteAasAndAsset(IHttpContext context, string aasid, bool deleteAsset = false)
- {
- // datastructure update
- if (this.Package == null || this.Package.AasEnv == null ||
- this.Package.AasEnv.AdministrationShells == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.InternalServerError, $"Error accessing internal data structures.");
- return;
- }
-
- // access the AAS
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- if (aas == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with idShort '{aasid}' found.");
- return;
- }
-
- // find the asset
- var asset = this.Package.AasEnv.FindAsset(aas.assetRef);
-
- // delete
- context.Server.Logger.Debug(
- $"Deleting AdministrationShell with idShort {aas.idShort ?? "--"} and " +
- $"id {aas.identification?.ToString() ?? "--"}");
- this.Package.AasEnv.AdministrationShells.Remove(aas);
-
- if (deleteAsset && asset != null)
- {
- context.Server.Logger.Debug(
- $"Deleting Asset with idShort {asset.idShort ?? "--"} and " +
- $"id {asset.identification?.ToString() ?? "--"}");
- this.Package.AasEnv.Assets.Remove(asset);
- }
-
- // simple OK
- SendTextResponse(context, "OK");
- }
-
- #endregion
-
- #region // Asset links
-
- public void EvalGetAssetLinks(IHttpContext context, string assetid)
- {
- // trivial
- if (assetid == null)
- return;
-
- // do a manual search
- var res = new List();
- var specialHandles = this.CreateHandlesFromQueryString(context.Request.QueryString);
- var handle = IdRefHandleStore.ResolveSpecific(assetid, specialHandles);
- if (handle != null && handle.identification != null)
- {
- foreach (var aas in this.Package.AasEnv.AdministrationShells)
- if (aas.assetRef != null && aas.assetRef.Matches(handle.identification))
- {
- dynamic o = new ExpandoObject();
- o.identification = aas.identification;
- o.idShort = aas.idShort;
- res.Add(o);
- }
- }
- else
- {
- foreach (var aas in this.Package.AasEnv.AdministrationShells)
- if (aas.idShort != null && aas.idShort.Trim() != "" &&
- aas.idShort.Trim().ToLower() == assetid.Trim().ToLower())
- {
- dynamic o = new ExpandoObject();
- o.identification = aas.identification;
- o.idShort = aas.idShort;
- res.Add(o);
- }
- }
-
- // return as JSON
- SendJsonResponse(context, res);
- }
-
- public void EvalPutAsset(IHttpContext context)
- {
- // first check
- if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"No payload or content type is not JSON.");
- return;
- }
-
- // de-serialize asset
- AdminShell.Asset asset = null;
- try
- {
- asset = Newtonsoft.Json.JsonConvert.DeserializeObject(context.Request.Payload);
- }
- catch (Exception ex)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot deserialize payload: {ex.Message}.");
- return;
- }
-
- // need id for idempotent behaviour
- if (asset.identification == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest,
- $"Identification of entity is (null); PUT cannot be performed.");
- return;
- }
-
- // datastructure update
- if (this.Package == null || this.Package.AasEnv == null || this.Package.AasEnv.Assets == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.InternalServerError,
- $"Error accessing internal data structures.");
- return;
- }
- context.Server.Logger.Debug($"Adding Asset with idShort {asset.idShort ?? "--"}");
- var existingAsset = this.Package.AasEnv.FindAsset(asset.identification);
- if (existingAsset != null)
- this.Package.AasEnv.Assets.Remove(existingAsset);
- this.Package.AasEnv.Assets.Add(asset);
-
- // simple OK
- SendTextResponse(context, "OK" + ((existingAsset != null) ? " (updated)" : " (new)"));
- }
- #endregion
-
- #region // List of Submodels
-
- public class GetSubmodelsItem
- {
- public AdminShell.Identification id = new AdminShell.Identification();
- public string idShort = "";
- public string kind = "";
-
- public GetSubmodelsItem() { }
-
- public GetSubmodelsItem(AdminShell.Identification id, string idShort, string kind)
- {
- this.id = id;
- this.idShort = idShort;
- this.kind = kind;
- }
-
- public GetSubmodelsItem(AdminShell.Identifiable idi, string kind)
- {
- this.id = idi.identification;
- this.idShort = idi.idShort;
- this.kind = kind;
- }
- }
-
- public void EvalGetSubmodels(IHttpContext context, string aasid)
- {
- // access the AAS
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- if (aas == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with idShort '{aasid}' found.");
- return;
- }
-
- // build a list of results
- var res = new List();
-
- // get all submodels
- foreach (var smref in aas.submodelRefs)
- {
- var sm = this.Package.AasEnv.FindSubmodel(smref);
- if (sm != null)
- res.Add(new GetSubmodelsItem(sm, sm.kind.kind));
- }
-
- // return as JSON
- SendJsonResponse(context, res);
- }
-
- public void EvalPutSubmodel(IHttpContext context, string aasid)
- {
- // first check
- if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"No payload or content type is not JSON.");
- return;
- }
-
- // access the AAS
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- if (aas == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with idShort '{aasid}' found.");
- return;
- }
-
- // de-serialize Submodel
- AdminShell.Submodel submodel = null;
- try
- {
- submodel = Newtonsoft.Json.JsonConvert.DeserializeObject(context.Request.Payload);
- }
- catch (Exception ex)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot deserialize payload: {ex.Message}.");
- return;
- }
-
- // need id for idempotent behaviour
- if (submodel.identification == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest,
- $"Identification of entity is (null); PUT cannot be performed.");
- return;
- }
-
- // datastructure update
- if (this.Package == null || this.Package.AasEnv == null || this.Package.AasEnv.Assets == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.InternalServerError, $"Error accessing internal data structures.");
- return;
- }
-
- // add Submodel
- context.Server.Logger.Debug(
- $"Adding Submodel with idShort {submodel.idShort ?? "--"} and " +
- $"id {submodel.identification?.ToString()}");
- var existingSm = this.Package.AasEnv.FindSubmodel(submodel.identification);
- if (existingSm != null)
- this.Package.AasEnv.Submodels.Remove(existingSm);
- this.Package.AasEnv.Submodels.Add(submodel);
-
- // add SubmodelRef to AAS
- var newsmr = AdminShell.SubmodelRef.CreateNew(
- "Submodel", true, submodel.identification.idType, submodel.identification.id);
- var existsmr = aas.HasSubmodelRef(newsmr);
- if (!existsmr)
- {
- context.Server.Logger.Debug(
- $"Adding SubmodelRef to AAS with idShort {aas.idShort ?? "--"} and " +
- $"id {aas.identification?.ToString() ?? "--"}");
- aas.AddSubmodelRef(newsmr);
- }
-
- // simple OK
- SendTextResponse(context, "OK" + ((existingSm != null) ? " (updated)" : " (new)"));
- }
-
- public void EvalDeleteSubmodel(IHttpContext context, string aasid, string smid)
- {
- // first check
- if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"No payload or content type is not JSON.");
- return;
- }
-
- // access the AAS (absolutely mandatory)
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- if (aas == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with idShort '{aasid}' found.");
- return;
- }
-
- // delete SubmodelRef 1st
- var smref = this.FindSubmodelRefWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl);
- if (smref != null)
- {
- context.Server.Logger.Debug(
- $"Removing SubmodelRef {smid} from AAS with idShort {aas.idShort ?? "--"} and " +
- $"id {aas.identification?.ToString() ?? "--"}");
- aas.submodelRefs.Remove(smref);
- }
-
- // delete Submodel 2nd
- var sm = this.FindSubmodelWithoutAas(smid, context.Request.QueryString, context.Request.RawUrl);
- if (sm != null)
- {
- context.Server.Logger.Debug($"Removing Submodel {smid} from data structures.");
- this.Package.AasEnv.Submodels.Remove(sm);
- }
-
- // simple OK
- var cmt = "";
- if (smref == null && sm == null)
- cmt += " (nothing deleted)";
- cmt += ((smref != null) ? " (SubmodelRef deleted)" : "") + ((sm != null) ? " (Submodel deleted)" : "");
- SendTextResponse(context, "OK" + cmt);
- }
-
- #endregion
-
- #region // Submodel Complete
-
- public void EvalGetSubmodelContents(
- IHttpContext context, string aasid, string smid, bool deep = false, bool complete = false)
- {
- // access AAS and Submodel
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl);
- if (sm == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound,
- $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found.");
- return;
- }
-
- // return as JSON
- var cr = new AdminShellConverters.AdaptiveFilterContractResolver(deep: deep, complete: complete);
- SendJsonResponse(context, sm, cr);
- }
-
- public void EvalGetSubmodelContentsAsTable(IHttpContext context, string aasid, string smid)
- {
- // access AAS and Submodel
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl);
- if (sm == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound,
- $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found.");
- return;
- }
-
- // AAS ENV
- if (this.Package == null || this.Package.AasEnv == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.InternalServerError,
- $"Error accessing internal data structures.");
- return;
- }
-
- // make a table
- var table = new List();
- sm.RecurseOnSubmodelElements(null, (o, parents, sme) =>
- {
- // start a row
- dynamic row = new ExpandoObject();
-
- // defaults
- row.idShorts = "";
- row.typeName = "";
- row.semIdType = "";
- row.semId = "";
- row.shortName = "";
- row.unit = "";
- row.value = "";
-
- // idShort is a concatenation
- var path = "";
- foreach (var p in parents)
- path += p.idShort + "/";
-
- // SubnmodelElement general
- row.idShorts = path + (sme.idShort ?? "(-)");
- row.typeName = sme.GetElementName();
- if (sme.semanticId == null || sme.semanticId.Keys == null)
- { }
- else if (sme.semanticId.Keys.Count > 1)
- {
- row.semId = "(complex)";
- }
- else
- {
- row.semIdType = sme.semanticId.Keys[0].idType;
- row.semId = sme.semanticId.Keys[0].value;
- }
-
- // try find a concept description
- if (sme.semanticId != null)
- {
- var cd = this.Package.AasEnv.FindConceptDescription(sme.semanticId.Keys);
- if (cd != null)
- {
- var ds = cd.GetIEC61360();
- if (ds != null)
- {
- row.shortName = (ds.shortName == null ? "" : ds.shortName.GetDefaultStr());
- row.unit = ds.unit ?? "";
- }
- }
- }
-
- // try add a value
- if (sme is AdminShell.Property)
- {
- var p = sme as AdminShell.Property;
- row.value = "" + (p.value ?? "") + ((p.valueId != null) ? p.valueId.ToString() : "");
- }
-
- if (sme is AdminShell.File)
- {
- var p = sme as AdminShell.File;
- row.value = "" + p.value;
- }
-
- if (sme is AdminShell.Blob)
- {
- var p = sme as AdminShell.Blob;
- if (p.value.Length < 128)
- row.value = "" + p.value;
- else
- row.value = "(" + p.value.Length + " bytes)";
- }
-
- if (sme is AdminShell.ReferenceElement)
- {
- var p = sme as AdminShell.ReferenceElement;
- row.value = "" + p.value.ToString();
- }
-
- if (sme is AdminShell.RelationshipElement)
- {
- var p = sme as AdminShell.RelationshipElement;
- row.value = "" + (p.first?.ToString() ?? "(-)") + " <-> " + (p.second?.ToString() ?? "(-)");
- }
-
- // now, add the row
- table.Add(row);
-
- // recurse
- return true;
- });
-
- // return as JSON
- SendJsonResponse(context, table);
- }
-
- #endregion
-
- #region // Submodel Elements
-
- public void EvalGetSubmodelElementContents(
- IHttpContext context, string aasid, string smid, string[] elemids, bool deep = false,
- bool complete = false)
- {
- // access AAS and Submodel
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl);
- if (sm == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound,
- $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found.");
- return;
- }
-
- // find the right SubmodelElement
- var sme = this.FindSubmodelElement(sm, sm.submodelElements, elemids);
- if (sme == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound,
- $"No matching element in Submodel found.");
- return;
- }
-
- // return as JSON
- var cr = new AdminShellConverters.AdaptiveFilterContractResolver(deep: deep, complete: complete);
- SendJsonResponse(context, sme, cr);
- }
-
- public void EvalGetSubmodelElementsBlob(IHttpContext context, string aasid, string smid, string[] elemids)
- {
- // access AAS and Submodel
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl);
- if (sm == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound,
- $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found.");
- return;
- }
-
- // find the right SubmodelElement
- var fse = this.FindSubmodelElement(sm, sm.submodelElements, elemids);
- var smeb = fse?.elem as AdminShell.Blob;
- if (smeb == null || smeb.value == null || smeb.value == "")
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound, $"No matching Blob element in Submodel found.");
- return;
- }
-
- // return as TEXT
- SendTextResponse(context, smeb.value, mimeType: smeb.mimeType);
- }
-
- public void EvalGetSubmodelElementsProperty(IHttpContext context, string aasid, string smid, string[] elemids)
- {
- // access AAS and Submodel
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl);
- if (sm == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound,
- $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found.");
- return;
- }
-
- // find the right SubmodelElement
- var fse = this.FindSubmodelElement(sm, sm.submodelElements, elemids);
- var smep = fse?.elem as AdminShell.Property;
- if (smep == null || smep.value == null || smep.value == "")
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound, $"No matching Property element in Submodel found.");
- return;
- }
-
- // a little bit of demo
- string strval = smep.value;
- if (smep.HasQualifierOfType("DEMO") != null && smep.value != null && smep.valueType != null &&
- smep.valueType.Trim().ToLower() == "double" &&
- double.TryParse(smep.value, NumberStyles.Any, CultureInfo.InvariantCulture, out double dblval))
- {
- dblval += Math.Sin((0.001 * DateTime.UtcNow.Millisecond) * 6.28);
- strval = dblval.ToString(CultureInfo.InvariantCulture);
- }
-
- // return as little dynamic object
- dynamic res = new ExpandoObject();
- res.value = strval;
- if (smep.valueId != null)
- res.valueId = smep.valueId;
-
- // send
- SendJsonResponse(context, res);
- }
-
- public void EvalGetSubmodelElementsFile(IHttpContext context, string aasid, string smid, string[] elemids)
- {
- // access AAS and Submodel
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl);
- if (sm == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound,
- $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found.");
- return;
- }
-
- // find the right SubmodelElement
- var fse = this.FindSubmodelElement(sm, sm.submodelElements, elemids);
- var smef = fse?.elem as AdminShell.File;
- if (smef == null || smef.value == null || smef.value == "")
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound,
- $"No matching File element in Submodel found.");
- return;
- }
-
- // access
- var packageStream = this.Package.GetLocalStreamFromPackage(smef.value);
- if (packageStream == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound,
- $"No file contents available in package.");
- return;
- }
-
- // return as FILE
- SendStreamResponse(context, packageStream, Path.GetFileName(smef.value));
- packageStream.Close();
- }
-
- public void EvalPutSubmodelElementContents(IHttpContext context, string aasid, string smid, string[] elemids)
- {
- // first check
- if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"No payload or content type is not JSON.");
- return;
- }
-
- // de-serialize SubmodelElement
- AdminShell.SubmodelElement sme = null;
- try
- {
- sme = Newtonsoft.Json.JsonConvert.DeserializeObject(
- context.Request.Payload, new AdminShellConverters.JsonAasxConverter("modelType", "name"));
- }
- catch (Exception ex)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot deserialize payload: {ex.Message}.");
- return;
- }
-
- // need id for idempotent behaviour
- if (sme?.idShort == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest,
- $"entity or idShort of entity is (null); PUT cannot be performed.");
- return;
- }
-
- // access AAS and Submodel
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl);
- if (sm == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound,
- $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found.");
- return;
- }
-
- // special case: parent is Submodel itself
- var updated = false;
- if (elemids == null || elemids.Length < 1)
- {
- var existsmw = sm.FindSubmodelElementWrapper(sme.idShort);
- if (existsmw != null)
- {
- updated = true;
- context.Server.Logger.Debug($"Removing old SubmodelElement {sme.idShort} from Submodel {smid}.");
- sm.submodelElements.Remove(existsmw);
- }
-
- context.Server.Logger.Debug($"Adding new SubmodelElement {sme.idShort} to Submodel {smid}.");
- sm.Add(sme);
- }
- else
- {
- // find the right SubmodelElement
- var parent = this.FindSubmodelElement(sm, sm.submodelElements, elemids);
- if (parent == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound, $"No matching element in Submodel found.");
- return;
- }
-
- if (parent.elem != null && parent.elem is AdminShell.SubmodelElementCollection parentsmc)
- {
- var existsmw = parentsmc.FindFirstIdShort(sme.idShort);
- if (existsmw != null)
- {
- updated = true;
- context.Server.Logger.Debug(
- $"Removing old SubmodelElement {sme.idShort} from SubmodelCollection.");
- parentsmc.value.Remove(existsmw);
- }
-
- context.Server.Logger.Debug($"Adding new SubmodelElement {sme.idShort} to SubmodelCollection.");
- parentsmc.Add(sme);
- }
- else
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest,
- $"Matching SubmodelElement in Submodel {smid} is not suitable to add childs.");
- return;
- }
-
- }
-
- // simple OK
- SendTextResponse(context, "OK" + (updated ? " (with updates)" : ""));
- }
-
- public void EvalDeleteSubmodelElementContents(
- IHttpContext context, string aasid, string smid, string[] elemids)
- {
- // access AAS and Submodel
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl);
- if (sm == null || elemids == null || elemids.Length < 1)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound,
- $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found or " +
- $"no elements to delete specified.");
- return;
- }
-
- // OK, Submodel and Element existing
- var fse = this.FindSubmodelElement(sm, sm.submodelElements, elemids);
- if (fse == null || fse.elem == null || fse.parent == null || fse.wrapper == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound, $"No matching element in Submodel found.");
- return;
- }
-
- // where to delete?
- var deleted = false;
- var elinfo = string.Join(".", elemids);
- if (fse.parent == sm)
- {
- context.Server.Logger.Debug($"Deleting specified SubmodelElement {elinfo} from Submodel {smid}.");
- sm.submodelElements.Remove(fse.wrapper);
- deleted = true;
- }
-
- if (fse.parent is AdminShell.SubmodelElementCollection smc)
- {
- context.Server.Logger.Debug(
- $"Deleting specified SubmodelElement {elinfo} from SubmodelElementCollection {smc.idShort}.");
- smc.value.Remove(fse.wrapper);
- deleted = true;
- }
-
- // simple OK
- SendTextResponse(context, "OK" + (!deleted ? " (but nothing deleted)" : ""));
- }
-
- public void EvalInvokeSubmodelElementOperation(
- IHttpContext context, string aasid, string smid, string[] elemids)
- {
- // access AAS and Submodel
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl);
- if (sm == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound,
- $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found.");
- return;
- }
-
- // find the right SubmodelElement
- var fse = this.FindSubmodelElement(sm, sm.submodelElements, elemids);
- var smep = fse?.elem as AdminShell.Operation;
- if (smep == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound, $"No matching Operation element in Submodel found.");
- return;
- }
-
- // make 1st expectation
- int numExpectedInputArgs = smep.inputVariable?.Count ?? 0;
- int numGivenInputArgs = 0;
- int numExpectedOutputArgs = smep.outputVariable?.Count ?? 0;
- var inputArguments = (new int[numExpectedInputArgs]).Select(x => "").ToList();
- var outputArguments = (new int[numExpectedOutputArgs]).Select(x => "my value").ToList();
-
- // is a payload required? Always, if at least one input argument required
-
- if (smep.inputVariable != null && smep.inputVariable.Count > 0)
- {
- // payload present
- if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest,
- $"No payload for Operation input argument or content type is not JSON.");
- return;
- }
-
- // de-serialize SubmodelElement
- try
- {
- // serialize
- var input = Newtonsoft.Json.JsonConvert.DeserializeObject>(context.Request.Payload);
-
- // set inputs
- if (input != null && input.Count > 0)
- {
- numGivenInputArgs = input.Count;
- for (int i = 0; i < numGivenInputArgs; i++)
- inputArguments[i] = input[i];
- }
- }
- catch (Exception ex)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot deserialize payload: {ex.Message}.");
- return;
- }
- }
-
- // do a check
- if (numExpectedInputArgs != numGivenInputArgs)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest,
- $"Number of input arguments in payload does not fit expected input arguments of Operation.");
- return;
- }
-
- // just a test
- if (smep.HasQualifierOfType("DEMO") != null)
- {
- for (int i = 0; i < Math.Min(numExpectedInputArgs, numExpectedOutputArgs); i++)
- outputArguments[i] = "CALC on " + inputArguments[i];
- }
-
- // return as little dynamic object
- SendJsonResponse(context, outputArguments);
- }
-
- public void EvalGetAllCds(IHttpContext context, string aasid)
- {
- // access the AAS
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- if (aas == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with idShort '{aasid}' found.");
- return;
- }
-
- // build a list of results
- var res = new List();
-
- // create a new, filtered AasEnv
- // (this is expensive, but delivers us with a list of CDs which are in relation to the respective AAS)
- var copyenv = AdminShell.AdministrationShellEnv.CreateFromExistingEnv(
- this.Package.AasEnv, filterForAas: new List(new[] { aas }));
-
- // get all CDs and describe them
- foreach (var cd in copyenv.ConceptDescriptions)
- {
- // describe
- dynamic o = new ExpandoObject();
- o.idShort = cd.idShort;
- o.shortName = cd.GetDefaultShortName();
- o.identification = cd.identification;
- o.isCaseOf = cd.IsCaseOf;
-
- // add
- res.Add(o);
- }
-
- // return as JSON
- SendJsonResponse(context, res);
- }
-
- public void EvalGetCdContents(IHttpContext context, string aasid, string cdid)
- {
- // access AAS and CD
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- var cd = this.FindCdWithoutAas(aas, cdid, context.Request.QueryString, context.Request.RawUrl);
- if (cd == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound,
- $"No AAS '{aasid}' or no ConceptDescription with id '{cdid}' found.");
- return;
- }
-
- // return as JSON
- SendJsonResponse(context, cd);
- }
-
- public void EvalDeleteSpecificCd(IHttpContext context, string aasid, string cdid)
- {
- // access AAS and CD
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- var cd = this.FindCdWithoutAas(aas, cdid, context.Request.QueryString, context.Request.RawUrl);
- if (cd == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound,
- $"No AAS '{aasid}' or no ConceptDescription with id '{cdid}' found.");
- return;
- }
-
- // delete ?!
- var deleted = false;
- if (this.Package != null && this.Package.AasEnv != null &&
- this.Package.AasEnv.ConceptDescriptions.Contains(cd))
- {
- this.Package.AasEnv.ConceptDescriptions.Remove(cd);
- deleted = true;
- }
-
- // return as JSON
- SendTextResponse(context, "OK" + (!deleted ? " (but nothing deleted)" : ""));
- }
-
- #endregion
-
- #region // GET + POST handles/identification
-
- public void EvalGetHandlesIdentification(IHttpContext context)
- {
- // get the list
- var res = IdRefHandleStore.FindAll();
-
- // return this list
- SendJsonResponse(context, res);
- }
-
- public void EvalPostHandlesIdentification(IHttpContext context)
- {
- // first check
- if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"No payload or content type is not JSON.");
- return;
- }
-
- // list of Identification
- List ids = null;
- try
- {
- ids = Newtonsoft.Json.JsonConvert.DeserializeObject>(
- context.Request.Payload);
- }
- catch (Exception ex)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot deserialize payload: {ex.Message}.");
- return;
- }
- if (ids == null || ids.Count < 1)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"No Identification entities in payload.");
- return;
- }
-
- // turn these list into a list of Handles
- var res = new List();
- foreach (var id in ids)
- {
- var h = new AasxHttpHandleIdentification(id);
- IdRefHandleStore.Add(h);
- res.Add(h);
- }
-
- // return this list
- SendJsonResponse(context, res);
- }
-
- #endregion
-
- #region // Server profile ..
-
- public void EvalGetServerProfile(IHttpContext context)
- {
- // get the list
- dynamic res = new ExpandoObject();
- var capabilities = new List(new ulong[]{
- 80,81,82,10,11,12,13,15,16,20,21,30,31,40,41,42,43,50,51,52,53,54,55,56,57,58,59,60,61,70,71,72,73
- });
- res.apiversion = 1;
- res.capabilities = capabilities;
-
- // return this list
- SendJsonResponse(context, res);
- }
-
- #endregion
-
- #region // Concept Descriptions
-
- public void EvalPutCd(IHttpContext context, string aasid)
- {
- // first check
- if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"No payload or content type is not JSON.");
- return;
- }
-
- // access the AAS
- var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl);
- if (aas == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with idShort '{aasid}' found.");
- return;
- }
-
- // de-serialize CD
- AdminShell.ConceptDescription cd = null;
- try
- {
- cd = Newtonsoft.Json.JsonConvert.DeserializeObject(
- context.Request.Payload);
- }
- catch (Exception ex)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot deserialize payload: {ex.Message}.");
- return;
- }
-
- // need id for idempotent behaviour
- if (cd.identification == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.BadRequest,
- $"Identification of entity is (null); PUT cannot be performed.");
- return;
- }
-
- // datastructure update
- if (this.Package == null || this.Package.AasEnv == null || this.Package.AasEnv.Assets == null)
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.InternalServerError, $"Error accessing internal data structures.");
- return;
- }
-
- // add Submodel
- context.Server.Logger.Debug(
- $"Adding ConceptDescription with idShort {cd.idShort ?? "--"} and " +
- $"id {cd.identification.ToString()}");
- var existingCd = this.Package.AasEnv.FindConceptDescription(cd.identification);
- if (existingCd != null)
- this.Package.AasEnv.ConceptDescriptions.Remove(existingCd);
- this.Package.AasEnv.ConceptDescriptions.Add(cd);
-
- // simple OK
- SendTextResponse(context, "OK" + ((existingCd != null) ? " (updated)" : " (new)"));
- }
-
- #endregion
- }
-}
diff --git a/src/AasxRestServerLibrary/AasxHttpHandleStore.cs b/src/AasxRestServerLibrary/AasxHttpHandleStore.cs
deleted file mode 100644
index 271c92065..000000000
--- a/src/AasxRestServerLibrary/AasxHttpHandleStore.cs
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-Copyright (c) 2018-2023 Festo AG & Co. KG
-Author: Michael Hoffmeister
-
-This source code is licensed under the Apache License 2.0 (see LICENSE.txt).
-
-This source code may use other Open Source software components (see LICENSE.txt).
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using AasxCompatibilityModels;
-using AdminShellNS;
-using Newtonsoft.Json;
-
-/*
-Please notice:
-The API and REST routes implemented in this version of the source code are not specified and standardised by the
-specification Details of the Administration Shell. The hereby stated approach is solely the opinion of its author(s).
-*/
-
-namespace AasxRestServerLibrary
-{
- ///
- /// Describes a handle to a Identification or Reference to be used in HTTP REST APIs
- ///
- public abstract class AasxHttpHandle
- {
- [JsonProperty(PropertyName = "key")]
- public string Key;
- [JsonIgnore]
- public DateTime ExpiresInternal;
- [JsonProperty(PropertyName = "expires")]
- // http-date, see https://stackoverflow.com/questions/21120882/the-date-time-format-used-in-http-headers
- public string Expires;
- }
-
- ///
- /// Describes a handle to a Identification to be used in HTTP REST APIs
- ///
- public class AasxHttpHandleIdentification : AasxHttpHandle
- {
- private static int counter = 1;
-
- public AdminShell.Identification identification = null;
-
- public AasxHttpHandleIdentification(AdminShell.Identification src, string keyPreset = null)
- {
- if (keyPreset == null)
- this.Key = $"@ID{counter++:00000000}";
- else
- this.Key = keyPreset;
- this.ExpiresInternal = DateTime.UtcNow.AddMinutes(60);
- this.Expires = this.ExpiresInternal.ToString("R");
- this.identification = new AdminShell.Identification(src);
- }
- }
-
- ///
- /// This store stores AasxHttpHandle items in order to provide 'shortcuts' to AAS Identifications and
- /// References in HTTP REST APIs
- ///
- public class AasxHttpHandleStore
- {
- private Dictionary storeItems = new Dictionary();
-
- public void Add(AasxHttpHandle handle)
- {
- if (handle == null)
- return;
- storeItems.Add(handle.Key, handle);
- }
-
- public AasxHttpHandle Resolve(string Key)
- {
- if (storeItems.ContainsKey(Key))
- return storeItems[Key];
- return null;
- }
-
- public T ResolveSpecific(string Key, List specialHandles = null) where T : AasxHttpHandle
- {
- // trivial
- if (Key == null)
- return null;
- Key = Key.Trim();
- if (Key == "" || !Key.StartsWith("@"))
- return null;
-
- // search in specialHandles
- if (specialHandles != null)
- foreach (var sh in specialHandles)
- if (sh.Key.Trim().ToLower() == Key.Trim().ToLower())
- return sh;
-
- // search in store
- if (storeItems.ContainsKey(Key))
- return storeItems[Key] as T;
- return null;
- }
-
- public List FindAll() where T : class
- {
- var res = new List();
- foreach (var x in storeItems.Values)
- if (x is T)
- res.Add(x as T);
- return res;
- }
- }
-}
diff --git a/src/AasxRestServerLibrary/AasxRestClient.cs b/src/AasxRestServerLibrary/AasxRestClient.cs
deleted file mode 100644
index 6cf3b0f42..000000000
--- a/src/AasxRestServerLibrary/AasxRestClient.cs
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
-Copyright (c) 2018-2023 Festo AG & Co. KG
-Author: Michael Hoffmeister
-
-This source code is licensed under the Apache License 2.0 (see LICENSE.txt).
-
-This source code may use other Open Source software components (see LICENSE.txt).
-*/
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Net;
-using System.Net.Http;
-using System.Text;
-using System.Threading.Tasks;
-using AasxIntegrationBase;
-using AdminShellNS;
-using Grapevine.Client;
-using Newtonsoft.Json.Linq;
-
-namespace AasxRestServerLibrary
-{
- public class AasxRestClient : IAasxOnlineConnection
- {
- // Instance management
-
- private Uri uri = null;
- private RestClient client = null;
- private WebProxy proxy = null;
-
- public AasxRestClient(string hostpart)
- {
- this.uri = new Uri(hostpart.TrimEnd('/'));
- this.client = new RestClient();
- this.client.Host = this.uri.Host;
- this.client.Port = this.uri.Port;
- if (File.Exists("C:\\dat\\proxy.dat"))
- {
- string proxyAddress = "";
- string username = "";
- string password = "";
- try
- { // Open the text file using a stream reader.
- using (StreamReader sr = new StreamReader("C:\\dat\\proxy.dat"))
- {
- proxyAddress = sr.ReadLine();
- username = sr.ReadLine();
- password = sr.ReadLine();
- }
- }
- catch (IOException e)
- {
- Console.WriteLine("The file C:\\dat\\proxy.dat could not be read:");
- Console.WriteLine(e.Message);
- }
- this.proxy = new WebProxy();
- Uri newUri = new Uri(proxyAddress);
- this.proxy.Address = newUri;
- this.proxy.Credentials = new NetworkCredential(username, password);
- }
- }
-
- // interface
-
- public bool IsValid() { return this.uri != null; } // assume validity
- public bool IsConnected() { return true; } // always, as there is no open connection by principle
- public string GetInfo() { return uri.ToString(); }
-
- public Stream GetThumbnailStream()
- {
- var request = new RestRequest("/aas/id/thumbnail");
- if (this.proxy != null)
- request.Proxy = this.proxy;
- var response = client.Execute(request);
- if (response.StatusCode != Grapevine.Shared.HttpStatusCode.Ok)
- throw new Exception(
- $"REST {response.ResponseUri} response {response.StatusCode} with {response.StatusDescription}");
-
- // Note: the normal response.GetContent() internally reads ContentStream as a string and
- // screws up binary data.
- // Necessary to access the real implementing object
- var rr = response as RestResponse;
- if (rr != null)
- {
- return rr.Advanced.GetResponseStream();
- }
- return null;
- }
-
- public string ReloadPropertyValue()
- {
- return "";
- }
-
- // utilities
-
- string BuildUriQueryPartId(string tag, AdminShell.Identifiable entity)
- {
- if (entity == null || entity.identification == null)
- return "";
- var res = "";
- if (tag != null)
- res += tag.Trim() + "=";
- res += entity.identification.idType.Trim() + "," + entity.identification.id.Trim();
- return res;
- }
-
- string BuildUriQueryString(params string[] parts)
- {
- if (parts == null)
- return "";
- var res = "?";
- foreach (var p in parts)
- {
- if (res.Length > 1)
- res += "&";
- res += p;
- }
- return res;
- }
-
- // individual functions
-
- public AdminShellPackageEnv OpenPackageByAasEnv()
- {
- var request = new RestRequest("/aas/id/aasenv");
- if (this.proxy != null)
- request.Proxy = this.proxy;
- var respose = client.Execute(request);
- if (respose.StatusCode != Grapevine.Shared.HttpStatusCode.Ok)
- throw new Exception(
- $"REST {respose.ResponseUri} response {respose.StatusCode} with {respose.StatusDescription}");
- var res = new AdminShellPackageEnv();
- res.LoadFromAasEnvString(respose.GetContent());
- return res;
- }
-
- public string GetSubmodel(string name)
- {
- string fullname = "/aas/id/submodels/" + name + "/complete";
- var request = new RestRequest(fullname);
- if (this.proxy != null)
- request.Proxy = this.proxy;
- var response = client.Execute(request);
- if (response.StatusCode != Grapevine.Shared.HttpStatusCode.Ok)
- throw new Exception(
- $"REST {response.ResponseUri} response {response.StatusCode} with {response.StatusDescription}");
- return response.GetContent();
- }
-
- public async void PutSubmodelAsync(string payload)
- {
- string fullname = "/aas/id/submodels/";
-
- var handler = new HttpClientHandler();
- handler.DefaultProxyCredentials = CredentialCache.DefaultCredentials;
- handler.AllowAutoRedirect = false;
-
- var hClient = new HttpClient(handler)
- {
- BaseAddress = uri
- };
- StringContent queryString = new StringContent(payload);
- await hClient.PutAsync(fullname, queryString);
- }
-
- public string UpdatePropertyValue(
- AdminShell.AdministrationShellEnv env, AdminShell.Submodel submodel, AdminShell.SubmodelElement sme)
- {
- // trivial fails
- if (env == null || sme == null)
- return null;
-
- // need AAS, indirect
- var aas = env.FindAASwithSubmodel(submodel.identification);
- if (aas == null)
- return null;
-
- // build path
- var aasId = aas.idShort;
- var submodelId = submodel.idShort;
- var elementId = sme.CollectIdShortByParent();
- var reqpath = "./aas/" + aasId + "/submodels/" + submodelId + "/elements/" + elementId + "/property";
-
- // request
- var request = new RestRequest(reqpath);
- if (this.proxy != null)
- request.Proxy = this.proxy;
- var respose = client.Execute(request);
- if (respose.StatusCode != Grapevine.Shared.HttpStatusCode.Ok)
- throw new Exception(
- $"REST {respose.ResponseUri} response {respose.StatusCode} with {respose.StatusDescription}");
-
- var json = respose.GetContent();
- var parsed = JObject.Parse(json);
- var value = parsed.SelectToken("value").Value();
- return value;
- }
- }
-}
diff --git a/src/AasxRestServerLibrary/AasxRestServer.cs b/src/AasxRestServerLibrary/AasxRestServer.cs
deleted file mode 100644
index 244e24a9c..000000000
--- a/src/AasxRestServerLibrary/AasxRestServer.cs
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
-Copyright (c) 2018-2023 Festo AG & Co. KG
-Author: Michael Hoffmeister
-
-This source code is licensed under the Apache License 2.0 (see LICENSE.txt).
-
-This source code may use other Open Source software components (see LICENSE.txt).
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net;
-using System.Reflection;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
-using AdminShellNS;
-using Grapevine.Interfaces.Server;
-using Grapevine.Interfaces.Shared;
-using Grapevine.Server;
-using Grapevine.Server.Attributes;
-using Grapevine.Shared;
-using Newtonsoft.Json;
-
-/*
-Please notice:
-The API and REST routes implemented in this version of the source code are not specified and standardised by the
-specification Details of the Administration Shell. The hereby stated approach is solely the opinion of its author(s).
-*/
-
-// ReSharper disable ClassNeverInstantiated.Global
-//.. motivation: unsure what happens to reflection, when making class static ..
-
-namespace AasxRestServerLibrary
-{
- public class AasxRestServer
- {
- [RestResource]
- public class TestResource
- {
- public static AasxHttpContextHelper helper = null;
-
- // Basic AAS + Asset
-
- [RestRoute(
- HttpMethod = HttpMethod.GET,
- PathInfo = "^/aas/(id|([^/]+))(|/core|/complete|/thumbnail|/aasenv)(/|)$")]
- public IHttpContext GetAasAndAsset(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 2)
- {
- if (helper.PathEndsWith(context, "thumbnail"))
- {
- helper.EvalGetAasThumbnail(context, m.Groups[1].ToString());
- }
- else
- if (helper.PathEndsWith(context, "aasenv"))
- {
- helper.EvalGetAasEnv(context, m.Groups[1].ToString());
- }
- else
- {
- var complete = helper.PathEndsWith(context, "complete");
- helper.EvalGetAasAndAsset(context, m.Groups[1].ToString(), complete: complete);
- }
- }
- return context;
- }
-
- [RestRoute(HttpMethod = HttpMethod.PUT, PathInfo = "^/aas(/|)$")]
- public IHttpContext PutAas(IHttpContext context)
- {
- helper.EvalPutAas(context);
- return context;
- }
-
- [RestRoute(HttpMethod = HttpMethod.DELETE, PathInfo = "^/aas/([^/]+)(/|)$")]
- public IHttpContext DeleteAasAndAsset(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 2)
- {
- helper.EvalDeleteAasAndAsset(context, m.Groups[1].ToString(), deleteAsset: true);
- }
- return context;
- }
-
- // Handles
-
- [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "^/handles/identification(/|)$")]
- public IHttpContext GetHandlesIdentification(IHttpContext context)
- {
- helper.EvalGetHandlesIdentification(context);
- return context;
- }
-
- [RestRoute(HttpMethod = HttpMethod.POST, PathInfo = "^/handles/identification(/|)$")]
- public IHttpContext PostHandlesIdentification(IHttpContext context)
- {
- helper.EvalPostHandlesIdentification(context);
- return context;
- }
-
- // Server
-
- [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "^/server/profile(/|)$")]
- public IHttpContext GetServerProfile(IHttpContext context)
- {
- helper.EvalGetServerProfile(context);
- return context;
- }
-
- // Assets
-
- [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "^/assets/([^/]+)(/|)$")]
- public IHttpContext GetAssets(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 2)
- {
- helper.EvalGetAssetLinks(context, m.Groups[1].ToString());
- }
- return context;
- }
-
- [RestRoute(HttpMethod = HttpMethod.PUT, PathInfo = "^/assets(/|)$")]
- public IHttpContext PutAssets(IHttpContext context)
- {
- helper.EvalPutAsset(context);
- return context;
- }
-
- // List of Submodels
-
- [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "^/aas/(id|([^/]+))/submodels(/|)$")]
- public IHttpContext GetSubmodels(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 2)
- {
- helper.EvalGetSubmodels(context, m.Groups[1].ToString());
- }
- return context;
- }
-
- [RestRoute(HttpMethod = HttpMethod.PUT, PathInfo = "^/aas/(id|([^/]+))/submodels(/|)$")]
- public IHttpContext PutSubmodel(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 2)
- {
- helper.EvalPutSubmodel(context, m.Groups[1].ToString());
- }
- return context;
- }
-
- [RestRoute(HttpMethod = HttpMethod.DELETE, PathInfo = "^/aas/(id|([^/]+))/submodels/([^/]+)(/|)$")]
- public IHttpContext DeleteSubmodel(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 4)
- {
- helper.EvalDeleteSubmodel(context, m.Groups[1].ToString(), m.Groups[3].ToString());
- }
- return context;
- }
-
- // Contents of a Submodel
-
- [RestRoute(
- HttpMethod = HttpMethod.GET,
- PathInfo = "^/aas/(id|([^/]+))/submodels/([^/]+)(|/core|/deep|/complete)(/|)$")]
- public IHttpContext GetSubmodelContents(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 4)
- {
- var deep = helper.PathEndsWith(context, "deep");
- var complete = helper.PathEndsWith(context, "complete");
- helper.EvalGetSubmodelContents(
- context, m.Groups[1].ToString(), m.Groups[3].ToString(),
- deep: deep || complete, complete: complete);
- }
- return context;
- }
-
- [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "^/aas/(id|([^/]+))/submodels/([^/]+)/table(/|)$")]
- public IHttpContext GetSubmodelContentsAsTable(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 4)
- {
- helper.EvalGetSubmodelContentsAsTable(context, m.Groups[1].ToString(), m.Groups[3].ToString());
- }
- return context;
- }
-
- // Contents of SubmodelElements
-
- [RestRoute(
- HttpMethod = HttpMethod.GET,
- PathInfo = "^/aas/(id|([^/]+))/submodels/([^/]+)/elements(/([^/]+)){1,99}?" +
- "(|/core|/complete|/deep|/file|/blob|/events|/property)(/|)$")]
- public IHttpContext GetSubmodelElementsContents(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 6 && m.Groups[5].Captures.Count >= 1)
- {
- var aasid = m.Groups[1].ToString();
- var smid = m.Groups[3].ToString();
- var elemids = new List();
- for (int i = 0; i < m.Groups[5].Captures.Count; i++)
- elemids.Add(m.Groups[5].Captures[i].ToString());
-
- // special case??
- if (helper.PathEndsWith(context, "file"))
- {
- helper.EvalGetSubmodelElementsFile(context, aasid, smid, elemids.ToArray());
- }
- else
- if (helper.PathEndsWith(context, "blob"))
- {
- helper.EvalGetSubmodelElementsBlob(context, aasid, smid, elemids.ToArray());
- }
- else
- if (helper.PathEndsWith(context, "property"))
- {
- helper.EvalGetSubmodelElementsProperty(context, aasid, smid, elemids.ToArray());
- }
- else
- if (helper.PathEndsWith(context, "events"))
- {
- context.Response.SendResponse(
- Grapevine.Shared.HttpStatusCode.NotImplemented, $"Events currently not implented.");
- }
- else
- {
- // more options
- bool complete = false, deep = false;
- if (helper.PathEndsWith(context, "deep"))
- deep = true;
- if (helper.PathEndsWith(context, "complete"))
- {
- deep = true;
- complete = true;
- }
-
- helper.EvalGetSubmodelElementContents(context, aasid, smid, elemids.ToArray(), deep, complete);
- }
- }
- return context;
- }
-
- [RestRoute(
- HttpMethod = HttpMethod.POST,
- PathInfo = "^/aas/(id|([^/]+))/submodels/([^/]+)/elements(/([^/]+)){1,99}?/invoke(/|)$")]
- public IHttpContext PostSubmodelElementsContents(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 6 && m.Groups[5].Captures.Count >= 1)
- {
- var aasid = m.Groups[1].ToString();
- var smid = m.Groups[3].ToString();
- var elemids = new List();
- for (int i = 0; i < m.Groups[5].Captures.Count; i++)
- elemids.Add(m.Groups[5].Captures[i].ToString());
-
- // special case??
- if (helper.PathEndsWith(context, "invoke"))
- {
- helper.EvalInvokeSubmodelElementOperation(context, aasid, smid, elemids.ToArray());
- }
- }
- return context;
- }
-
- [RestRoute(
- HttpMethod = HttpMethod.PUT,
- PathInfo = "^/aas/(id|([^/]+))/submodels/([^/]+)/elements(/([^/]+)){0,99}?(/|)$")]
- public IHttpContext PutSubmodelElementsContents(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 6)
- {
- var aasid = m.Groups[1].ToString();
- var smid = m.Groups[3].ToString();
- var elemids = new List();
- for (int i = 0; i < m.Groups[5].Captures.Count; i++)
- elemids.Add(m.Groups[5].Captures[i].ToString());
-
- helper.EvalPutSubmodelElementContents(context, aasid, smid, elemids.ToArray());
- }
- return context;
- }
-
- [RestRoute(
- HttpMethod = HttpMethod.DELETE,
- PathInfo = "^/aas/(id|([^/]+))/submodels/([^/]+)/elements(/([^/]+)){0,99}?(/|)$")]
- public IHttpContext DeleteSubmodelElementsContents(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 6)
- {
- var aasid = m.Groups[1].ToString();
- var smid = m.Groups[3].ToString();
- var elemids = new List();
- for (int i = 0; i < m.Groups[5].Captures.Count; i++)
- elemids.Add(m.Groups[5].Captures[i].ToString());
-
- helper.EvalDeleteSubmodelElementContents(context, aasid, smid, elemids.ToArray());
- }
- return context;
- }
-
- // concept descriptions
-
- [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "^/aas/(id|([^/]+))/cds(/|)$")]
- public IHttpContext GetCds(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 2)
- {
- helper.EvalGetAllCds(context, m.Groups[1].ToString());
- }
- return context;
- }
-
- [RestRoute(HttpMethod = HttpMethod.PUT, PathInfo = "^/aas/(id|([^/]+))/cds(/|)$")]
- public IHttpContext PutConceptDescription(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 2)
- {
- helper.EvalPutCd(context, m.Groups[1].ToString());
- }
- return context;
- }
-
- [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "^/aas/(id|([^/]+))/cds/([^/]+)(/|)$")]
- public IHttpContext GetSpecificCd(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 4)
- {
- helper.EvalGetCdContents(context, m.Groups[1].ToString(), m.Groups[3].ToString());
- }
- return context;
- }
-
- [RestRoute(HttpMethod = HttpMethod.DELETE, PathInfo = "^/aas/(id|([^/]+))/cds/([^/]+)(/|)$")]
- public IHttpContext DeleteSpecificCd(IHttpContext context)
- {
- var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo);
- if (m.Success && m.Groups.Count >= 4)
- {
- helper.EvalDeleteSpecificCd(context, m.Groups[1].ToString(), m.Groups[3].ToString());
- }
- return context;
- }
-
- }
-
- private static RestServer startedRestServer = null;
-
- public static void Start(
- AdminShellPackageEnv package, string host, string port, GrapevineLoggerSuper logger = null)
- {
- // if running, stop old server
- Stop();
-
- var helper = new AasxHttpContextHelper();
- helper.Package = package;
- TestResource.helper = helper;
-
- var serverSettings = new ServerSettings();
- serverSettings.Host = host;
- serverSettings.Port = port;
-
- if (logger != null)
- logger.Warn(
- "Please notice: the API and REST routes implemented in this version " +
- "of the source code are not specified and standardised by the" +
- "specification Details of the Administration Shell. " +
- "The hereby stated approach is solely the opinion of its author(s).");
-
- startedRestServer = new RestServer(serverSettings);
- {
- if (logger != null)
- startedRestServer.Logger = logger;
- startedRestServer.Start();
- }
-
- // tail of the messages, again
- if (logger != null)
- logger.Warn(
- "Please notice: the API and REST routes implemented in this version " +
- "of the source code are not specified and standardised by the" +
- "specification Details of the Administration Shell. " +
- "The hereby stated approach is solely the opinion of its author(s).");
- }
-
- public static void Stop()
- {
- if (startedRestServer != null)
- try
- {
- startedRestServer.Stop();
- startedRestServer = null;
- }
- catch (Exception ex)
- {
- AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex);
- }
- }
- }
-}
diff --git a/src/AasxRestServerLibrary/AasxRestServerLibrary.csproj b/src/AasxRestServerLibrary/AasxRestServerLibrary.csproj
deleted file mode 100644
index 7e653816d..000000000
--- a/src/AasxRestServerLibrary/AasxRestServerLibrary.csproj
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
- net6.0
- Library
- false
- false
-
-
-
-
-
-
-
-
-
diff --git a/src/AasxRestServerLibrary/Docs/REST_routes.xlsx b/src/AasxRestServerLibrary/Docs/REST_routes.xlsx
deleted file mode 100644
index b3fd53dd2..000000000
Binary files a/src/AasxRestServerLibrary/Docs/REST_routes.xlsx and /dev/null differ
diff --git a/src/AasxRestServerLibrary/GrapevineLoggerConsumers.cs b/src/AasxRestServerLibrary/GrapevineLoggerConsumers.cs
deleted file mode 100644
index 6bc4d4423..000000000
--- a/src/AasxRestServerLibrary/GrapevineLoggerConsumers.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
-Copyright (c) 2018-2023 Festo AG & Co. KG
-Author: Michael Hoffmeister
-
-This source code is licensed under the Apache License 2.0 (see LICENSE.txt).
-
-This source code may use other Open Source software components (see LICENSE.txt).
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Grapevine.Interfaces.Shared;
-
-/*
-Please notice:
-The API and REST routes implemented in this version of the source code are not specified and standardised by the
-specification Details of the Administration Shell. The hereby stated approach is solely the opinion of its author(s).
-*/
-
-namespace AasxRestServerLibrary
-{
- public class GrapevineLoggerSuper : IGrapevineLogger
- {
- // IGrapevineLogger side
-
- private LogLevel level = LogLevel.Trace;
-
- public LogLevel Level { get { return level; } set { level = value; } }
-
- public void Debug(object obj) { if (this.level >= LogLevel.Debug) this.Append("DBG: {0}", obj); }
- public void Debug(string message) { if (this.level >= LogLevel.Debug) this.Append("DBG: {0}", message); }
- public void Debug(string message, Exception ex)
- {
- if (this.level >= LogLevel.Debug)
- this.Append("DBG: Exception when {0}: {1}", message, ex.ToString());
- }
- public void Error(string message, Exception ex)
- {
- if (this.level >= LogLevel.Error)
- this.Append("ERR: Exception when {0}: {1}", message, ex.ToString());
- }
- public void Error(string message) { if (this.level >= LogLevel.Error) this.Append("ERR: {0}", message); }
- public void Error(object obj) { if (this.level >= LogLevel.Error) this.Append("ERR: {0}", obj); }
- public void Fatal(string message) { if (this.level >= LogLevel.Fatal) this.Append("FTL: {0}", message); }
- public void Fatal(object obj) { if (this.level >= LogLevel.Fatal) this.Append("FTL: {0}", obj); }
- public void Fatal(string message, Exception ex)
- {
- if (this.level >= LogLevel.Fatal)
- this.Append("FTL: Exception when {0}: {1}", message, ex.ToString());
- }
- public void Info(string message, Exception ex)
- {
- if (this.level >= LogLevel.Info) this.Append("INF: Exception when {0}: {1}", message, ex.ToString());
- }
- public void Info(string message)
- {
- if (this.level >= LogLevel.Info) this.Append("INF: {0}", message);
- }
- public void Info(object obj) { if (this.level >= LogLevel.Info) this.Append("INF: {0}", obj); }
- public void Log(LogEvent evt) { if (this.level >= evt.Level) this.Append("{0}", evt.Message); }
- public void Trace(string message, Exception ex)
- {
- if (this.level >= LogLevel.Debug) this.Append("TRC: Exception when {0}: {1}", message, ex.ToString());
- }
- public void Trace(string message) { if (this.level >= LogLevel.Trace) this.Append("TRC: {0}", message); }
- public void Trace(object obj) { if (this.level >= LogLevel.Trace) this.Append("TRC: {0}", obj); }
- public void Warn(string message) { if (this.level >= LogLevel.Warn) this.Append("WRN: {0}", message); }
- public void Warn(string message, Exception ex)
- {
- if (this.level >= LogLevel.Warn) this.Append("WRN: Exception when {0}: {1}", message, ex.ToString());
- }
- public void Warn(object obj) { if (this.level >= LogLevel.Warn) this.Append("WRN: {0}", obj); }
-
- // Consumer side
-
- public virtual void Append(string msg, params object[] args)
- {
- }
-
- }
-
- public class GrapevineLoggerToConsole : GrapevineLoggerSuper
- {
- public override void Append(string msg, params object[] args)
- {
- Console.Error.WriteLine(msg, args);
- Console.Error.Flush();
- }
- }
-
- public class GrapevineLoggerToListOfStrings : GrapevineLoggerSuper
- {
- private List list = new List();
-
- public override void Append(string msg, params object[] args)
- {
- lock (list)
- {
- list.Add(string.Format(msg, args));
- }
- }
-
- public string Pop()
- {
- if (list == null)
- return null;
-
- lock (list)
- {
- if (list.Count < 1)
- return null;
-
- var res = list[0];
- list.RemoveAt(0);
- return res;
- }
- }
- }
-
-}
diff --git a/src/AasxRestServerLibrary/LICENSE.txt b/src/AasxRestServerLibrary/LICENSE.txt
deleted file mode 100644
index 75f36a4ff..000000000
--- a/src/AasxRestServerLibrary/LICENSE.txt
+++ /dev/null
@@ -1,1475 +0,0 @@
-Copyright (c) 2018-2023 Festo AG & Co. KG
-,
-author: Michael Hoffmeister
-
-Copyright (c) 2019-2021 PHOENIX CONTACT GmbH & Co. KG
-,
-author: Andreas Orzelski
-
-Copyright (c) 2019-2020 Fraunhofer IOSB-INA Lemgo,
- eine rechtlich nicht selbstaendige Einrichtung der Fraunhofer-Gesellschaft
- zur Foerderung der angewandten Forschung e.V.
-
-Copyright (c) 2020 Schneider Electric Automation GmbH
-,
-author: Marco Mendes
-
-Copyright (c) 2020 SICK AG
-
-Copyright (c) 2021 KEB Automation KG
-
-Copyright (c) 2021 Lenze SE
-author: Jonas Grote, Denis Göllner, Sebastian Bischof
-
-The AASX Package Explorer is licensed under the Apache License 2.0
-(Apache-2.0, see below).
-
-The AASX Package Explorer is a sample application for demonstration of the
-features of the Asset Administration Shell.
-The implementation uses the concepts of the document "Details of the Asset
-Administration Shell" published on www.plattform-i40.de which is licensed
-under Creative Commons CC BY-ND 3.0 DE.
-
-When using eCl@ss or IEC CDD data, please check the corresponding license
-conditions.
-
--------------------------------------------------------------------------------
-
-The components below are used in AASX Package Explorer.
-The related licenses are listed for information purposes only.
-Some licenses may only apply to their related plugins.
-
-The browser functionality is licensed under the cefSharp license (see below).
-
-The Newtonsoft.JSON serialization is licensed under the MIT License
-(MIT, see below).
-
-The QR code generation is licensed under the MIT license (MIT, see below).
-
-The Zxing.Net Dot Matrix Code (DMC) generation is licensed under
-the Apache License 2.0 (Apache-2.0, see below).
-
-The Grapevine REST server framework is licensed under Apache License 2.0
-(Apache-2.0, see below).
-
-The AutomationML.Engine is licensed under the MIT license (MIT, see below).
-
-The MQTT server and client is licensed under the MIT license (MIT, see below).
-
-The ClosedXML Excel reader/writer is licensed under the MIT license (MIT,
-see below).
-
-The CountryFlag WPF control is licensed under the Code Project Open License
-(CPOL, see below).
-
-The DocumentFormat.OpenXml SDK is licensed under the MIT license (MIT,
-see below).
-
-The ExcelNumberFormat number parser is licensed under the MIT license (MIT,
-see below).
-
-The FastMember reflection access is licensed under Apache License 2.0
-(Apache-2.0, see below).
-
-The IdentityModel OpenID client is licensed under Apache License 2.0
-(Apache-2.0, see below).
-
-The jose-jwt object signing and encryption is licensed under the
-MIT license (MIT, see below).
-
-The ExcelDataReader is licensed under the MIT license (MIT, see below).
-
-Portions copyright (c) by OPC Foundation, Inc. and licensed under the
-Reciprocal Community License (RCL, see below)
-
-The OPC UA Example Code of OPC UA Standard is licensed under the MIT license
-(MIT, see below).
-
-The MSAGL (Microsoft Automatic Graph Layout) is licensed under the MIT license
-(MIT, see below)
-
-Glob (https://www.nuget.org/packages/Glob/) is licensed under the MIT license
-(MIT, see below).
-
-The Magick.NET library is licensed under Apache License 2.0
-(Apache-2.0, see below).
-
-The SSharp.NET library (https://github.com/PetroProtsyk/SSharp) is licensed
-under Apache License 2.0 (Apache-2.0, see below).
-
--------------------------------------------------------------------------------
-
-
-With respect to AASX Package Explorer
-=====================================
-
-(http://www.apache.org/licenses/LICENSE-2.0)
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
-
-With respect to cefSharp
-========================
-
-(https://raw.githubusercontent.com/cefsharp/CefSharp/master/LICENSE)
-
-Copyright © The CefSharp Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following disclaimer
- in the documentation and/or other materials provided with the
- distribution.
-
- * Neither the name of Google Inc. nor the name Chromium Embedded
- Framework nor the name CefSharp nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-With respect to Newtonsoft.Json
-===============================
-
-(https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md)
-
-The MIT License (MIT)
-
-Copyright (c) 2007 James Newton-King
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-With respect to QRcoder
-=======================
-
-(https://github.com/codebude/QRCoder/blob/master/LICENSE.txt)
-
-The MIT License (MIT)
-
-Copyright (c) 2013-2018 Raffael Herrmann
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-With respect to ZXing.Net
-=========================
-With respect to Grapevine
-=========================
-With respect to FastMember
-==========================
-With respect to IdentityModel
-=============================
-
-(http://www.apache.org/licenses/LICENSE-2.0)
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
-
-With respect to AutomationML.Engine
-===================================
-
-(https://raw.githubusercontent.com/AutomationML/AMLEngine2.1/master/license.txt)
-
-The MIT License (MIT)
-
-Copyright 2017 AutomationML e.V.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-
-With respect to MQTTnet
-=======================
-
-(https://github.com/chkr1011/MQTTnet/blob/master/LICENSE)
-
-MIT License
-
-MQTTnet Copyright (c) 2016-2019 Christian Kratky
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-With resepct to ClosedXML
-=========================
-
-(https://github.com/ClosedXML/ClosedXML/blob/develop/LICENSE)
-
-MIT License
-
-Copyright (c) 2016 ClosedXML
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-With resepct to CountryFlag
-===========================
-
-(https://www.codeproject.com/Articles/190722/WPF-CountryFlag-Control)
-
-The Code Project Open License (CPOL) 1.02
-
-Copyright © 2017 Meshack Musundi
-
-Preamble
-
-This License governs Your use of the Work. This License is intended to allow
-developers to use the Source Code and Executable Files provided as part of
-the Work in any application in any form.
-
-The main points subject to the terms of the License are:
-
- Source Code and Executable Files can be used in commercial applications;
- Source Code and Executable Files can be redistributed; and
- Source Code can be modified to create derivative works.
- No claim of suitability, guarantee, or any warranty whatsoever is provided.
- The software is provided "as-is".
- The Article(s) accompanying the Work may not be distributed or republished
- without the Author's consent
-
-This License is entered between You, the individual or other entity reading or
-otherwise making use of the Work licensed pursuant to this License and the
-individual or other entity which offers the Work under the terms of this
-License ("Author").
-
-License
-
-THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS
-CODE PROJECT OPEN LICENSE ("LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT
-AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED
-UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
-
-BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HEREIN, YOU ACCEPT AND AGREE
-TO BE BOUND BY THE TERMS OF THIS LICENSE. THE AUTHOR GRANTS YOU THE RIGHTS
-CONTAINED HEREIN IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
-CONDITIONS. IF YOU DO NOT AGREE TO ACCEPT AND BE BOUND BY THE TERMS OF THIS
-LICENSE, YOU CANNOT MAKE ANY USE OF THE WORK.
-
-Definitions.
- "Articles" means, collectively, all articles written by Author which
-describes how the Source Code and Executable Files for the Work may
-be used by a user.
- "Author" means the individual or entity that offers the Work under
-the terms of this License.
- "Derivative Work" means a work based upon the Work or upon the Work
-and other pre-existing works.
- "Executable Files" refer to the executables, binary files,
-configuration and any required data files included in the Work.
- "Publisher" means the provider of the website, magazine, CD-ROM,
-DVD or other medium from or by which the Work is obtained by You.
- "Source Code" refers to the collection of source code and
-configuration files used to create the Executable Files.
- "Standard Version" refers to such a Work if it has not been modified,
-or has been modified in accordance with the consent of the Author,
-such consent being in the full discretion of the Author.
- "Work" refers to the collection of files distributed by the Publisher,
-including the Source Code, Executable Files, binaries, data files,
-documentation, whitepapers and the Articles.
- "You" is you, an individual or entity wishing to use the Work and
-exercise your rights under this License.
-
-Fair Use/Fair Use Rights. Nothing in this License is intended to reduce,
-limit, or restrict any rights arising from fair use, fair dealing,
-first sale or other limitations on the exclusive rights of the
-copyright owner under copyright law or other applicable laws.
-
-License Grant. Subject to the terms and conditions of this License, the
-Author hereby grants You a worldwide, royalty-free, non-exclusive,
-perpetual (for the duration of the applicable copyright) license
-to exercise the rights in the Work as stated below:
- You may use the standard version of the Source Code or Executable
-Files in Your own applications.
- You may apply bug fixes, portability fixes and other modifications
-obtained from the Public Domain or from the Author. A Work modified
-in such a way shall still be considered the standard version and will
-be subject to this License.
- You may otherwise modify Your copy of this Work (excluding the Articles)
-in any way to create a Derivative Work, provided that You insert a prominent
-notice in each changed file stating how, when and where You changed that file.
- You may distribute the standard version of the Executable Files and Source
-Code or Derivative Work in aggregate with other (possibly commercial)
-programs as part of a larger (possibly commercial) software distribution.
- The Articles discussing the Work published in any form by the author may
-not be distributed or republished without the Author's consent. The author
-retains copyright to any such Articles. You may use the Executable Files and
-Source Code pursuant to this License but you may not repost or republish or
-otherwise distribute or make available the Articles, without the prior written
-consent of the Author.
-
-Any subroutines or modules supplied by You and linked into the Source Code
-or Executable Files of this Work shall not be considered part of this Work
-and will not be subject to the terms of this License.
-
-Patent License. Subject to the terms and conditions of this License, each
-Author hereby grants to You a perpetual, worldwide, non-exclusive, no-charge,
-royalty-free, irrevocable (except as stated in this section) patent license
-to make, have made, use, import, and otherwise transfer the Work.
-
-Restrictions. The license granted in Section 3 above is expressly made subject
-to and limited by the following restrictions:
- You agree not to remove any of the original copyright, patent, trademark,
-and attribution notices and associated disclaimers that may appear in the
-Source Code or Executable Files.
- You agree not to advertise or in any way imply that this Work is a product
-of Your own.
- The name of the Author may not be used to endorse or promote products
-derived from the Work without the prior written consent of the Author.
- You agree not to sell, lease, or rent any part of the Work. This does
-not restrict you from including the Work or any part of the Work inside
-a larger software distribution that itself is being sold. The Work by itself,
-though, cannot be sold, leased or rented.
- You may distribute the Executable Files and Source Code only under the terms
-of this License, and You must include a copy of, or the Uniform Resource
-Identifier for, this License with every copy of the Executable Files or
-Source Code You distribute and ensure that anyone receiving such Executable
-Files and Source Code agrees that the terms of this License apply to such
-Executable Files and/or Source Code. You may not offer or impose any terms
-on the Work that alter or restrict the terms of this License or the
-recipients' exercise of the rights granted hereunder. You may not sublicense
-the Work. You must keep intact all notices that refer to this License and to
-the disclaimer of warranties. You may not distribute the Executable Files or
-Source Code with any technological measures that control access or use of the
-Work in a manner inconsistent with the terms of this License.
- You agree not to use the Work for illegal, immoral or improper
-purposes, or on pages containing illegal, immoral or improper material.
-The Work is subject to applicable export laws. You agree to comply with all
-such laws and regulations that may apply to the Work after Your receipt of
-the Work.
-
-Representations, Warranties and Disclaimer. THIS WORK IS PROVIDED "AS IS",
-"WHERE IS" AND "AS AVAILABLE", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR
-CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE,
-INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC.
-AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES
-OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS
-OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR
-PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK
-(OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES.
-YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE
-WORKS.
-
-Indemnity. You agree to defend, indemnify and hold harmless the Author and the
-Publisher from and against any claims, suits, losses, damages, liabilities,
-costs, and expenses (including reasonable legal or attorneys’ fees)
-resulting from or relating to any use of the Work by You.
-
-Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW,
-IN NO EVENT WILL THE AUTHOR OR THE PUBLISHER BE LIABLE TO YOU ON ANY LEGAL
-THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY
-DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK OR OTHERWISE,
-EVEN IF THE AUTHOR OR THE PUBLISHER HAS BEEN ADVISED OF THE POSSIBILITY
-OF SUCH DAMAGES.
-
-Termination.
- This License and the rights granted hereunder will terminate
-automatically upon any breach by You of any term of this License.
-Individuals or entities who have received Derivative Works from You under
-this License, however, will not have their licenses terminated provided such
-individuals or entities remain in full compliance with those licenses.
-Sections 1, 2, 6, 7, 8, 9, 10 and 11 will survive any termination of
-this License.
- If You bring a copyright, trademark, patent or any other infringement
-claim against any contributor over infringements You claim are made by the
-Work, your License from such contributor to the Work ends automatically.
- Subject to the above terms and conditions, this License is perpetual
-(for the duration of the applicable copyright in the Work).
-Notwithstanding the above, the Author reserves the right to release the Work
-under different license terms or to stop distributing the Work at any time;
-provided, however that any such election will not serve to withdraw this
-License (or any other license that has been, or is required to be,
-granted under the terms of this License), and this License will continue
-in full force and effect unless terminated as stated above.
-
-Publisher. The parties hereby confirm that the Publisher shall not, under
-any circumstances, be responsible for and shall not have any liability
-in respect of the subject matter of this License. The Publisher makes no
-warranty whatsoever in connection with the Work and shall not be liable
-to You or any party on any legal theory for any damages whatsoever, including
-without limitation any general, special, incidental or consequential damages
-arising in connection to this license. The Publisher reserves the right to
-cease making the Work available to You at any time without notice
-
-Miscellaneous
- This License shall be governed by the laws of the location of the head
-office of the Author or if the Author is an individual, the laws of
-location of the principal place of residence of the Author.
- If any provision of this License is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of the
-remainder of the terms of this License, and without further action by the
-parties to this License, such provision shall be reformed to the minimum
-extent necessary to make such provision valid and enforceable.
- No term or provision of this License shall be deemed waived and no
-breach consented to unless such waiver or consent shall be in writing
-and signed by the party to be charged with such waiver or consent.
- This License constitutes the entire agreement between the parties
-with respect to the Work licensed herein. There are no understandings,
-agreements or representations with respect to the Work not specified herein.
-The Author shall not be bound by any additional provisions that may appear
-in any communication from You. This License may not be modified without
-the mutual written agreement of the Author and You.
-
-
-With respect to DocumentFormat.OpenXml
-======================================
-
-(https://github.com/OfficeDev/Open-XML-SDK/blob/master/LICENSE)
-
-The MIT License (MIT)
-
-Copyright (c) Microsoft Corporation
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-With respect to ExcelNumberFormat
-=================================
-
-(https://github.com/andersnm/ExcelNumberFormat/blob/master/LICENSE)
-
-The MIT License (MIT)
-
-Copyright (c) 2017 andersnm
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-With respect to jose-jwt
-========================
-
-(https://github.com/dvsekhvalnov/jose-jwt/blob/master/LICENSE)
-
-The MIT License (MIT)
-
-Copyright (c) 2014-2019 dvsekhvalnov
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
-With resepect to ExcelDataReader
-================================
-
-(https://github.com/ExcelDataReader/ExcelDataReader/blob/develop/LICENSE)
-
-The MIT License (MIT)
-
-Copyright (c) 2014 ExcelDataReader
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-With resepect to OPC UA Example Code
-====================================
-
- * Copyright (c) 2005-2019 The OPC Foundation, Inc. All rights reserved.
- *
- * OPC Foundation MIT License 1.00
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * The complete license agreement can be found here:
- * http://opcfoundation.org/License/MIT/1.00/
-
-
-With respect to OPC Foundation
-==============================
-
-RCL License
-Reciprocal Community License 1.00 (RCL1.00)
-Version 1.00, June 24, 2009
-Copyright (C) 2008,2009 OPC Foundation, Inc., All Rights Reserved.
-
-https://opcfoundation.org/license/rcl.html
-
-Remark: PHOENIX CONTACT GmbH & Co. KG and Festo SE & Co. KG are members
-of OPC foundation.
-
-With respect to MSAGL (Microsoft Automatic Graph Layout)
-========================================================
-(see: https://github.com/microsoft/automatic-graph-layout/blob/master/LICENSE)
-
-Microsoft Automatic Graph Layout, MSAGL
-
-Copyright (c) Microsoft Corporation
-
-All rights reserved.
-
-MIT License
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-""Software""), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
-With respect to Glob (https://www.nuget.org/packages/Glob/)
-===========================================================
-(see: https://raw.githubusercontent.com/kthompson/glob/master/LICENSE)
-
-The MIT License (MIT)
-
-Copyright (c) 2013-2019 Kevin Thompson
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-With respect to Magick.NET
-==========================
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-With respect to SSharp.NET library
-==================================
-
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/src/AasxRestServerLibrary/Properties/AssemblyInfo.cs b/src/AasxRestServerLibrary/Properties/AssemblyInfo.cs
deleted file mode 100644
index edad697fd..000000000
--- a/src/AasxRestServerLibrary/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// Allgemeine Informationen über eine Assembly werden über die folgenden
-// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
-// die einer Assembly zugeordnet sind.
-[assembly: AssemblyTitle("AasxRestServerLibrary")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("AasxRestServerLibrary")]
-[assembly: AssemblyCopyright("Copyright © 2019")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
-// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
-// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
-[assembly: ComVisible(false)]
-
-// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
-[assembly: Guid("967e60e3-d668-42a3-aa0b-1a031c20d871")]
-
-// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
-//
-// Hauptversion
-// Nebenversion
-// Buildnummer
-// Revision
-//
-// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
-// indem Sie "*" wie unten gezeigt eingeben:
-//// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/AasxUaNetConsoleServer/AasxUaNetConsoleServer.csproj b/src/AasxUaNetConsoleServer/AasxUaNetConsoleServer.csproj
deleted file mode 100644
index 6e6bb5d45..000000000
--- a/src/AasxUaNetConsoleServer/AasxUaNetConsoleServer.csproj
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
- net6.0
- Exe
- false
- false
-
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
-
-
-
-
-
-
-
-
diff --git a/src/AasxUaNetConsoleServer/LICENSE.txt b/src/AasxUaNetConsoleServer/LICENSE.txt
deleted file mode 100644
index 75f36a4ff..000000000
--- a/src/AasxUaNetConsoleServer/LICENSE.txt
+++ /dev/null
@@ -1,1475 +0,0 @@
-Copyright (c) 2018-2023 Festo AG & Co. KG
-,
-author: Michael Hoffmeister
-
-Copyright (c) 2019-2021 PHOENIX CONTACT GmbH & Co. KG
-,
-author: Andreas Orzelski
-
-Copyright (c) 2019-2020 Fraunhofer IOSB-INA Lemgo,
- eine rechtlich nicht selbstaendige Einrichtung der Fraunhofer-Gesellschaft
- zur Foerderung der angewandten Forschung e.V.
-
-Copyright (c) 2020 Schneider Electric Automation GmbH
-,
-author: Marco Mendes
-
-Copyright (c) 2020 SICK AG
-
-Copyright (c) 2021 KEB Automation KG
-
-Copyright (c) 2021 Lenze SE
-author: Jonas Grote, Denis Göllner, Sebastian Bischof
-
-The AASX Package Explorer is licensed under the Apache License 2.0
-(Apache-2.0, see below).
-
-The AASX Package Explorer is a sample application for demonstration of the
-features of the Asset Administration Shell.
-The implementation uses the concepts of the document "Details of the Asset
-Administration Shell" published on www.plattform-i40.de which is licensed
-under Creative Commons CC BY-ND 3.0 DE.
-
-When using eCl@ss or IEC CDD data, please check the corresponding license
-conditions.
-
--------------------------------------------------------------------------------
-
-The components below are used in AASX Package Explorer.
-The related licenses are listed for information purposes only.
-Some licenses may only apply to their related plugins.
-
-The browser functionality is licensed under the cefSharp license (see below).
-
-The Newtonsoft.JSON serialization is licensed under the MIT License
-(MIT, see below).
-
-The QR code generation is licensed under the MIT license (MIT, see below).
-
-The Zxing.Net Dot Matrix Code (DMC) generation is licensed under
-the Apache License 2.0 (Apache-2.0, see below).
-
-The Grapevine REST server framework is licensed under Apache License 2.0
-(Apache-2.0, see below).
-
-The AutomationML.Engine is licensed under the MIT license (MIT, see below).
-
-The MQTT server and client is licensed under the MIT license (MIT, see below).
-
-The ClosedXML Excel reader/writer is licensed under the MIT license (MIT,
-see below).
-
-The CountryFlag WPF control is licensed under the Code Project Open License
-(CPOL, see below).
-
-The DocumentFormat.OpenXml SDK is licensed under the MIT license (MIT,
-see below).
-
-The ExcelNumberFormat number parser is licensed under the MIT license (MIT,
-see below).
-
-The FastMember reflection access is licensed under Apache License 2.0
-(Apache-2.0, see below).
-
-The IdentityModel OpenID client is licensed under Apache License 2.0
-(Apache-2.0, see below).
-
-The jose-jwt object signing and encryption is licensed under the
-MIT license (MIT, see below).
-
-The ExcelDataReader is licensed under the MIT license (MIT, see below).
-
-Portions copyright (c) by OPC Foundation, Inc. and licensed under the
-Reciprocal Community License (RCL, see below)
-
-The OPC UA Example Code of OPC UA Standard is licensed under the MIT license
-(MIT, see below).
-
-The MSAGL (Microsoft Automatic Graph Layout) is licensed under the MIT license
-(MIT, see below)
-
-Glob (https://www.nuget.org/packages/Glob/) is licensed under the MIT license
-(MIT, see below).
-
-The Magick.NET library is licensed under Apache License 2.0
-(Apache-2.0, see below).
-
-The SSharp.NET library (https://github.com/PetroProtsyk/SSharp) is licensed
-under Apache License 2.0 (Apache-2.0, see below).
-
--------------------------------------------------------------------------------
-
-
-With respect to AASX Package Explorer
-=====================================
-
-(http://www.apache.org/licenses/LICENSE-2.0)
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
-
-With respect to cefSharp
-========================
-
-(https://raw.githubusercontent.com/cefsharp/CefSharp/master/LICENSE)
-
-Copyright © The CefSharp Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following disclaimer
- in the documentation and/or other materials provided with the
- distribution.
-
- * Neither the name of Google Inc. nor the name Chromium Embedded
- Framework nor the name CefSharp nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-With respect to Newtonsoft.Json
-===============================
-
-(https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md)
-
-The MIT License (MIT)
-
-Copyright (c) 2007 James Newton-King
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-With respect to QRcoder
-=======================
-
-(https://github.com/codebude/QRCoder/blob/master/LICENSE.txt)
-
-The MIT License (MIT)
-
-Copyright (c) 2013-2018 Raffael Herrmann
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-With respect to ZXing.Net
-=========================
-With respect to Grapevine
-=========================
-With respect to FastMember
-==========================
-With respect to IdentityModel
-=============================
-
-(http://www.apache.org/licenses/LICENSE-2.0)
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
-
-With respect to AutomationML.Engine
-===================================
-
-(https://raw.githubusercontent.com/AutomationML/AMLEngine2.1/master/license.txt)
-
-The MIT License (MIT)
-
-Copyright 2017 AutomationML e.V.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-
-With respect to MQTTnet
-=======================
-
-(https://github.com/chkr1011/MQTTnet/blob/master/LICENSE)
-
-MIT License
-
-MQTTnet Copyright (c) 2016-2019 Christian Kratky
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-With resepct to ClosedXML
-=========================
-
-(https://github.com/ClosedXML/ClosedXML/blob/develop/LICENSE)
-
-MIT License
-
-Copyright (c) 2016 ClosedXML
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-With resepct to CountryFlag
-===========================
-
-(https://www.codeproject.com/Articles/190722/WPF-CountryFlag-Control)
-
-The Code Project Open License (CPOL) 1.02
-
-Copyright © 2017 Meshack Musundi
-
-Preamble
-
-This License governs Your use of the Work. This License is intended to allow
-developers to use the Source Code and Executable Files provided as part of
-the Work in any application in any form.
-
-The main points subject to the terms of the License are:
-
- Source Code and Executable Files can be used in commercial applications;
- Source Code and Executable Files can be redistributed; and
- Source Code can be modified to create derivative works.
- No claim of suitability, guarantee, or any warranty whatsoever is provided.
- The software is provided "as-is".
- The Article(s) accompanying the Work may not be distributed or republished
- without the Author's consent
-
-This License is entered between You, the individual or other entity reading or
-otherwise making use of the Work licensed pursuant to this License and the
-individual or other entity which offers the Work under the terms of this
-License ("Author").
-
-License
-
-THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS
-CODE PROJECT OPEN LICENSE ("LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT
-AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED
-UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
-
-BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HEREIN, YOU ACCEPT AND AGREE
-TO BE BOUND BY THE TERMS OF THIS LICENSE. THE AUTHOR GRANTS YOU THE RIGHTS
-CONTAINED HEREIN IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
-CONDITIONS. IF YOU DO NOT AGREE TO ACCEPT AND BE BOUND BY THE TERMS OF THIS
-LICENSE, YOU CANNOT MAKE ANY USE OF THE WORK.
-
-Definitions.
- "Articles" means, collectively, all articles written by Author which
-describes how the Source Code and Executable Files for the Work may
-be used by a user.
- "Author" means the individual or entity that offers the Work under
-the terms of this License.
- "Derivative Work" means a work based upon the Work or upon the Work
-and other pre-existing works.
- "Executable Files" refer to the executables, binary files,
-configuration and any required data files included in the Work.
- "Publisher" means the provider of the website, magazine, CD-ROM,
-DVD or other medium from or by which the Work is obtained by You.
- "Source Code" refers to the collection of source code and
-configuration files used to create the Executable Files.
- "Standard Version" refers to such a Work if it has not been modified,
-or has been modified in accordance with the consent of the Author,
-such consent being in the full discretion of the Author.
- "Work" refers to the collection of files distributed by the Publisher,
-including the Source Code, Executable Files, binaries, data files,
-documentation, whitepapers and the Articles.
- "You" is you, an individual or entity wishing to use the Work and
-exercise your rights under this License.
-
-Fair Use/Fair Use Rights. Nothing in this License is intended to reduce,
-limit, or restrict any rights arising from fair use, fair dealing,
-first sale or other limitations on the exclusive rights of the
-copyright owner under copyright law or other applicable laws.
-
-License Grant. Subject to the terms and conditions of this License, the
-Author hereby grants You a worldwide, royalty-free, non-exclusive,
-perpetual (for the duration of the applicable copyright) license
-to exercise the rights in the Work as stated below:
- You may use the standard version of the Source Code or Executable
-Files in Your own applications.
- You may apply bug fixes, portability fixes and other modifications
-obtained from the Public Domain or from the Author. A Work modified
-in such a way shall still be considered the standard version and will
-be subject to this License.
- You may otherwise modify Your copy of this Work (excluding the Articles)
-in any way to create a Derivative Work, provided that You insert a prominent
-notice in each changed file stating how, when and where You changed that file.
- You may distribute the standard version of the Executable Files and Source
-Code or Derivative Work in aggregate with other (possibly commercial)
-programs as part of a larger (possibly commercial) software distribution.
- The Articles discussing the Work published in any form by the author may
-not be distributed or republished without the Author's consent. The author
-retains copyright to any such Articles. You may use the Executable Files and
-Source Code pursuant to this License but you may not repost or republish or
-otherwise distribute or make available the Articles, without the prior written
-consent of the Author.
-
-Any subroutines or modules supplied by You and linked into the Source Code
-or Executable Files of this Work shall not be considered part of this Work
-and will not be subject to the terms of this License.
-
-Patent License. Subject to the terms and conditions of this License, each
-Author hereby grants to You a perpetual, worldwide, non-exclusive, no-charge,
-royalty-free, irrevocable (except as stated in this section) patent license
-to make, have made, use, import, and otherwise transfer the Work.
-
-Restrictions. The license granted in Section 3 above is expressly made subject
-to and limited by the following restrictions:
- You agree not to remove any of the original copyright, patent, trademark,
-and attribution notices and associated disclaimers that may appear in the
-Source Code or Executable Files.
- You agree not to advertise or in any way imply that this Work is a product
-of Your own.
- The name of the Author may not be used to endorse or promote products
-derived from the Work without the prior written consent of the Author.
- You agree not to sell, lease, or rent any part of the Work. This does
-not restrict you from including the Work or any part of the Work inside
-a larger software distribution that itself is being sold. The Work by itself,
-though, cannot be sold, leased or rented.
- You may distribute the Executable Files and Source Code only under the terms
-of this License, and You must include a copy of, or the Uniform Resource
-Identifier for, this License with every copy of the Executable Files or
-Source Code You distribute and ensure that anyone receiving such Executable
-Files and Source Code agrees that the terms of this License apply to such
-Executable Files and/or Source Code. You may not offer or impose any terms
-on the Work that alter or restrict the terms of this License or the
-recipients' exercise of the rights granted hereunder. You may not sublicense
-the Work. You must keep intact all notices that refer to this License and to
-the disclaimer of warranties. You may not distribute the Executable Files or
-Source Code with any technological measures that control access or use of the
-Work in a manner inconsistent with the terms of this License.
- You agree not to use the Work for illegal, immoral or improper
-purposes, or on pages containing illegal, immoral or improper material.
-The Work is subject to applicable export laws. You agree to comply with all
-such laws and regulations that may apply to the Work after Your receipt of
-the Work.
-
-Representations, Warranties and Disclaimer. THIS WORK IS PROVIDED "AS IS",
-"WHERE IS" AND "AS AVAILABLE", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR
-CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE,
-INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC.
-AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES
-OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS
-OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR
-PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK
-(OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES.
-YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE
-WORKS.
-
-Indemnity. You agree to defend, indemnify and hold harmless the Author and the
-Publisher from and against any claims, suits, losses, damages, liabilities,
-costs, and expenses (including reasonable legal or attorneys’ fees)
-resulting from or relating to any use of the Work by You.
-
-Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW,
-IN NO EVENT WILL THE AUTHOR OR THE PUBLISHER BE LIABLE TO YOU ON ANY LEGAL
-THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY
-DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK OR OTHERWISE,
-EVEN IF THE AUTHOR OR THE PUBLISHER HAS BEEN ADVISED OF THE POSSIBILITY
-OF SUCH DAMAGES.
-
-Termination.
- This License and the rights granted hereunder will terminate
-automatically upon any breach by You of any term of this License.
-Individuals or entities who have received Derivative Works from You under
-this License, however, will not have their licenses terminated provided such
-individuals or entities remain in full compliance with those licenses.
-Sections 1, 2, 6, 7, 8, 9, 10 and 11 will survive any termination of
-this License.
- If You bring a copyright, trademark, patent or any other infringement
-claim against any contributor over infringements You claim are made by the
-Work, your License from such contributor to the Work ends automatically.
- Subject to the above terms and conditions, this License is perpetual
-(for the duration of the applicable copyright in the Work).
-Notwithstanding the above, the Author reserves the right to release the Work
-under different license terms or to stop distributing the Work at any time;
-provided, however that any such election will not serve to withdraw this
-License (or any other license that has been, or is required to be,
-granted under the terms of this License), and this License will continue
-in full force and effect unless terminated as stated above.
-
-Publisher. The parties hereby confirm that the Publisher shall not, under
-any circumstances, be responsible for and shall not have any liability
-in respect of the subject matter of this License. The Publisher makes no
-warranty whatsoever in connection with the Work and shall not be liable
-to You or any party on any legal theory for any damages whatsoever, including
-without limitation any general, special, incidental or consequential damages
-arising in connection to this license. The Publisher reserves the right to
-cease making the Work available to You at any time without notice
-
-Miscellaneous
- This License shall be governed by the laws of the location of the head
-office of the Author or if the Author is an individual, the laws of
-location of the principal place of residence of the Author.
- If any provision of this License is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of the
-remainder of the terms of this License, and without further action by the
-parties to this License, such provision shall be reformed to the minimum
-extent necessary to make such provision valid and enforceable.
- No term or provision of this License shall be deemed waived and no
-breach consented to unless such waiver or consent shall be in writing
-and signed by the party to be charged with such waiver or consent.
- This License constitutes the entire agreement between the parties
-with respect to the Work licensed herein. There are no understandings,
-agreements or representations with respect to the Work not specified herein.
-The Author shall not be bound by any additional provisions that may appear
-in any communication from You. This License may not be modified without
-the mutual written agreement of the Author and You.
-
-
-With respect to DocumentFormat.OpenXml
-======================================
-
-(https://github.com/OfficeDev/Open-XML-SDK/blob/master/LICENSE)
-
-The MIT License (MIT)
-
-Copyright (c) Microsoft Corporation
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-With respect to ExcelNumberFormat
-=================================
-
-(https://github.com/andersnm/ExcelNumberFormat/blob/master/LICENSE)
-
-The MIT License (MIT)
-
-Copyright (c) 2017 andersnm
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-With respect to jose-jwt
-========================
-
-(https://github.com/dvsekhvalnov/jose-jwt/blob/master/LICENSE)
-
-The MIT License (MIT)
-
-Copyright (c) 2014-2019 dvsekhvalnov
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
-With resepect to ExcelDataReader
-================================
-
-(https://github.com/ExcelDataReader/ExcelDataReader/blob/develop/LICENSE)
-
-The MIT License (MIT)
-
-Copyright (c) 2014 ExcelDataReader
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-With resepect to OPC UA Example Code
-====================================
-
- * Copyright (c) 2005-2019 The OPC Foundation, Inc. All rights reserved.
- *
- * OPC Foundation MIT License 1.00
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * The complete license agreement can be found here:
- * http://opcfoundation.org/License/MIT/1.00/
-
-
-With respect to OPC Foundation
-==============================
-
-RCL License
-Reciprocal Community License 1.00 (RCL1.00)
-Version 1.00, June 24, 2009
-Copyright (C) 2008,2009 OPC Foundation, Inc., All Rights Reserved.
-
-https://opcfoundation.org/license/rcl.html
-
-Remark: PHOENIX CONTACT GmbH & Co. KG and Festo SE & Co. KG are members
-of OPC foundation.
-
-With respect to MSAGL (Microsoft Automatic Graph Layout)
-========================================================
-(see: https://github.com/microsoft/automatic-graph-layout/blob/master/LICENSE)
-
-Microsoft Automatic Graph Layout, MSAGL
-
-Copyright (c) Microsoft Corporation
-
-All rights reserved.
-
-MIT License
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-""Software""), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
-With respect to Glob (https://www.nuget.org/packages/Glob/)
-===========================================================
-(see: https://raw.githubusercontent.com/kthompson/glob/master/LICENSE)
-
-The MIT License (MIT)
-
-Copyright (c) 2013-2019 Kevin Thompson
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-With respect to Magick.NET
-==========================
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-With respect to SSharp.NET library
-==================================
-
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/src/AasxUaNetConsoleServer/Net46AasxServerPlugin.Config.xml b/src/AasxUaNetConsoleServer/Net46AasxServerPlugin.Config.xml
deleted file mode 100644
index 096d2c34c..000000000
--- a/src/AasxUaNetConsoleServer/Net46AasxServerPlugin.Config.xml
+++ /dev/null
@@ -1,208 +0,0 @@
-
-
-
- UA Core Sample Server
- urn:localhost:OPCFoundation:CoreSampleServer
- http://opcfoundation.org/UA/CoreSampleServer
- Server_0
-
-
-
-
-
- X509Store
- CurrentUser\My
- CN=UA Core Sample Server, C=US, S=Arizona, O=OPC Foundation, DC=localhost
-
-
-
-
- Directory
- %LocalApplicationData%/OPC Foundation/pki/issuer
-
-
-
-
- Directory
- %LocalApplicationData%/OPC Foundation/pki/trusted
-
-
-
-
- Directory
- %LocalApplicationData%/OPC Foundation/pki/rejected
-
-
-
- true
-
-
-
-
-
-
- 600000
- 1048576
- 4194304
- 65535
- 4194304
- 65535
- 300000
- 3600000
-
-
-
-
- opc.tcp://localhost:51210/UA/SampleServer
- https://localhost:51212/UA/SampleServer/
-
-
-
-
-
-
-
- SignAndEncrypt_3
- http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256
-
-
-
- None_1
- http://opcfoundation.org/UA/SecurityPolicy#None
-
-
- Sign_2
-
-
-
- SignAndEncrypt_3
-
-
-
-
- 5
- 100
- 2000
-
-
-
- Anonymous_0
- http://opcfoundation.org/UA/SecurityPolicy#None
-
-
- UserName_1
-
-
- Certificate_2
-
-
-
- false
- 100
- 10000
- 3600000
- 10
- 10
- 100
- 600000
- 100
- 3600000
- 50
- 3600000
- 100
- 100
- 1000
- 1000
-
-
- 0
- Opc.Ua.Server.nodes.xml
-
- 20
- 100
- 10000
- 10000
-
-
-
- Standard UA Server Profile
- Data Access Server Facet
- Method Server Facet
-
- 5
-
- DA
-
-
- PFX
- PEM
-
- 0
- false
-
-
-
-
-
-
-
-
- UInt32
- 100
- UInt32
-
-
- Double
- 100
- Double
-
-
-
-
-
-
-
- %LocalApplicationData%/Logs/Opc.Ua.CoreSampleServer.log.txt
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
\ No newline at end of file
diff --git a/src/AasxUaNetConsoleServer/Opc.Ua.SampleServer.Config.xml b/src/AasxUaNetConsoleServer/Opc.Ua.SampleServer.Config.xml
deleted file mode 100644
index b60a351b1..000000000
--- a/src/AasxUaNetConsoleServer/Opc.Ua.SampleServer.Config.xml
+++ /dev/null
@@ -1,207 +0,0 @@
-
-
- UA Core Sample Server
- urn:localhost:OPCFoundation:CoreSampleServer
- http://opcfoundation.org/UA/CoreSampleServer
- Server_0
-
-
-
-
-
- X509Store
- CurrentUser\My
- CN=UA Core Sample Server, C=US, S=Arizona, O=OPC Foundation, DC=localhost
-
-
-
-
- Directory
- %LocalApplicationData%/OPC Foundation/pki/issuer
-
-
-
-
- Directory
- %LocalApplicationData%/OPC Foundation/pki/trusted
-
-
-
-
- Directory
- %LocalApplicationData%/OPC Foundation/pki/rejected
-
-
-
- false
-
-
-
-
-
-
- 600000
- 1048576
- 4194304
- 65535
- 4194304
- 65535
- 300000
- 3600000
-
-
-
-
- opc.tcp://localhost:51210/UA/SampleServer
- https://localhost:51212/UA/SampleServer/
-
-
-
-
-
-
-
- SignAndEncrypt_3
- http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256
-
-
-
- None_1
- http://opcfoundation.org/UA/SecurityPolicy#None
-
-
- Sign_2
-
-
-
- SignAndEncrypt_3
-
-
-
-
- 5
- 100
- 2000
-
-
-
- Anonymous_0
- http://opcfoundation.org/UA/SecurityPolicy#None
-
-
- UserName_1
-
-
- Certificate_2
-
-
-
- false
- 100
- 10000
- 3600000
- 10
- 10
- 100
- 600000
- 100
- 3600000
- 50
- 3600000
- 100
- 100
- 1000
- 1000
-
-
- 0
- Opc.Ua.Server.nodes.xml
-
- 20
- 100
- 10000
- 10000
-
-
-
- Standard UA Server Profile
- Data Access Server Facet
- Method Server Facet
-
- 5
-
- DA
-
-
- PFX
- PEM
-
- 0
- false
-
-
-
-
-
-
-
-
- UInt32
- 100
- UInt32
-
-
- Double
- 100
- Double
-
-
-
-
-
-
-
- %LocalApplicationData%/Logs/Opc.Ua.CoreSampleServer.log.txt
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
\ No newline at end of file
diff --git a/src/AasxUaNetConsoleServer/Program.cs b/src/AasxUaNetConsoleServer/Program.cs
deleted file mode 100644
index 052b5a1f3..000000000
--- a/src/AasxUaNetConsoleServer/Program.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-Copyright (c) 2018-2023 Festo AG & Co. KG
-Author: Michael Hoffmeister
-
-This source code is licensed under the Apache License 2.0 (see LICENSE.txt).
-
-This source code may use other Open Source software components (see LICENSE.txt).
-*/
-
-// TODO (MIHO, 2020-08-03): check SOURCE
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using AasOpcUaServer;
-using AasxIntegrationBase;
-using AasxUaNetServer;
-using AdminShellNS;
-using Opc.Ua;
-using Opc.Ua.Configuration;
-using Opc.Ua.Server;
-
-namespace Net46ConsoleServer
-{
- // ReSharper disable once ClassNeverInstantiated.Global
- class Program
- {
- static void Main(string[] args)
- {
- // start
- Console.Error.WriteLine(
- "AAS OPC UA Server. (c) 2019 Michael Hoffmeister, Festo AG & Co. KG. See LICENSE.TXT.");
-
- // arguments
- var options = new AasOpcUaServer.AasxUaServerOptions();
- options.ParseArgs(args);
-
- // load aasx
- if (options.AasxToLoad == null)
- {
- Console.Error.WriteLine("No .aasx-file to load given. Exiting!");
- return;
- }
- Console.Error.WriteLine($"loading: {options.AasxToLoad} ..");
- var env = new AdminShellPackageEnv(options.AasxToLoad);
-
- // ReSharper disable HeuristicUnreachableCode
- // ReSharper disable once ConditionIsAlwaysTrueOrFalse
- if (env == null)
- {
- Console.Error.WriteLine($"Cannot open {options.AasxToLoad}. Aborting..");
- }
-
- // configure UA here a little bit
- ApplicationInstance.MessageDlg = new ApplicationMessageDlg();
-
- // logger
- var logger = new LogInstance();
-
- // start
- Console.WriteLine("Starting server ...");
- Console.WriteLine("Press 'x' to exit.");
- UaServerWrapper server = new UaServerWrapper(_stopTimeout: 0, _aasxEnv: env, logger: logger, _serverOptions: options);
- server.Run();
-
- // loop
- while (true)
- {
- StoredPrint sp;
- while ((sp = logger.PopLastShortTermPrint()) != null)
- Console.WriteLine(sp.ToString());
-
- Thread.Sleep(10);
-
- if (Console.KeyAvailable)
- {
- var cki = Console.ReadKey(true);
- if (cki.Key == ConsoleKey.X)
- {
- Console.WriteLine("Stopping initiated ...");
- break;
- }
- }
- }
-
- // stop
- server.Stop();
- }
- }
-
- public class ApplicationMessageDlg : IApplicationMessageDlg
- {
- private string message = string.Empty;
- private bool ask = false;
-
- public override void Message(string text, bool ask = false)
- {
- this.message = text;
- this.ask = ask;
- }
-
- public override async Task ShowAsync()
- {
- if (ask)
- {
- message += " (y/n, default y): ";
- Console.Write(message);
- }
- else
- {
- Console.WriteLine(message);
- }
- if (ask)
- {
- try
- {
- ConsoleKeyInfo result = Console.ReadKey();
- Console.WriteLine();
- return await Task.FromResult((result.KeyChar == 'y') || (result.KeyChar == 'Y')
- || (result.KeyChar == '\r'));
- }
- catch (Exception ex)
- {
- AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex);
- }
- }
- return await Task.FromResult(true);
- }
- }
-
- // ReSharper disable once UnusedType.Global
- public enum ExitCode
- {
- Ok = 0,
- ErrorServerNotStarted = 0x80,
- ErrorServerRunning = 0x81,
- ErrorServerException = 0x82,
- ErrorInvalidCommandLine = 0x100
- };
-
-}
diff --git a/src/AasxUaNetConsoleServer/Properties/AssemblyInfo.cs b/src/AasxUaNetConsoleServer/Properties/AssemblyInfo.cs
deleted file mode 100644
index 3e2a26c49..000000000
--- a/src/AasxUaNetConsoleServer/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// Allgemeine Informationen über eine Assembly werden über die folgenden
-// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
-// die einer Assembly zugeordnet sind.
-[assembly: AssemblyTitle("AasxUaNetConsoleServer")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("AasxUaNetConsoleServer")]
-[assembly: AssemblyCopyright("Copyright © 2020")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
-// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
-// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
-[assembly: ComVisible(false)]
-
-// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
-[assembly: Guid("232852c2-358b-4577-9d29-1e48ed75c342")]
-
-// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
-//
-// Hauptversion
-// Nebenversion
-// Buildnummer
-// Revision
-//
-// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
-// übernehmen, indem Sie "*" eingeben:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/AasxUaNetConsoleServer/Properties/launchSettings.json b/src/AasxUaNetConsoleServer/Properties/launchSettings.json
deleted file mode 100644
index 7393c7127..000000000
--- a/src/AasxUaNetConsoleServer/Properties/launchSettings.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "profiles": {
- "AasxUaNetConsoleServer": {
- "commandName": "Project",
- "commandLineArgs": "D:\\Code\\aasx-server\\src\\AasxServerBlazor\\erich-repo.aasx"
- }
- }
-}
\ No newline at end of file
diff --git a/src/AasxUaNetServer/AasxServer/AasEntityBuilder.cs b/src/AasxUaNetServer/AasxServer/AasEntityBuilder.cs
deleted file mode 100644
index cf1955f18..000000000
--- a/src/AasxUaNetServer/AasxServer/AasEntityBuilder.cs
+++ /dev/null
@@ -1,716 +0,0 @@
-/*
-Copyright (c) 2018-2023 Festo SE & Co. KG
-Author: Michael Hoffmeister
-
-This source code is licensed under the Apache License 2.0 (see LICENSE.txt).
-
-This source code may use other Open Source software components (see LICENSE.txt).
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using AdminShellNS;
-using AdminShell_V20;
-using Opc.Ua;
-using Extensions;
-using Aas = AasCore.Aas3_0;
-
-namespace AasOpcUaServer
-{
- public class AasEntityBuilder
- {
- //// Static singleton for AAS entity builders
- // ugly, but simple: the singleton variables gives access to information
- //
- public static AasNodeManager nodeMgr = null;
-
- public AdminShellPackageEnv package = null;
-
- public AasxUaServerOptions theServerOptions = null;
-
- public IDictionary> nodeMgrExternalReferences = null;
-
- ///
- /// Root of AASes
- ///
- public NodeState RootAAS = null;
-
- ///
- /// Root for CDs
- ///
- public NodeState RootConceptDescriptions = null;
-
- ///
- /// Root for DataSpecifications
- ///
- public NodeState RootDataSpecifications = null;
-
- ///
- /// Provide a root node, if semantic ids shall create missing dictionary entry (targets),
- /// which can not be found in the AAS environment.
- ///
- public NodeState RootMissingDictionaryEntries = null;
-
- public AasEntityBuilder(AasNodeManager nodeMgr, AdminShellPackageEnv package,
- IDictionary> externalReferences, AasxUaServerOptions options)
- {
- AasEntityBuilder.nodeMgr = nodeMgr;
- this.package = package;
- this.nodeMgrExternalReferences = externalReferences;
- this.aasTypes = new AasTypeEntities();
- this.theServerOptions = options;
- this.aasTypes.BuildEntites(this);
- }
-
- public class NodeRecord
- {
- public NodeState uanode = null;
- public Aas.IReferable referable = null;
- public string id = "";
-
- public NodeRecord() { }
- public NodeRecord(NodeState uanode, Aas.IReferable referable)
- {
- this.uanode = uanode;
- this.referable = referable;
- }
- public NodeRecord(NodeState uanode, string id)
- {
- this.uanode = uanode;
- this.id = id;
- }
- }
-
- private Dictionary NodeRecordFromReferable
- = new Dictionary();
- private Dictionary NodeRecordFromIdentificationHash
- = new Dictionary();
-
- ///
- /// Use this function always to remeber new node records.
- ///
- ///
- public void AddNodeRecord(NodeRecord nr)
- {
- if (nr.referable != null && !NodeRecordFromReferable.ContainsKey(nr.referable))
- NodeRecordFromReferable.Add(nr.referable, nr);
-
- if (nr.id != null)
- {
- var hash = "" + nr.id.Trim().ToUpper();
- if (!NodeRecordFromIdentificationHash.ContainsKey(hash))
- NodeRecordFromIdentificationHash.Add(hash, nr);
- }
- }
-
- ///
- /// Use this always to lookup node records from Referable
- ///
- ///
- ///
- public NodeRecord LookupNodeRecordFromReferable(Aas.IReferable referable)
- {
- if (NodeRecordFromReferable == null || !NodeRecordFromReferable.ContainsKey(referable))
- return null;
- return NodeRecordFromReferable[referable];
- }
-
- ///
- /// Use this always to lookup node records from Indentifiable
- ///
- ///
- ///
- public NodeRecord LookupNodeRecordFromIdentification(Aas.IIdentifiable identification)
- {
- var hash = "" + identification.Id.Trim().ToUpper();
- if (NodeRecordFromReferable == null || !NodeRecordFromIdentificationHash.ContainsKey(hash))
- return null;
- return NodeRecordFromIdentificationHash[hash];
- }
-
- ///
- /// Use this always to lookup node records from Indentifiable
- ///
- ///
- ///
- public NodeRecord LookupNodeRecordFromId(string id)
- {
- var hash = "" + id?.Trim().ToUpper();
- if (NodeRecordFromReferable == null || !NodeRecordFromIdentificationHash.ContainsKey(hash))
- return null;
- return NodeRecordFromIdentificationHash[hash];
- }
-
- ///
- /// Base class for actions, which shall be done on the 2nd pass of the information model building
- ///
- public class NodeLateAction
- {
- public NodeState uanode = null;
- }
-
- ///
- /// Make a late reference to another node identified by a AAS reference information
- ///
- public class NodeLateActionLinkToReference : NodeLateAction
- {
- public enum ActionType { None, SetAasReference, SetDictionaryEntry }
-
- public Aas.IReference targetReference = null;
- public ActionType actionType = ActionType.None;
-
- public NodeLateActionLinkToReference(NodeState uanode, Aas.IReference targetReference,
- ActionType actionType)
- {
- this.uanode = uanode;
- this.targetReference = targetReference;
- this.actionType = actionType;
- }
- }
-
- private List noteLateActions = new List();
-
- ///
- /// Add a late action, which will be processed as 2nd phase of info model preparation
- ///
- ///
- public void AddNodeLateAction(NodeLateAction la)
- {
- this.noteLateActions.Add(la);
- }
-
- ///
- /// Top level creation functions. Uses the definitions of RootAAS, RootConceptDescriptions,
- /// RootDataSpecifications to synthesize information model
- ///
- public void CreateAddInstanceObjects(Aas.Environment env)
- {
- if (RootAAS == null)
- return;
-
- // CDs (build 1st to be "remembered" as targets for "HasDictionaryEntry")
- if (env.ConceptDescriptions != null && this.RootConceptDescriptions != null)
- foreach (var cd in env.ConceptDescriptions)
- {
- this.AasTypes.ConceptDescription.CreateAddElements(this.RootConceptDescriptions,
- AasUaBaseEntity.CreateMode.Instance, cd);
- }
-
- // AAS
- if (env.AssetAdministrationShells != null)
- foreach (var aas in env.AssetAdministrationShells)
- this.AasTypes.AAS.CreateAddInstanceObject(RootAAS, env, aas);
-
- // go through late actions
- foreach (var la in this.noteLateActions)
- {
- // make a Reference ??
- var lax = la as NodeLateActionLinkToReference;
-
- // more simple case: AasReference between known entities
- if (lax != null && lax.actionType == NodeLateActionLinkToReference.ActionType.SetAasReference
- && lax.uanode != null
- && this.package != null && this.package.AasEnv != null)
- {
- // 1st, take reference and turn it into Referable
- var targetReferable = this.package.AasEnv.FindReferableByReference(lax.targetReference);
- if (targetReferable == null)
- continue;
-
- // 2nd, try to lookup the Referable and turn it into a uanode
- var targetNodeRec = this.LookupNodeRecordFromReferable(targetReferable);
- if (targetNodeRec == null || targetNodeRec.uanode == null)
- continue;
-
- // now, we have everything to formulate a reference
- lax.uanode.AddReference(this.AasTypes.HasAasReference.GetTypeNodeId(), false,
- targetNodeRec.uanode.NodeId);
- }
-
- // a bit more complicated: could include a "empty reference" to outside concept
- if (lax != null && lax.actionType == NodeLateActionLinkToReference.ActionType.SetDictionaryEntry
- && lax.uanode != null
- && this.package != null && this.package.AasEnv != null)
- {
- // tracking
- var foundAtAll = false;
-
- // 1st, take reference and turn it into Referable
- var targetReferable = this.package.AasEnv.FindReferableByReference(lax.targetReference);
- if (targetReferable != null)
- {
- // 2nd, try to lookup the Referable and turn it into a uanode
- var targetNodeRec = this.LookupNodeRecordFromReferable(targetReferable);
- if (targetNodeRec != null && targetNodeRec.uanode != null)
- {
- // simple case: have a target node, just make a link
- lax.uanode.AddReference(this.AasTypes.HasDictionaryEntry.GetTypeNodeId(), false,
- targetNodeRec.uanode.NodeId);
- foundAtAll = true;
- }
- }
-
- // make "empty reference"??
- // by definition, this makes only sense if the targetReference has exactly 1 key, as we could
- // only have one key in a dictionary entry
- if (!foundAtAll && lax.targetReference.Keys.Count == 1)
- {
- // can turn the targetReference to a simple identification
- var targetId = "" + lax.targetReference.Keys[0].Value;
-
- // we might have such an (empty) target already available as uanode
- var nr = this.LookupNodeRecordFromId(targetId);
- if (nr != null)
- {
- // just create the missing link
- lax.uanode.AddReference(this.AasTypes.HasDictionaryEntry.GetTypeNodeId(), false,
- nr.uanode?.NodeId);
- }
- else
- {
- // create NEW empty reference?
- if (this.RootMissingDictionaryEntries != null)
- {
- // create missing object
- var miss = this.CreateAddObject(
- this.RootMissingDictionaryEntries,
- AasUaBaseEntity.CreateMode.Instance,
- targetId,
- ReferenceTypeIds.HasComponent,
- this.AasTypes.ConceptDescription.GetTypeObjectFor(targetId)?.NodeId);
-
- // add the reference
- lax.uanode.AddReference(this.AasTypes.HasDictionaryEntry.GetTypeNodeId(), false,
- miss?.NodeId);
-
- // put it into the NodeRecords, that it can be re-used?? no!!
- this.AddNodeRecord(new AasEntityBuilder.NodeRecord(miss, targetId));
- }
- else
- {
- // just create the missing link
- // TODO (MIHO, 2020-08-06): check, which namespace shall be used
- var missingTarget = new ExpandedNodeId("" + targetId, 99);
- lax.uanode.AddReference(this.AasTypes.HasDictionaryEntry.GetTypeNodeId(), false,
- missingTarget);
- }
- }
- }
- }
-
- }
- }
-
- public ReferenceTypeState CreateAddReferenceType(string browseDisplayName, string inverseName, uint preferredNumId = 0, bool useZeroNS = false, NodeId sourceId = null, ExpandedNodeId extraSubtype = null)
- {
- // create node itself
- var x = new ReferenceTypeState();
- x.BrowseName = browseDisplayName;
- x.DisplayName = browseDisplayName;
- x.InverseName = inverseName;
- x.Symmetric = false;
- x.IsAbstract = false;
- x.NodeId = nodeMgr.NewType(nodeMgr.SystemContext, x, preferredNumId);
-
- // set Subtype reference
- if (sourceId == null)
- sourceId = new NodeId(32, 0);
-
- if (extraSubtype != null)
- x.AddReference(ReferenceTypeIds.HasSubtype, isInverse: true, extraSubtype);
-
- // done
- return x;
- }
-
- public DataTypeState CreateAddDataType(
- string browseDisplayName, NodeId superTypeId, uint preferredNumId = 0)
- {
- var x = new DataTypeState();
- x.BrowseName = "" + browseDisplayName;
- x.DisplayName = "" + browseDisplayName;
- x.Description = new LocalizedText("en", browseDisplayName);
- x.SuperTypeId = superTypeId;
- x.NodeId = nodeMgr.NewType(nodeMgr.SystemContext, x, preferredNumId);
-
- return x;
- }
-
- ///
- /// Helper to create an ObjectType-Node and it to the information model.
- ///
- /// Name displayed in the node tree
- /// Base class or similar
- /// Numerical id of the node in the default name space to be set fixed
- /// Lookup a Description on AAS literal/ refSemantics
- /// Modeling Rule, if not None
- public BaseObjectTypeState CreateAddObjectType(
- string browseDisplayName,
- NodeId superTypeId,
- uint preferredNumId = 0,
- string descriptionKey = null,
- AasUaNodeHelper.ModellingRule modellingRule = AasUaNodeHelper.ModellingRule.None)
- {
- var x = AasUaNodeHelper.CreateObjectType(browseDisplayName, superTypeId, descriptionKey: descriptionKey);
-
- x.NodeId = nodeMgr.NewType(nodeMgr.SystemContext, x, preferredNumId);
-
- return x;
- }
-
- ///
- /// Helper to create an Object-Node. Note: __NO__ NodeId is created by the default! Must be done by outer
- /// functionality!!
- ///
- /// Parent node
- /// Type or instance
- /// Name displayed in the node tree
- ///
- /// Type of the Object
- /// Modeling Rule, if not None
- ///
- /// The node
- public BaseObjectState CreateAddObject(
- NodeState parent,
- AasUaBaseEntity.CreateMode mode,
- string browseDisplayName,
- NodeId referenceTypeFromParentId = null,
- NodeId typeDefinitionId = null,
- AasUaNodeHelper.ModellingRule modellingRule = AasUaNodeHelper.ModellingRule.None,
- string extraName = null)
- {
- BaseObjectState baseObject = AasUaNodeHelper.CreateObject(parent, browseDisplayName, typeDefinitionId, modellingRule, extraName);
-
- baseObject.NodeId = nodeMgr.New(nodeMgr.SystemContext, mode, baseObject);
-
- parent?.AddChild(baseObject);
-
- if (referenceTypeFromParentId != null)
- {
- if (parent != null)
- {
- parent.AddReference(referenceTypeFromParentId, false, baseObject.NodeId);
-
- if (referenceTypeFromParentId == ReferenceTypeIds.HasComponent)
- {
- baseObject.AddReference(referenceTypeFromParentId, true, parent.NodeId);
- }
-
- if (referenceTypeFromParentId == ReferenceTypeIds.HasProperty)
- {
- baseObject.AddReference(referenceTypeFromParentId, true, parent.NodeId);
- }
- }
- }
-
- return baseObject;
- }
-
- //// Properties
- //
-
- ///
- /// Helper to create an PropertyState-Node for a certain type and add it to the information model.
- /// Note: __NO__ NodeId is created by the default! Must be done by outer functionality!!
- ///
- /// C# type of the proprty
- /// Parent node
- /// Type or instance
- /// Name displayed in the node tree
- /// Data type, such as String.. Given by DataTypeIds...
- /// Value of the type T or Null
- ///
- /// Type definition; independent from DataType!
- /// -1 or e.g. 1 for array
- /// Apply default settings for a normal Property
- /// Modeling Rule, if not None
- /// NodeState
- public PropertyState CreateAddPropertyState(
- NodeState parent, AasUaBaseEntity.CreateMode mode,
- string browseDisplayName,
- NodeId dataTypeId, T value,
- NodeId referenceTypeFromParentId = null,
- NodeId typeDefinitionId = null,
- int valueRank = -2,
- bool defaultSettings = false,
- AasUaNodeHelper.ModellingRule modellingRule = AasUaNodeHelper.ModellingRule.None)
- {
- // apply cumulative settings
- if (defaultSettings)
- {
- referenceTypeFromParentId = ReferenceTypeIds.HasProperty;
- typeDefinitionId = VariableTypeIds.PropertyType;
-
- if (valueRank == -2)
- {
- valueRank = -1;
- }
- }
-
- // make Property
- var x = new PropertyState(parent);
- x.BrowseName = "" + browseDisplayName;
- x.DisplayName = "" + browseDisplayName;
- x.Description = new LocalizedText("en", browseDisplayName);
- x.DataType = dataTypeId;
- if (valueRank > -2)
- x.ValueRank = valueRank;
- // ReSharper disable once RedundantCast
- x.Value = (T)value;
- AasUaNodeHelper.CheckSetModellingRule(modellingRule, x);
- x.NodeId = nodeMgr.New(nodeMgr.SystemContext, mode, x);
-
- // add Node
- if (parent != null)
- parent.AddChild(x);
-
- // set relations
- if (referenceTypeFromParentId != null)
- {
- if (parent != null)
- {
- parent.AddReference(referenceTypeFromParentId, false, x.NodeId);
-
- if (referenceTypeFromParentId == ReferenceTypeIds.HasComponent)
- x.AddReference(referenceTypeFromParentId, true, parent.NodeId);
-
- if (referenceTypeFromParentId == ReferenceTypeIds.HasProperty)
- x.AddReference(referenceTypeFromParentId, true, parent.NodeId);
- }
- }
-
- if (typeDefinitionId != null)
- {
- x.TypeDefinitionId = typeDefinitionId;
- }
-
- x.AccessLevel = AccessLevels.CurrentReadOrWrite;
- x.UserAccessLevel = AccessLevels.CurrentReadOrWrite;
-
- return x;
- }
-
- public MethodState CreateAddMethodState(
- NodeState parent, AasUaBaseEntity.CreateMode mode,
- string browseDisplayName,
- Argument[] inputArgs = null, Argument[] outputArgs = null, NodeId referenceTypeFromParentId = null,
- NodeId methodDeclarationId = null, GenericMethodCalledEventHandler onCalled = null)
- {
- // method node
- var m = new MethodState(parent);
- m.BrowseName = "" + browseDisplayName;
- m.DisplayName = "" + browseDisplayName;
- m.Description = new LocalizedText("en", browseDisplayName);
- m.NodeId = nodeMgr.New(nodeMgr.SystemContext, mode, m);
- if (methodDeclarationId != null)
- m.MethodDeclarationId = methodDeclarationId;
-
- m.Executable = true;
- m.UserExecutable = true;
-
- if (parent != null)
- parent.AddChild(m);
-
- if (referenceTypeFromParentId != null)
- {
- if (parent != null)
- {
- parent.AddReference(referenceTypeFromParentId, false, m.NodeId);
-
- if (referenceTypeFromParentId == ReferenceTypeIds.HasComponent)
- m.AddReference(referenceTypeFromParentId, true, parent.NodeId);
-
- if (referenceTypeFromParentId == ReferenceTypeIds.HasProperty)
- m.AddReference(referenceTypeFromParentId, true, parent.NodeId);
- }
- }
-
- // can have inputs, outputs
- for (int i = 0; i < 2; i++)
- {
- // pretty argument list
- var arguments = (i == 0) ? inputArgs : outputArgs;
- if (arguments == null || arguments.Length < 1)
- continue;
-
- // make a property for this
- var prop = CreateAddPropertyState(
- m, mode,
- (i == 0) ? "InputArguments" : "OutputArguments",
- DataTypeIds.Argument,
- arguments,
- ReferenceTypeIds.HasProperty,
- typeDefinitionId: VariableTypeIds.PropertyType,
- valueRank: 1);
-
- // explicitely add arguments ass well?
- if (i == 0)
- m.InputArguments = prop;
-
- if (i == 1)
- m.OutputArguments = prop;
-
- }
-
- // event handler
- if (onCalled != null)
- m.OnCallMethod = onCalled;
-
-
- return m;
- }
-
-
- //// Entities
- //
-
- public class AasTypeEntities
- {
- public AasUaEntityPathType PathType;
- public AasUaEntityMimeType MimeType;
-
- public AasUaEntityIdentification Identification;
- public AasUaEntityAdministration Administration;
- public AasUaEntityQualifier Qualifier;
- public AasUaEntityAssetKind AssetKind;
- public AasUaEntityModelingKind ModelingKind;
- public AasUaEntityReferable Referable;
- public AasUaEntityReferenceBase ReferenceBase;
- public AasUaEntityReference Reference;
- public AasUaEntitySemanticId SemanticId;
- public AasUaEntitySubmodel Submodel;
- public AasUaEntityProperty Property;
- public AasUaEntityCollection Collection;
- public AasUaEntitySmeList SmeList;
- public AasUaEntitySubmodelElement SubmodelElement;
- public AasUaEntitySubmodelWrapper SubmodelWrapper;
- public AasUaEntityFile File;
- public AasUaEntityFileType FileType;
- public AasUaEntityBlob Blob;
- public AasUaEntityReferenceElement ReferenceElement;
- public AasUaEntityRelationshipElement RelationshipElement;
- public AasUaEntityOperationVariable OperationVariable;
- public AasUaEntityOperation Operation;
- public AasUaEntityConceptDescription ConceptDescription;
- public AasUaEntityAsset Asset;
- public AasUaEntityAAS AAS;
-
- public AasUaEntityDataSpecification DataSpecification;
- public AasUaEntityDataSpecificationIEC61360 DataSpecificationIEC61360;
-
- public AasUaInterfaceAASIdentifiableType IAASIdentifiableType;
- public AasUaInterfaceAASReferableType IAASReferableType;
-
- public AasUaNamespaceZeroEntity BaseInterfaceType;
-
- public AasUaNamespaceZeroReference HasDictionaryEntry;
- public AasUaReferenceHasAasReference HasAasReference;
- public AasUaNamespaceZeroReference HasInterface;
- public AasUaNamespaceZeroReference HasAddIn;
- public AasUaNamespaceZeroEntity DictionaryEntryType;
- public AasUaNamespaceZeroEntity UriDictionaryEntryType;
- public AasUaNamespaceZeroEntity IrdiDictionaryEntryType;
- public AasUaNamespaceZeroEntity DictionaryFolderType;
-
- public void BuildEntites(AasEntityBuilder builder)
- {
- // build up entities, which are in the UA specs, but not in this Stack
- BaseInterfaceType = new AasUaNamespaceZeroEntity(builder, 17602);
- HasDictionaryEntry = new AasUaNamespaceZeroReference(builder, 17597);
- HasInterface = new AasUaNamespaceZeroReference(builder, 17603);
- HasAddIn = new AasUaNamespaceZeroReference(builder, 17604);
- DictionaryEntryType = new AasUaNamespaceZeroEntity(builder, 17589);
- UriDictionaryEntryType = new AasUaNamespaceZeroEntity(builder, 17600);
- IrdiDictionaryEntryType = new AasUaNamespaceZeroEntity(builder, 17598);
- DictionaryFolderType = new AasUaNamespaceZeroEntity(builder, 17591);
-
- // AAS DataTypes
- PathType = new AasUaEntityPathType(builder);
- MimeType = new AasUaEntityMimeType(builder);
-
- // first entities
- Referable = new AasUaEntityReferable(builder, 1004);
- Identification = new AasUaEntityIdentification(builder, 1000);
- Administration = new AasUaEntityAdministration(builder, 1001);
-
- // interfaces
- IAASReferableType = new AasUaInterfaceAASReferableType(
- builder, 2001); // dependencies: Referable
- IAASIdentifiableType = new AasUaInterfaceAASIdentifiableType(
- builder, 2000); // dependencies: IAASReferable
-
- // AAS References
- ReferenceBase = new AasUaEntityReferenceBase(builder, 0);
- Reference = new AasUaEntityReference(builder, 1005);
- SemanticId = new AasUaEntitySemanticId(builder, 1006); // dependecies: Reference
- HasAasReference = new AasUaReferenceHasAasReference(builder, 4000); // dependencies: Referable
-
- // Data Specifications
- DataSpecification = new AasUaEntityDataSpecification(builder, 3000);
- DataSpecificationIEC61360 = new AasUaEntityDataSpecificationIEC61360(
- builder, 3001); // dependencies: Reference, Identification, Administration
-
- // rest
- Qualifier = new AasUaEntityQualifier(builder, 1002); // dependencies: SemanticId, Reference
- AssetKind = new AasUaEntityAssetKind(builder, 1025);
- ModelingKind = new AasUaEntityModelingKind(builder, 1003);
- SubmodelElement = new AasUaEntitySubmodelElement(builder, 1008);
- SubmodelWrapper = new AasUaEntitySubmodelWrapper(builder, 1012); // dependencies: SubmodelElement
- Submodel = new AasUaEntitySubmodel(builder, 1007); // dependencies: SubmodelWrapper
- Property = new AasUaEntityProperty(builder, 1009);
- Collection = new AasUaEntityCollection(builder, 1010); // needs 2 ids!
- SmeList = new AasUaEntitySmeList(builder, 1028); // needs 2 ids!
- FileType = new AasUaEntityFileType(builder, 1014);
- File = new AasUaEntityFile(builder, 1013); // dependencies: FileType
- Blob = new AasUaEntityBlob(builder, 1015);
- ReferenceElement = new AasUaEntityReferenceElement(builder, 1016);
- RelationshipElement = new AasUaEntityRelationshipElement(builder, 1017);
- OperationVariable = new AasUaEntityOperationVariable(builder, 1018);
- Operation = new AasUaEntityOperation(builder, 1019);
- ConceptDescription = new AasUaEntityConceptDescription(builder, 1021);
- Asset = new AasUaEntityAsset(builder, 1023);
- AAS = new AasUaEntityAAS(builder, 1024);
- }
- }
-
- private AasTypeEntities aasTypes = null;
- public AasTypeEntities AasTypes { get { return aasTypes; } }
-
- //// Annotations
- //
-
- private Dictionary> nodeStateAnnotations = new Dictionary>();
-
- public void AddNodeStateAnnotation(NodeState nodeState, object businessObject)
- {
- if (!nodeStateAnnotations.ContainsKey(nodeState))
- nodeStateAnnotations[nodeState] = new List