/* * Copyright(c) 2005 Center for E-Commerce Infrastructure Development, The * University of Hong Kong (HKU). All Rights Reserved. * * This software is licensed under the GNU GENERAL PUBLIC LICENSE Version 2.0 [1] * * [1] http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt */ package hk.hku.cecid.piazza.commons.util; import hk.hku.cecid.piazza.commons.module.ComponentException; import hk.hku.cecid.piazza.commons.module.PersistentComponent; import java.net.URL; /** * MessagesTree is an implementation of a Messenger. * It represents a messenger with a tree structure and * is actually backed by a PropertiesTree object. * * @author Hugo Y. K. Lam * */ public class MessagesTree extends PersistentComponent implements Messages { private PropertyTree messages; private String defaultMessage = null; private String defaultLocale = null; /** * Creates a new instance of MessagesTree. */ public MessagesTree() { super(); messages = new PropertyTree(); } /** * Creates a new instance of MessagesTree. * * @param url the url of the messenger properties source. * @throws ComponentException if the properties could not be loaded from the specified url. */ public MessagesTree(URL url) throws ComponentException { super(url); } /** * @see hk.hku.cecid.piazza.commons.util.Messages#getMessage(java.lang.String) */ public String getMessage(String name) { return getMessage(name, getDefaultMessage()); } /** * @see hk.hku.cecid.piazza.commons.util.Messages#getMessage(java.lang.String, java.lang.String) */ public String getMessage(String name, String def) { return getMessage(name, def, "general"); } /** * @see hk.hku.cecid.piazza.commons.util.Messages#getWarningMessage(java.lang.String) */ public String getWarningMessage(String name) { return getWarningMessage(name, getDefaultMessage()); } /** * @see hk.hku.cecid.piazza.commons.util.Messages#getWarningMessage(java.lang.String, java.lang.String) */ public String getWarningMessage(String name, String def) { return getMessage(name, def, "warn"); } /** * @see hk.hku.cecid.piazza.commons.util.Messages#getErrorMessage(java.lang.String) */ public String getErrorMessage(String name) { return getErrorMessage(name, getDefaultMessage()); } /** * @see hk.hku.cecid.piazza.commons.util.Messages#getErrorMessage(java.lang.String, java.lang.String) */ public String getErrorMessage(String name, String def) { return getMessage(name, def, "error"); } /** * @see hk.hku.cecid.piazza.commons.util.Messages#getMessage(java.lang.String, java.lang.String, java.lang.String) */ public String getMessage(String name, String def, String type) { return getMessage(name, def, type, null); } /** * @see hk.hku.cecid.piazza.commons.util.Messages#getMessage(java.lang.String, java.lang.String, java.lang.String, java.lang.String) */ public String getMessage(String name, String def, String type, String locale) { if (locale == null) { locale = getDefaultLocale(); } String xpath = "/messenger/messages/" + type + "/message[@name='" + name + "']/localized-message[starts-with(@locale,'" + locale + "')]"; return messages.getProperty(xpath, def); } /** * @see hk.hku.cecid.piazza.commons.util.Messages#getDefaultLocale() */ public String getDefaultLocale() { return defaultLocale == null ? messages.getProperty( "/messenger/locale", java.util.Locale.getDefault() .getLanguage()) : defaultLocale; } /** * @see hk.hku.cecid.piazza.commons.util.Messages#setDefaultLocale(java.lang.String) */ public void setDefaultLocale(String locale) { defaultLocale = locale; } /** * @see hk.hku.cecid.piazza.commons.util.Messages#getDefaultMessage() */ public String getDefaultMessage() { return defaultMessage == null ? messages.getProperty( "/messenger/messages/default[@locale='" + getDefaultLocale() + "']", "") : defaultMessage; } /** * @see hk.hku.cecid.piazza.commons.util.Messages#setDefaultMessage(java.lang.String) */ public void setDefaultMessage(String string) { defaultMessage = string; } /** * Loads the messenger properties from the specified url location. * * @param url the url of the messenger properties source. * @throws Exception if the operation is unsuccessful. * @see hk.hku.cecid.piazza.commons.module.PersistentComponent#loading(java.net.URL) */ protected void loading(URL url) throws Exception { messages = new PropertyTree(); messages.loading(url); } }