Author: grobmeier Date: Thu Jun 13 11:57:16 2013 New Revision: 1492633 URL: http://svn.apache.org/r1492633 Log: some refactorings for better readability
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/I18nInterceptor.java Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/I18nInterceptor.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/I18nInterceptor.java?rev=1492633&r1=1492632&r2=1492633&view=diff ============================================================================== --- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/I18nInterceptor.java (original) +++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/I18nInterceptor.java Thu Jun 13 11:57:16 2013 @@ -125,6 +125,7 @@ public class I18nInterceptor extends Abs Map<String, Object> 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 Abs } } + Locale locale = getLocaleFromParam(requestedLocale); + //save it in session Map<String, Object> 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 Abs 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<String, Object> 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<String, Object> params, String parameterName) { Object requestedLocale = params.remove(parameterName); if (requestedLocale != null && requestedLocale.getClass().isArray()