| Method from org.springframework.ui.context.support.ResourceBundleThemeSource Detail: |
protected MessageSource createMessageSource(String basename) {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename(basename);
return messageSource;
}
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. |
public ThemeSource getParentThemeSource() {
return this.parentThemeSource;
}
|
public Theme getTheme(String themeName) {
if (themeName == null) {
return null;
}
synchronized (this.themeCache) {
Theme theme = (Theme) this.themeCache.get(themeName);
if (theme == null) {
String basename = this.basenamePrefix + themeName;
MessageSource messageSource = createMessageSource(basename);
theme = new SimpleTheme(themeName, messageSource);
initParent(theme);
this.themeCache.put(themeName, theme);
if (logger.isDebugEnabled()) {
logger.debug("Theme created: name '" + themeName + "', basename [" + basename + "]");
}
}
return theme;
}
}
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. |
protected void initParent(Theme theme) {
if (theme.getMessageSource() instanceof HierarchicalMessageSource) {
HierarchicalMessageSource messageSource = (HierarchicalMessageSource) theme.getMessageSource();
if (getParentThemeSource() != null && messageSource.getParentMessageSource() == null) {
Theme parentTheme = getParentThemeSource().getTheme(theme.getName());
if (parentTheme != null) {
messageSource.setParentMessageSource(parentTheme.getMessageSource());
}
}
}
}
Initialize the MessageSource of the given theme with the
one from the corresponding parent of this ThemeSource. |
public void setBasenamePrefix(String basenamePrefix) {
this.basenamePrefix = (basenamePrefix != null ? 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. |
public void setParentThemeSource(ThemeSource parent) {
this.parentThemeSource = parent;
// Update existing Theme objects.
// Usually there shouldn't be any at the time of this call.
synchronized (this.themeCache) {
Iterator it = this.themeCache.values().iterator();
while (it.hasNext()) {
initParent((Theme) it.next());
}
}
}
|