1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.validator.validators;
17
18 import java.text.DateFormat;
19 import java.text.ParsePosition;
20 import java.text.SimpleDateFormat;
21 import java.util.Date;
22
23 import org.seasar.cubby.action.FormatPattern;
24 import org.seasar.cubby.controller.CubbyConfiguration;
25 import org.seasar.cubby.controller.ThreadContext;
26 import org.seasar.cubby.validator.MessageHelper;
27 import org.seasar.cubby.validator.ScalarFieldValidator;
28 import org.seasar.cubby.validator.ValidationContext;
29 import org.seasar.framework.exception.SRuntimeException;
30 import org.seasar.framework.util.StringUtil;
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 public class DateFormatValidator implements ScalarFieldValidator {
46
47
48
49
50 private final MessageHelper messageHelper;
51
52
53
54
55 private final String pattern;
56
57
58
59
60 public DateFormatValidator() {
61 this(null);
62 }
63
64
65
66
67
68
69
70 public DateFormatValidator(final String pattern) {
71 this(pattern, "valid.dateFormat");
72 }
73
74
75
76
77
78
79
80
81
82 public DateFormatValidator(final String pattern, final String messageKey) {
83 this.pattern = pattern;
84 this.messageHelper = new MessageHelper(messageKey);
85 }
86
87 public void validate(final ValidationContext context, final Object value) {
88 if (value == null) {
89 return;
90 }
91 if (value instanceof String) {
92 final String stringValue = (String) value;
93 if (StringUtil.isEmpty((String) value)) {
94 return;
95 }
96 try {
97 final DateFormat dateFormat = createDateFormat(context, value);
98 final ParsePosition parsePosition = new ParsePosition(0);
99 final Date date = dateFormat.parse(stringValue, parsePosition);
100 if (date != null
101 && parsePosition.getIndex() == stringValue.length()) {
102 return;
103 }
104 } catch (final Exception e) {
105 }
106 }
107
108 context.addMessageInfo(this.messageHelper.createMessageInfo());
109 }
110
111 private DateFormat createDateFormat(final ValidationContext context,
112 final Object value) {
113 final SimpleDateFormat dateFormat = new SimpleDateFormat();
114 final String pattern;
115 if (StringUtil.isEmpty(this.pattern)) {
116 final CubbyConfiguration configuration = ThreadContext
117 .getConfiguration();
118 final FormatPattern formatPattern = configuration
119 .getFormatPattern();
120 if (formatPattern == null) {
121 throw new SRuntimeException("ECUB0301", new Object[] { this,
122 value });
123 }
124 pattern = formatPattern.getDatePattern();
125 } else {
126 pattern = this.pattern;
127 }
128 dateFormat.applyPattern(pattern);
129 dateFormat.setLenient(false);
130 return dateFormat;
131 }
132
133 }