示例#1
0
  private void repl() {
    Ansi.setEnabled(false);
    while (true) {
      Object error = null;
      try {
        String str = _reader.readLine();
        try {
          if (str == null) {
            throw new CommandExitException();
          }
          Object result = _userAdminShell.executeCommand(str);
          String s = Strings.toString(result);
          if (!s.isEmpty()) {
            _writer.println(s);
          }
          _writer.flush();
        } catch (IllegalArgumentException e) {
          error = e.toString();
        } catch (SerializationException e) {
          error = "There is a bug here, please report to [email protected]";
          _logger.error("This must be a bug, please report to [email protected].", e);
        } catch (CommandSyntaxException e) {
          error = e;
        } catch (CommandEvaluationException | CommandAclException e) {
          error = e.getMessage();
        } catch (CommandExitException e) {
          break;
        } catch (CommandPanicException e) {
          error =
              "Command '"
                  + str
                  + "' triggered a bug ("
                  + e.getTargetException()
                  + "); the service log file contains additional information. Please "
                  + "contact [email protected].";
        } catch (CommandThrowableException e) {
          Throwable cause = e.getTargetException();
          if (cause instanceof CacheException) {
            error = cause.getMessage();
          } else {
            error = cause.toString();
          }
        } catch (CommandException e) {
          error = "There is a bug here, please report to [email protected]: " + e.getMessage();
          _logger.warn("Unexpected exception, please report this " + "bug to [email protected]");
        } catch (NoRouteToCellException e) {
          error = "Cell name does not exist or cell is not started: " + e.getMessage();
          _logger.warn(
              "The cell the command was sent to is no " + "longer there: {}", e.getMessage());
        } catch (RuntimeException e) {
          error =
              String.format(
                  "Command '%s' triggered a bug (%s); please"
                      + " locate this message in the log file of the admin service and"
                      + " send an email to [email protected] with this line and the"
                      + " following stack-trace",
                  str, e);
          _logger.error((String) error, e);
        }
      } catch (InterruptedException e) {
        error = null;
      } catch (Exception e) {
        error = e.getMessage();
        if (error == null) {
          error = e.getClass().getSimpleName() + ": (null)";
        }
      }

      if (error != null) {
        if (error instanceof CommandSyntaxException) {
          CommandSyntaxException e = (CommandSyntaxException) error;
          _error.append("Syntax error: ").println(e.getMessage());
        } else {
          _error.println(error);
        }
        _error.flush();
      }
    }
  }
  private void runAsciiMode() throws IOException {
    Ansi.setEnabled(_useColors);
    while (true) {
      String prompt = Ansi.ansi().bold().a(_userAdminShell.getPrompt()).boldOff().toString();
      Object result;
      try {
        String str = _console.readLine(prompt);
        try {
          if (str == null) {
            throw new CommandExitException();
          }
          result = _userAdminShell.executeCommand(str);
        } catch (IllegalArgumentException e) {
          result = e.toString();
        } catch (SerializationException e) {
          result = "There is a bug here, please report to [email protected]";
          _logger.error("This must be a bug, please report to [email protected].", e);
        } catch (CommandSyntaxException e) {
          result = e;
        } catch (CommandExitException e) {
          break;
        } catch (CommandPanicException e) {
          result =
              "Command '"
                  + str
                  + "' triggered a bug ("
                  + e.getTargetException()
                  + "); the service log file contains additional information. Please "
                  + "contact [email protected].";
        } catch (CommandException e) {
          result = e.getMessage();
        } catch (NoRouteToCellException e) {
          result = "Cell name does not exist or cell is not started: " + e.getMessage();
          _logger.warn(
              "The cell the command was sent to is no " + "longer there: {}", e.getMessage());
        } catch (RuntimeException e) {
          result =
              String.format(
                  "Command '%s' triggered a bug (%s); please"
                      + " locate this message in the log file of the admin service and"
                      + " send an email to [email protected] with this line and the"
                      + " following stack-trace",
                  str, e);
          _logger.error((String) result, e);
        }
      } catch (InterruptedIOException e) {
        _console.getCursorBuffer().clear();
        _console.println();
        result = null;
      } catch (InterruptedException e) {
        _console.println("^C");
        _console.flush();
        _console.getCursorBuffer().clear();
        result = null;
      } catch (IOException e) {
        throw e;
      } catch (Exception e) {
        result = e.getMessage();
        if (result == null) {
          result = e.getClass().getSimpleName() + ": (null)";
        }
      }

      if (result != null) {
        if (result instanceof CommandSyntaxException) {
          CommandSyntaxException e = (CommandSyntaxException) result;
          Ansi sb = Ansi.ansi();
          sb.fg(RED).a("Syntax error: ").a(e.getMessage()).newline();
          String help = e.getHelpText();
          if (help != null) {
            sb.fg(CYAN);
            sb.a("Help : ").newline();
            sb.a(help);
          }
          _console.println(sb.reset().toString());
        } else {
          String s;
          s = Strings.toMultilineString(result);
          if (!s.isEmpty()) {
            _console.println(s);
            _console.flush();
          }
        }
      }
      _console.flush();
    }
  }