View Javadoc

1   package net.trajano.twiff.internal.servlet;
2   
3   import java.io.IOException;
4   import javax.servlet.RequestDispatcher;
5   import javax.servlet.ServletException;
6   import javax.servlet.http.HttpServlet;
7   import javax.servlet.http.HttpServletRequest;
8   import javax.servlet.http.HttpServletResponse;
9   import net.trajano.twiff.PageLookup;
10  import net.trajano.twiff.ViewServletConfiguration;
11  import org.apache.commons.lang.StringUtils;
12  
13  /***
14   * <p>
15   * This class forwards container data a request dispatcher.
16   * </p>
17   * <p>
18   * This should have an injected page retrieval strategy. It should also have a
19   * ServletConfiguration object that contains the configuration data.
20   * </p>
21   * 
22   * @author Archimedes Trajano
23   */
24  public final class ViewServlet extends HttpServlet {
25      /***
26       * @param configuration
27       *                   servlet configuration.
28       * @param pageLookup
29       *                   logic that performs page lookups.
30       */
31      public ViewServlet(final ViewServletConfiguration configuration, final PageLookup pageLookup) {
32          this.configuration = configuration;
33          this.pageLookup = pageLookup;
34      }
35  
36      /***
37       * Object that performs page lookups.
38       */
39      private final PageLookup pageLookup;
40  
41      /***
42       * ViewServletConfiguration file.
43       */
44      private final ViewServletConfiguration configuration;
45  
46      /***
47       * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
48       *           javax.servlet.http.HttpServletResponse)
49       */
50      protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
51          ViewServletRequestAdapter requestAdapter = new ViewServletRequestAdapter(request, configuration.getTokenFieldName());
52          final Class pageBeanClass;
53          try {
54              pageBeanClass = pageLookup.getPageBeanClass(request);
55          } catch (ClassNotFoundException e) {
56              throw new ServletException(e);
57          }
58          requestAdapter.registerComponentImplementation(pageBeanClass);
59          final String dispatched = StringUtils.replaceOnce(configuration.getDispatchPattern(), "*", pageLookup.getPageName(request));
60          RequestDispatcher requestDispatcher = request.getRequestDispatcher(dispatched);
61          requestDispatcher.forward(new LocaleHttpServletRequest(request, dispatched), response);
62      }
63  }