Search in sources :

Example 1 with DefaultBatchedCommand

use of org.jboss.as.cli.batch.impl.DefaultBatchedCommand 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);
    }
}
Also used : AccessDeniedException(java.nio.file.AccessDeniedException) ResponseHandler(org.jboss.as.cli.handlers.ResponseHandler) CLICommandInvocation(org.wildfly.core.cli.command.aesh.CLICommandInvocation) CLIExecution(org.jboss.as.cli.impl.aesh.AeshCommands.CLIExecution) CommandHandler(org.jboss.as.cli.CommandHandler) CommandCommandHandler(org.jboss.as.cli.handlers.CommandCommandHandler) CommandLineException(org.jboss.as.cli.CommandLineException) Batch(org.jboss.as.cli.batch.Batch) DefaultBatchedCommand(org.jboss.as.cli.batch.impl.DefaultBatchedCommand) OptionValidatorException(org.aesh.command.validator.OptionValidatorException) IOException(java.io.IOException) CommandLineParserException(org.aesh.command.parser.CommandLineParserException) CommandFormatException(org.jboss.as.cli.CommandFormatException) ModelNode(org.jboss.dmr.ModelNode) OperationResponse(org.jboss.as.controller.client.OperationResponse) CommandNotFoundException(org.aesh.command.CommandNotFoundException) BatchCompliantCommand(org.wildfly.core.cli.command.BatchCompliantCommand) DefaultBatchedCommand(org.jboss.as.cli.batch.impl.DefaultBatchedCommand) BatchedCommand(org.jboss.as.cli.batch.BatchedCommand)

Example 2 with DefaultBatchedCommand

use of org.jboss.as.cli.batch.impl.DefaultBatchedCommand in project wildfly-core by wildfly.

the class CommandContextImpl method handleOperation.

private void handleOperation(ParsedCommandLine parsedLine) throws CommandFormatException, CommandLineException {
    if (isBatchMode()) {
        String line = parsedLine.getOriginalLine();
        Batch batch = getBatchManager().getActiveBatch();
        final ModelNode request = Util.toOperationRequest(this, parsedLine, batch.getAttachments());
        StringBuilder op = new StringBuilder();
        op.append(getNodePathFormatter().format(parsedLine.getAddress()));
        op.append(line.substring(line.indexOf(':')));
        DefaultBatchedCommand batchedCmd = new DefaultBatchedCommand(this, op.toString(), request, null);
        batch.add(batchedCmd);
    } else {
        Attachments attachments = new Attachments();
        final ModelNode op = Util.toOperationRequest(CommandContextImpl.this, parsedLine, attachments);
        RequestWithAttachments req = new RequestWithAttachments(op, attachments);
        set(Scope.REQUEST, "OP_REQ", req);
        operationHandler.handle(this);
    }
}
Also used : Batch(org.jboss.as.cli.batch.Batch) RequestWithAttachments(org.jboss.as.cli.RequestWithAttachments) DefaultBatchedCommand(org.jboss.as.cli.batch.impl.DefaultBatchedCommand) ModelNode(org.jboss.dmr.ModelNode) RequestWithAttachments(org.jboss.as.cli.RequestWithAttachments) Attachments(org.jboss.as.cli.Attachments)

Example 3 with DefaultBatchedCommand

use of org.jboss.as.cli.batch.impl.DefaultBatchedCommand in project wildfly-core by wildfly.

the class CommandContextImpl method handleLegacyCommand.

private void handleLegacyCommand(String opLine, CommandHandler handler, boolean direct) throws CommandLineException {
    if (isBatchMode() && handler.isBatchMode(this)) {
        if (!(handler instanceof OperationCommand)) {
            throw new CommandLineException("The command is not allowed in a batch.");
        } else {
            try {
                Batch batch = getBatchManager().getActiveBatch();
                HandledRequest request = ((OperationCommand) handler).buildHandledRequest(this, batch.getAttachments());
                BatchedCommand batchedCmd = new DefaultBatchedCommand(this, opLine, request.getRequest(), request.getResponseHandler());
                batch.add(batchedCmd);
            } catch (CommandFormatException e) {
                throw new CommandFormatException("Failed to add to batch '" + opLine + "'", e);
            }
        }
    } else if (direct) {
        handler.handle(CommandContextImpl.this);
    } else {
        execute(() -> {
            executor.execute(handler, timeout, TimeUnit.SECONDS);
            return null;
        }, opLine);
    }
}
Also used : OperationCommand(org.jboss.as.cli.OperationCommand) Batch(org.jboss.as.cli.batch.Batch) CommandFormatException(org.jboss.as.cli.CommandFormatException) HandledRequest(org.jboss.as.cli.OperationCommand.HandledRequest) DefaultBatchedCommand(org.jboss.as.cli.batch.impl.DefaultBatchedCommand) CommandLineException(org.jboss.as.cli.CommandLineException) DefaultBatchedCommand(org.jboss.as.cli.batch.impl.DefaultBatchedCommand) BatchedCommand(org.jboss.as.cli.batch.BatchedCommand)

Aggregations

Batch (org.jboss.as.cli.batch.Batch)3 DefaultBatchedCommand (org.jboss.as.cli.batch.impl.DefaultBatchedCommand)3 CommandFormatException (org.jboss.as.cli.CommandFormatException)2 CommandLineException (org.jboss.as.cli.CommandLineException)2 BatchedCommand (org.jboss.as.cli.batch.BatchedCommand)2 ModelNode (org.jboss.dmr.ModelNode)2 IOException (java.io.IOException)1 AccessDeniedException (java.nio.file.AccessDeniedException)1 CommandNotFoundException (org.aesh.command.CommandNotFoundException)1 CommandLineParserException (org.aesh.command.parser.CommandLineParserException)1 OptionValidatorException (org.aesh.command.validator.OptionValidatorException)1 Attachments (org.jboss.as.cli.Attachments)1 CommandHandler (org.jboss.as.cli.CommandHandler)1 OperationCommand (org.jboss.as.cli.OperationCommand)1 HandledRequest (org.jboss.as.cli.OperationCommand.HandledRequest)1 RequestWithAttachments (org.jboss.as.cli.RequestWithAttachments)1 CommandCommandHandler (org.jboss.as.cli.handlers.CommandCommandHandler)1 ResponseHandler (org.jboss.as.cli.handlers.ResponseHandler)1 CLIExecution (org.jboss.as.cli.impl.aesh.AeshCommands.CLIExecution)1 OperationResponse (org.jboss.as.controller.client.OperationResponse)1