01: /**
02: * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE, version 2.1, dated February 1999.
03: *
04: * This program is free software; you can redistribute it and/or modify
05: * it under the terms of the latest version of the GNU Lesser General
06: * Public License as published by the Free Software Foundation;
07: *
08: * This program is distributed in the hope that it will be useful,
09: * but WITHOUT ANY WARRANTY; without even the implied warranty of
10: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11: * GNU Lesser General Public License for more details.
12: *
13: * You should have received a copy of the GNU Lesser General Public License
14: * along with this program (LICENSE.txt); if not, write to the Free Software
15: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
16: */package org.jamwiki.servlets;
17:
18: import java.util.Locale;
19: import javax.servlet.ServletException;
20: import javax.servlet.http.HttpServletRequest;
21: import javax.servlet.http.HttpServletResponse;
22: import org.acegisecurity.AuthenticationCredentialsNotFoundException;
23: import org.jamwiki.model.WikiUser;
24: import org.jamwiki.utils.WikiLogger;
25: import org.apache.commons.lang.LocaleUtils;
26: import org.springframework.web.servlet.LocaleResolver;
27: import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
28: import org.springframework.web.servlet.i18n.SessionLocaleResolver;
29: import org.springframework.web.servlet.support.RequestContextUtils;
30:
31: /**
32: * This method extends the Spring <code>LocaleChangeInterceptor</code> to
33: * search for and use a locale key in either the session or the request if one
34: * can be found.
35: */
36: public class JAMWikiLocaleInterceptor extends LocaleChangeInterceptor {
37:
38: private static final WikiLogger logger = WikiLogger
39: .getLogger(JAMWikiServlet.class.getName());
40:
41: /**
42: *
43: */
44: public boolean preHandle(HttpServletRequest request,
45: HttpServletResponse response, Object handler)
46: throws ServletException {
47: Locale locale = (Locale) request.getSession().getAttribute(
48: SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
49: if (locale == null) {
50: locale = this .setUserLocale(request, response);
51: }
52: if (locale != null) {
53: LocaleResolver resolver = RequestContextUtils
54: .getLocaleResolver(request);
55: if (resolver != null) {
56: resolver.setLocale(request, response, locale);
57: }
58: }
59: return super .preHandle(request, response, handler);
60: }
61:
62: /**
63: *
64: */
65: private Locale retrieveUserLocale(HttpServletRequest request)
66: throws ServletException {
67: Locale locale = null;
68: try {
69: WikiUser user = ServletUtil.currentUser();
70: locale = LocaleUtils.toLocale(user.getDefaultLocale());
71: } catch (AuthenticationCredentialsNotFoundException e) {
72: // do nothing, just use a default locale
73: }
74: return locale;
75: }
76:
77: /**
78: *
79: */
80: private Locale setUserLocale(HttpServletRequest request,
81: HttpServletResponse response) throws ServletException {
82: Locale locale = this.retrieveUserLocale(request);
83: request.getSession().setAttribute(
84: SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,
85: locale);
86: return locale;
87: }
88: }
|