org.springframework.ui.context.support

## Class ResourceBundleThemeSource

- java.lang.Object
- - org.springframework.ui.context.support.ResourceBundleThemeSource

- All Implemented Interfaces:
    HierarchicalThemeSource, ThemeSource

      public class ResourceBundleThemeSource
      extends Object
      implements HierarchicalThemeSource

  `ThemeSource` implementation that looks up an individual `ResourceBundle` per theme. The theme name gets interpreted as ResourceBundle basename, supporting a common basename prefix for all themes.
  Author:
    Jean-Pierre Pawlak, Juergen Hoeller
  See Also:
    `setBasenamePrefix(java.lang.String)`, `ResourceBundle`, `ResourceBundleMessageSource`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected Log` | `logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ResourceBundleThemeSource()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected MessageSource` | `createMessageSource(String basename)` Create a MessageSource for the given basename, to be used as MessageSource for the corresponding theme.
    `ThemeSource` | `getParentThemeSource()` Return the parent of this ThemeSource, or `null` if none.
    `Theme` | `getTheme(String themeName)` This implementation returns a SimpleTheme instance, holding a ResourceBundle-based MessageSource whose basename corresponds to the given theme name (prefixed by the configured "basenamePrefix").
    `protected void` | `initParent(Theme theme)` Initialize the MessageSource of the given theme with the one from the corresponding parent of this ThemeSource.
    `void` | `setBasenamePrefix(String basenamePrefix)` Set the prefix that gets applied to the ResourceBundle basenames, i.e.
    `void` | `setParentThemeSource(ThemeSource parent)` Set the parent that will be used to try to resolve theme messages that this object can't resolve.

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

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

- - ### Field Detail

    - #### logger

          protected final Log logger

  - ### Constructor Detail

    - #### ResourceBundleThemeSource

          public ResourceBundleThemeSource()

  - ### Method Detail

    - #### setParentThemeSource

          public void setParentThemeSource(ThemeSource parent)

      Description copied from interface: `HierarchicalThemeSource`
      Set the parent that will be used to try to resolve theme messages that this object can't resolve.
      Specified by:
        `setParentThemeSource` in interface `HierarchicalThemeSource`
      Parameters:
        `parent` - the parent ThemeSource that will be used to resolve messages that this object can't resolve. May be `null`, in which case no further resolution is possible.

    - #### getParentThemeSource

          public ThemeSource getParentThemeSource()

      Description copied from interface: `HierarchicalThemeSource`
      Return the parent of this ThemeSource, or `null` if none.
      Specified by:
        `getParentThemeSource` in interface `HierarchicalThemeSource`

    - #### setBasenamePrefix

          public void setBasenamePrefix(String basenamePrefix)

      Set the prefix that gets applied to the ResourceBundle basenames, i.e. the theme names. E.g.: basenamePrefix="test.", themeName="theme" -> basename="test.theme".

      Note that ResourceBundle names are effectively classpath locations: As a consequence, the JDK's standard ResourceBundle treats dots as package separators. This means that "test.theme" is effectively equivalent to "test/theme", just like it is for programmatic `java.util.ResourceBundle` usage.

      See Also:
        `ResourceBundle.getBundle(String)`

    - #### getTheme

          public Theme getTheme(String themeName)

      This implementation returns a SimpleTheme instance, holding a ResourceBundle-based MessageSource whose basename corresponds to the given theme name (prefixed by the configured "basenamePrefix").

      SimpleTheme instances are cached per theme name. Use a reloadable MessageSource if themes should reflect changes to the underlying files.

      Specified by:
        `getTheme` in interface `ThemeSource`
      Parameters:
        `themeName` - the name of the theme
      Returns:
        the corresponding Theme, or `null` if none defined. Note that, by convention, a ThemeSource should at least be able to return a default Theme for the default theme name "theme" but may also return default Themes for other theme names.
      See Also:
        `setBasenamePrefix(java.lang.String)`, `createMessageSource(java.lang.String)`

    - #### createMessageSource

          protected MessageSource createMessageSource(String basename)

      Create a MessageSource for the given basename, to be used as MessageSource for the corresponding theme.

      Default implementation creates a ResourceBundleMessageSource. for the given basename. A subclass could create a specifically configured ReloadableResourceBundleMessageSource, for example.

      Parameters:
        `basename` - the basename to create a MessageSource for
      Returns:
        the MessageSource
      See Also:
        `ResourceBundleMessageSource`, `ReloadableResourceBundleMessageSource`

    - #### initParent

          protected void initParent(Theme theme)

      Initialize the MessageSource of the given theme with the one from the corresponding parent of this ThemeSource.
      Parameters:
        `theme` - the Theme to (re-)initialize