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 }