org.springframework.ui.context.support
Class ResourceBundleThemeSource

java.lang.Object
  extended by 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
protected  Log logger
           
 
Constructor Summary
ResourceBundleThemeSource()
           
 
Method Summary
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