1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
/* * @(#)AccessibleBundle.java 1.22 05/11/17 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package javax.accessibility; import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; /** * <p>Base class used to maintain a strongly typed enumeration. This is * the superclass of {@link AccessibleState} and {@link AccessibleRole}. * <p>The toDisplayString method allows you to obtain the localized string * for a locale independent key from a predefined ResourceBundle for the * keys defined in this class. This localized string is intended to be * readable by humans. * * @see AccessibleRole * @see AccessibleState * * @version 1.12 10/05/99 * @author Willie Walker * @author Peter Korn * @author Lynn Monsanto */ public abstract class AccessibleBundle { private static Hashtable table = new Hashtable(); private final String defaultResourceBundleName = "com.sun.accessibility.internal.resources.accessibility"; public AccessibleBundle() { } /** * The locale independent name of the state. This is a programmatic * name that is not intended to be read by humans. * @see #toDisplayString */ protected String key = null; /** * Obtains the key as a localized string. * If a localized string cannot be found for the key, the * locale independent key stored in the role will be returned. * This method is intended to be used only by subclasses so that they * can specify their own resource bundles which contain localized * strings for their keys. * @param resourceBundleName the name of the resource bundle to use for * lookup * @param locale the locale for which to obtain a localized string * @return a localized String for the key. */ protected String toDisplayString(String resourceBundleName, Locale locale) { // loads the resource bundle if necessary loadResourceBundle(resourceBundleName, locale); // returns the localized string Object o = table.get(locale); if (o != null && o instanceof Hashtable) { Hashtable resourceTable = (Hashtable) o; o = resourceTable.get(key); if (o != null && o instanceof String) { return (String)o; } } return key; } /** * Obtains the key as a localized string. * If a localized string cannot be found for the key, the * locale independent key stored in the role will be returned. * * @param locale the locale for which to obtain a localized string * @return a localized String for the key. */ public String toDisplayString(Locale locale) { return toDisplayString(defaultResourceBundleName, locale); } /** * Gets localized string describing the key using the default locale. * @return a localized String describing the key for the default locale */ public String toDisplayString() { return toDisplayString(Locale.getDefault()); } /** * Gets localized string describing the key using the default locale. * @return a localized String describing the key using the default locale * @see #toDisplayString */ public String toString() { return toDisplayString(); } /* * Loads the Accessibility resource bundle if necessary. */ private void loadResourceBundle(String resourceBundleName, Locale locale) { if (! table.contains(locale)) { try { Hashtable resourceTable = new Hashtable(); ResourceBundle bundle = ResourceBundle.getBundle(resourceBundleName, locale); Enumeration iter = bundle.getKeys(); while(iter.hasMoreElements()) { String key = (String)iter.nextElement(); resourceTable.put(key, bundle.getObject(key)); } table.put(locale, resourceTable); } catch (MissingResourceException e) { System.err.println("loadResourceBundle: " + e); // Just return so toDisplayString() returns the // non-localized key. return; } } } }