1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.validator.impl;
17
18 import static org.seasar.cubby.CubbyConstants.ATTR_PARAMS;
19 import static org.seasar.cubby.CubbyConstants.ATTR_VALIDATION_FAIL;
20 import static org.seasar.cubby.validator.ValidationUtils.getValidation;
21 import static org.seasar.cubby.validator.ValidationUtils.getValidationRules;
22
23 import java.lang.reflect.Method;
24 import java.util.Collection;
25 import java.util.Map;
26
27 import javax.servlet.http.HttpServletRequest;
28
29 import org.seasar.cubby.action.Action;
30 import org.seasar.cubby.action.ActionErrors;
31 import org.seasar.cubby.action.ActionResult;
32 import org.seasar.cubby.action.Validation;
33 import org.seasar.cubby.util.CubbyUtils;
34 import org.seasar.cubby.validator.ValidationException;
35 import org.seasar.cubby.validator.ValidationFailBehaviour;
36 import org.seasar.cubby.validator.ValidationPhase;
37 import org.seasar.cubby.validator.ValidationProcessor;
38 import org.seasar.cubby.validator.ValidationRule;
39 import org.seasar.cubby.validator.ValidationRules;
40
41
42
43
44
45
46
47 public class ValidationProcessorImpl implements ValidationProcessor {
48
49
50
51
52 public void process(final HttpServletRequest request, final Action action,
53 final Class<? extends Action> actionClass, final Method method) {
54 final Validation validation = getValidation(method);
55 if (validation != null) {
56 final Map<String, Object[]> params = CubbyUtils.getAttribute(
57 request, ATTR_PARAMS);
58 final ValidationRules validationRules = getValidationRules(action,
59 validation.rules());
60 final Object formBean = CubbyUtils.getFormBean(action, actionClass,
61 method);
62 validate(validationRules, params, formBean, action.getErrors());
63 }
64 }
65
66
67
68
69
70
71
72
73
74
75
76
77
78 public void validate(final ValidationRules validationRules,
79 final Map<String, Object[]> params, final Object form,
80 final ActionErrors errors) {
81 for (ValidationPhase validationPhase : validationRules
82 .getValidationPhases()) {
83 validate(validationRules, validationPhase, params, form, errors);
84 }
85 }
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101 public void validate(final ValidationRules validationRules,
102 final ValidationPhase validationPhase,
103 final Map<String, Object[]> params, final Object form,
104 final ActionErrors errors) {
105 final Collection<ValidationRule> phaseValidationRules = validationRules
106 .getPhaseValidationRules(validationPhase);
107 for (final ValidationRule validationRule : phaseValidationRules) {
108 validationRule.apply(params, form, errors);
109 }
110 if (!errors.isEmpty()) {
111 throw new ValidationException();
112 }
113 }
114
115
116
117
118 public ActionResult handleValidationException(final ValidationException e,
119 final HttpServletRequest request, final Action action,
120 final Method method) {
121 request.setAttribute(ATTR_VALIDATION_FAIL, Boolean.TRUE);
122 final ValidationFailBehaviour behaviour = e.getBehaviour();
123 return behaviour.getActionResult(action, method);
124 }
125
126 }