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