Source for java.util.ListResourceBundle

   1: /* ListResourceBundle -- a resource bundle build around a list
   2:    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
   3: 
   4: This file is part of GNU Classpath.
   5: 
   6: GNU Classpath is free software; you can redistribute it and/or modify
   7: it under the terms of the GNU General Public License as published by
   8: the Free Software Foundation; either version 2, or (at your option)
   9: any later version.
  10: 
  11: GNU Classpath is distributed in the hope that it will be useful, but
  12: WITHOUT ANY WARRANTY; without even the implied warranty of
  13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14: General Public License for more details.
  15: 
  16: You should have received a copy of the GNU General Public License
  17: along with GNU Classpath; see the file COPYING.  If not, write to the
  18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  19: 02110-1301 USA.
  20: 
  21: Linking this library statically or dynamically with other modules is
  22: making a combined work based on this library.  Thus, the terms and
  23: conditions of the GNU General Public License cover the whole
  24: combination.
  25: 
  26: As a special exception, the copyright holders of this library give you
  27: permission to link this library with independent modules to produce an
  28: executable, regardless of the license terms of these independent
  29: modules, and to copy and distribute the resulting executable under
  30: terms of your choice, provided that you also meet, for each linked
  31: independent module, the terms and conditions of the license of that
  32: module.  An independent module is a module which is not derived from
  33: or based on this library.  If you modify this library, you may extend
  34: this exception to your version of the library, but you are not
  35: obligated to do so.  If you do not wish to do so, delete this
  36: exception statement from your version. */
  37: 
  38: 
  39: package java.util;
  40: 
  41: /**
  42:  * A <code>ListResouceBundle</code> provides an easy way, to create your own
  43:  * resource bundle. It is an abstract class that you can subclass. You should
  44:  * then overwrite the getContents method, that provides a key/value list.
  45:  *
  46:  * <p>The key/value list is a two dimensional list of Object.  The first
  47:  * dimension ranges over the resources. The second dimension ranges from
  48:  * zero (key) to one (value). The keys must be of type String, and they are
  49:  * case-sensitive. For example:
  50:  *
  51: <br><pre>public class MyResources
  52:   extends ListResourceBundle
  53: {
  54:   public Object[][] getContents()
  55:   {
  56:     return contents;
  57:   }
  58: 
  59:   static final Object[][] contents =
  60:   {
  61:     // LOCALIZED STRINGS
  62:     {"s1", "The disk \"{1}\" contains {0}."},  // MessageFormat pattern
  63:     {"s2", "1"},                       // location of {0} in pattern
  64:     {"s3", "My Disk"},                 // sample disk name
  65:     {"s4", "no files"},                // first ChoiceFormat choice
  66:     {"s5", "one file"},                // second ChoiceFormat choice
  67:     {"s6", "{0,number} files"}         // third ChoiceFormat choice
  68:     {"s7", "3 Mar 96"},                // sample date
  69:     {"s8", new Dimension(1,5)}         // real object, not just string
  70:     // END OF LOCALIZED MATERIAL
  71:   };
  72: }</pre>
  73:  *
  74:  * @author Jochen Hoenicke
  75:  * @author Eric Blake (ebb9@email.byu.edu)
  76:  * @see Locale
  77:  * @see PropertyResourceBundle
  78:  * @since 1.1
  79:  * @status updated to 1.4
  80:  */
  81: public abstract class ListResourceBundle extends ResourceBundle
  82: {
  83:   /**
  84:    * The constructor. It does nothing special.
  85:    */
  86:   public ListResourceBundle()
  87:   {
  88:   }
  89: 
  90:   /**
  91:    * Gets a resource for a given key. This is called by <code>getObject</code>.
  92:    *
  93:    * @param key the key of the resource
  94:    * @return the resource for the key, or null if it doesn't exist
  95:    */
  96:   public final Object handleGetObject(String key)
  97:   {
  98:     Object[][] contents = getContents();
  99:     int i = contents.length;
 100:     while (--i >= 0)
 101:       if (key.equals(contents[i][0]))
 102:         return contents[i][1];
 103:     return null;
 104:   }
 105: 
 106:   /**
 107:    * This method should return all keys for which a resource exists.
 108:    *
 109:    * @return an enumeration of the keys
 110:    */
 111:   public Enumeration<String> getKeys()
 112:   {
 113:     // We make a new Set that holds all the keys, then return an enumeration
 114:     // for that. This prevents modifications from ruining the enumeration,
 115:     // as well as ignoring duplicates.
 116:     final Object[][] contents = getContents();
 117:     Set<String> s = new HashSet<String>();
 118:     int i = contents.length;
 119:     while (--i >= 0)
 120:       s.add((String) contents[i][0]);
 121:     ResourceBundle bundle = parent;
 122:     // Eliminate tail recursion.
 123:     while (bundle != null)
 124:       {
 125:         Enumeration<String> e = bundle.getKeys();
 126:         while (e.hasMoreElements())
 127:           s.add(e.nextElement());
 128:         bundle = bundle.parent;
 129:       }
 130:     return Collections.enumeration(s);
 131:   }
 132: 
 133:   /**
 134:    * Gets the key/value list. You must override this method, and should not
 135:    * provide duplicate keys or null entries.
 136:    *
 137:    * @return a two dimensional list of String key / Object resouce pairs
 138:    */
 139:   protected abstract Object[][] getContents();
 140: } // class ListResourceBundle