01: /**
02: *
03: */package clime.messadmin.providers.locale;
04:
05: import java.util.Locale;
06:
07: import javax.servlet.http.HttpSession;
08:
09: import clime.messadmin.providers.spi.LocaleProvider;
10:
11: /**
12: * Search "known locations" for java.util.Locale
13: * IMPLEMENTATION NOTE: this provider has explicit support for Struts 1.x and Spring
14: * JSF checks the browser meta tag "accept languages" to choose what langage to display.
15: * @author Cédrik LIME
16: */
17: public class KnownLocations implements LocaleProvider {
18: /**
19: * The session attributes key under which the user's selected
20: * <code>java.util.Locale</code> is stored, if any.
21: */
22: // org.apache.struts.Globals.LOCALE_KEY
23: private static final String STRUTS_LOCALE_KEY = "org.apache.struts.action.LOCALE";//$NON-NLS-1$
24: // javax.servlet.jsp.jstl.core.Config.FMT_LOCALE
25: private static final String JSTL_LOCALE_KEY = "javax.servlet.jsp.jstl.fmt.locale";//$NON-NLS-1$
26: // org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME
27: private static final String SPRING_LOCALE_KEY = "org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE";//$NON-NLS-1$
28: /**
29: * Lower and upper-case strings will be dynamically generated. Put mid-capitalised strings here!
30: */
31: private static final String[] LOCALE_TEST_ATTRIBUTES = new String[] {
32: STRUTS_LOCALE_KEY, SPRING_LOCALE_KEY, JSTL_LOCALE_KEY,
33: "Locale", "java.util.Locale" };
34:
35: /**
36: *
37: */
38: public KnownLocations() {
39: super ();
40: }
41:
42: /**
43: * {@inheritDoc}
44: */
45: public int getPriority() {
46: return 10;
47: }
48:
49: /**
50: * {@inheritDoc}
51: */
52: public Locale guessLocaleFromSession(HttpSession httpSession) {
53: Locale locale = null;
54:
55: for (int i = 0; i < LOCALE_TEST_ATTRIBUTES.length; ++i) {
56: Object obj = httpSession
57: .getAttribute(LOCALE_TEST_ATTRIBUTES[i]);
58: if (null != obj && obj instanceof Locale) {
59: locale = (Locale) obj;
60: break;
61: }
62: obj = httpSession.getAttribute(LOCALE_TEST_ATTRIBUTES[i]
63: .toLowerCase());
64: if (null != obj && obj instanceof Locale) {
65: locale = (Locale) obj;
66: break;
67: }
68: obj = httpSession.getAttribute(LOCALE_TEST_ATTRIBUTES[i]
69: .toUpperCase());
70: if (null != obj && obj instanceof Locale) {
71: locale = (Locale) obj;
72: break;
73: }
74: }
75:
76: return locale;
77: }
78:
79: }
|