protected CommandResult executeAction()

in gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/command/CommandSupport.java [267:335]


    protected CommandResult executeAction(final ShellContext context, final Object[] args) {
        assert context != null;
        assert args != null;

        final IO io = context.getIo();

        log.trace("Executing action");

        // Setup the command context
        CommandContext ctx = new CommandContext() {
            private final Variables variables = new Variables(context.getVariables());

            public Object[] getArguments() {
                return args;
            }

            public IO getIo() {
                return io;
            }

            public Variables getVariables() {
                return variables;
            }

            public Command getCommand() {
                return CommandSupport.this;
            }
        };

        CommandResult result;

        try {
            CommandAction action = getAction();
            
            log.trace("Executing action: {}", action);

            Object value = action.execute(ctx);

            log.trace("Result: {}", value);

            context.getVariables().set("gshell.result", value);

            result = new CommandResult.ValueResult(value);
        }
        catch (final ResultNotification n) {
            log.trace("Command notified result: " + n, n);

            if (n.getResult() == CommandAction.Result.FAILURE) {
                io.error(n.getMessage());
            }
            else {
                io.verbose(n.getMessage());
            }

            result = new CommandResult.ValueResult(n.getResult());
        }
        catch (final Notification n) {
            log.trace("Notified: " + n, n);

            result = new CommandResult.NotificationResult(n);
        }
        catch (final Throwable t) {
            log.trace("Caught: " + t, t);

            result = new CommandResult.FailureResult(t);
        }

        return result;
    }