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 sun.util.resources; 42 43 import java.util.Map; 44 import java.util.LinkedHashMap; 45 46 /** 47 * Subclass of <code>ResourceBundle</code> with special 48 * functionality for time zone names. The additional functionality: 49 * <ul> 50 * <li>Preserves the order of entries in the <code>getContents</code> 51 * array for the enumeration returned by <code>getKeys</code>. 52 * <li>Inserts the time zone ID (the key of the bundle entries) into 53 * the string arrays returned by <code>handleGetObject</code>. 54 * <ul> 55 * All <code>TimeZoneNames</code> resource bundles must extend this 56 * class and implement the <code>getContents</code> method. 57 */ 58 public abstract class TimeZoneNamesBundle extends OpenListResourceBundle { 59 60 /** 61 * Maps time zone IDs to locale-specific names. 62 * The value returned is an array of five strings: 63 * <ul> 64 * <li>The time zone ID (same as the key, not localized). 65 * <li>The long name of the time zone in standard time (localized). 66 * <li>The short name of the time zone in standard time (localized). 67 * <li>The long name of the time zone in daylight savings time (localized). 68 * <li>The short name of the time zone in daylight savings time (localized). 69 * </ul> 70 * The localized names come from the subclasses's 71 * <code>getContents</code> implementations, while the time zone 72 * ID is inserted into the returned array by this method. 73 */ 74 public Object handleGetObject(String key) { 75 String[] contents = (String[]) super.handleGetObject(key); 76 if (contents == null) { 77 return null; 78 } 79 80 int clen = contents.length; 81 String[] tmpobj = new String[clen+1]; 82 tmpobj[0] = key; 83 System.arraycopy(contents, 0, tmpobj, 1, clen); 84 return tmpobj; 85 } 86 87 /** 88 * Use LinkedHashMap to preserve order of bundle entries. 89 */ 90 @Override 91 protected Map<String, Object> createMap(int size) { 92 return new LinkedHashMap<>(size); 93 } 94 95 /** 96 * Provides key/value mappings for a specific 97 * resource bundle. Each entry of the array 98 * returned must be an array with two elements: 99 * <ul> 100 * <li>The key, which must be a string. 101 * <li>The value, which must be an array of 102 * four strings: 103 * <ul> 104 * <li>The long name of the time zone in standard time. 105 * <li>The short name of the time zone in standard time. 106 * <li>The long name of the time zone in daylight savings time. 107 * <li>The short name of the time zone in daylight savings time. 108 * </ul> 109 * </ul> 110 */ 111 protected abstract Object[][] getContents(); 112 } | 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 sun.util.resources; 42 43 import java.util.Map; 44 import java.util.LinkedHashMap; 45 import java.util.LinkedHashSet; 46 import java.util.MissingResourceException; 47 import java.util.Set; 48 49 /** 50 * Subclass of <code>ResourceBundle</code> with special 51 * functionality for time zone names. The additional functionality: 52 * <ul> 53 * <li>Preserves the order of entries in the <code>getContents</code> 54 * array for the enumeration returned by <code>getKeys</code>. 55 * <li>Inserts the time zone ID (the key of the bundle entries) into 56 * the string arrays returned by <code>handleGetObject</code>. 57 * <ul> 58 * All <code>TimeZoneNames</code> resource bundles must extend this 59 * class and implement the <code>getContents</code> method. 60 */ 61 public abstract class TimeZoneNamesBundle extends OpenListResourceBundle { 62 63 /** 64 * Returns a String array containing time zone names. The String array has 65 * at most size elements. 66 * 67 * @param key the time zone ID for which names are obtained 68 * @param size the requested size of array for names 69 * @return a String array containing names 70 */ 71 public String[] getStringArray(String key, int size) { 72 String[] names = handleGetObject(key, size); 73 if ((names == null || names.length != size) && parent != null) { 74 names = ((TimeZoneNamesBundle)parent).getStringArray(key, size); 75 } 76 if (names == null) { 77 throw new MissingResourceException("no time zone names", getClass().getName(), key); 78 } 79 return names; 80 81 } 82 83 /** 84 * Maps time zone IDs to locale-specific names. 85 * The value returned is an array of five strings: 86 * <ul> 87 * <li>The time zone ID (same as the key, not localized). 88 * <li>The long name of the time zone in standard time (localized). 89 * <li>The short name of the time zone in standard time (localized). 90 * <li>The long name of the time zone in daylight savings time (localized). 91 * <li>The short name of the time zone in daylight savings time (localized). 92 * </ul> 93 * The localized names come from the subclasses's 94 * <code>getContents</code> implementations, while the time zone 95 * ID is inserted into the returned array by this method. 96 */ 97 @Override 98 public Object handleGetObject(String key) { 99 return handleGetObject(key, 5); 100 } 101 102 private String[] handleGetObject(String key, int n) { 103 String[] contents = (String[]) super.handleGetObject(key); 104 if (contents == null) { 105 return null; 106 } 107 int clen = Math.min(n, contents.length); 108 String[] tmpobj = new String[clen+1]; 109 tmpobj[0] = key; 110 System.arraycopy(contents, 0, tmpobj, 1, clen); 111 return tmpobj; 112 } 113 114 /** 115 * Use LinkedHashMap to preserve the order of bundle entries. 116 */ 117 @Override 118 protected <K, V> Map<K, V> createMap(int size) { 119 return new LinkedHashMap<>(size); 120 } 121 122 /** 123 * Use LinkedHashSet to preserve the key order. 124 * @param <E> the type of elements 125 * @return a Set 126 */ 127 @Override 128 protected <E> Set<E> createSet() { 129 return new LinkedHashSet<>(); 130 } 131 132 /** 133 * Provides key/value mappings for a specific 134 * resource bundle. Each entry of the array 135 * returned must be an array with two elements: 136 * <ul> 137 * <li>The key, which must be a string. 138 * <li>The value, which must be an array of 139 * four strings: 140 * <ul> 141 * <li>The long name of the time zone in standard time. 142 * <li>The short name of the time zone in standard time. 143 * <li>The long name of the time zone in daylight savings time. 144 * <li>The short name of the time zone in daylight savings time. 145 * </ul> 146 * </ul> 147 */ 148 protected abstract Object[][] getContents(); 149 } |