use of org.wildfly.core.cli.command.BatchCompliantCommand in project wildfly-core by wildfly.
the class CommandContextImpl method handleCommand.
private void handleCommand(ParsedCommandLine parsed) throws CommandFormatException, CommandLineException {
String line = parsed.getOriginalLine();
try {
List<CLIExecution> executions = aeshCommands.newExecutions(parsed);
for (CLIExecution exec : executions) {
CLICommandInvocation invContext = exec.getInvocation();
this.invocationContext = invContext;
String opLine = exec.getLine();
// implies a split of the main command)
if (opLine != null && !opLine.equals(line)) {
resetArgs(opLine);
}
Throwable originalException = null;
try {
// Could be an operation.
if (exec.isOperation()) {
handleOperation(parsedCmd);
continue;
}
// Could be a legacy command.
CommandHandler handler = exec.getLegacyHandler();
if (handler != null) {
handleLegacyCommand(exec.getLine(), handler, false);
continue;
}
} catch (Throwable ex) {
if (ex instanceof InterruptedException) {
Thread.currentThread().interrupt();
}
originalException = ex;
} finally {
// OK to be null
Throwable suppressed = originalException;
// when calling exec.execute something that we are not doing here.
if (invContext.getConfiguration().getOutputRedirection() != null) {
try {
invContext.getConfiguration().getOutputRedirection().close();
} catch (IOException ex) {
// Message must contain the Exception and the localized message.
if (ex instanceof AccessDeniedException) {
String message = ex.getMessage();
suppressed = new CommandLineException((message != null ? message : line) + " (Access denied)");
} else {
suppressed = new CommandLineException(ex.toString());
}
if (originalException != null) {
originalException.addSuppressed(suppressed);
suppressed = originalException;
}
}
}
if (suppressed != null) {
if (suppressed instanceof RuntimeException) {
throw (RuntimeException) suppressed;
}
if (suppressed instanceof Error) {
throw (Error) suppressed;
}
if (suppressed instanceof CommandLineException) {
throw (CommandLineException) suppressed;
}
if (suppressed instanceof CommandLineParserException) {
throw (CommandLineParserException) suppressed;
}
if (suppressed instanceof OptionValidatorException) {
throw (OptionValidatorException) suppressed;
}
}
}
// child command. This is caused by aesh 2.0 behavior.
if (isBatchMode()) {
exec.populateCommand();
}
BatchCompliantCommand bc = exec.getBatchCompliant();
if (isBatchMode() && bc != null) {
try {
Batch batch = getBatchManager().getActiveBatch();
BatchCompliantCommand.BatchResponseHandler request = bc.buildBatchResponseHandler(this, batch.getAttachments());
// Wrap into legacy API.
ResponseHandler rh = null;
if (request != null) {
rh = (ModelNode step, OperationResponse response) -> {
request.handleResponse(step, response);
};
}
BatchedCommand batchedCmd = new DefaultBatchedCommand(this, line, bc.buildRequest(this, batch.getAttachments()), rh);
batch.add(batchedCmd);
} catch (CommandFormatException e) {
throw new CommandFormatException("Failed to add to batch '" + line + "'", e);
}
} else {
execute(() -> {
executor.execute(aeshCommands.newExecutableBuilder(exec), timeout, TimeUnit.SECONDS);
return null;
}, line);
}
}
} catch (CommandNotFoundException ex) {
// Commands that are not exposed in completion.
if (parsedCmd.getFormat() != OperationFormat.INSTANCE) {
CommandHandler h = cmdRegistry.getCommandHandler(ex.getCommandName().toLowerCase());
if (h != null) {
handleLegacyCommand(line, h, false);
return;
}
}
throw new CommandLineException("Unexpected command '" + line + "'. Type 'help --commands' for the list of supported commands.");
} catch (IOException ex) {
throw new CommandLineException(ex);
} catch (CommandLineParserException | OptionValidatorException ex) {
throw new CommandFormatException(ex);
}
}
use of org.wildfly.core.cli.command.BatchCompliantCommand in project wildfly-core by wildfly.
the class CommandContextImpl method buildAeshCommandRequest.
public OperationCommand.HandledRequest buildAeshCommandRequest(ParsedCommandLine parsedCmd, boolean batchMode) throws CommandFormatException {
AeshCommands.CLIExecution execution = null;
try {
execution = aeshCommands.newExecutions(parsedCmd).get(0);
// We are not going to execute the command, it must be populated explicitly
// to have options injected in Command instance.
execution.populateCommand();
} catch (CommandLineParserException | OptionValidatorException | IOException ex) {
throw new CommandFormatException(ex);
} catch (CommandNotFoundException ex) {
throw new OperationFormatException("No command handler for '" + parsedCmd.getOperationName() + "'.");
}
BatchCompliantCommand bc = execution.getBatchCompliant();
if (batchMode) {
if (bc == null) {
throw new OperationFormatException("The command is not allowed in a batch.");
}
Batch batch = getBatchManager().getActiveBatch();
return new OperationCommand.HandledRequest(bc.buildRequest(this, batch.getAttachments()), null);
} else {
DMRCommand dmr = execution.getDMRCompliant();
if (dmr == null) {
throw new OperationFormatException("The command does not translate to an operation request.");
}
return new OperationCommand.HandledRequest(dmr.buildRequest(this), null);
}
}
Aggregations