package com.gh.mygreen.xlsmapper.validation; import com.gh.mygreen.xlsmapper.ArgUtils; /** * オブジェクトのValidatorの抽象クラス。 * * @author T.TSUCHIE * * @param <T> チェック対象のオブジェクトのクラス */ public abstract class AbstractObjectValidator<T> implements ObjectValidator<T> { /** * 引数taretObjectで指定したValidatorを実行する。 * @param validator * @param targetObject * @param errors * @param subPath ネストするパス */ protected <S> void invokeNestedValidator(final ObjectValidator<S> validator, final S targetObject, final SheetBindingErrors errors, final String subPath) { ArgUtils.notNull(validator, "validator"); ArgUtils.notNull(targetObject, "targetObject"); ArgUtils.notNull(errors, "errors"); errors.pushNestedPath(subPath); try { validator.validate(targetObject, errors); } finally { errors.popNestedPath(); } } /** * 引数taretObjectで指定したValidatorを実行する。 * @param validator * @param targetObject * @param errors * @param subPath ネストするパス * @param index インデックス */ protected <S> void invokeNestedValidator(final ObjectValidator<S> validator, final S targetObject, final SheetBindingErrors errors, final String subPath, final int index) { ArgUtils.notNull(validator, "validator"); ArgUtils.notNull(targetObject, "targetObject"); ArgUtils.notNull(errors, "errors"); errors.pushNestedPath(subPath, index); try { validator.validate(targetObject, errors); } finally { errors.popNestedPath(); } } /** * 引数taretObjectで指定したValidatorを実行する。 * @param validator * @param targetObject * @param errors * @param subPath ネストするパス * @param key インデックス */ protected <S> void invokeNestedValidator(final ObjectValidator<S> validator, final S targetObject, final SheetBindingErrors errors, final String subPath, final String key) { ArgUtils.notNull(validator, "validator"); ArgUtils.notNull(targetObject, "targetObject"); ArgUtils.notNull(errors, "errors"); errors.pushNestedPath(subPath, key); try { validator.validate(targetObject, errors); } finally { errors.popNestedPath(); } } }