1 package net.trajano.twiff.internal.servlet; 2 3 import javax.servlet.http.HttpServletRequest; 4 import net.trajano.twiff.ActionResultProcessor; 5 import net.trajano.twiff.Configuration; 6 import net.trajano.twiff.TwiffException; 7 import net.trajano.twiff.internal.webxml.WebXmlAdapter; 8 import net.trajano.twiff.web.ViewServlet; 9 import org.apache.commons.fileupload.FileUploadException; 10 import org.apache.commons.lang.StringUtils; 11 12 /*** 13 * Processes action results of strings. 14 * 15 * @author Archimedes Trajano 16 */ 17 public class StringActionResultProcessor implements ActionResultProcessor { 18 /*** 19 * Constructs the processor. 20 * 21 * @param configuration 22 * the configuration to get the token value. 23 * @param webXmlAdapter 24 * web.xml adapter 25 */ 26 public StringActionResultProcessor(final Configuration configuration, final WebXmlAdapter webXmlAdapter) { 27 this.configuration = configuration; 28 this.webXmlAdapter = webXmlAdapter; 29 } 30 31 /*** 32 * Web.xml adapter. 33 */ 34 private final WebXmlAdapter webXmlAdapter; 35 36 /*** 37 * Configuration. 38 */ 39 private final Configuration configuration; 40 41 /*** 42 * Returns true if the result is a string. 43 * 44 * @see net.trajano.twiff.ActionResultProcessor#isResultProcessable(java.lang.Object, 45 * javax.servlet.http.HttpServletRequest) 46 */ 47 public boolean isResultProcessable(final Object result, final HttpServletRequest request) { 48 return result instanceof String; 49 } 50 51 /*** 52 * @see net.trajano.twiff.ActionResultProcessor#processActionResult(java.lang.Object, 53 * javax.servlet.http.HttpServletRequest) 54 */ 55 public String processActionResult(final Object result, final HttpServletRequest request) { 56 try { 57 ActionServletRequestAdapter requestAdapter = new ActionServletRequestAdapter(request, configuration.getTokenFieldName()); 58 StringBuffer newUrl = new StringBuffer(request.getContextPath()); 59 String viewServletMapping = webXmlAdapter.getMappingForServlet(ViewServlet.class); 60 if (viewServletMapping.charAt(0) != '/') { 61 newUrl.append('/'); 62 } 63 if (request instanceof LocaleHttpServletRequest) { 64 StringBuffer localizedResult = new StringBuffer(); 65 localizedResult.append(request.getLocale().toString()); 66 localizedResult.append('/'); 67 localizedResult.append(result.toString()); 68 newUrl.append(StringUtils.replace(viewServletMapping, "*", localizedResult.toString())); 69 } else { 70 newUrl.append(StringUtils.replace(viewServletMapping, "*", result.toString())); 71 } 72 newUrl.append('?'); 73 newUrl.append(configuration.getTokenFieldName()); 74 newUrl.append('='); 75 newUrl.append(requestAdapter.getTokenId()); 76 return newUrl.toString(); 77 } catch (FileUploadException e) { 78 throw new TwiffException(e); 79 } 80 } 81 }