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    * 文字列の長さの範囲を指定して検証します。<p>
9    * String#length()メソッドで文字列の長さを求めます。文字列のバイト数でないこと、半角全角も1文字としてカウントされることに注意してください。
10   * @author agata
11   *
12   */
13  public class RangeLengthValidator extends BaseValidator {
14  
15  	/**
16  	 * 最小文字数
17  	 */
18  	private final int min;
19  
20  	/**
21  	 * 最大文字数
22  	 */
23  	private final int max;
24  
25  	/**
26  	 * コンストラクタ
27  	 * @param min 最小文字数
28  	 * @param max 最大文字数
29  	 */
30  	public RangeLengthValidator(final int min, final int max) {
31  		this(min, max, "valid.rangeLength");
32  	}
33  
34  	/**
35  	 * エラーメッセージキーを指定するコンストラクタ
36  	 * @param min 最小文字数
37  	 * @param max 最大文字数
38  	 * @param messageKey エラーメッセージキー
39  	 */
40  	public RangeLengthValidator(final int min, final int max, 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  
54  			int length = str.length();
55  			if (length >= min && length <= max) {
56  				return null;
57  			}
58  		}else if(value == null){
59  			return null;
60  		}
61  		return getMessage(getPropertyMessage(ctx.getName()), min, max);
62  	}
63  
64  }