/**
   * validate if change value is valid.
   *
   * @param changeValue change value.
   * @throws CommandException thrown if changeValue cannot be parsed properly.
   */
  private void validateChangeValue(String changeValue) throws CommandException {
    Map<String, String> map = JobUtils.parseChangeValue(changeValue);

    if (map.size() > ALLOWED_CHANGE_OPTIONS.size()
        || !(map.containsKey(OozieClient.CHANGE_VALUE_PAUSETIME)
            || map.containsKey(OozieClient.CHANGE_VALUE_ENDTIME))) {
      throw new CommandException(
          ErrorCode.E1317, changeValue, "can only change pausetime or end time");
    }

    if (map.containsKey(OozieClient.CHANGE_VALUE_PAUSETIME)) {
      isChangePauseTime = true;
    } else if (map.containsKey(OozieClient.CHANGE_VALUE_ENDTIME)) {
      isChangeEndTime = true;
    } else {
      throw new CommandException(
          ErrorCode.E1317, changeValue, "should change pausetime or endtime");
    }

    if (isChangePauseTime) {
      String value = map.get(OozieClient.CHANGE_VALUE_PAUSETIME);
      if (!value.equals("")) {
        try {
          newPauseTime = DateUtils.parseDateOozieTZ(value);
        } catch (Exception ex) {
          throw new CommandException(ErrorCode.E1317, value, "is not a valid date");
        }

        checkPauseTime(newPauseTime);
      }
    } else if (isChangeEndTime) {
      String value = map.get(OozieClient.CHANGE_VALUE_ENDTIME);
      if (!value.equals("")) {
        try {
          newEndTime = DateUtils.parseDateOozieTZ(value);
        } catch (Exception ex) {
          throw new CommandException(ErrorCode.E1317, value, "is not a valid date");
        }

        checkEndTime(newEndTime);
      }
    }
  }