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.Populator;
15 import org.seasar.cubby.controller.RequestParser;
16 import org.seasar.cubby.util.RequestHolder;
17
18
19
20
21
22
23
24
25
26 public class InitializeInterceptor implements MethodInterceptor {
27
28 private RequestParser requestParser;
29
30 private ActionContext context;
31
32 public void setRequestParser(final RequestParser requestParser) {
33 this.requestParser = requestParser;
34 }
35
36 public void setActionContext(final ActionContext context) {
37 this.context = context;
38 }
39
40 public Object invoke(final MethodInvocation invocation) throws Throwable {
41 final HttpServletRequest request = RequestHolder.getRequest();
42 setupParams(context, request);
43 setupForm(context, request);
44
45 final Action action = context.getAction();
46 action.initialize();
47
48 final ActionResult result = (ActionResult) invocation.proceed();
49 if (result != null) {
50 result.prerender(context, request);
51 }
52
53 return result;
54 }
55
56 void setupParams(final ActionContext context,
57 final HttpServletRequest request) {
58 final Map<String, Object> parameterMap;
59 if (requestParser == null) {
60 parameterMap = getParameterMap(request);
61 } else {
62 parameterMap = requestParser.getParameterMap(request);
63 }
64 request.setAttribute(ATTR_PARAMS, parameterMap);
65 }
66
67 private void setupForm(final ActionContext context,
68 final HttpServletRequest request) {
69 final Object formBean = context.getFormBean();
70 if (formBean != null) {
71 final Populator populator = context.getPopulator();
72 final Map<String, Object> params = getParams(request);
73 populator.populate(params, formBean);
74 }
75 }
76
77 @SuppressWarnings("unchecked")
78 private static Map<String, Object> getParams(
79 final HttpServletRequest request) {
80 return (Map<String, Object>) request.getAttribute(ATTR_PARAMS);
81 }
82
83 @SuppressWarnings("unchecked")
84 private static Map<String, Object> getParameterMap(
85 final HttpServletRequest request) {
86 return request.getParameterMap();
87 }
88
89 }