ArgUtils.java

  1. package com.gh.mygreen.xlsmapper.util;

  2. import java.util.Collection;
  3. import java.util.Map;


  4. /**
  5.  * 引数チェックに関するユーティリティクラス。
  6.  *
  7.  * @version 2.0
  8.  * @author T.TSUCHIE
  9.  *
  10.  */
  11. public class ArgUtils {
  12.    
  13.     /**
  14.      * 値がnullでないかどうか検証する。
  15.      * @param arg 検証対象の値
  16.      * @param name 検証対象の引数の名前
  17.      * @throws IllegalArgumentException {@literal arg == null.}
  18.      */
  19.     public static void notNull(final Object arg, final String name) {
  20.         if(arg == null) {
  21.             throw new IllegalArgumentException(String.format("%s should not be null.", name));
  22.         }
  23.     }
  24.    
  25.     /**
  26.      * 文字列が空 or nullでないかどうか検証する。
  27.      * @param arg 検証対象の値
  28.      * @param name 検証対象の引数の名前
  29.      * @throws IllegalArgumentException {@literal arg == null || arg.isEmpty() ==true}
  30.      */
  31.     public static void notEmpty(final String arg, final String name) {
  32.         if(arg == null || arg.isEmpty()) {
  33.             throw new IllegalArgumentException(String.format("%s should not be empty.", name));
  34.         }
  35.     }
  36.    
  37.     /**
  38.      * 配列のサイズが0または、nullでないかどうか検証する。
  39.      * @param arg 検証対象の値
  40.      * @param name 検証対象の引数の名前
  41.      * @throws IllegalArgumentException {@literal arg == null || arg.length == 0.}
  42.      */
  43.     public static void notEmpty(final int[] arg, final String name) {
  44.         if(arg == null || arg.length == 0) {
  45.             throw new IllegalArgumentException(String.format("%s should has length ararys.", name));
  46.         }
  47.     }
  48.    
  49.     /**
  50.      * 配列のサイズが0または、nullでないかどうか検証する。
  51.      * @param arg 検証対象の値
  52.      * @param name 検証対象の引数の名前
  53.      * @throws IllegalArgumentException {@literal arg == null || arg.length == 0.}
  54.      */
  55.     public static void notEmpty(final Object[] arg, final String name) {
  56.         if(arg == null || arg.length == 0) {
  57.             throw new IllegalArgumentException(String.format("%s should has length ararys.", name));
  58.         }
  59.     }
  60.    
  61.     /**
  62.      * Collection(リスト、セット)のサイズが0または、nullでないかどうか検証する。
  63.      * @param arg 検証対象の値
  64.      * @param name 検証対象の引数の名前
  65.      * @throws IllegalArgumentException {@literal arg == null || arg.size() == 0.}
  66.      */
  67.     public static void notEmpty(final Collection<?> arg, final String name) {
  68.         if(arg == null || arg.isEmpty()) {
  69.             throw new IllegalArgumentException(String.format("%s should not be empty.", name));
  70.         }
  71.     }
  72.    
  73.     /**
  74.      * マップのサイズが0または、nullでないかどうか検証する。
  75.      * @param arg 検証対象の値
  76.      * @param name 検証対象の引数の名前
  77.      * @throws IllegalArgumentException {@literal arg == null || arg.size() == 0.}
  78.      */
  79.     public static void notEmpty(final Map<?, ?> arg, final String name) {
  80.         if(arg == null || arg.isEmpty()) {
  81.             throw new IllegalArgumentException(String.format("%s should not be empty.", name));
  82.         }
  83.     }
  84.    
  85.     /**
  86.      * 引数が {@literal 'arg' >= 'min'} の関係か検証する。
  87.      * @param arg 検証対象の値
  88.      * @param min 最小値
  89.      * @param name 検証対象の引数の名前
  90.      * @throws IllegalArgumentException {@literal arg == null || arg < min.}
  91.      */
  92.     @SuppressWarnings({"unchecked", "rawtypes"})
  93.     public static <T extends Comparable> void notMin(final T arg, final T min, final String name) {
  94.        
  95.         if(arg == null) {
  96.             throw new IllegalArgumentException(String.format("%s should not be null.", name));
  97.         }
  98.        
  99.         if(arg.compareTo(min) < 0) {
  100.             throw new IllegalArgumentException(String.format("%s cannot be smaller than %s", name, min.toString()));
  101.         }
  102.        
  103.     }
  104.    
  105.     /**
  106.      * 引数が {@literal 'arg' <= 'max'} の関係か検証する。
  107.      * @param arg 検証対象の値
  108.      * @param max 最大値
  109.      * @param name 検証対象の引数の名前
  110.      * @throws IllegalArgumentException {@literal arg == null || arg > max.}
  111.      */
  112.     @SuppressWarnings({"rawtypes", "unchecked"})
  113.     public static <T extends Comparable> void notMax(final T arg, final T max, final String name) {
  114.        
  115.         if(arg == null) {
  116.             throw new IllegalArgumentException(String.format("%s should not be null.", name));
  117.         }
  118.        
  119.         if(arg.compareTo(max) > 0) {
  120.             throw new IllegalArgumentException(String.format("%s cannot be greater than %s", name, max.toString()));
  121.         }
  122.        
  123.     }
  124.    
  125.     /**
  126.      * 検証対象の値が、指定したクラスを継承しているかどうか検証する。
  127.      *
  128.      * @since 2.0
  129.      * @param arg 検証対象の値
  130.      * @param clazz 親クラス
  131.      * @param name 検証対象の引数の名前
  132.      */
  133.     public static void instanceOf(final Object arg, final Class<?> clazz, final String name) {
  134.        
  135.         if(arg == null) {
  136.             throw new IllegalArgumentException(String.format("%s should not be null.", name));
  137.         }
  138.        
  139.         if(!clazz.isAssignableFrom(arg.getClass())) {
  140.             throw new IllegalArgumentException(String.format("%s should not be class with '%s'.", name, clazz.getName()));
  141.         }
  142.        
  143.     }
  144.    
  145. }