public class ResourceBundleThemeSource extends java.lang.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.setBasenamePrefix(java.lang.String)
,
ResourceBundle
,
ResourceBundleMessageSource
Constructor and Description |
---|
ResourceBundleThemeSource() |
Modifier and Type | Method and Description |
---|---|
protected MessageSource |
createMessageSource(java.lang.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(java.lang.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(java.lang.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.
|
protected final Log logger
public void setParentThemeSource(ThemeSource parent)
HierarchicalThemeSource
setParentThemeSource
in interface HierarchicalThemeSource
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.public ThemeSource getParentThemeSource()
HierarchicalThemeSource
null
if none.getParentThemeSource
in interface HierarchicalThemeSource
public void setBasenamePrefix(java.lang.String basenamePrefix)
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.
ResourceBundle.getBundle(String)
public Theme getTheme(java.lang.String themeName)
SimpleTheme instances are cached per theme name. Use a reloadable MessageSource if themes should reflect changes to the underlying files.
getTheme
in interface ThemeSource
themeName
- the name of the themenull
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.setBasenamePrefix(java.lang.String)
,
createMessageSource(java.lang.String)
protected MessageSource createMessageSource(java.lang.String basename)
Default implementation creates a ResourceBundleMessageSource. for the given basename. A subclass could create a specifically configured ReloadableResourceBundleMessageSource, for example.
basename
- the basename to create a MessageSource forResourceBundleMessageSource
,
ReloadableResourceBundleMessageSource
protected void initParent(Theme theme)
theme
- the Theme to (re-)initialize