package com.gh.mygreen.xlsmapper.validation.fieldvalidation; import java.awt.Point; import java.util.LinkedHashMap; import java.util.Map; import com.gh.mygreen.xlsmapper.Utils; import com.gh.mygreen.xlsmapper.validation.SheetBindingErrors; /** * フィールドValidatorの抽象クラス。 * @author T.TSUCHIE * @param <T> チェック対象のフィールドのタイプ * */ public abstract class AbstractFieldValidator<T> implements FieldValidator<T>, CellFieldValidator<T> { /** カスタムメッセージのキー */ protected String customMessageKey; public AbstractFieldValidator() { } /** * 値がnullかどうか判定を行う。 * <p>値が空文字も同様。 * @param value * @return */ public boolean isNullValue(final T value) { return (value == null || value.toString().isEmpty()); } /** * 値がnull出ないかどうか判定を行う。 * @return */ public boolean isNotNullValue(T value) { return !isNullValue(value); } /** * 標準の入力値エラー時のメッセージキーを取得する。 * @return */ public String getMessageKey() { if(Utils.isEmpty(getCustomMessageKey())) { return getDefaultMessageKey(); } return getCustomMessageKey(); } /** * 通常のメッセージキーの取得 */ public abstract String getDefaultMessageKey(); /** * 任意のメッセージキーの取得 * @return */ public String getCustomMessageKey() { return customMessageKey; } /** * 任意のメッセージキーの設定 * @param customMessageKey * @return */ public AbstractFieldValidator<T> setCustomMessageKey(String customMessageKey) { this.customMessageKey = customMessageKey; return this; } @Override public boolean validate(final String fieldName, final T value, final SheetBindingErrors errors) { if(validate(value)) { return true; } errors.rejectValue(fieldName, value, value.getClass(), getMessageKey(), getMessageVars(value)); return false; } @Override public boolean validate(final String fieldName, final T value, final Point cellAddress, final SheetBindingErrors errors) { if(validate(value)) { return true; } final Map<String, Object> messageVars = getMessageVars(value); errors.rejectSheetValue(fieldName, value, value.getClass(), cellAddress, getMessageKey(), messageVars); return false; } /** * 入力値の検証を行う。 * @param value 検証対象の値 * @return */ protected abstract boolean validate(T value); /** * メッセージ中の変数を取得する。 * @param value 検証対象の値 * @return メッセージ中の変数のマップ。 */ protected abstract LinkedHashMap<String, Object> getMessageVars(T value); }