GroupValidatorSupport.java

  1. package com.gh.mygreen.xlsmapper.validation.fieldvalidation;

  2. import java.util.Arrays;
  3. import java.util.LinkedHashSet;
  4. import java.util.List;
  5. import java.util.Set;

  6. import com.gh.mygreen.xlsmapper.validation.DefaultGroup;

  7. /**
  8.  * バリデーション時のヒントとなるグループを指定することが可能なValidatorのサポートクラス。
  9.  *
  10.  * @since 2.0
  11.  * @author T.TSUCHIE
  12.  *
  13.  */
  14. public abstract class GroupValidatorSupport {

  15.     /**
  16.      * バリデーション時のヒントとなるグループ
  17.      */
  18.     protected Set<Class<?>> settingGroups = new LinkedHashSet<>();

  19.     /**
  20.      * 値が空のときでも検証を行うかどうか。
  21.      * @return trueの場合、検証を行う。
  22.      */
  23.     protected boolean validateOnEmptyValue() {
  24.         return false;
  25.     }

  26.     /**
  27.      * バリデーション時のヒントを追加する。
  28.      * @param groups バリデーション時のヒント。
  29.      * @return 自身のインスタンス。
  30.      */
  31.     public GroupValidatorSupport addGroup(final Class<?>... groups) {
  32.         this.settingGroups.addAll(Arrays.asList(groups));

  33.         return this;
  34.     }

  35.     /**
  36.      * 設定されているバリデーションのグループを取得する。
  37.      * @return
  38.      */
  39.     public Set<Class<?>> getSettingGroups() {
  40.         return settingGroups;
  41.     }

  42.     /**
  43.      * バリデーション時のヒントが該当するかどうか。
  44.      * @param validationGroups 判定対象のグループ
  45.      * @return 該当する。
  46.      */
  47.     protected boolean containsValidationGroups(final List<Class<?>> validationGroups) {

  48.         // バリデーション時のグループの指定が無い場合
  49.         if(getSettingGroups().isEmpty() && validationGroups.isEmpty()) {
  50.             return true;

  51.         }

  52.         // デフォルトグループ指定されている場合、該当する。
  53.         if(validationGroups.isEmpty()) {
  54.             for(Class<?> settingGroup : getSettingGroups()) {
  55.                 if(DefaultGroup.class.isAssignableFrom(settingGroup)) {
  56.                     return true;
  57.                 }
  58.             }
  59.         }

  60.         for(Class<?> group : validationGroups) {

  61.             if(getSettingGroups().isEmpty() && DefaultGroup.class.isAssignableFrom(group)) {
  62.                 return true;
  63.             }

  64.             if(getSettingGroups().contains(group)) {
  65.                 return true;
  66.             }

  67.             // 親子関係のチェック
  68.             for(Class<?> parent : getSettingGroups()) {
  69.                 if(parent.isAssignableFrom(group)) {
  70.                     return true;
  71.                 }
  72.             }
  73.         }

  74.         return false;
  75.     }

  76.     /**
  77.      * エラー用のメッセージキーを取得します。
  78.      * @return メッセージキー。独自に指定するような場合は、nullを返します。
  79.      */
  80.     protected String getMessageKey() {
  81.         return null;
  82.     }


  83. }