146 lines
4.0 KiB
C#
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));
|
|
}
|