add hanatui
This commit is contained in:
+145
-1
@@ -1 +1,145 @@
|
||||
Console.WriteLine("Hello, World!");
|
||||
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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user