using System.CommandLine;
using System.CommandLine.Parsing;
using ZB.MOM.WW.ScadaBridge.Commons.Messages.Management;
namespace ZB.MOM.WW.ScadaBridge.CLI.Commands;
public static class SharedScriptCommands
{
/// Builds the shared-script command group with list, get, create, update, and delete sub-commands.
/// Shared management URL option.
/// Shared output format option.
/// Shared username option.
/// Shared password option.
/// The configured for the shared-script group.
public static Command Build(Option urlOption, Option formatOption, Option usernameOption, Option passwordOption)
{
var command = new Command("shared-script") { Description = "Manage shared scripts" };
command.Add(BuildList(urlOption, formatOption, usernameOption, passwordOption));
command.Add(BuildGet(urlOption, formatOption, usernameOption, passwordOption));
command.Add(BuildCreate(urlOption, formatOption, usernameOption, passwordOption));
command.Add(BuildUpdate(urlOption, formatOption, usernameOption, passwordOption));
command.Add(BuildDelete(urlOption, formatOption, usernameOption, passwordOption));
return command;
}
private static Command BuildList(Option urlOption, Option formatOption, Option usernameOption, Option passwordOption)
{
var cmd = new Command("list") { Description = "List all shared scripts" };
cmd.SetAction(async (ParseResult result) =>
{
return await CommandHelpers.ExecuteCommandAsync(
result, urlOption, formatOption, usernameOption, passwordOption, new ListSharedScriptsCommand());
});
return cmd;
}
private static Command BuildGet(Option urlOption, Option formatOption, Option usernameOption, Option passwordOption)
{
var idOption = new Option("--id") { Description = "Shared script ID", Required = true };
var cmd = new Command("get") { Description = "Get a shared script by ID" };
cmd.Add(idOption);
cmd.SetAction(async (ParseResult result) =>
{
var id = result.GetValue(idOption);
return await CommandHelpers.ExecuteCommandAsync(
result, urlOption, formatOption, usernameOption, passwordOption, new GetSharedScriptCommand(id));
});
return cmd;
}
private static Command BuildCreate(Option urlOption, Option formatOption, Option usernameOption, Option passwordOption)
{
var nameOption = new Option("--name") { Description = "Script name", Required = true };
var codeOption = new Option("--code") { Description = "Script code", Required = true };
var parametersOption = new Option("--parameters") { Description = "Parameter definitions JSON" };
var returnDefOption = new Option("--return-def") { Description = "Return type definition" };
var cmd = new Command("create") { Description = "Create a shared script" };
cmd.Add(nameOption);
cmd.Add(codeOption);
cmd.Add(parametersOption);
cmd.Add(returnDefOption);
cmd.SetAction(async (ParseResult result) =>
{
var name = result.GetValue(nameOption)!;
var code = result.GetValue(codeOption)!;
var parameters = result.GetValue(parametersOption);
var returnDef = result.GetValue(returnDefOption);
return await CommandHelpers.ExecuteCommandAsync(
result, urlOption, formatOption, usernameOption, passwordOption,
new CreateSharedScriptCommand(name, code, parameters, returnDef));
});
return cmd;
}
private static Command BuildUpdate(Option urlOption, Option formatOption, Option usernameOption, Option passwordOption)
{
var idOption = new Option("--id") { Description = "Shared script ID", Required = true };
var nameOption = new Option("--name") { Description = "Script name", Required = true };
var codeOption = new Option("--code") { Description = "Script code", Required = true };
var parametersOption = new Option("--parameters") { Description = "Parameter definitions JSON" };
var returnDefOption = new Option("--return-def") { Description = "Return type definition" };
var cmd = new Command("update") { Description = "Update a shared script" };
cmd.Add(idOption);
cmd.Add(nameOption);
cmd.Add(codeOption);
cmd.Add(parametersOption);
cmd.Add(returnDefOption);
cmd.SetAction(async (ParseResult result) =>
{
var id = result.GetValue(idOption);
var name = result.GetValue(nameOption)!;
var code = result.GetValue(codeOption)!;
var parameters = result.GetValue(parametersOption);
var returnDef = result.GetValue(returnDefOption);
return await CommandHelpers.ExecuteCommandAsync(
result, urlOption, formatOption, usernameOption, passwordOption,
new UpdateSharedScriptCommand(id, name, code, parameters, returnDef));
});
return cmd;
}
private static Command BuildDelete(Option urlOption, Option formatOption, Option usernameOption, Option passwordOption)
{
var idOption = new Option("--id") { Description = "Shared script ID", Required = true };
var cmd = new Command("delete") { Description = "Delete a shared script" };
cmd.Add(idOption);
cmd.SetAction(async (ParseResult result) =>
{
var id = result.GetValue(idOption);
return await CommandHelpers.ExecuteCommandAsync(
result, urlOption, formatOption, usernameOption, passwordOption, new DeleteSharedScriptCommand(id));
});
return cmd;
}
}