Files
123123/ZA.CoreService.ESBCertificateManager/Setup/AddSonicSystemForm.cs
T

161 lines
4.8 KiB
C#

namespace ZA.CoreService.ESBCertificateManager.Setup;
public sealed class AddSonicSystemForm : Form
{
private readonly SetupCoordinator _coordinator;
private readonly TextBox _txtName;
private readonly TextBox _txtHost;
private readonly TextBox _txtPort;
private readonly TextBox _txtDomain;
private readonly ComboBox _cmbProtocol;
private readonly Button _btnSave;
private bool _running;
public int? CreatedSonicConnectionId { get; private set; }
public AddSonicSystemForm(SetupCoordinator coordinator)
{
_coordinator = coordinator;
Text = "Sonic-System hinzufügen";
StartPosition = FormStartPosition.CenterParent;
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
ShowInTaskbar = false;
ClientSize = new Size(520, 430);
BackColor = SettingsUi.Background;
ForeColor = SettingsUi.Text;
Font = new Font("Segoe UI", 10f);
Label title = new()
{
Text = "Neues Sonic-System",
Location = new Point(28, 22),
AutoSize = true,
Font = new Font("Segoe UI Semibold", 18f, FontStyle.Bold),
ForeColor = SettingsUi.Text
};
Label subtitle = new()
{
Text =
$"Umgebung {_coordinator.Settings.EnvironmentCode} · " +
"Management-Verbindung für Container-Neustarts",
Location = new Point(30, 58),
AutoSize = true,
ForeColor = SettingsUi.Muted
};
Panel card = SettingsUi.CreateCard();
card.Location = new Point(28, 95);
card.Size = new Size(464, 250);
card.Paint += SettingsUi.PaintCardBorder;
_txtName = SettingsUi.CreateTextBox();
_txtHost = SettingsUi.CreateTextBox();
_txtPort = SettingsUi.CreateTextBox();
_txtDomain = SettingsUi.CreateTextBox();
_cmbProtocol = SettingsUi.CreateComboBox();
_cmbProtocol.Items.AddRange(["tcp", "ssl"]);
_cmbProtocol.SelectedIndex = 0;
_txtPort.Text = "13070";
AddField(card, "Verbindungsname", _txtName, 18, 18, 420);
AddField(card, "Management-Host", _txtHost, 18, 78, 280);
AddField(card, "Port", _txtPort, 316, 78, 122);
AddField(card, "Domain", _txtDomain, 18, 138, 420);
AddField(card, "Protokoll", _cmbProtocol, 18, 198, 160);
_btnSave = SettingsUi.CreatePrimaryButton("System anlegen");
_btnSave.Location = new Point(292, 365);
_btnSave.Size = new Size(200, 40);
_btnSave.Click += async (_, _) => await SaveAsync();
Button cancel = SettingsUi.CreateGhostButton("Abbrechen");
cancel.Location = new Point(170, 365);
cancel.Size = new Size(110, 40);
cancel.Click += (_, _) =>
{
DialogResult = DialogResult.Cancel;
Close();
};
Controls.Add(title);
Controls.Add(subtitle);
Controls.Add(card);
Controls.Add(cancel);
Controls.Add(_btnSave);
AcceptButton = _btnSave;
CancelButton = cancel;
}
private async Task SaveAsync()
{
if (_running)
{
return;
}
if (!int.TryParse(_txtPort.Text.Trim(), out int port))
{
MessageBox.Show(
this,
"Bitte einen gültigen Port eingeben.",
"Sonic-System",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
return;
}
_running = true;
_btnSave.Enabled = false;
Cursor = Cursors.WaitCursor;
try
{
CreatedSonicConnectionId =
await _coordinator.AddSonicConnectionAsync(
_txtName.Text,
_txtHost.Text,
port,
_txtDomain.Text,
_cmbProtocol.SelectedItem?.ToString() ?? "tcp");
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
MessageBox.Show(
this,
ex.Message,
"Sonic-System",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
finally
{
_running = false;
_btnSave.Enabled = true;
Cursor = Cursors.Default;
}
}
private static void AddField(
Control parent,
string label,
Control input,
int x,
int y,
int width)
{
Label fieldLabel = SettingsUi.CreateFieldLabel(label);
fieldLabel.Location = new Point(x, y);
input.Location = new Point(x, y + 22);
input.Width = width;
parent.Controls.Add(fieldLabel);
parent.Controls.Add(input);
}
}