diff --git a/src/ScadaLink.CentralUI/Components/Pages/Admin/DataConnectionForm.razor b/src/ScadaLink.CentralUI/Components/Pages/Admin/DataConnectionForm.razor
index 41b873d..20a20d7 100644
--- a/src/ScadaLink.CentralUI/Components/Pages/Admin/DataConnectionForm.razor
+++ b/src/ScadaLink.CentralUI/Components/Pages/Admin/DataConnectionForm.razor
@@ -5,6 +5,11 @@
@using ScadaLink.Security
@using ScadaLink.Commons.Entities.Sites
@using ScadaLink.Commons.Interfaces.Repositories
+@using ScadaLink.Commons.Types.DataConnections
+@using ScadaLink.Commons.Types.Flattening
+@using ScadaLink.Commons.Serialization
+@using ScadaLink.Commons.Validators
+@using ScadaLink.CentralUI.Components.Forms
@attribute [Authorize(Policy = AuthorizationPolicies.RequireAdmin)]
@inject ISiteRepository SiteRepository
@inject NavigationManager NavigationManager
@@ -27,7 +32,9 @@
@if (_siteLocked)
{
-
+
}
else
{
@@ -40,56 +47,41 @@
}
-
+
-
-
-
-
-
Primary Endpoint
-
-
-
-
+
-
Backup Endpoint
+
Backup Endpoint
@if (!_showBackup)
{
+ @onclick="EnableBackup">Add Backup Endpoint
}
else
{
-
-
-
-
+
+ @onclick="RemoveBackup">Remove Backup
}
@@ -117,11 +109,14 @@
private string _siteName = string.Empty;
private bool _siteLocked;
private string _formName = string.Empty;
- private string _formProtocol = string.Empty;
- private string? _formConfiguration;
+ private OpcUaEndpointConfig _primaryConfig = new();
+ private OpcUaEndpointConfig _backupConfig = new();
+ private bool _primaryIsLegacy;
+ private bool _backupIsLegacy;
private bool _showBackup;
- private string? _formBackupConfiguration;
private int _formFailoverRetryCount = 3;
+ private ValidationResult? _primaryErrors;
+ private ValidationResult? _backupErrors;
private string? _formError;
protected override async Task OnInitializedAsync()
@@ -139,11 +134,17 @@
_siteName = _sites.FirstOrDefault(s => s.Id == _formSiteId)?.Name ?? $"Site {_formSiteId}";
_siteLocked = true;
_formName = _editingConnection.Name;
- _formProtocol = _editingConnection.Protocol;
- _formConfiguration = _editingConnection.PrimaryConfiguration;
- _formBackupConfiguration = _editingConnection.BackupConfiguration;
- _formFailoverRetryCount = _editingConnection.FailoverRetryCount;
- _showBackup = _editingConnection.BackupConfiguration != null;
+
+ (_primaryConfig, _primaryIsLegacy) =
+ OpcUaEndpointConfigSerializer.Deserialize(_editingConnection.PrimaryConfiguration);
+
+ if (!string.IsNullOrWhiteSpace(_editingConnection.BackupConfiguration))
+ {
+ (_backupConfig, _backupIsLegacy) =
+ OpcUaEndpointConfigSerializer.Deserialize(_editingConnection.BackupConfiguration);
+ _showBackup = true;
+ _formFailoverRetryCount = _editingConnection.FailoverRetryCount;
+ }
}
}
catch (Exception ex)
@@ -161,6 +162,7 @@
_siteLocked = true;
}
}
+
_loading = false;
}
@@ -169,25 +171,38 @@
_formError = null;
if (_formSiteId == 0) { _formError = "Site is required."; return; }
if (string.IsNullOrWhiteSpace(_formName)) { _formError = "Name is required."; return; }
- if (string.IsNullOrWhiteSpace(_formProtocol)) { _formError = "Protocol is required."; return; }
+
+ _primaryErrors = OpcUaEndpointConfigValidator.Validate(_primaryConfig, "Primary.");
+ _backupErrors = _showBackup
+ ? OpcUaEndpointConfigValidator.Validate(_backupConfig, "Backup.")
+ : null;
+
+ if (!_primaryErrors.IsValid || (_backupErrors is { IsValid: false }))
+ {
+ _formError = "Fix the errors below before saving.";
+ return;
+ }
+
+ var primaryJson = OpcUaEndpointConfigSerializer.Serialize(_primaryConfig);
+ var backupJson = _showBackup ? OpcUaEndpointConfigSerializer.Serialize(_backupConfig) : null;
try
{
if (_editingConnection != null)
{
_editingConnection.Name = _formName.Trim();
- _editingConnection.Protocol = _formProtocol;
- _editingConnection.PrimaryConfiguration = _formConfiguration?.Trim();
- _editingConnection.BackupConfiguration = _showBackup ? _formBackupConfiguration?.Trim() : null;
+ _editingConnection.Protocol = "OpcUa";
+ _editingConnection.PrimaryConfiguration = primaryJson;
+ _editingConnection.BackupConfiguration = backupJson;
_editingConnection.FailoverRetryCount = _showBackup ? _formFailoverRetryCount : 3;
await SiteRepository.UpdateDataConnectionAsync(_editingConnection);
}
else
{
- var conn = new DataConnection(_formName.Trim(), _formProtocol, _formSiteId)
+ var conn = new DataConnection(_formName.Trim(), "OpcUa", _formSiteId)
{
- PrimaryConfiguration = _formConfiguration?.Trim(),
- BackupConfiguration = _showBackup ? _formBackupConfiguration?.Trim() : null,
+ PrimaryConfiguration = primaryJson,
+ BackupConfiguration = backupJson,
FailoverRetryCount = _showBackup ? _formFailoverRetryCount : 3
};
await SiteRepository.AddDataConnectionAsync(conn);
@@ -201,15 +216,15 @@
}
}
+ private void EnableBackup() => _showBackup = true;
+
private void RemoveBackup()
{
_showBackup = false;
- _formBackupConfiguration = null;
+ _backupConfig = new OpcUaEndpointConfig();
+ _backupIsLegacy = false;
_formFailoverRetryCount = 3;
}
- private void GoBack()
- {
- NavigationManager.NavigateTo("/admin/connections");
- }
+ private void GoBack() => NavigationManager.NavigateTo("/admin/connections");
}