package at.gv.egovernment.moa.util; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.MissingResourceException; import java.util.ResourceBundle; /** * A class to chain ResourceBundles. * * @author Patrick Peck * @version $Id$ */ public class ResourceBundleChain { /** Error message indicating the resource is not available. */ private static final String ERROR_MISSING_RESOURCE = "Missing resource"; /** The ResourceBundles contained in this chain. */ private List resourceBundles = new ArrayList(); /** * Add a ResourceBundle to the chain. * * @param resourceBundle The ResourceBundle to add. */ public void addResourceBundle(ResourceBundle resourceBundle) { resourceBundles.add(resourceBundle); } /** * Return the value of the resource. * * @param key The key to access the String resource. * @return The resource value. All the registered ResourceBundles * are searched in the order in which they have previously been added to this * ResourceBundleChain. * @throws MissingResourceException The resource coult not be found in any of * the bundles. */ public String getString(String key) throws MissingResourceException { MissingResourceException lastException = null; Iterator iter; // handle case where no resource bundles have been added if (resourceBundles.size() == 0) { throw new MissingResourceException( ERROR_MISSING_RESOURCE, this.getClass().getName(), key); } // try to find the resource in one of the bundles; if it cannot be found, // return the exception thrown by the last bundle in the list for (iter = resourceBundles.iterator(); iter.hasNext();) { ResourceBundle resourceBundle = (ResourceBundle) iter.next(); try { String value = resourceBundle.getString(key); return value; } catch (MissingResourceException e) { lastException = e; } } throw lastException; } }