1 package org.seasar.cubby.interceptor;
2
3 import static org.seasar.cubby.CubbyConstants.ATTR_PARAMS;
4
5 import java.util.Map;
6
7 import javax.servlet.http.HttpServletRequest;
8
9 import org.aopalliance.intercept.MethodInterceptor;
10 import org.aopalliance.intercept.MethodInvocation;
11 import org.seasar.cubby.action.Action;
12 import org.seasar.cubby.action.ActionResult;
13 import org.seasar.cubby.controller.ActionContext;
14 import org.seasar.cubby.controller.CubbyConfiguration;
15 import org.seasar.cubby.controller.Populator;
16 import org.seasar.cubby.controller.RequestParser;
17
18
19
20
21
22
23
24
25
26 public class InitializeInterceptor implements MethodInterceptor {
27
28 private CubbyConfiguration cubbyConfiguration;
29
30 private HttpServletRequest request;
31
32 private ActionContext context;
33
34 public void setCubbyConfiguration(final CubbyConfiguration cubbyConfiguration) {
35 this.cubbyConfiguration = cubbyConfiguration;
36 }
37
38 public void setRequest(final HttpServletRequest request) {
39 this.request = request;
40 }
41
42 public void setActionContext(final ActionContext context) {
43 this.context = context;
44 }
45
46 public Object invoke(final MethodInvocation invocation) throws Throwable {
47 setupParams(context, request);
48 setupForm(context, request);
49
50 final Action action = context.getAction();
51 action.initialize();
52
53 final ActionResult result = (ActionResult) invocation.proceed();
54 if (result != null) {
55 result.prerender(context);
56 }
57
58 return result;
59 }
60
61 void setupParams(final ActionContext context,
62 final HttpServletRequest request) {
63 final RequestParser requestParser = cubbyConfiguration
64 .getRequestParser();
65 final Map<String, Object> parameterMap = requestParser
66 .getParameterMap(request);
67 request.setAttribute(ATTR_PARAMS, parameterMap);
68 }
69
70 private void setupForm(final ActionContext context,
71 final HttpServletRequest request) {
72 final Object formBean = context.getFormBean();
73 if (formBean != null) {
74 final Populator populator = context.getPopulator();
75 final Map<String, Object[]> params = getParams(request);
76 populator.populate(params, formBean);
77 }
78 }
79
80 @SuppressWarnings("unchecked")
81 private static Map<String, Object[]> getParams(
82 final HttpServletRequest request) {
83 return (Map<String, Object[]>) request.getAttribute(ATTR_PARAMS);
84 }
85
86 }