View Javadoc

1   package org.seasar.cubby.controller.impl;
2   
3   import javax.servlet.FilterChain;
4   import javax.servlet.http.HttpServletRequest;
5   import javax.servlet.http.HttpServletResponse;
6   
7   import org.seasar.cubby.action.ActionResult;
8   import org.seasar.cubby.controller.ActionContext;
9   import org.seasar.cubby.controller.ActionDef;
10  import org.seasar.cubby.controller.ActionProcessor;
11  import org.seasar.cubby.convention.CubbyConvention;
12  import org.seasar.cubby.exception.ActionRuntimeException;
13  import org.seasar.cubby.filter.CubbyHttpServletRequestWrapper;
14  import org.seasar.cubby.util.CubbyUtils;
15  import org.seasar.framework.log.Logger;
16  
17  public class ActionProcessorImpl implements ActionProcessor {
18  
19  	private static final Logger logger = Logger
20  			.getLogger(ActionProcessorImpl.class);
21  
22  	private ActionContext context;
23  
24  	private CubbyConvention cubbyConvention;
25  
26  	public void setActionContext(final ActionContext context) {
27  		this.context = context;
28  	}
29  
30  	public void setCubbyConvention(final CubbyConvention cubbyConvention) {
31  		this.cubbyConvention = cubbyConvention;
32  	}
33  
34  	public void process(final HttpServletRequest request,
35  			final HttpServletResponse response, final FilterChain chain)
36  			throws Throwable {
37  		final String path = CubbyUtils.getPath(request);
38  
39  		final ActionDef actionDef = cubbyConvention.fromPathToActionDef(
40  				request, path);
41  		if (actionDef != null) {
42  			context.initialize(actionDef);
43  			if (logger.isDebugEnabled()) {
44  				logger.log("DCUB0004", new Object[] { path });
45  				logger.log("DCUB0005", new Object[] { context.getMethod() });
46  			}
47  			final ActionResult result = context.invoke();
48  			if (result == null) {
49  				throw new ActionRuntimeException("ECUB0001",
50  						new Object[] { context.getMethod() });
51  			}
52  			final HttpServletRequest wrappedRequest = new CubbyHttpServletRequestWrapper(
53  					request, context);
54  			result.execute(context, wrappedRequest, response);
55  		} else {
56  			final HttpServletRequest wrappedRequest = new CubbyHttpServletRequestWrapper(
57  					request, context);
58  			chain.doFilter(wrappedRequest, response);
59  		}
60  	}
61  
62  }