private static ShowInstanceCommand parseInternal()

in odps-console-public/src/main/java/com/aliyun/openservices/odps/console/pub/ShowInstanceCommand.java [258:323]


  private static ShowInstanceCommand parseInternal(String commandString,
                                                   String extCommandString,
                                                   ExecutionContext sessionContext)
      throws ODPSConsoleException {
    int number = 50;
    boolean onlyOwner = true;
    String project = null;
    if ((extCommandString == null) || extCommandString.trim().isEmpty()) {
      // 不带参数的情况,默认取50条记录,从当天开始,到现在的记录
      return new ShowInstanceCommand(commandString, sessionContext, project, getTime(new Date(), 0),
                                     null, number, onlyOwner);
    }

    extCommandString = extCommandString.toLowerCase();
    List<String> tokens = new ArrayList<String>(Arrays.asList(new AntlrObject(extCommandString).getTokenStringArray()));

    // 把from和to参数从命令中取出来
    Date fromDate = getDateParam(tokens, "from");
    Date toDate = getDateParam(tokens, "to");

    if (fromDate != null && toDate != null) {
      if (fromDate.equals(toDate)) {
        throw new IllegalArgumentException(
            "the date range is act as [from,to), so from and to couldn't be the same day");
      }
    }

    // 如果没日期,默认为当天开始
    if (fromDate == null && toDate == null) {
      fromDate = new Date();
    }

    if (!tokens.isEmpty()) {
      // number, -p, -limit, -all
      CommandLine cl = getCommandLine(tokens.toArray(new String[0]));

      // 除了 -p , -limit 和 -all 选项,最多还剩下一个参数 <number>, 且这个参数与 -limit 不共存
      if (cl.getArgs().length > 1 || (cl.getArgs().length == 1 && cl.hasOption("limit"))) {
        throw new ODPSConsoleException(ODPSConsoleConstants.BAD_COMMAND + "[more parameter]");
      }

      // 获取 project
      if (cl.hasOption(PROJECT_TAG)) {
        project = cl.getOptionValue(PROJECT_TAG);
      }

      // 获取 limit or number
      String numberStr = null;
      if (cl.hasOption(LIMIT_TAG)) {
        numberStr = cl.getOptionValue(LIMIT_TAG);
      } else if (cl.getArgs().length == 1) {
        numberStr = cl.getArgs()[0];
      }

      if (numberStr != null) {
        number = getNumberToken(numberStr);
      }

      if (cl.hasOption(ALL_TAG)) {
        onlyOwner = false;
      }
    }

    return new ShowInstanceCommand(commandString, sessionContext, project, getTime(fromDate, 0),
                                   getTime(toDate, 0), number, onlyOwner);
  }