org.eigenbase.resgen
Class ShadowResourceBundle

java.lang.Object
  extended by java.util.ResourceBundle
      extended by org.eigenbase.resgen.ShadowResourceBundle

public abstract class ShadowResourceBundle
extends ResourceBundle

ShadowResourceBundle is an abstract base class for ShadowResourceBundle.MyPropertyResourceBundle classes which are backed by a properties file. When the class is created, it loads a properties file with the same name as the class.

In the standard scheme (see ShadowResourceBundle.MyPropertyResourceBundle), if you call ResourceBundle.getBundle(java.lang.String)("foo.MyResource"), it first looks for a class called foo.MyResource, then looks for a file called foo/MyResource.properties. If it finds the file, it creates a ShadowResourceBundle.MyPropertyResourceBundle and loads the class. The problem is if you want to load the .properties file into a dedicated class; ShadowResourceBundle helps with this case.

You should create a class as follows:

package foo;
class MyResource extends org.eigenbase.resgen.ShadowResourceBundle {
    public MyResource() throws java.io.IOException {
    }
}
Then when you call ResourceBundle.getBundle("foo.MyResource"), it will find the class before the properties file, but still automatically load the properties file based upon the name of the class.

 

Nested Class Summary
(package private) static class ShadowResourceBundle.MyPropertyResourceBundle
           
 
Field Summary
protected static Object[] emptyObjectArray
           
 
Fields inherited from class java.util.ResourceBundle
parent
 
Constructor Summary
protected ShadowResourceBundle()
          Creates a ShadowResourceBundle, and reads resources from a .properties file with the same name as the current class.
 
Method Summary
 Enumeration getKeys()
           
static Locale getThreadLocale()
          Returns the preferred locale of the current thread, or null if the thread has not called setThreadLocale(java.util.Locale).
protected static Locale getThreadOrDefaultLocale()
          Returns the preferred locale of the current thread, or the default locale if the current thread has not called setThreadLocale(java.util.Locale).
protected  Object handleGetObject(String key)
           
protected static ResourceBundle instance(String baseName)
          Deprecated. This method does not work correctly in dynamically loaded jars.
protected static ShadowResourceBundle instance(String baseName, Locale locale)
          Deprecated. This method does not work correctly in dynamically loaded jars.
protected static ShadowResourceBundle instance(String baseName, Locale locale, ResourceBundle bundle)
          Returns the instance of the baseName resource bundle for the given locale.
static void setThreadLocale(Locale locale)
          Sets the locale for the current thread.
 
Methods inherited from class java.util.ResourceBundle
getBundle, getBundle, getBundle, getLocale, getObject, getString, getStringArray, setParent
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

emptyObjectArray

protected static final Object[] emptyObjectArray
Constructor Detail

ShadowResourceBundle

protected ShadowResourceBundle()
                        throws IOException
Creates a ShadowResourceBundle, and reads resources from a .properties file with the same name as the current class. For example, if the class is called foo.MyResource_en_US, reads from foo/MyResource_en_US.properties, then foo/MyResource_en.properties, then foo/MyResource.properties.

Throws:
IOException
Method Detail

getKeys

public Enumeration getKeys()
Specified by:
getKeys in class ResourceBundle

handleGetObject

protected Object handleGetObject(String key)
                          throws MissingResourceException
Specified by:
handleGetObject in class ResourceBundle
Throws:
MissingResourceException

instance

protected static ResourceBundle instance(String baseName)
Deprecated. This method does not work correctly in dynamically loaded jars.

Returns the instance of the baseName resource bundle for the current thread's locale. For example, if called with "mondrian.olap.MondrianResource", from a thread which has called setThreadLocale(java.util.Locale)(Locale.FRENCH), will get an instance of "mondrian.olap.MondrianResource_FR" from the cache.

This method should be called from a derived class, with the proper casting:

class MyResource extends ShadowResourceBundle {
    ...
    /**
      * Retrieves the instance of {@link MyResource} appropriate
      * to the current locale. If this thread has specified a locale
      * by calling {@link #setThreadLocale}, this locale is used,
      * otherwise the default locale is used.
      **/
    public static MyResource instance() {
       return (MyResource) instance(MyResource.class.getName());
    }
    ...
 }


instance

protected static ShadowResourceBundle instance(String baseName,
                                               Locale locale)
Deprecated. This method does not work correctly in dynamically loaded jars.

Returns the instance of the baseName resource bundle for the given locale.

This method should be called from a derived class, with the proper casting:

class MyResource extends ShadowResourceBundle {
    ...

    /**
      * Retrieves the instance of {@link MyResource} appropriate
      * to the given locale.
      **/
    public static MyResource instance(Locale locale) {
       return (MyResource) instance(MyResource.class.getName(), locale);
    }
    ...
 }


instance

protected static ShadowResourceBundle instance(String baseName,
                                               Locale locale,
                                               ResourceBundle bundle)
Returns the instance of the baseName resource bundle for the given locale.

This method should be called from a derived class, with the proper casting:

class MyResource extends ShadowResourceBundle {
    ...

    /**
      * Retrieves the instance of {@link MyResource} appropriate
      * to the given locale.
      **/
    public static MyResource instance(Locale locale) {
       return (MyResource) instance(
           MyResource.class.getName(), locale,
           ResourceBundle.getBundle(MyResource.class.getName(), locale));
    }
    ...
 }


getThreadOrDefaultLocale

protected static Locale getThreadOrDefaultLocale()
Returns the preferred locale of the current thread, or the default locale if the current thread has not called setThreadLocale(java.util.Locale).


setThreadLocale

public static void setThreadLocale(Locale locale)
Sets the locale for the current thread. Used by instance(String,Locale).


getThreadLocale

public static Locale getThreadLocale()
Returns the preferred locale of the current thread, or null if the thread has not called setThreadLocale(java.util.Locale).


SourceForge.net_Logo