dgraham 2003/02/01 13:56:33 Modified: src/share/org/apache/struts/actions LookupDispatchAction.java Log: Added multiple message resources support for PR# 16019. Revision Changes Path 1.11 +47 -29 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.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- LookupDispatchAction.java 8 Dec 2002 07:11:51 -0000 1.10 +++ LookupDispatchAction.java 1 Feb 2003 21:56:33 -0000 1.11 @@ -1,9 +1,13 @@ /* + * $Header$ + * $Revision$ + * $Date$ + * * ==================================================================== * * The Apache Software License, Version 1.1 * - * Copyright (c) 1999-2001 The Apache Software Foundation. All rights + * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -69,6 +73,8 @@ import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import org.apache.struts.config.MessageResourcesConfig; +import org.apache.struts.config.ModuleConfig; import org.apache.struts.util.MessageResources; /** @@ -139,10 +145,10 @@ * getKeys, only the first one found will be returned. If no corresponding key * is found then an exception will be thrown. * - *@author Erik Hatcher - *@author Scott Carlson + * @author Erik Hatcher + * @author Scott Carlson + * @author David Graham */ - public abstract class LookupDispatchAction extends DispatchAction { /** @@ -151,7 +157,7 @@ protected Map localeMap = new HashMap(); /** - * Resource key to method name lookup + * Resource key to method name lookup. */ protected Map keyMethodMap = null; @@ -164,15 +170,12 @@ * control should be forwarded, or <code>null</code> if the response has * already been completed. * - *@param mapping The ActionMapping used to select this - * instance - *@param request The HTTP request we are processing - *@param response The HTTP response we are creating - *@param form The optional ActionForm bean for this - * request (if any) - *@return Describes where and how control should be - * forwarded. - *@exception Exception if an error occurs + * @param mapping The ActionMapping used to select this instance + * @param request The HTTP request we are processing + * @param response The HTTP response we are creating + * @param form The optional ActionForm bean for this request (if any) + * @return Describes where and how control should be forwarded. + * @exception Exception if an error occurs */ public ActionForward execute( ActionMapping mapping, @@ -201,26 +204,41 @@ Locale userLocale = getLocale(request); boolean newLookupMap = false; synchronized (localeMap) { - lookupMap = (Map) localeMap.get(userLocale); + lookupMap = (Map) this.localeMap.get(userLocale); if (lookupMap == null) { newLookupMap = true; lookupMap = new HashMap(); - localeMap.put(userLocale, lookupMap); + this.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(Globals.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); + /* + * This is the first time this Locale is used so build the reverse lookup Map. + * Search for message keys in all configured MessageResources for + * the current module. + */ + this.keyMethodMap = this.getKeyMethodMap(); + + ModuleConfig moduleConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); + MessageResourcesConfig[] mrc = moduleConfig.findMessageResourcesConfigs(); + + // Look through all module's MessageResources + for (int i = 0; i < mrc.length; i++) { + MessageResources resources = + this.getResources(request, mrc[i].getKey()); + + // Look for key in MessageResources + Iterator iter = this.keyMethodMap.keySet().iterator(); + while (iter.hasNext()) { + String key = (String) iter.next(); + String text = resources.getMessage(userLocale, key); + + // Found key and haven't added to Map yet, so add the text + if ((text != null) && !lookupMap.containsKey(text)) { + lookupMap.put(text, key); + } } } } @@ -235,9 +253,9 @@ } /** - * Provides the mapping from resource key to method name + * Provides the mapping from resource key to method name. * - *@return Resource key / method name map + * @return Resource key / method name map. */ protected abstract Map getKeyMethodMap();
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]