/* * Copyright 2003 Federal Chancellery Austria * MOA-ID has been developed in a cooperation between BRZ, the Federal * Chancellery Austria - ICT staff unit, and Graz University of Technology. * * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * http://www.osor.eu/eupl/ * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. */ package at.gv.egovernment.moaspss.util; import java.text.MessageFormat; import java.util.Locale; import java.util.MissingResourceException; import java.util.PropertyResourceBundle; import at.gv.egovernment.moaspss.logging.Logger; /** * Provides access to the system messages resource used for exception handling * and logging messages. * * Messages must be provided as a resource bundle at the path. * * @author Patrick Peck * @version $Id$ */ public class Messages { /** Error message indicating that no messages are avaiable. */ private static final String ERROR_MESSAGES_UNAVAILABLE = "Fehler in der Server-Konfiguration. " + "Die Fehlertexte konnten nicht geladen werden."; /** Error message indicating that the message is not available. */ private static final String ERROR_NO_MESSAGE = "No errormesseage for error with number.={0}"; /** The names of the resources containing the messages. */ private String[] resourceNames; /** The corresponding Locales of the resources. */ private Locale[] locales; /** The ResourceBundles containing the messages. */ private ResourceBundleChain messages; /** * Create a new Message object containing the messages * in the given resources. * * @param resourceNames The names of the resources containing the messages. * @param locales The corresponding locales. */ public Messages(String[] resourceNames, Locale[] locales) { this.resourceNames = resourceNames; this.locales = locales; this.messages = null; } /** * Get the message corresponding to a given message ID. * * @param messageId The ID of the message. * @param parameters The parameters to fill in into the message arguments. * @return The formatted message. */ public String getMessage(String messageId, Object[] parameters) { // initialize messages if (messages == null) { initMessages(); } // create the message if (messages == null) { return ERROR_MESSAGES_UNAVAILABLE; } else { try { String rawMessage = messages.getString(messageId); return MessageFormat.format(rawMessage, parameters); } catch (MissingResourceException e2) { // couldn't find any message -> set to default error message return MessageFormat.format( ERROR_NO_MESSAGE, new Object[] { messageId }); } } } /** * Return the names of the resources containing the messages. * * @return String[] The names of the resource bundles containing the messages. */ private String[] getResourceNames() { return resourceNames; } /** * Return the Locales of the resources containing the messages. * * @return Locale[] The Locales of the resource bundles * containing the messages. */ private Locale[] getLocales() { return locales; } /** * Initialize the messages ResourceBundle containing * the MOA error messages. */ private void initMessages() { messages = new ResourceBundleChain(); int i; // initialize the message resources for (i = 0; i < resourceNames.length; i++) { try { messages.addResourceBundle( PropertyResourceBundle.getBundle( getResourceNames()[i], getLocales()[i])); } catch (MissingResourceException e) { Logger.error(ERROR_MESSAGES_UNAVAILABLE, e); } } } }