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 }