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
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();
77 }
78
79
80
81
82
83
84
85 protected abstract void initialize();
86
87
88
89
90
91
92
93
94
95 protected void add(final ValidationPhase validationPhase,
96 final ValidationRule validationRule) {
97 if (!this.phaseValidationRulesMap.containsKey(validationPhase)) {
98 this.phaseValidationRulesMap.put(validationPhase,
99 new ArrayList<ValidationRule>());
100 }
101 final List<ValidationRule> validationRules = this.phaseValidationRulesMap
102 .get(validationPhase);
103 validationRules.add(validationRule);
104 }
105
106
107
108
109
110
111
112
113
114 protected ValidationPhase getDefaultValidationPhase() {
115 return DATA_TYPE;
116 }
117
118
119
120
121
122
123
124 protected void add(final ValidationRule validationRule) {
125 this.add(getDefaultValidationPhase(), validationRule);
126 }
127
128
129
130
131
132
133
134
135
136
137
138
139 protected void add(final String paramName, final Validator... validators) {
140 this.add(paramName, paramName, validators);
141 }
142
143
144
145
146
147
148
149
150
151
152
153 protected void add(final String paramName,
154 final String paramNameResourceKey, final Validator... validators) {
155 this.add(getDefaultValidationPhase(), new FieldValidationRule(
156 paramName, addResourceKeyPrefixTo(paramNameResourceKey),
157 validators));
158 }
159
160
161
162
163
164
165
166 protected void addAll(final ValidationRules validationRules) {
167 for (final ValidationPhase validationPhase : validationRules
168 .getValidationPhases()) {
169 final Collection<ValidationRule> phaseValidationRules = validationRules
170 .getPhaseValidationRules(validationPhase);
171 for (final ValidationRule validationRule : phaseValidationRules) {
172 this.add(validationPhase, validationRule);
173 }
174 }
175 }
176
177
178
179
180
181
182
183
184
185 protected String addResourceKeyPrefixTo(final String resourceKey) {
186 if (this.resourceKeyPrefix == null) {
187 return resourceKey;
188 } else {
189 return this.resourceKeyPrefix + resourceKey;
190 }
191 }
192
193
194
195
196
197
198
199 public ActionResult fail(final String errorPage) {
200 if (errorPage == null || errorPage.length() == 0) {
201 throw new ActionException(format("ECUB0106"));
202 }
203 return new Forward(errorPage);
204 }
205
206
207
208
209
210
211
212
213
214
215
216
217 public List<ValidationPhase> getValidationPhases() {
218 return VALIDATION_PHASES;
219 }
220
221
222
223
224 public Collection<ValidationRule> getPhaseValidationRules(
225 final ValidationPhase validationPhase) {
226 final Collection<ValidationRule> phaseValidationRules;
227 if (this.phaseValidationRulesMap.containsKey(validationPhase)) {
228 phaseValidationRules = this.phaseValidationRulesMap
229 .get(validationPhase);
230 } else {
231 phaseValidationRules = EMPTY_VALIDATION_RULES;
232 }
233 return phaseValidationRules;
234 }
235
236 }