@Override public void setLocaleContext(HttpServletRequest request, HttpServletResponse response, LocaleContext localeContext) { Locale locale = null; TimeZone timeZone = null; if (localeContext != null) { locale = localeContext.getLocale(); if (localeContext instanceof TimeZoneAwareLocaleContext) { timeZone = ((TimeZoneAwareLocaleContext) localeContext).getTimeZone(); } addCookie(response, (locale != null ? locale : "-") + (timeZone != null ? ' ' + timeZone.getID() : "")); } else { removeCookie(response); } request.setAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME, (locale != null ? locale: determineDefaultLocale(request))); request.setAttribute(TIME_ZONE_REQUEST_ATTRIBUTE_NAME, (timeZone != null ? timeZone : determineDefaultTimeZone(request))); }
@Override public LocaleContext resolveLocaleContext(final HttpServletRequest request) { return new TimeZoneAwareLocaleContext() { @Override public Locale getLocale() { Locale locale = (Locale) WebUtils.getSessionAttribute(request, LOCALE_SESSION_ATTRIBUTE_NAME); if (locale == null) { locale = determineDefaultLocale(request); } return locale; } @Override public TimeZone getTimeZone() { TimeZone timeZone = (TimeZone) WebUtils.getSessionAttribute(request, TIME_ZONE_SESSION_ATTRIBUTE_NAME); if (timeZone == null) { timeZone = determineDefaultTimeZone(request); } return timeZone; } }; }
@Test public void testSetAndResolveLocaleContext() { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); CookieLocaleResolver resolver = new CookieLocaleResolver(); resolver.setLocaleContext(request, response, new SimpleLocaleContext(new Locale("nl", ""))); Cookie cookie = response.getCookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME); request = new MockHttpServletRequest(); request.setCookies(cookie); resolver = new CookieLocaleResolver(); LocaleContext loc = resolver.resolveLocaleContext(request); assertEquals("nl", loc.getLocale().getLanguage()); assertTrue(loc instanceof TimeZoneAwareLocaleContext); assertNull(((TimeZoneAwareLocaleContext) loc).getTimeZone()); }
@Test public void testSetAndResolveLocaleContextWithTimeZone() { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); CookieLocaleResolver resolver = new CookieLocaleResolver(); resolver.setLocaleContext(request, response, new SimpleTimeZoneAwareLocaleContext(new Locale("nl", ""), TimeZone.getTimeZone("GMT+1"))); Cookie cookie = response.getCookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME); request = new MockHttpServletRequest(); request.setCookies(cookie); resolver = new CookieLocaleResolver(); LocaleContext loc = resolver.resolveLocaleContext(request); assertEquals("nl", loc.getLocale().getLanguage()); assertTrue(loc instanceof TimeZoneAwareLocaleContext); assertEquals(TimeZone.getTimeZone("GMT+1"), ((TimeZoneAwareLocaleContext) loc).getTimeZone()); }
@Test public void testSetAndResolveLocaleContextWithTimeZoneOnly() { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); CookieLocaleResolver resolver = new CookieLocaleResolver(); resolver.setLocaleContext(request, response, new SimpleTimeZoneAwareLocaleContext(null, TimeZone.getTimeZone("GMT+1"))); Cookie cookie = response.getCookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME); request = new MockHttpServletRequest(); request.addPreferredLocale(Locale.GERMANY); request.setCookies(cookie); resolver = new CookieLocaleResolver(); LocaleContext loc = resolver.resolveLocaleContext(request); assertEquals(Locale.GERMANY, loc.getLocale()); assertTrue(loc instanceof TimeZoneAwareLocaleContext); assertEquals(TimeZone.getTimeZone("GMT+1"), ((TimeZoneAwareLocaleContext) loc).getTimeZone()); }
@Test public void testPresets() { when(request.getAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME)).thenReturn(LOCALE_DEFAULT); when(request.getAttribute(TIME_ZONE_REQUEST_ATTRIBUTE_NAME)).thenReturn(TIMEZONE_DEFAULT); LocaleContext context = resolver.resolveLocaleContext(request); assertThat(context).isNotNull(); assertThat(context).isInstanceOf(TimeZoneAwareLocaleContext.class); Locale locale = ((TimeZoneAwareLocaleContext) context).getLocale(); TimeZone zone = ((TimeZoneAwareLocaleContext) context).getTimeZone(); assertThat(locale).isNotNull(); assertThat(locale).isEqualTo(LOCALE_DEFAULT); assertThat(zone).isEqualTo(TIMEZONE_DEFAULT); List<Event> events = recorder.play(); assertThat(events).isEmpty(); }
@Test public void testTimeZone() { String value = "- " + TIMEZONE_CUSTOM.getID(); Cookie cookie = new Cookie(DEFAULT_COOKIE_NAME, value); when(request.getCookies()).thenReturn(new Cookie[] { cookie }); LocaleContext context = resolver.resolveLocaleContext(request); assertThat(context).isNotNull(); assertThat(context).isInstanceOf(TimeZoneAwareLocaleContext.class); Locale locale = ((TimeZoneAwareLocaleContext) context).getLocale(); TimeZone zone = ((TimeZoneAwareLocaleContext) context).getTimeZone(); assertThat(locale).isEqualTo(LOCALE_DEFAULT); assertThat(zone).isEqualTo(TIMEZONE_CUSTOM); List<Event> events = recorder.play(); assertThat(events).isEmpty(); }
@Test public void testTimeZoneWithQuotes() { String value = resolver.quote("- " + TIMEZONE_CUSTOM.getID()); Cookie cookie = new Cookie(DEFAULT_COOKIE_NAME, value); when(request.getCookies()).thenReturn(new Cookie[] { cookie }); LocaleContext context = resolver.resolveLocaleContext(request); assertThat(context).isNotNull(); assertThat(context).isInstanceOf(TimeZoneAwareLocaleContext.class); Locale locale = ((TimeZoneAwareLocaleContext) context).getLocale(); TimeZone zone = ((TimeZoneAwareLocaleContext) context).getTimeZone(); assertThat(locale).isEqualTo(LOCALE_DEFAULT); assertThat(zone).isEqualTo(TIMEZONE_CUSTOM); List<Event> events = recorder.play(); assertThat(events).isEmpty(); }
@Test public void testLocaleAndTimeZone() { String value = LOCALE_CUSTOM + " " + TIMEZONE_CUSTOM.getID(); Cookie cookie = new Cookie(DEFAULT_COOKIE_NAME, value); when(request.getCookies()).thenReturn(new Cookie[] { cookie }); LocaleContext context = resolver.resolveLocaleContext(request); assertThat(context).isNotNull(); assertThat(context).isInstanceOf(TimeZoneAwareLocaleContext.class); Locale locale = ((TimeZoneAwareLocaleContext) context).getLocale(); TimeZone zone = ((TimeZoneAwareLocaleContext) context).getTimeZone(); assertThat(locale).isEqualTo(LOCALE_CUSTOM); assertThat(zone).isEqualTo(TIMEZONE_CUSTOM); List<Event> events = recorder.play(); assertThat(events).isEmpty(); }
@Test public void testLocaleAndTimeZoneWithQuotes() { String value = resolver.quote(LOCALE_CUSTOM.toString() + " " + TIMEZONE_CUSTOM.getID()); Cookie cookie = new Cookie(DEFAULT_COOKIE_NAME, value); when(request.getCookies()).thenReturn(new Cookie[] { cookie }); LocaleContext context = resolver.resolveLocaleContext(request); assertThat(context).isNotNull(); assertThat(context).isInstanceOf(TimeZoneAwareLocaleContext.class); Locale locale = ((TimeZoneAwareLocaleContext) context).getLocale(); TimeZone zone = ((TimeZoneAwareLocaleContext) context).getTimeZone(); assertThat(locale).isEqualTo(LOCALE_CUSTOM); assertThat(zone).isEqualTo(TIMEZONE_CUSTOM); List<Event> events = recorder.play(); assertThat(events).isEmpty(); }
@Test public void testTraceLogLocaleAndTimeZone() { recorder.release(); recorder.capture("TRACE"); String value = LOCALE_CUSTOM + " " + TIMEZONE_CUSTOM.getID(); Cookie cookie = new Cookie(DEFAULT_COOKIE_NAME, value); when(request.getCookies()).thenReturn(new Cookie[] { cookie }); LocaleContext context = resolver.resolveLocaleContext(request); assertThat(context).isInstanceOf(TimeZoneAwareLocaleContext.class); Locale locale = ((TimeZoneAwareLocaleContext) context).getLocale(); TimeZone zone = ((TimeZoneAwareLocaleContext) context).getTimeZone(); List<Event> events = recorder.play(); assertThat(events).hasSize(1); Event event = events.get(0); assertThat(event.getLevel()).isEqualTo("TRACE"); assertThat(event.getMessage()).isEqualTo("Parsed cookie value [" + value + "] into locale '" + locale + "' " + "and time zone '" + zone.getID() + "'"); assertThat(event.getThrown()).isNull(); }
@Override public LocaleContext resolveLocaleContext(final HttpServletRequest request) { parseLocaleCookieIfNecessary(request); return new TimeZoneAwareLocaleContext() { @Override public Locale getLocale() { return (Locale) request.getAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME); } @Override public TimeZone getTimeZone() { return (TimeZone) request.getAttribute(TIME_ZONE_REQUEST_ATTRIBUTE_NAME); } }; }
@Override public void setLocaleContext(HttpServletRequest request, HttpServletResponse response, LocaleContext localeContext) { Locale locale = null; TimeZone timeZone = null; if (localeContext != null) { locale = localeContext.getLocale(); if (localeContext instanceof TimeZoneAwareLocaleContext) { timeZone = ((TimeZoneAwareLocaleContext) localeContext).getTimeZone(); } } WebUtils.setSessionAttribute(request, LOCALE_SESSION_ATTRIBUTE_NAME, locale); WebUtils.setSessionAttribute(request, TIME_ZONE_SESSION_ATTRIBUTE_NAME, timeZone); }
@Override public LocaleContext resolveLocaleContext(HttpServletRequest request) { return new TimeZoneAwareLocaleContext() { @Override public Locale getLocale() { return getDefaultLocale(); } @Override public TimeZone getTimeZone() { return getDefaultTimeZone(); } }; }
@Test public void testResolveLocaleContext() { MockHttpServletRequest request = new MockHttpServletRequest(); Cookie cookie = new Cookie("LanguageKoekje", "nl"); request.setCookies(cookie); CookieLocaleResolver resolver = new CookieLocaleResolver(); // yup, koekje is the Dutch name for Cookie ;-) resolver.setCookieName("LanguageKoekje"); LocaleContext loc = resolver.resolveLocaleContext(request); assertEquals("nl", loc.getLocale().getLanguage()); assertTrue(loc instanceof TimeZoneAwareLocaleContext); assertNull(((TimeZoneAwareLocaleContext) loc).getTimeZone()); }
@Test public void testResolveLocaleContextWithTimeZone() { MockHttpServletRequest request = new MockHttpServletRequest(); Cookie cookie = new Cookie("LanguageKoekje", "nl GMT+1"); request.setCookies(cookie); CookieLocaleResolver resolver = new CookieLocaleResolver(); // yup, koekje is the Dutch name for Cookie ;-) resolver.setCookieName("LanguageKoekje"); LocaleContext loc = resolver.resolveLocaleContext(request); assertEquals("nl", loc.getLocale().getLanguage()); assertTrue(loc instanceof TimeZoneAwareLocaleContext); assertEquals(TimeZone.getTimeZone("GMT+1"), ((TimeZoneAwareLocaleContext) loc).getTimeZone()); }
@Test public void testResolveLocaleContextWithoutCookie() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); request.addPreferredLocale(Locale.TAIWAN); CookieLocaleResolver resolver = new CookieLocaleResolver(); LocaleContext loc = resolver.resolveLocaleContext(request); assertEquals(request.getLocale(), loc.getLocale()); assertTrue(loc instanceof TimeZoneAwareLocaleContext); assertNull(((TimeZoneAwareLocaleContext) loc).getTimeZone()); }
@Test public void testResolveLocaleContextWithoutCookieAndDefaultLocale() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); request.addPreferredLocale(Locale.TAIWAN); CookieLocaleResolver resolver = new CookieLocaleResolver(); resolver.setDefaultLocale(Locale.GERMAN); resolver.setDefaultTimeZone(TimeZone.getTimeZone("GMT+1")); LocaleContext loc = resolver.resolveLocaleContext(request); assertEquals(Locale.GERMAN, loc.getLocale()); assertTrue(loc instanceof TimeZoneAwareLocaleContext); assertEquals(TimeZone.getTimeZone("GMT+1"), ((TimeZoneAwareLocaleContext) loc).getTimeZone()); }
@Test public void testResolveLocaleContextWithCookieWithoutLocale() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); request.addPreferredLocale(Locale.TAIWAN); Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, ""); request.setCookies(cookie); CookieLocaleResolver resolver = new CookieLocaleResolver(); LocaleContext loc = resolver.resolveLocaleContext(request); assertEquals(request.getLocale(), loc.getLocale()); assertTrue(loc instanceof TimeZoneAwareLocaleContext); assertNull(((TimeZoneAwareLocaleContext) loc).getTimeZone()); }