View Javadoc

1   package org.seasar.cubby.validator.validators;
2   
3   import java.text.DateFormat;
4   import java.text.ParsePosition;
5   import java.text.SimpleDateFormat;
6   import java.util.Date;
7   
8   import org.seasar.cubby.action.FormatPattern;
9   import org.seasar.cubby.validator.BaseValidator;
10  import org.seasar.cubby.validator.ValidationContext;
11  import org.seasar.framework.exception.SRuntimeException;
12  import org.seasar.framework.util.StringUtil;
13  
14  public class DateFormatValidator extends BaseValidator {
15  
16  	private final String pattern;
17  
18  	public DateFormatValidator() {
19  		this(null);
20  	}
21  
22  	public DateFormatValidator(final String pattern) {
23  		this(pattern, "valid.dateFormat");
24  	}
25  
26  	public DateFormatValidator(final String pattern, final String messageKey) {
27  		this.pattern = pattern;
28  		this.setMessageKey(messageKey);
29  	}
30  
31  	public String validate(final ValidationContext ctx) {
32  		final Object value = ctx.getValue();
33  		if (value == null) {
34  			return null;
35  		}
36  		if (value instanceof String) {
37  			final String stringValue = (String) value;
38  			if (StringUtil.isEmpty((String) value)) {
39  				return null;
40  			}
41  			try {
42  				final DateFormat dateFormat = createDateFormat(ctx);
43  				final ParsePosition parsePosition = new ParsePosition(0);
44  				final Date date = dateFormat.parse(stringValue, parsePosition);
45  				if (date != null && parsePosition.getIndex() == stringValue.length()) {
46  					return null;
47  				}
48  			} catch (final Exception e) {
49  			}
50  		}
51  		return getMessage(getPropertyMessage(ctx.getName()));
52  	}
53  
54  	private DateFormat createDateFormat(final ValidationContext context) {
55  		final SimpleDateFormat dateFormat = new SimpleDateFormat();
56  		final String pattern;
57  		if (StringUtil.isEmpty(this.pattern)) {
58  			FormatPattern formatPattern = context.getFormatPattern();
59  			if (formatPattern == null) {
60  				throw new SRuntimeException("ECUB0301", new Object[] { this,
61  						context.getValue() });
62  			}
63  			pattern = formatPattern.getDatePattern();
64  		} else {
65  			pattern = this.pattern;
66  		}
67  		dateFormat.applyPattern(pattern);
68  		dateFormat.setLenient(false);
69  		return dateFormat;
70  	}
71  }