package com.gh.mygreen.xlsmapper.validation.fieldvalidation; import java.util.LinkedHashMap; import com.gh.mygreen.xlsmapper.ArgUtils; /** * 値が指定した値以上かどうかの最小値のチェックする。 * <p>メッセージキーは、「cellFieldError.min」。 * <p>メッセージ中で利用可能な変数は次の通り。 * <ul> * <li>「validatedValue」:検証対象の値のオブジェクト。 * <li>「formattedValidatedValue」:{@link FieldFormatter}により、文字列にフォーマットした検証対象の値。 * <li>「min」:下限値となる最小値。 * <li>「formattedMin」:{@link FieldFormatter}により、文字列にフォーマットした上限値となる最大値。 * * @version 1.0 * @author T.TSUCHIE * */ public class MinValidator<T extends Comparable<T>> extends AbstractFieldValidator<T> { private final T min; /** エラーメッセージ中のための値のフォーマッタ */ private FieldFormatter<T> formatter; /** * 最小値を指定するコンストラクタ * <p>値のフォーマットは、{@link DefaultFieldFormatter} を利用します。 * @param min 下限値となる最小値。 */ public MinValidator(final T min) { this(min, new DefaultFieldFormatter<T>(null)); } /** * 値のフォーマットするための書式を指定するコンストラクタ * <p>値のフォーマットは、{@link DefaultFieldFormatter} を利用します。 * @param min 下限値となる最小値 * @param pattern メッセージ中に表示するための値をフォーマットする際の書式。 */ public MinValidator(final T min, final String pattern) { this(min, new DefaultFieldFormatter<T>(pattern)); } /** * 値のフォーマッタ指定するコンストラクタ * * @since 1.0 * @param min 下限値となる最小値。 * @param formatter エラーメッセージ中のための値のフォーマッタ * @throws IllegalArgumentException min or formatter is null. */ public MinValidator(final T min, final FieldFormatter<T> formatter) { super(); ArgUtils.notNull(min, "min"); ArgUtils.notNull(formatter, "formatter"); this.min = min; this.formatter = formatter; } @Override public String getDefaultMessageKey() { return "cellFieldError.min"; } @Override protected boolean validate(final T value) { if(isNullValue(value)) { return true; } if(value.compareTo(getMin()) >= 0) { return true; } return false; } @Override protected LinkedHashMap<String, Object> getMessageVars(final T value) { final LinkedHashMap<String, Object> vars = new LinkedHashMap<>(); vars.put("validatedValue", value); vars.put("formattedValidatedValue", formatter.format(value)); vars.put("min", getMin()); vars.put("formattedMin", formatter.format(getMin())); return vars; } /** * Validatorの下限値の最小値を取得する。 * @return 最小値の値。 */ public T getMin() { return min; } }