@Override
  public void execute(CommandLineArguments arguments) {
    if (arguments.argumentCount() < getArgumentCount()) {
      getCommandLineHandle().expectedArguments(getArguments());
      return;
    }

    Scanner scanner = arguments.asScanner();
    final String command = scanner.next();

    ExecutableCommand subCommand = subCommands.get(command);
    if (subCommand != null) {
      String remainingArguments = "";
      if (scanner.hasNext()) {
        remainingArguments = scanner.nextLine();
      }
      subCommand.execute(new CommandLineArguments(remainingArguments));
    } else {
      getCommandLineHandle().print("Unknown command '%s'", command);
    }
  }
 @Override
 public void unregisterSubCommand(ExecutableCommand command) {
   subCommands.remove(command.getCommandName());
 }
 @Override
 public void registerSubCommand(ExecutableCommand command) {
   subCommands.put(command.getCommandName(), command);
 }