Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 11 additions & 42 deletions aesh/src/main/java/org/aesh/command/AeshCommandRuntimeBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,31 +23,21 @@
import java.util.EnumSet;
import java.util.function.Consumer;

import org.aesh.command.activator.CommandActivator;
import org.aesh.command.activator.CommandActivatorProvider;
import org.aesh.command.activator.OptionActivator;
import org.aesh.command.activator.OptionActivatorProvider;
import org.aesh.command.completer.CompleterInvocation;
import org.aesh.command.completer.CompleterInvocationProvider;
import org.aesh.command.converter.ConverterInvocation;
import org.aesh.command.converter.ConverterInvocationProvider;
import org.aesh.command.impl.AeshCommandRuntime;
import org.aesh.command.impl.activator.AeshCommandActivatorProvider;
import org.aesh.command.impl.activator.AeshOptionActivatorProvider;
import org.aesh.command.impl.completer.AeshCompleterInvocationProvider;
import org.aesh.command.impl.converter.AeshConverterInvocationProvider;
import org.aesh.command.impl.invocation.AeshCommandInvocationProvider;
import org.aesh.command.impl.invocation.DefaultCommandInvocationBuilder;
import org.aesh.command.impl.registry.MutableCommandRegistryImpl;
import org.aesh.command.impl.validator.AeshValidatorInvocationProvider;
import org.aesh.command.invocation.CommandInvocation;
import org.aesh.command.invocation.CommandInvocationBuilder;
import org.aesh.command.invocation.CommandInvocationProvider;
import org.aesh.command.operator.OperatorType;
import org.aesh.command.registry.CommandRegistry;
import org.aesh.command.settings.Settings;
import org.aesh.command.shell.Shell;
import org.aesh.command.validator.ValidatorInvocation;
import org.aesh.command.validator.ValidatorInvocationProvider;
import org.aesh.console.AeshContext;
import org.aesh.console.DefaultAeshContext;
Expand All @@ -65,11 +55,11 @@ public class AeshCommandRuntimeBuilder<CI extends CommandInvocation> {
private CommandRegistry<CI> registry;
private CommandInvocationProvider<CI> commandInvocationProvider;
private CommandNotFoundHandler commandNotFoundHandler;
private CompleterInvocationProvider<? extends CompleterInvocation> completerInvocationProvider;
private ConverterInvocationProvider<? extends ConverterInvocation> converterInvocationProvider;
private ValidatorInvocationProvider<? extends ValidatorInvocation> validatorInvocationProvider;
private OptionActivatorProvider<? extends OptionActivator> optionActivatorProvider;
private CommandActivatorProvider<? extends CommandActivator> commandActivatorProvider;
private CompleterInvocationProvider completerInvocationProvider;
private ConverterInvocationProvider converterInvocationProvider;
private ValidatorInvocationProvider validatorInvocationProvider;
private OptionActivatorProvider optionActivatorProvider;
private CommandActivatorProvider commandActivatorProvider;
private AeshContext ctx;
private CommandInvocationBuilder<CI> commandInvocationBuilder;
private Shell shell;
Expand Down Expand Up @@ -113,27 +103,27 @@ public AeshCommandRuntimeBuilder<CI> commandNotFoundHandler(CommandNotFoundHandl
}

public AeshCommandRuntimeBuilder<CI> completerInvocationProvider(
CompleterInvocationProvider<? extends CompleterInvocation> completerInvocationProvider) {
CompleterInvocationProvider completerInvocationProvider) {
return apply(c -> c.completerInvocationProvider = completerInvocationProvider);
}

public AeshCommandRuntimeBuilder<CI> converterInvocationProvider(
ConverterInvocationProvider<? extends ConverterInvocation> converterInvocationProvider) {
ConverterInvocationProvider converterInvocationProvider) {
return apply(c -> c.converterInvocationProvider = converterInvocationProvider);
}

public AeshCommandRuntimeBuilder<CI> validatorInvocationProvider(
ValidatorInvocationProvider<? extends ValidatorInvocation> validatorInvocationProvider) {
ValidatorInvocationProvider validatorInvocationProvider) {
return apply(c -> c.validatorInvocationProvider = validatorInvocationProvider);
}

public AeshCommandRuntimeBuilder<CI> optionActivatorProvider(
OptionActivatorProvider<? extends OptionActivator> optionActivatorProvider) {
OptionActivatorProvider optionActivatorProvider) {
return apply(c -> c.optionActivatorProvider = optionActivatorProvider);
}

public AeshCommandRuntimeBuilder<CI> commandActivatorProvider(
CommandActivatorProvider<? extends CommandActivator> commandActivatorProvider) {
CommandActivatorProvider commandActivatorProvider) {
return apply(c -> c.commandActivatorProvider = commandActivatorProvider);
}

Expand All @@ -151,8 +141,7 @@ public AeshCommandRuntimeBuilder<CI> aeshContext(AeshContext ctx) {
}

@SuppressWarnings("unchecked")
public AeshCommandRuntimeBuilder<CI> settings(
Settings<? extends CommandInvocation, ? extends ConverterInvocation, ? extends CompleterInvocation, ? extends ValidatorInvocation, ? extends OptionActivator, ? extends CommandActivator> settings) {
public AeshCommandRuntimeBuilder<CI> settings(Settings<? extends CommandInvocation> settings) {
return apply(c -> {
c.commandInvocationProvider = (CommandInvocationProvider<CI>) settings.commandInvocationProvider();
c.commandNotFoundHandler = settings.commandNotFoundHandler();
Expand All @@ -177,26 +166,6 @@ public CommandRuntime<CI> build() {
commandInvocationProvider = new AeshCommandInvocationProvider<>();
}

if (completerInvocationProvider == null) {
completerInvocationProvider = new AeshCompleterInvocationProvider();
}

if (converterInvocationProvider == null) {
converterInvocationProvider = new AeshConverterInvocationProvider();
}

if (validatorInvocationProvider == null) {
validatorInvocationProvider = new AeshValidatorInvocationProvider();
}

if (optionActivatorProvider == null) {
optionActivatorProvider = new AeshOptionActivatorProvider();
}

if (commandActivatorProvider == null) {
commandActivatorProvider = new AeshCommandActivatorProvider();
}

if (commandInvocationBuilder == null)
commandInvocationBuilder = (CommandInvocationBuilder) new DefaultCommandInvocationBuilder(shell);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@
/**
* @author Aesh team
*/
public interface CommandActivatorProvider<CA extends CommandActivator> {
public interface CommandActivatorProvider {

CA enhanceCommandActivator(CommandActivator commandActivator);
default CommandActivator enhanceCommandActivator(CommandActivator commandActivator) {
return commandActivator;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@
/**
* @author Aesh team
*/
public interface OptionActivatorProvider<OA extends OptionActivator> {
public interface OptionActivatorProvider {

OA enhanceOptionActivator(OptionActivator optionActivator);
default OptionActivator enhanceOptionActivator(OptionActivator optionActivator) {
return optionActivator;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@
/**
* @author Aesh team
*/
public interface CompleterInvocationProvider<CI extends CompleterInvocation> {
public interface CompleterInvocationProvider {

CI enhanceCompleterInvocation(CompleterInvocation completerInvocation);
default CompleterInvocation enhanceCompleterInvocation(CompleterInvocation completerInvocation) {
return completerInvocation;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@
/**
* @author Aesh team
*/
public interface ConverterInvocationProvider<CI extends ConverterInvocation> {
public interface ConverterInvocationProvider {

CI enhanceConverterInvocation(ConverterInvocation converterInvocation);
default ConverterInvocation enhanceConverterInvocation(ConverterInvocation converterInvocation) {
return converterInvocation;
}
}
12 changes: 3 additions & 9 deletions aesh/src/main/java/org/aesh/command/impl/AeshCommandRuntime.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
import org.aesh.command.completer.CompleterInvocationProvider;
import org.aesh.command.container.CommandContainer;
import org.aesh.command.converter.ConverterInvocationProvider;
import org.aesh.command.impl.activator.AeshOptionActivatorProvider;
import org.aesh.command.impl.completer.CompleterData;
import org.aesh.command.impl.completer.FileOptionCompleter;
import org.aesh.command.impl.internal.ProcessedCommand;
Expand Down Expand Up @@ -202,8 +201,6 @@ public CommandResult executeCommand(String... lines) throws CommandNotFoundExcep
}

private void processAfterInit() {
if (invocationProviders.getOptionActivatorProvider() instanceof AeshOptionActivatorProvider)
return;
try {
for (String commandName : registry.getAllCommandNames()) {
updateCommand(commandName);
Expand All @@ -216,12 +213,9 @@ private void processAfterInit() {
private void updateCommand(String commandName) throws CommandNotFoundException {
ProcessedCommand<Command<CI>, CI> cmd = registry.getCommand(commandName, "").getParser().getProcessedCommand();
List<CommandLineParser<CI>> childParsers = registry.getChildCommandParsers(commandName);
if (!(invocationProviders.getOptionActivatorProvider() instanceof AeshOptionActivatorProvider)) {
//we have a custom OptionActivatorProvider, and need to process all options
cmd.updateInvocationProviders(invocationProviders);
for (CommandLineParser<?> child : childParsers) {
child.getProcessedCommand().updateInvocationProviders(invocationProviders);
}
cmd.updateInvocationProviders(invocationProviders);
for (CommandLineParser<?> child : childParsers) {
child.getProcessedCommand().updateInvocationProviders(invocationProviders);
}
}

Expand Down
14 changes: 5 additions & 9 deletions aesh/src/main/java/org/aesh/command/impl/Executions.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,12 @@
import org.aesh.command.Execution;
import org.aesh.command.container.CommandContainer;
import org.aesh.command.impl.completer.CompleterData;
import org.aesh.command.impl.completer.NullOptionCompleter;
import org.aesh.command.impl.context.CommandContext;
import org.aesh.command.impl.internal.OptionType;
import org.aesh.command.impl.internal.ParsedCommand;
import org.aesh.command.impl.internal.ProcessedCommand;
import org.aesh.command.impl.internal.ProcessedOption;
import org.aesh.command.impl.operator.AndOperator;
import org.aesh.command.impl.operator.AppendOutputRedirectionOperator;
import org.aesh.command.impl.operator.ConfigurationOperator;
import org.aesh.command.impl.operator.DataProvider;
import org.aesh.command.impl.operator.EndOperator;
Expand Down Expand Up @@ -150,11 +148,9 @@ public CommandResult execute() throws CommandException, InterruptedException, Co
if (cmd.validator() != null && !cmd.hasOptionWithOverrideRequired()) {
cmd.validator().validate(getCommand());
}
if (cmd.getActivator() != null) {
if (!cmd.getActivator().isActivated(new ParsedCommand(cmd))) {
result = CommandResult.FAILURE;
throw new CommandException("The command is not available in the current context.");
}
if (!cmd.isActivated(new ParsedCommand(cmd))) {
result = CommandResult.FAILURE;
throw new CommandException("The command is not available in the current context.");
}

if (hasRedirectIn()) {
Expand Down Expand Up @@ -197,7 +193,7 @@ public CommandResult execute() throws CommandException, InterruptedException, Co
for (ProcessedOption option : cmd.getAllSelectors()) {
//if we do not have any default values, check if we can use the completer
if ((option.getDefaultValues() == null || option.getDefaultValues().size() == 0) &&
(option.completer() != null && !(option.completer() instanceof NullOptionCompleter))) {
option.completer() != null) {
//first create a mock CompleterInvocation, then get all the values
CompleterData completerMock = new CompleterData(null, "", null);
option.completer().complete(completerMock);
Expand Down Expand Up @@ -423,7 +419,7 @@ private static Operator buildOperator(OperatorType op, AeshContext context) {
return new OutputRedirectionOperator(context);
}
case APPEND_OUT: {
return new AppendOutputRedirectionOperator(context);
return new OutputRedirectionOperator(context, true);
}
case PIPE: {
return new PipeOperator(context);
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ private String suggestOption(String trimmed, String lastWord) {
private boolean isCommandActivated(String name) {
try {
CommandContainer<CI> container = registry.getCommand(name, name);
return container.getParser().getProcessedCommand().getActivator().isActivated(null);
return container.getParser().getProcessedCommand().isActivated(null);
} catch (Exception e) {
return true; // default to activated if we can't check
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,13 @@
import org.aesh.command.GroupCommandDefinition;
import org.aesh.command.container.CommandContainer;
import org.aesh.command.container.CommandContainerBuilder;
import org.aesh.command.impl.activator.AeshCommandActivatorProvider;
import org.aesh.command.impl.activator.AeshOptionActivatorProvider;
import org.aesh.command.impl.completer.AeshCompleterInvocationProvider;
import org.aesh.command.impl.converter.AeshConverterInvocationProvider;
import org.aesh.command.impl.internal.OptionType;
import org.aesh.command.impl.internal.ProcessedCommand;
import org.aesh.command.impl.internal.ProcessedCommandBuilder;
import org.aesh.command.impl.internal.ProcessedOptionBuilder;
import org.aesh.command.impl.invocation.AeshInvocationProviders;
import org.aesh.command.impl.parser.CommandLineParser;
import org.aesh.command.impl.parser.CommandLineParserBuilder;
import org.aesh.command.impl.validator.AeshValidatorInvocationProvider;
import org.aesh.command.invocation.CommandInvocation;
import org.aesh.command.invocation.InvocationProviders;
import org.aesh.command.metadata.CommandMetadataProvider;
Expand Down Expand Up @@ -367,11 +362,7 @@ public static void parseAndPopulate(Command<CommandInvocation> instance, String
AeshCommandContainerBuilder<CommandInvocation> builder = new AeshCommandContainerBuilder<>();
CommandLineParser<CommandInvocation> cl = builder.doGenerateCommandLineParser(instance).getParser();
InvocationProviders invocationProviders = new AeshInvocationProviders(
new AeshConverterInvocationProvider(),
new AeshCompleterInvocationProvider(),
new AeshValidatorInvocationProvider(),
new AeshOptionActivatorProvider(),
new AeshCommandActivatorProvider());
null, null, null, null, null);
cl.parse(input);
cl.getCommandPopulator().populateObject(cl.getProcessedCommand(), invocationProviders, null,
CommandLineParser.Mode.VALIDATE);
Expand Down
Loading