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.Populator;
15  import org.seasar.cubby.controller.RequestParser;
16  import org.seasar.cubby.util.RequestHolder;
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 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  }