1 package net.trajano.twiff.internal.servlet;
2
3 import java.util.Enumeration;
4 import java.util.Locale;
5 import javax.servlet.http.HttpServletRequest;
6 import javax.servlet.http.HttpServletRequestWrapper;
7
8 /***
9 * This wraps the servlet request with some if its returned elements that
10 * modified by the filter.
11 */
12 public final class LocaleHttpServletRequest extends HttpServletRequestWrapper {
13 /***
14 * Locale.
15 */
16 final Locale locale;
17
18 /***
19 * Path info.
20 */
21 final String pathInfo;
22
23 /***
24 * Servlet Path.
25 */
26 final String servletPath;
27
28 /***
29 * @param request
30 * the servlet request.
31 * @param servletPath
32 */
33 public LocaleHttpServletRequest(final HttpServletRequest request, final String servletPath) {
34 super(request);
35 this.locale = null;
36 this.servletPath = servletPath;
37 this.pathInfo = null;
38 }
39
40 /***
41 * @param request
42 * the servlet request.
43 * @param locale
44 * locale.
45 * @param servletPath
46 * @param pathInfo
47 */
48 public LocaleHttpServletRequest(final HttpServletRequest request, final Locale locale, final String servletPath, final String pathInfo) {
49 super(request);
50 this.locale = locale;
51 this.servletPath = servletPath;
52 this.pathInfo = pathInfo;
53 }
54
55 /***
56 * Returns the overridden locale.
57 *
58 * @return locale.
59 */
60 public Locale getLocale() {
61 if (locale == null)
62 return super.getLocale();
63 return locale;
64 }
65
66 /***
67 * Returns the list of locales, with the overridden one being the first in
68 * the enumeration.
69 *
70 * @return enumeration of locales.
71 */
72 public Enumeration getLocales() {
73 if (locale == null)
74 return super.getLocales();
75 Enumeration<Locale> locales = new Enumeration<Locale>() {
76 private Enumeration originalLocaleList = LocaleHttpServletRequest.super.getLocales();
77
78 private boolean readFirst = false;
79
80 public boolean hasMoreElements() {
81 return !readFirst || originalLocaleList.hasMoreElements();
82 }
83
84 public Locale nextElement() {
85 if (!readFirst) {
86 readFirst = true;
87 return locale;
88 } else {
89 return (Locale) originalLocaleList.nextElement();
90 }
91 }
92 };
93 return locales;
94 }
95
96 /***
97 * Returns the path info.
98 *
99 * @return the path info,
100 */
101 public String getPathInfo() {
102 return pathInfo;
103 }
104
105 /***
106 * Returns the servlet path.
107 *
108 * @return the servlet path.
109 */
110 public String getServletPath() {
111 return servletPath;
112 }
113 }