protected virtual void RenderCommandList(ICommandLineReader <IHelpParameter> parameter) { // Headers var captions = new[] { "NAME", "ABOUT" }.Pad(ColumnWidths); Logger.WriteLine(p => p.text(string.Join(string.Empty, captions))); // Separators var separators = captions.Select(c => new string('-', c.Trim().Length)).Pad(ColumnWidths); Logger.WriteLine(p => p.text(string.Join(string.Empty, separators))); // Commands var userExecutableCommands = from commandType in _commandTypes where !commandType.IsDefined(typeof(InternalAttribute)) orderby CommandHelper.GetCommandId(commandType).Default select commandType; foreach (var commandType in userExecutableCommands) { var defaultId = CommandHelper.GetCommandId(commandType).Default.ToString(); var aliases = string.Join("|", CommandHelper.GetCommandId(commandType).Aliases.Select(x => x.ToString())); var description = commandType.GetCustomAttribute <DescriptionAttribute>()?.Description ?? "N/A"; var row = new[] { $"{defaultId} ({(aliases.Length > 0 ? aliases : "-")})", description }.Pad(ColumnWidths); Logger.WriteLine(p => p.text(string.Join(string.Empty, row))); } }
// todo - new signature ------------------------------------------------------------------------- private async Task CheckAndExecuteAsync(ICommandLineReader <TParameter> parameter, TContext context, CancellationToken cancellationToken) { if (await CanExecuteAsync(parameter, context, cancellationToken)) { Logger.Log(Abstraction.Layer.Service().Decision("Execute command.").Because("Can execute.")); await ExecuteAsync(parameter, context, cancellationToken); } else { Logger.Log(Abstraction.Layer.Service().Decision("Don't execute command.").Because("Cannot execute.")); } }
public ShellServiceHost( IConsole console, ICommandLineProcessor commandLineProcessor, ICommandLineReader commandLineReader, IShellBootstrap shellBootstrap ) { _cons = console; _clp = commandLineProcessor; _clr = commandLineReader; _shellBootstrap = shellBootstrap; }
protected override Task ExecuteAsync(ICommandLineReader <IHelpParameter> parameter, NullContext context, CancellationToken cancellationToken) { var commandSelected = parameter.GetItem(x => x.Command).IsNotNullOrEmpty(); if (commandSelected) { RenderParameterList(parameter); } else { RenderCommandList(parameter); } return(Task.CompletedTask); }
protected virtual void RenderParameterList(ICommandLineReader <IHelpParameter> parameter) { var commandId = new Identifier(parameter.GetItem(x => x.Command)); var commandType = _commandTypes.SingleOrDefault(t => CommandHelper.GetCommandId(t) == commandId); if (commandType is null) { throw DynamicException.Create ( $"CommandNotFound", $"Could not find a command with the name '{parameter.GetItem(x => x.Command)}'" ); } // Headers var captions = new[] { "NAME", "ABOUT" }.Pad(ColumnWidths); Logger.WriteLine(p => p.text(string.Join(string.Empty, captions))); // Separators var separators = captions.Select(c => new string('-', c.Trim().Length)).Pad(ColumnWidths); Logger.WriteLine(p => p.text(string.Join(string.Empty, separators))); var bagType = commandType.GetBagType(); var parameters = from commandParameter in bagType.GetParameters() orderby commandParameter.Id.Default.ToString() select commandParameter; foreach (var commandParameter in parameters) { var defaultId = commandParameter.Id.Default.ToString(); var aliases = string.Join("|", commandParameter.Id.Aliases.Select(x => x.ToString())); var description = commandParameter.Description ?? "N/A"; var row = new[] { $"{defaultId} ({(aliases.Length > 0 ? aliases : "-")})", description }.Pad(ColumnWidths); Logger.WriteLine(p => p.text(string.Join(string.Empty, row))); } }
protected virtual Task ExecuteAsync(ICommandLineReader <TParameter> parameter, TContext context, CancellationToken cancellationToken) { return(Task.CompletedTask); }
/// <summary> /// When overriden by a derived class indicates whether a command can be executed. The default implementation always returns 'true'. /// </summary> protected virtual Task <bool> CanExecuteAsync(ICommandLineReader <TParameter> parameter, TContext context, CancellationToken cancellationToken = default) { return(Task.FromResult(true)); }