コード例 #1
0
  private static Rule<View> getNumberRule(Field field, View view, NumberRule numberRule) {
    if (!TextView.class.isAssignableFrom(view.getClass())) {
      Log.w(TAG, String.format(WARN_TEXT, field.getName(), NumberRule.class.getSimpleName()));
      return null;
    } else if (numberRule.type() == null) {
      throw new IllegalArgumentException(
          String.format("@%s.type() cannot be null.", NumberRule.class.getSimpleName()));
    }

    List<Rule<?>> rules = new ArrayList<Rule<?>>();
    int messageResId = numberRule.messageResId();
    String message =
        messageResId != 0 ? view.getContext().getString(messageResId) : numberRule.message();

    switch (numberRule.type()) {
      case INTEGER:
      case LONG:
        Rules.regex(null, Rules.REGEX_INTEGER, true);
        break;
      case FLOAT:
      case DOUBLE:
        Rules.regex(null, Rules.REGEX_DECIMAL, true);
        break;
    }

    if (numberRule.lt() != Double.MIN_VALUE) {
      String ltNumber = String.valueOf(numberRule.lt());
      double number = Double.parseDouble(ltNumber);
      switch (numberRule.type()) {
        case INTEGER:
          rules.add(Rules.lt(null, ((int) number)));
          break;
        case LONG:
          rules.add(Rules.lt(null, ((long) number)));
          break;
        case FLOAT:
          rules.add(Rules.lt(null, Float.parseFloat(ltNumber)));
          break;
        case DOUBLE:
          rules.add(Rules.lt(null, Double.parseDouble(ltNumber)));
          break;
      }
    }
    if (numberRule.gt() != Double.MAX_VALUE) {
      String gtNumber = String.valueOf(numberRule.gt());
      double number = Double.parseDouble(gtNumber);
      switch (numberRule.type()) {
        case INTEGER:
          rules.add(Rules.gt(null, ((int) number)));
          break;
        case LONG:
          rules.add(Rules.gt(null, ((long) number)));
          break;
        case FLOAT:
          rules.add(Rules.gt(null, Float.parseFloat(gtNumber)));
          break;
        case DOUBLE:
          rules.add(Rules.gt(null, Double.parseDouble(gtNumber)));
          break;
      }
    }
    if (numberRule.eq() != Double.MAX_VALUE) {
      String eqNumber = String.valueOf(numberRule.eq());
      double number = Double.parseDouble(eqNumber);
      switch (numberRule.type()) {
        case INTEGER:
          rules.add(Rules.eq(null, ((int) number)));
          break;
        case LONG:
          rules.add(Rules.eq(null, ((long) number)));
          break;
        case FLOAT:
          rules.add(Rules.eq(null, Float.parseFloat(eqNumber)));
          break;
        case DOUBLE:
          rules.add(Rules.eq(null, Double.parseDouble(eqNumber)));
          break;
      }
    }

    Rule<?>[] ruleArray = new Rule<?>[rules.size()];
    rules.toArray(ruleArray);

    return Rules.and(message, ruleArray);
  }