From d7ad75999580da94cc3fbfe0809749e3cb216f48 Mon Sep 17 00:00:00 2001 From: Christian Grobmeier Date: Thu, 13 Jun 2013 11:57:16 +0000 Subject: [PATCH] some refactorings for better readability git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@1492633 13f79535-47bb-0310-9956-ffa450edef68 --- .../xwork2/interceptor/I18nInterceptor.java | 76 +++++++++++++------ 1 file changed, 54 insertions(+), 22 deletions(-) diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/I18nInterceptor.java b/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/I18nInterceptor.java index fd6419fbe..c6abe49cd 100644 --- a/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/I18nInterceptor.java +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/I18nInterceptor.java @@ -125,6 +125,7 @@ public class I18nInterceptor extends AbstractInterceptor { Map params = invocation.getInvocationContext().getParameters(); boolean storeInSession = true; + Object requestedLocale = findLocaleParameter(params, parameterName); if (requestedLocale == null) { requestedLocale = findLocaleParameter(params, requestOnlyParameterName); @@ -133,41 +134,24 @@ public class I18nInterceptor extends AbstractInterceptor { } } + Locale locale = getLocaleFromParam(requestedLocale); + //save it in session Map session = invocation.getInvocationContext().getSession(); - Locale locale = null; - if (requestedLocale != null) { - locale = (requestedLocale instanceof Locale) ? - (Locale) requestedLocale : LocalizedTextUtil.localeFromString(requestedLocale.toString(), null); - if (locale != null && LOG.isDebugEnabled()) { - LOG.debug("applied request locale=#0", locale); - } - } if (session != null) { synchronized (session) { if (locale == null) { storeInSession = false; - // check session for saved locale - Object sessionLocale = session.get(attributeName); - if (sessionLocale != null && sessionLocale instanceof Locale) { - locale = (Locale) sessionLocale; - if (LOG.isDebugEnabled()) { - LOG.debug("applied session locale=#0", locale); - } - } else { - // no overriding locale definition found, stay with current invocation (=browser) locale - locale = invocation.getInvocationContext().getLocale(); - if (locale != null && LOG.isDebugEnabled()) { - LOG.debug("applied invocation context locale=#0", locale); - } - } + locale = readStoredLocale(invocation, session); } + if (storeInSession) { session.put(attributeName, locale); } } } + saveLocale(invocation, locale); if (LOG.isDebugEnabled()) { @@ -183,6 +167,54 @@ public class I18nInterceptor extends AbstractInterceptor { return result; } + /** + * Reads the locale from the session, and if not found from the + * current invocation (=browser) + * + * @param invocation the current invocation + * @param session the current session + * @return the read locale + */ + private Locale readStoredLocale(ActionInvocation invocation, Map session) { + // check session for saved locale + Object sessionLocale = session.get(attributeName); + if (sessionLocale != null && sessionLocale instanceof Locale) { + Locale locale = (Locale) sessionLocale; + if (LOG.isDebugEnabled()) { + LOG.debug("applied session locale=#0", locale); + } + return locale; + } + + // no overriding locale definition found, stay with current invocation (=browser) locale + Locale locale = invocation.getInvocationContext().getLocale(); + if (locale != null && LOG.isDebugEnabled()) { + LOG.debug("applied invocation context locale=#0", locale); + } + + return locale; + } + + /** + * Creates a Locale object from the request param, which might + * be already a Local or a String + * + * @param requestedLocale the parameter from the request + * @return the Locale + */ + private Locale getLocaleFromParam(Object requestedLocale) { + Locale locale = null; + if (requestedLocale != null) { + locale = (requestedLocale instanceof Locale) ? + (Locale) requestedLocale : + LocalizedTextUtil.localeFromString(requestedLocale.toString(), null); + if (locale != null && LOG.isDebugEnabled()) { + LOG.debug("applied request locale=#0", locale); + } + } + return locale; + } + private Object findLocaleParameter(Map params, String parameterName) { Object requestedLocale = params.remove(parameterName); if (requestedLocale != null && requestedLocale.getClass().isArray()