View Javadoc

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   * コントローラの初期化や実行結果のrequest/sessionへの反映などを行うインターセプタです。
20   * {@link Action#initialize()}、{@link Action#prerender()} の実行を行います。
21   * 
22   * @author agata
23   * @author baba
24   * @since 1.0
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  }