View Javadoc

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  }