Class ShadowResourceBundle


  • public abstract class ShadowResourceBundle
    extends java.util.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

        java.util.ResourceBundle.Control
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected static java.lang.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

      All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      java.util.Enumeration getKeys()  
      static java.util.Locale getThreadLocale()
      Returns the preferred locale of the current thread, or null if the thread has not called setThreadLocale(java.util.Locale).
      protected static java.util.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 java.lang.Object handleGetObject​(java.lang.String key)  
      protected static java.util.ResourceBundle instance​(java.lang.String baseName)
      Deprecated.
      This method does not work correctly in dynamically loaded jars.
      protected static ShadowResourceBundle instance​(java.lang.String baseName, java.util.Locale locale)
      Deprecated.
      This method does not work correctly in dynamically loaded jars.
      protected static ShadowResourceBundle instance​(java.lang.String baseName, java.util.Locale locale, java.util.ResourceBundle bundle)
      Returns the instance of the baseName resource bundle for the given locale.
      static void setThreadLocale​(java.util.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 Detail

      • emptyObjectArray

        protected static final java.lang.Object[] emptyObjectArray
    • Constructor Detail

      • ShadowResourceBundle

        protected ShadowResourceBundle()
                                throws java.io.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:
        java.io.IOException
    • Method Detail

      • getKeys

        public java.util.Enumeration getKeys()
        Specified by:
        getKeys in class java.util.ResourceBundle
      • handleGetObject

        protected java.lang.Object handleGetObject​(java.lang.String key)
                                            throws java.util.MissingResourceException
        Specified by:
        handleGetObject in class java.util.ResourceBundle
        Throws:
        java.util.MissingResourceException
      • instance

        protected static java.util.ResourceBundle instance​(java.lang.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​(java.lang.String baseName,
                                                       java.util.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​(java.lang.String baseName,
                                                       java.util.Locale locale,
                                                       java.util.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 java.util.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​(java.util.Locale locale)
        Sets the locale for the current thread. Used by instance(String,Locale).
      • getThreadLocale

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