Files
2026-05-20 11:13:14 +02:00

146 lines
4.0 KiB
C#

using HanaTui.Hana;
using HanaTui.Tui;
// -----------------------------------------------------------------------
// Entry point
// -----------------------------------------------------------------------
// Enable UTF-8 output for block characters in bars
Console.OutputEncoding = System.Text.Encoding.UTF8;
// Key selection loop — allows returning to key picker via "Change Key"
string? keyName = null;
HdbUserstoreKey? keyObj = null;
while (true)
{
// Step 1: Select or re-select a key
keyName = KeySelectionScreen.Run();
if (keyName is null)
{
// User chose Exit
break;
}
// Resolve key metadata if available
keyObj = HdbCliRunner.ListKeys().Find(k => k.Name.Equals(keyName, StringComparison.OrdinalIgnoreCase));
// Step 2: Main menu loop for this key
var exitToKeySelection = false;
while (!exitToKeySelection)
{
var operation = MainMenuScreen.Run(keyObj, keyName);
switch (operation)
{
case MainMenuScreen.Operation.Quit:
Environment.Exit(0);
break;
case MainMenuScreen.Operation.ChangeKey:
exitToKeySelection = true;
break;
case MainMenuScreen.Operation.Export:
await HandleExportAsync(keyName);
break;
case MainMenuScreen.Operation.Import:
await HandleImportAsync(keyName, renameMode: false);
break;
case MainMenuScreen.Operation.ImportRename:
await HandleImportAsync(keyName, renameMode: true);
break;
case MainMenuScreen.Operation.Copy:
await HandleCopyAsync(keyName);
break;
case MainMenuScreen.Operation.Drop:
await HandleDropAsync(keyName);
break;
case MainMenuScreen.Operation.RenameDb:
await HandleRenameDbAsync(keyName);
break;
case MainMenuScreen.Operation.Backup:
await HandleBackupAsync(keyName);
break;
}
}
}
return;
// -----------------------------------------------------------------------
// Operation handlers
// -----------------------------------------------------------------------
static async Task HandleExportAsync(string key)
{
var p = OperationForms.ExportForm(key);
if (p is null) return;
var svc = new SchemaService(key);
await TaskRunnerScreen.RunAsync(
$"Export Schema '{p.Schema}'",
(log, ct) => svc.ExportAsync(p, log, ct));
}
static async Task HandleImportAsync(string key, bool renameMode)
{
var p = OperationForms.ImportForm(key, renameMode);
if (p is null) return;
var svc = new SchemaService(key);
await TaskRunnerScreen.RunAsync(
renameMode ? $"Import & Rename '{p.SourceSchema}'" : $"Import '{p.SourceSchema}'",
(log, ct) => svc.ImportAsync(p, log, ct));
}
static async Task HandleCopyAsync(string key)
{
var p = OperationForms.CopyForm(key);
if (p is null) return;
var svc = new SchemaService(key);
await TaskRunnerScreen.RunAsync(
$"Copy '{p.SourceSchema}' -> '{p.TargetSchema}'",
(log, ct) => svc.CopyAsync(p, log, ct));
}
static async Task HandleDropAsync(string key)
{
var p = OperationForms.DropForm(key);
if (p is null) return;
var svc = new SchemaService(key);
await TaskRunnerScreen.RunAsync(
$"Drop Schema '{p.Schema}'",
(log, ct) => svc.DropAsync(p, log, ct));
}
static async Task HandleRenameDbAsync(string key)
{
var p = OperationForms.RenameDbForm(key);
if (p is null) return;
var svc = new SchemaService(key);
await TaskRunnerScreen.RunAsync(
$"Rename DB '{p.Schema}'",
(log, ct) => svc.RenameDbAsync(p, log, ct));
}
static async Task HandleBackupAsync(string key)
{
var p = OperationForms.BackupForm(key);
if (p is null) return;
var svc = new SchemaService(key);
await TaskRunnerScreen.RunAsync(
"Backup Tenant",
(log, ct) => svc.BackupAsync(p, log, ct));
}