1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.seasar.cubby.validator;
18
19 import static org.seasar.cubby.internal.util.LogMessages.format;
20
21 import java.util.ArrayList;
22 import java.util.Arrays;
23 import java.util.Collection;
24 import java.util.Collections;
25 import java.util.HashMap;
26 import java.util.List;
27 import java.util.Map;
28
29 import org.seasar.cubby.action.ActionException;
30 import org.seasar.cubby.action.ActionResult;
31 import org.seasar.cubby.action.Forward;
32
33
34
35
36
37
38
39 public abstract class DefaultValidationRules extends AbstractValidationRules {
40
41
42 public static final ValidationPhase DATA_TYPE = new ValidationPhase();
43
44
45 public static final ValidationPhase DATA_CONSTRAINT = new ValidationPhase();
46
47
48 private static final List<ValidationRule> EMPTY_VALIDATION_RULES = Collections
49 .emptyList();
50
51
52 private final Map<ValidationPhase, List<ValidationRule>> phaseValidationRulesMap = new HashMap<ValidationPhase, List<ValidationRule>>();
53
54
55 private final String resourceKeyPrefix;
56
57
58 private static final List<ValidationPhase> VALIDATION_PHASES = Arrays
59 .asList(new ValidationPhase[] { DATA_TYPE, DATA_CONSTRAINT });
60
61
62
63
64 public DefaultValidationRules() {
65 this(null);
66 }
67
68
69
70
71
72
73
74 public DefaultValidationRules(final String resourceKeyPrefix) {
75 this.resourceKeyPrefix = resourceKeyPrefix;
76 initialize(resourceKeyPrefix);
77 initialize();
78 }
79
80
81
82
83
84
85
86 protected void initialize(final String resourceKeyPrefix) {
87 }
88
89
90
91
92
93
94
95 protected void initialize() {
96 }
97
98
99
100
101
102
103
104
105
106 protected void add(final ValidationPhase validationPhase,
107 final ValidationRule validationRule) {
108 if (!this.phaseValidationRulesMap.containsKey(validationPhase)) {
109 this.phaseValidationRulesMap.put(validationPhase,
110 new ArrayList<ValidationRule>());
111 }
112 final List<ValidationRule> validationRules = this.phaseValidationRulesMap
113 .get(validationPhase);
114 validationRules.add(validationRule);
115 }
116
117
118
119
120
121
122
123
124 protected ValidationPhase getDefaultValidationPhase() {
125 return DATA_TYPE;
126 }
127
128
129
130
131
132
133
134 protected void add(final ValidationRule validationRule) {
135 this.add(getDefaultValidationPhase(), validationRule);
136 }
137
138
139
140
141
142
143
144
145
146
147
148
149 protected void add(final String paramName, final Validator... validators) {
150 this.add(paramName, paramName, validators);
151 }
152
153
154
155
156
157
158
159
160
161
162
163 protected void add(final String paramName,
164 final String paramNameResourceKey, final Validator... validators) {
165 this.add(getDefaultValidationPhase(), new FieldValidationRule(
166 paramName, addResourceKeyPrefixTo(paramNameResourceKey),
167 validators));
168 }
169
170
171
172
173
174
175
176 protected void addAll(final ValidationRules validationRules) {
177 for (final ValidationPhase validationPhase : validationRules
178 .getValidationPhases()) {
179 final Collection<ValidationRule> phaseValidationRules = validationRules
180 .getPhaseValidationRules(validationPhase);
181 for (final ValidationRule validationRule : phaseValidationRules) {
182 this.add(validationPhase, validationRule);
183 }
184 }
185 }
186
187
188
189
190
191
192
193
194 protected String addResourceKeyPrefixTo(final String resourceKey) {
195 if (this.resourceKeyPrefix == null) {
196 return resourceKey;
197 } else {
198 return this.resourceKeyPrefix + resourceKey;
199 }
200 }
201
202
203
204
205
206
207
208 public ActionResult fail(final String errorPage) {
209 if (errorPage == null || errorPage.length() == 0) {
210 throw new ActionException(format("ECUB0106"));
211 }
212 return new Forward(errorPage);
213 }
214
215
216
217
218
219
220
221
222
223
224
225
226 public List<ValidationPhase> getValidationPhases() {
227 return VALIDATION_PHASES;
228 }
229
230
231
232
233 public Collection<ValidationRule> getPhaseValidationRules(
234 final ValidationPhase validationPhase) {
235 final Collection<ValidationRule> phaseValidationRules;
236 if (this.phaseValidationRulesMap.containsKey(validationPhase)) {
237 phaseValidationRules = this.phaseValidationRulesMap
238 .get(validationPhase);
239 } else {
240 phaseValidationRules = EMPTY_VALIDATION_RULES;
241 }
242 return phaseValidationRules;
243 }
244
245 }