leif 2004/04/18 09:35:28
Modified: i18n/src/java/org/apache/avalon/excalibur/i18n
ResourceManager.java
Log:
Make it possible to request a Resources object for a specific locale. This was
added to support the use of the ResourceManager in cases where the Locale
depends on the calling thread. Specifically in Servlet environments where each
client may have a different locale.
Revision Changes Path
1.26 +100 -14
avalon-excalibur/i18n/src/java/org/apache/avalon/excalibur/i18n/ResourceManager.java
Index: ResourceManager.java
===================================================================
RCS file:
/home/cvs/avalon-excalibur/i18n/src/java/org/apache/avalon/excalibur/i18n/ResourceManager.java,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- ResourceManager.java 28 Feb 2004 11:47:30 -0000 1.25
+++ ResourceManager.java 18 Apr 2004 16:35:28 -0000 1.26
@@ -18,6 +18,7 @@
import java.lang.ref.WeakReference;
import java.util.HashMap;
+import java.util.Locale;
/**
* Manager for resources.
@@ -48,23 +49,58 @@
* Retrieve resource with specified basename.
*
* @param baseName the basename
+ * @param locale Locale of the requested Resources, null implies default locale
* @param classLoader the classLoader to load resources from
+ *
* @return the Resources
*/
public synchronized static final Resources getBaseResources( final String
baseName,
+ final Locale
locale,
final ClassLoader
classLoader )
{
- Resources resources = getCachedResource( baseName );
+ String cacheKey;
+ if ( locale == null )
+ {
+ cacheKey = baseName;
+ }
+ else
+ {
+ cacheKey = baseName + "-" + locale.toString();
+ }
+
+ Resources resources = getCachedResource( cacheKey );
if( null == resources )
{
- resources = new Resources( baseName, classLoader );
- putCachedResource( baseName, resources );
+ if ( locale == null )
+ {
+ resources = new Resources( baseName, classLoader );
+ }
+ else
+ {
+ resources = new Resources( baseName, locale, classLoader );
+ }
+
+ putCachedResource( cacheKey, resources );
}
return resources;
}
/**
+ * Retrieve resource with specified basename.
+ *
+ * @param baseName the basename
+ * @param classLoader the classLoader to load resources from
+ *
+ * @return the Resources
+ */
+ public synchronized static final Resources getBaseResources( final String
baseName,
+ final ClassLoader
classLoader )
+ {
+ return getBaseResources( baseName, null, classLoader );
+ }
+
+ /**
* Clear the cache of all resources currently loaded into the
* system. This method is useful if you need to dump the complete
* cache and because part of the application is reloading and
@@ -92,26 +128,25 @@
/**
* Cache specified resource in weak reference.
*
- * @param baseName the resource key
+ * @param cacheKey the key used to reference the resource in the cache
* @param resources the resources object
*/
- private synchronized static final void putCachedResource( final String baseName,
+ private synchronized static final void putCachedResource( final String cacheKey,
final Resources
resources )
{
- c_resources.put( baseName,
- new WeakReference( resources ) );
+ c_resources.put( cacheKey, new WeakReference( resources ) );
}
/**
* Retrieve cached resource.
*
- * @param baseName the resource key
+ * @param cacheKey the key used to reference the resource in the cache
+ *
* @return resources the resources object
*/
- private synchronized static final Resources getCachedResource( final String
baseName )
+ private synchronized static final Resources getCachedResource( final String
cacheKey )
{
- final WeakReference weakReference =
- (WeakReference)c_resources.get( baseName );
+ final WeakReference weakReference = (WeakReference)c_resources.get(
cacheKey );
if( null == weakReference )
{
return null;
@@ -127,11 +162,42 @@
* The basename is determined by name postfixed with ".Resources".
*
* @param name the name to use when looking up resources
+ * @param locale Locale of the requested Resources, null implies default locale
+ *
+ * @return the Resources
+ */
+ public static final Resources getResources( final String name, final Locale
locale )
+ {
+ return getBaseResources( name + ".Resources", locale, null );
+ }
+
+ /**
+ * Retrieve resource for specified name.
+ * The basename is determined by name postfixed with ".Resources".
+ *
+ * @param name the name to use when looking up resources
+ *
* @return the Resources
*/
public static final Resources getResources( final String name )
{
- return getBaseResources( name + ".Resources" );
+ return getResources( name, null );
+ }
+
+ /**
+ * Retrieve resource for specified Classes package.
+ * The basename is determined by name of classes package
+ * postfixed with ".Resources".
+ *
+ * @param clazz the Class
+ * @param locale Locale of the requested Resources, null implies default locale
+ *
+ * @return the Resources
+ */
+ public static final Resources getPackageResources( final Class clazz, final
Locale locale )
+ {
+ return getBaseResources(
+ getPackageResourcesBaseName( clazz ), locale, clazz.getClassLoader() );
}
/**
@@ -140,11 +206,28 @@
* postfixed with ".Resources".
*
* @param clazz the Class
+ *
* @return the Resources
*/
public static final Resources getPackageResources( final Class clazz )
{
- return getBaseResources( getPackageResourcesBaseName( clazz ),
clazz.getClassLoader() );
+ return getPackageResources( clazz, null );
+ }
+
+ /**
+ * Retrieve resource for specified Class.
+ * The basename is determined by name of Class
+ * postfixed with "Resources".
+ *
+ * @param clazz the Class
+ * @param locale Locale of the requested Resources, null implies default locale
+ *
+ * @return the Resources
+ */
+ public static final Resources getClassResources( final Class clazz, final
Locale locale )
+ {
+ return getBaseResources(
+ getClassResourcesBaseName( clazz ), locale, clazz.getClassLoader() );
}
/**
@@ -153,11 +236,12 @@
* postfixed with "Resources".
*
* @param clazz the Class
+ *
* @return the Resources
*/
public static final Resources getClassResources( final Class clazz )
{
- return getBaseResources( getClassResourcesBaseName( clazz ),
clazz.getClassLoader() );
+ return getClassResources( clazz, null );
}
/**
@@ -166,6 +250,7 @@
* postfixed with ".Resources".
*
* @param clazz the Class
+ *
* @return the resource basename
*/
public static final String getPackageResourcesBaseName( final Class clazz )
@@ -199,6 +284,7 @@
* postfixed with "Resources".
*
* @param clazz the Class
+ *
* @return the resource basename
*/
public static final String getClassResourcesBaseName( final Class clazz )
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]