1 /* 2 * Copyright (c) 2005, 2012, 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 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.Objects; 48 import java.util.Set; 49 50 /** 51 * Subclass of <code>ResourceBundle</code> with special 52 * functionality for time zone names. The additional functionality: 53 * <ul> 54 * <li>Preserves the order of entries in the <code>getContents</code> 55 * array for the enumeration returned by <code>getKeys</code>. 56 * <li>Inserts the time zone ID (the key of the bundle entries) into 57 * the string arrays returned by <code>handleGetObject</code>. 58 * </ul> 59 * All <code>TimeZoneNames</code> resource bundles must extend this 60 * class and implement the <code>getContents</code> method. 61 */ 62 public abstract class TimeZoneNamesBundle extends OpenListResourceBundle { 63 64 /** 65 * Maps time zone IDs to locale-specific names. 66 * The value returned is an array of five strings: 67 * <ul> 68 * <li>The time zone ID (same as the key, not localized). 69 * <li>The long name of the time zone in standard time (localized). 70 * <li>The short name of the time zone in standard time (localized). 71 * <li>The long name of the time zone in daylight savings time (localized). 72 * <li>The short name of the time zone in daylight savings time (localized). 73 * <li>The long name of the time zone in generic form (localized). 74 * <li>The short name of the time zone in generic form (localized). 75 * </ul> 76 * The localized names come from the subclasses's 77 * <code>getContents</code> implementations, while the time zone 78 * ID is inserted into the returned array by this method. 79 */ 80 @Override 81 public Object handleGetObject(String key) { 82 String[] contents = (String[]) super.handleGetObject(key); 83 if (Objects.isNull(contents)) { 84 return null; 85 } 86 int clen = contents.length; 87 String[] tmpobj = new String[7]; 88 tmpobj[0] = key; 89 System.arraycopy(contents, 0, tmpobj, 1, clen); 90 return tmpobj; 91 } 92 93 /** 94 * Use LinkedHashMap to preserve the order of bundle entries. 95 */ 96 @Override 97 protected <K, V> Map<K, V> createMap(int size) { 98 return new LinkedHashMap<>(size); 99 } 100 101 /** 102 * Use LinkedHashSet to preserve the key order. 103 * @param <E> the type of elements 104 * @return a Set 105 */ 106 @Override 107 protected <E> Set<E> createSet() { 108 return new LinkedHashSet<>(); 109 } 110 111 /** 112 * Provides key/value mappings for a specific 113 * resource bundle. Each entry of the array 114 * returned must be an array with two elements: 115 * <ul> 116 * <li>The key, which must be a string. 117 * <li>The value, which must be an array of 118 * four strings: 119 * <ul> 120 * <li>The long name of the time zone in standard time. 121 * <li>The short name of the time zone in standard time. 122 * <li>The long name of the time zone in daylight savings time. 123 * <li>The short name of the time zone in daylight savings time. 124 * </ul> 125 * </ul> 126 */ 127 protected abstract Object[][] getContents(); 128 }