package ddth.dasp.common.mls; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Map.Entry; public class CascadeLanguage extends AbstractLanguage { private Map<String, ILanguage> languages = new HashMap<String, ILanguage>(); public CascadeLanguage() { } public CascadeLanguage(Locale locale, String name) { super(locale, name); } /** * {@inheritDoc} */ @Override public void init() throws Exception { super.init(); synchronized (languages) { for (Entry<String, ILanguage> entry : languages.entrySet()) { ILanguage language = entry.getValue(); if (language instanceof AbstractLanguage) { ((AbstractLanguage) language).init(); } } } } /** * Adds a language pack to the cascading. * * @param name * @param language * @return */ public CascadeLanguage add(String name, ILanguage language) { synchronized (languages) { languages.put(name, language); } return this; } /** * Removes a language pack from the cascading by name. * * @param name * @return */ public CascadeLanguage remove(String name) { synchronized (languages) { languages.remove(name); } return this; } @Override public String getMessage(String key) { synchronized (languages) { for (Entry<String, ILanguage> entry : languages.entrySet()) { ILanguage language = entry.getValue(); String value = language.getMessage(key); if (value != null) { return value; } } return key; } } }