Home » openjdk-7 » java » util » [javadoc | source]

    1   /*
    2    * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
    3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    4    *
    5    * This code is free software; you can redistribute it and/or modify it
    6    * under the terms of the GNU General Public License version 2 only, as
    7    * published by the Free Software Foundation.  Oracle designates this
    8    * particular file as subject to the "Classpath" exception as provided
    9    * by Oracle in the LICENSE file that accompanied this code.
   10    *
   11    * This code is distributed in the hope that it will be useful, but WITHOUT
   12    * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   13    * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   14    * version 2 for more details (a copy is included in the LICENSE file that
   15    * accompanied this code).
   16    *
   17    * You should have received a copy of the GNU General Public License version
   18    * 2 along with this work; if not, write to the Free Software Foundation,
   19    * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   20    *
   21    * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   22    * or visit www.oracle.com if you need additional information or have any
   23    * questions.
   24    */
   25   
   26   /*
   27    * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
   28    * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
   29    *
   30    * The original version of this source code and documentation
   31    * is copyrighted and owned by Taligent, Inc., a wholly-owned
   32    * subsidiary of IBM. These materials are provided under terms
   33    * of a License Agreement between Taligent and Sun. This technology
   34    * is protected by multiple US and International patents.
   35    *
   36    * This notice and attribution to Taligent may not be removed.
   37    * Taligent is a registered trademark of Taligent, Inc.
   38    *
   39    */
   40   
   41   package java.util;
   42   
   43   import sun.util.ResourceBundleEnumeration;
   44   
   45   /**
   46    * <code>ListResourceBundle</code> is an abstract subclass of
   47    * <code>ResourceBundle</code> that manages resources for a locale
   48    * in a convenient and easy to use list. See <code>ResourceBundle</code> for
   49    * more information about resource bundles in general.
   50    *
   51    * <P>
   52    * Subclasses must override <code>getContents</code> and provide an array,
   53    * where each item in the array is a pair of objects.
   54    * The first element of each pair is the key, which must be a
   55    * <code>String</code>, and the second element is the value associated with
   56    * that key.
   57    *
   58    * <p>
   59    * The following <a name="sample">example</a> shows two members of a resource
   60    * bundle family with the base name "MyResources".
   61    * "MyResources" is the default member of the bundle family, and
   62    * "MyResources_fr" is the French member.
   63    * These members are based on <code>ListResourceBundle</code>
   64    * (a related <a href="PropertyResourceBundle.html#sample">example</a> shows
   65    * how you can add a bundle to this family that's based on a properties file).
   66    * The keys in this example are of the form "s1" etc. The actual
   67    * keys are entirely up to your choice, so long as they are the same as
   68    * the keys you use in your program to retrieve the objects from the bundle.
   69    * Keys are case-sensitive.
   70    * <blockquote>
   71    * <pre>
   72    *
   73    * public class MyResources extends ListResourceBundle {
   74    *     protected Object[][] getContents() {
   75    *         return new Object[][] {
   76    *         // LOCALIZE THIS
   77    *             {"s1", "The disk \"{1}\" contains {0}."},  // MessageFormat pattern
   78    *             {"s2", "1"},                               // location of {0} in pattern
   79    *             {"s3", "My Disk"},                         // sample disk name
   80    *             {"s4", "no files"},                        // first ChoiceFormat choice
   81    *             {"s5", "one file"},                        // second ChoiceFormat choice
   82    *             {"s6", "{0,number} files"},                // third ChoiceFormat choice
   83    *             {"s7", "3 Mar 96"},                        // sample date
   84    *             {"s8", new Dimension(1,5)}                 // real object, not just string
   85    *         // END OF MATERIAL TO LOCALIZE
   86    *         };
   87    *     }
   88    * }
   89    *
   90    * public class MyResources_fr extends ListResourceBundle {
   91    *     protected Object[][] getContents() {
   92    *         return new Object[][] = {
   93    *         // LOCALIZE THIS
   94    *             {"s1", "Le disque \"{1}\" {0}."},          // MessageFormat pattern
   95    *             {"s2", "1"},                               // location of {0} in pattern
   96    *             {"s3", "Mon disque"},                      // sample disk name
   97    *             {"s4", "ne contient pas de fichiers"},     // first ChoiceFormat choice
   98    *             {"s5", "contient un fichier"},             // second ChoiceFormat choice
   99    *             {"s6", "contient {0,number} fichiers"},    // third ChoiceFormat choice
  100    *             {"s7", "3 mars 1996"},                     // sample date
  101    *             {"s8", new Dimension(1,3)}                 // real object, not just string
  102    *         // END OF MATERIAL TO LOCALIZE
  103    *         };
  104    *     }
  105    * }
  106    * </pre>
  107    * </blockquote>
  108    * @see ResourceBundle
  109    * @see PropertyResourceBundle
  110    * @since JDK1.1
  111    */
  112   public abstract class ListResourceBundle extends ResourceBundle {
  113       /**
  114        * Sole constructor.  (For invocation by subclass constructors, typically
  115        * implicit.)
  116        */
  117       public ListResourceBundle() {
  118       }
  119   
  120       // Implements java.util.ResourceBundle.handleGetObject; inherits javadoc specification.
  121       public final Object handleGetObject(String key) {
  122           // lazily load the lookup hashtable.
  123           if (lookup == null) {
  124               loadLookup();
  125           }
  126           if (key == null) {
  127               throw new NullPointerException();
  128           }
  129           return lookup.get(key); // this class ignores locales
  130       }
  131   
  132       /**
  133        * Returns an <code>Enumeration</code> of the keys contained in
  134        * this <code>ResourceBundle</code> and its parent bundles.
  135        *
  136        * @return an <code>Enumeration</code> of the keys contained in
  137        *         this <code>ResourceBundle</code> and its parent bundles.
  138        * @see #keySet()
  139        */
  140       public Enumeration<String> getKeys() {
  141           // lazily load the lookup hashtable.
  142           if (lookup == null) {
  143               loadLookup();
  144           }
  145   
  146           ResourceBundle parent = this.parent;
  147           return new ResourceBundleEnumeration(lookup.keySet(),
  148                   (parent != null) ? parent.getKeys() : null);
  149       }
  150   
  151       /**
  152        * Returns a <code>Set</code> of the keys contained
  153        * <em>only</em> in this <code>ResourceBundle</code>.
  154        *
  155        * @return a <code>Set</code> of the keys contained only in this
  156        *         <code>ResourceBundle</code>
  157        * @since 1.6
  158        * @see #keySet()
  159        */
  160       protected Set<String> handleKeySet() {
  161           if (lookup == null) {
  162               loadLookup();
  163           }
  164           return lookup.keySet();
  165       }
  166   
  167       /**
  168        * Returns an array in which each item is a pair of objects in an
  169        * <code>Object</code> array. The first element of each pair is
  170        * the key, which must be a <code>String</code>, and the second
  171        * element is the value associated with that key.  See the class
  172        * description for details.
  173        *
  174        * @return an array of an <code>Object</code> array representing a
  175        * key-value pair.
  176        */
  177       abstract protected Object[][] getContents();
  178   
  179       // ==================privates====================
  180   
  181       /**
  182        * We lazily load the lookup hashtable.  This function does the
  183        * loading.
  184        */
  185       private synchronized void loadLookup() {
  186           if (lookup != null)
  187               return;
  188   
  189           Object[][] contents = getContents();
  190           HashMap<String,Object> temp = new HashMap<>(contents.length);
  191           for (int i = 0; i < contents.length; ++i) {
  192               // key must be non-null String, value must be non-null
  193               String key = (String) contents[i][0];
  194               Object value = contents[i][1];
  195               if (key == null || value == null) {
  196                   throw new NullPointerException();
  197               }
  198               temp.put(key, value);
  199           }
  200           lookup = temp;
  201       }
  202   
  203       private Map<String,Object> lookup = null;
  204   }

Home » openjdk-7 » java » util » [javadoc | source]