FileDocCategorySizeDatePackage
LocalStringManagerImpl.javaAPI DocGlassfish v2 API7454Fri May 04 22:32:08 BST 2007com.sun.enterprise.util

LocalStringManagerImpl

public class LocalStringManagerImpl extends Object implements LocalStringManager
Implementation of a local string manager. Provides access to i18n messages for classes that need them.

Fields Summary
private static Logger
_logger
private Class
defaultClass
Constructors Summary
public LocalStringManagerImpl(Class defaultClass)
Create a string manager that looks for LocalStrings.properties in the package of the defaultClass.

param
defaultClass Class whose package has default localized strings

	this.defaultClass = defaultClass;
    
Methods Summary
public java.lang.StringgetLocalString(java.lang.Class callerClass, java.lang.String key, java.lang.String defaultValue)
Get a localized string. Strings are stored in a single property file per package named LocalStrings[_locale].properties. Starting from the class of the caller, we walk up the class hierarchy until we find a package resource bundle that provides a value for the requested key.

This simplifies access to resources, at the cost of checking for the resource bundle of several classes upon each call. However, due to the caching performed by ResourceBundle this seems reasonable.

Due to that, sub-classes must make sure they don't have conflicting resource naming.

param
callerClass The object making the call, to allow per-package resource bundles
param
key The name of the resource to fetch
param
defaultValue The default return value if not found
return
The localized value for the resource

	Class stopClass  = defaultClass.getSuperclass();
	Class startClass = ((callerClass != null) ? callerClass : 
			    defaultClass);
	ResourceBundle resources  = null;
	boolean globalDone = false;
	for (Class c = startClass; 
	     c != stopClass && c != null;
	     c = c.getSuperclass()) {
	    globalDone = (c == defaultClass);
	    try {
		// Construct the bundle name as LocalStrings in the
		// caller class's package.
		StringBuffer resFileName = new StringBuffer(
		    c.getName().substring(0, c.getName().lastIndexOf(".")));
		resFileName.append(".LocalStrings");

		resources = ResourceBundle.getBundle(resFileName.toString());
		if ( resources != null ) {
		    String value = resources.getString(key);
		    if ( value != null )
			return value;
		}
	    } catch (Exception ex) {
	    }
	} 

	// Look for a global resource (defined by defaultClass)
	if ( ! globalDone ) {
	    return getLocalString(null, key, defaultValue);
	} else {
	    /** IASRI 4660742
      System.err.println("No local string for " + key); 
      **/
	    //START OF IASRI 4660742
      if (getLogger().isLoggable(Level.FINE))
	        getLogger().log(Level.FINE,"No local string for " + key);
	    //END OF IASRI 4660742
	    return defaultValue;
	}
    
public java.lang.StringgetLocalString(java.lang.String key, java.lang.String defaultValue)
Get a localized string from the package of the default class.

param
key The name of the resource to fetch
param
defaultValue The default return value if not found
return
The localized string

	return getLocalString(null, key, defaultValue);
    
public java.lang.StringgetLocalString(java.lang.Class callerClass, java.lang.String key, java.lang.String defaultFormat, java.lang.Object[] arguments)
Get a local string for the caller and format the arguments accordingly.

param
callerClass The caller (to walk through its class hierarchy)
param
key The key to the local format string
param
fmt The default format if not found in the resources
param
arguments The set of arguments to provide to the formatter
return
A formatted localized string

	MessageFormat f = new MessageFormat(
	    getLocalString(callerClass, key, defaultFormat));
	for (int i = 0; i < arguments.length; i++) {
	    if ( arguments[i] == null ) {
		arguments[i] = "null";
	    } else if  ( !(arguments[i] instanceof String) &&
		 !(arguments[i] instanceof Number) &&
		 !(arguments[i] instanceof java.util.Date)) {
		arguments[i] = arguments[i].toString();
	    }
	}
	return f.format(arguments);
    
public java.lang.StringgetLocalString(java.lang.String key, java.lang.String defaultFormat, java.lang.Object[] arguments)
Get a local string from the package of the default class and format the arguments accordingly.

param
key The key to the local format string
param
fmt The default format if not found in the resources
param
arguments The set of arguments to provide to the formatter
return
A formatted localized string

	return getLocalString(null, key, defaultFormat, arguments);
    
private static java.util.logging.LoggergetLogger()


    //No need to worry about synchronization here as getLogger call is 
    //synchronized, worse case logger will get initialized to the same
    //value 2x.
        
        if (_logger == null) {
            _logger=LogDomains.getLogger(LogDomains.UTIL_LOGGER);
        }
        return _logger;