@Override
@SuppressWarnings("unchecked")
public int execute(ConsoleOperation output) throws InterruptedException {
if (output != null && output.getBuffer().trim().length() > 0) {
ResultHandler resultHandler = null;
try (CommandContainer commandContainer = getCommand(
Parser.findFirstWord(output.getBuffer()),
output.getBuffer())) {
CommandLine commandLine = commandContainer.getParser()
.parse(output.getBuffer());
resultHandler = commandContainer.getParser().getCommand().getResultHandler();
commandContainer
.getParser()
.getCommandPopulator()
.populateObject(commandContainer.getCommand(),
commandLine, invocationProviders, getAeshContext(), true);
// validate the command before execute, only call if no
// options with overrideRequired is not set
if (commandContainer.getParser().getCommand() .getValidator() != null
&& !commandLine.hasOptionWithOverrideRequired())
commandContainer.getParser().getCommand().getValidator()
.validate(commandContainer.getCommand());
result = commandContainer.getCommand().execute(
commandInvocationServices.getCommandInvocationProvider(
commandInvocationProvider).enhanceCommandInvocation(
new AeshCommandInvocation(console,
output.getControlOperator(),
output.getPid(), this)));
if(result == CommandResult.SUCCESS && resultHandler != null)
resultHandler.onSuccess();
else if(resultHandler != null)
resultHandler.onFailure(result);
}
catch (CommandLineParserException | CommandValidatorException | OptionValidatorException e) {
getShell().out().println(e.getMessage());
result = CommandResult.FAILURE;
if(resultHandler != null)
resultHandler.onValidationFailure(result, e);
}
catch (CommandNotFoundException cnfe) {
getShell().out().println(cnfe.getMessage());
result = CommandResult.FAILURE;
if(commandNotFoundHandler != null)
commandNotFoundHandler.handleCommandNotFound(output.getBuffer(), getShell());
}
catch (Exception e) {
if(e instanceof InterruptedException)
throw (InterruptedException) e;
else {
LOGGER.log(Level.SEVERE, "Exception when parsing/running: "
+ output.getBuffer(), e);
getShell().out().println(
"Exception when parsing/running: "
+ output.getBuffer() + ", "
+ e.getMessage()
);
result = CommandResult.FAILURE;
if (resultHandler != null)
resultHandler.onValidationFailure(result, e);
}
}
}
// empty line
else if (output != null) {