On Thu, Jun 13, 2013 at 2:27 PM, Lukasz Lenart <[email protected]> wrote:
> It is better to make methods protected - easier to extend or restore
> the old behaviour

might make sense. For example: readStoredLocale might be able to read
from cookies first,
when overriding. This might also solve my previously mentioned
problem, if we don't want't to build in native cookie support

I am going to change it to protected


>
> Regards
> --
> Ɓukasz
> + 48 606 323 122 http://www.lenart.org.pl/
>
> 2013/6/13  <[email protected]>:
>> 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()
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>



--
http://www.grobmeier.de
https://www.timeandbill.de

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to