1 /* 2 * Copyright (c) 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 package build.tools.cldrconverter; 27 28 class StringArrayEntry extends Entry<String[]> { 29 private String[] value; 30 31 StringArrayEntry(String qName, Container parent, String key, int length) { 32 super(qName, parent, key); 33 value = new String[length]; 34 } 35 36 void addCharacters(int index, char[] characters, int start, int length) { 37 if (value[index] != null) { 38 StringBuilder sb = new StringBuilder(value[index]); 39 sb.append(characters, start, length); 40 value[index] = sb.toString(); 41 } else { 42 value[index] = new String(characters, start, length); 43 } 44 } 45 46 @Override 47 String[] getValue() { 48 // This method patches up a few oddities: 49 // - Since am/pm strings are nested directly under the calendar element, 50 // am/pm arrays may be created for which there was no real data. 51 // This test avoids returning empty arrays. 52 // - On the other hand, for month names it's OK to not have month 13, 53 // but this should be indicated by an empty string for compatibility 54 // with JRE resource bundles. 55 // - Finally, CLDR doesn't really have string arrays; each string is 56 // supposed to be inherited separately. Although value is the partially filled array, 57 // we will return it so that it can be reconstructed later in the method, 58 // ConvertLocaleData.convertBundles() 59 // The CLDR's iheritance system is different from JRE's. CLDR can inherit 60 // by the element level in the array. 61 if (getKey().startsWith("Month") && value[0] != null && value[12] == null) { 62 value[12] = ""; 63 } 64 for (String element : value) { 65 if (element != null) { 66 return value; 67 } 68 } 69 return null; 70 } 71 72 }