package org.atomnuke.util.cli;
import java.util.Arrays;
import org.atomnuke.util.cli.command.Command;
import org.atomnuke.util.cli.command.result.CommandResult;
import org.atomnuke.util.cli.command.result.ExceptionResult;
/**
*
* @author zinic
*/
public class CommandDriver {
private final Command myCommand;
private final String[] args;
public CommandDriver(Command command, String[] args) {
this.myCommand = command;
this.args = Arrays.copyOf(args, args.length);
}
public CommandResult go() {
try {
return args.length > 0 ? nextCommand(args[0]) : myCommand.perform(args);
} catch (Exception ex) {
return new ExceptionResult(ex);
}
}
public CommandResult nextCommand(String nextArgument) throws Exception {
if (nextArgument == null || nextArgument.length() == 0) {
throw new IllegalArgumentException();
}
for (Command availableCommand : myCommand.availableCommands()) {
if (availableCommand.getCommandToken().equalsIgnoreCase(nextArgument)) {
return new CommandDriver(availableCommand, Arrays.copyOfRange(args, 1, args.length)).go();
}
}
return myCommand.perform(args);
}
}