craigmcc    2002/07/27 16:49:58

  Modified:    .        STATUS
               src/share/org/apache/struts/actions
                        LookupDispatchAction.java
  Log:
  Fix LookupDispatchAction to work when the button labels are generated
  from other locales.
  
  PR: Bugzilla #10322
    Bug report submitted by Henning Schmidt <h.schmidt at mkg-bank.de>
    Patch (thanks!) submitted by Scott Carlson <scott.carlson at yahoo.com>
  
  Revision  Changes    Path
  1.45      +2 -3      jakarta-struts/STATUS
  
  Index: STATUS
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/STATUS,v
  retrieving revision 1.44
  retrieving revision 1.45
  diff -u -r1.44 -r1.45
  --- STATUS    27 Jul 2002 23:26:08 -0000      1.44
  +++ STATUS    27 Jul 2002 23:49:58 -0000      1.45
  @@ -6,7 +6,7 @@
               OUTSTANDING BUGS IN STRUTS 1.1-b1 AND NIGHTLY BUILDS
               ====================================================
   
  -                           12 open bugs to swat!!
  +                           11 open bugs to swat!!
   
   
   Controller:
  @@ -36,7 +36,6 @@
   
   Standard Actions:
   ----------------
  -10322 Problems with LookupDispatchAction and other locales
   
   
   Tiles Framework:
  
  
  
  1.6       +29 -15    
jakarta-struts/src/share/org/apache/struts/actions/LookupDispatchAction.java
  
  Index: LookupDispatchAction.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/actions/LookupDispatchAction.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- LookupDispatchAction.java 25 Jun 2002 18:26:15 -0000      1.5
  +++ LookupDispatchAction.java 27 Jul 2002 23:49:58 -0000      1.6
  @@ -60,6 +60,7 @@
   import java.lang.reflect.Method;
   import java.util.HashMap;
   import java.util.Iterator;
  +import java.util.Locale;
   import java.util.Map;
   
   import javax.servlet.ServletException;
  @@ -143,6 +144,7 @@
    *  is found then an exception will be thrown.
    *
    *@author     Erik Hatcher
  + *@author     Scott Carlson
    */
   
   public abstract class LookupDispatchAction extends DispatchAction {
  @@ -150,7 +152,7 @@
       /**
        * Reverse lookup map from resource value to resource key.
        */
  -    protected Map lookupMap = null;
  +    protected Map localeMap = new HashMap();
   
       /**
        * Resource key to method name lookup
  @@ -198,20 +200,32 @@
               throw new ServletException(message);
           }
   
  -        if (lookupMap == null) {
  -            // Build the key lookup map
  -            lookupMap = new HashMap();
  -            MessageResources resources = (MessageResources)
  -                request.getAttribute(Action.MESSAGES_KEY);
  -
  -            keyMethodMap = getKeyMethodMap();
  -
  -            Iterator iter = keyMethodMap.keySet().iterator();
  -            while (iter.hasNext()) {
  -                String key = (String) iter.next();
  -                String text = resources.getMessage(key);
  -                if ((text != null) && !lookupMap.containsKey(text)) {
  -                    lookupMap.put(text, key);
  +        // Based on this request's Locale get the lookupMap
  +        Map lookupMap = null;
  +        Locale userLocale = getLocale(request);
  +        boolean newLookupMap = false;
  +        synchronized (localeMap) {
  +            lookupMap = (Map) localeMap.get(userLocale);
  +            if (lookupMap == null) {
  +                newLookupMap = true;
  +                lookupMap = new HashMap();
  +                localeMap.put(userLocale, lookupMap);
  +            }
  +        }
  +        synchronized (lookupMap) {
  +            if (newLookupMap) {
  +                // This is the first time this Locale is used
  +                // Build the reverse lookup Map.
  +                MessageResources resources = (MessageResources)
  +                    request.getAttribute(Action.MESSAGES_KEY);
  +                keyMethodMap = getKeyMethodMap();
  +                Iterator iter = keyMethodMap.keySet().iterator();
  +                while (iter.hasNext()) {
  +                    String key = (String) iter.next();
  +                    String text = resources.getMessage(userLocale, key);
  +                    if ((text != null) && !lookupMap.containsKey(text)) {
  +                        lookupMap.put(text, key);
  +                    }
                   }
               }
           }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to