Esempio n. 1
0
        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)));
            }
        }
Esempio n. 2
0
        // 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;
 }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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)));
            }
        }
Esempio n. 6
0
 protected virtual Task ExecuteAsync(ICommandLineReader <TParameter> parameter, TContext context, CancellationToken cancellationToken)
 {
     return(Task.CompletedTask);
 }
Esempio n. 7
0
 /// <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));
 }