Package org.eigenbase.resgen

# Class ShadowResourceBundle

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

public abstract class ShadowResourceBundle extends ResourceBundle
`ShadowResourceBundle` is an abstract base class for `ResourceBundle` 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 `ResourceBundle`), 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 `PropertyResourceBundle` 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

Nested Classes
Modifier and Type
Class
Description
`(package private) static class`
`ShadowResourceBundle.MyPropertyResourceBundle`

## Nested classes/interfaces inherited from class java.util.ResourceBundle

`ResourceBundle.Control`

## Field Summary

Fields
Modifier and Type
Field
Description
`protected static final Object[]`
`emptyObjectArray`

### Fields inherited from class java.util.ResourceBundle

`parent`

## Constructor Summary

Constructors
Modifier
Constructor
Description
`protected`
`ShadowResourceBundle()`
Creates a `ShadowResourceBundle`, and reads resources from a `.properties` file with the same name as the current class.

## Method Summary

Modifier and Type
Method
Description
`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

`clearCache, clearCache, containsKey, getBaseBundleName, getBundle, getBundle, getBundle, getBundle, getBundle, getBundle, getBundle, getBundle, getLocale, getObject, getString, getStringArray, handleKeySet, keySet, setParent`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### emptyObjectArray

protected static final Object[] emptyObjectArray

## Constructor Details

### 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 Details

### 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)`.