View Javadoc

1   package org.seasar.cubby.validator.validators;
2   
3   import org.seasar.cubby.validator.BaseValidator;
4   import org.seasar.cubby.validator.ValidationContext;
5   import org.seasar.framework.util.StringUtil;
6   
7   /**
8    * 数値の範囲を指定して検証します。
9    * @author agata
10   *
11   */
12  public class RangeValidator extends BaseValidator {
13  
14  	/**
15  	 * 最小値
16  	 */
17  	private final long min;
18  
19  	/**
20  	 * 最大値
21  	 */
22  	private final long max;
23  
24  	/**
25  	 * コンストラクタ
26  	 * @param min 最小値
27  	 * @param max 最大値
28  	 */
29  	public RangeValidator(final long min, final long max) {
30  		this(min, max, "valid.range");
31  	}
32  
33  	/**
34  	 * エラーメッセージキーを指定するコンストラクタ
35  	 * @param min 最小値
36  	 * @param max 最大値
37  	 * @param messageKey エラーメッセージキー
38  	 */
39  	public RangeValidator(final long min, final long max,
40  			final String messageKey) {
41  		this.min = min;
42  		this.max = max;
43  		this.setMessageKey(messageKey);
44  	}
45  
46  	public String validate(final ValidationContext ctx) {
47  		final Object value = ctx.getValue();
48  		if (value instanceof String) {
49  			String str = (String) value;
50  			if (StringUtil.isEmpty(str)) {
51  				return null;
52  			}
53  			try {
54  				long longValue = Long.parseLong(str);
55  				if (longValue >= min && longValue <= max) {
56  					return null;
57  				}
58  			} catch (NumberFormatException e) {
59  			}
60  		} else if (value == null) {
61  			return null;
62  		}
63  		return getMessage(getPropertyMessage(ctx.getName()), min, max);
64  	}
65  }