GroupValidatorSupport.java
package com.gh.mygreen.xlsmapper.validation.fieldvalidation;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import com.gh.mygreen.xlsmapper.validation.DefaultGroup;
/**
* バリデーション時のヒントとなるグループを指定することが可能なValidatorのサポートクラス。
*
* @since 2.0
* @author T.TSUCHIE
*
*/
public abstract class GroupValidatorSupport {
/**
* バリデーション時のヒントとなるグループ
*/
protected Set<Class<?>> settingGroups = new LinkedHashSet<>();
/**
* 値が空のときでも検証を行うかどうか。
* @return trueの場合、検証を行う。
*/
protected boolean validateOnEmptyValue() {
return false;
}
/**
* バリデーション時のヒントを追加する。
* @param groups バリデーション時のヒント。
* @return 自身のインスタンス。
*/
public GroupValidatorSupport addGroup(final Class<?>... groups) {
this.settingGroups.addAll(Arrays.asList(groups));
return this;
}
/**
* 設定されているバリデーションのグループを取得する。
* @return
*/
public Set<Class<?>> getSettingGroups() {
return settingGroups;
}
/**
* バリデーション時のヒントが該当するかどうか。
* @param validationGroups 判定対象のグループ
* @return 該当する。
*/
protected boolean containsValidationGroups(final List<Class<?>> validationGroups) {
// バリデーション時のグループの指定が無い場合
if(getSettingGroups().isEmpty() && validationGroups.isEmpty()) {
return true;
}
// デフォルトグループ指定されている場合、該当する。
if(validationGroups.isEmpty()) {
for(Class<?> settingGroup : getSettingGroups()) {
if(DefaultGroup.class.isAssignableFrom(settingGroup)) {
return true;
}
}
}
for(Class<?> group : validationGroups) {
if(getSettingGroups().isEmpty() && DefaultGroup.class.isAssignableFrom(group)) {
return true;
}
if(getSettingGroups().contains(group)) {
return true;
}
// 親子関係のチェック
for(Class<?> parent : getSettingGroups()) {
if(parent.isAssignableFrom(group)) {
return true;
}
}
}
return false;
}
/**
* エラー用のメッセージキーを取得します。
* @return メッセージキー。独自に指定するような場合は、nullを返します。
*/
protected String getMessageKey() {
return null;
}
}