1 19 24 25 package org.netbeans.modules.j2ee.sun.share.configbean.customizers.webapp; 26 27 import java.util.Comparator ; 28 import java.util.Locale ; 29 import java.util.ResourceBundle ; 30 import java.util.SortedMap ; 31 import java.util.TreeMap ; 32 import java.util.StringTokenizer ; 33 34 import java.text.MessageFormat ; 35 36 45 public class LocaleMapping implements Comparable { 46 47 private static final ResourceBundle webappBundle = ResourceBundle.getBundle( 48 "org.netbeans.modules.j2ee.sun.share.configbean.customizers.webapp.Bundle"); 50 private Locale locale; 51 private String displayText; 52 private boolean textOutOfDate; 53 54 58 public LocaleMapping(final Locale l) { 59 locale = l; 60 displayText = buildDisplayText(); 61 } 62 63 68 public boolean equals(Object o) { 69 boolean result = false; 70 71 if(o instanceof LocaleMapping) { 72 LocaleMapping lm = (LocaleMapping) o; 73 result = locale.equals(lm.getLocale()); 74 } 75 76 return result; 77 } 78 79 83 public int hashCode() { 84 return locale.hashCode(); 85 } 86 87 91 public String toString() { 92 if(textOutOfDate) { 93 displayText = buildDisplayText(); 94 } 95 96 return displayText; 97 } 98 99 103 public Locale getLocale() { 104 return locale; 105 } 106 107 110 public void updateDisplayText() { 111 textOutOfDate = true; 112 } 113 114 private String buildDisplayText() { 115 Object [] args = new Object [] { locale.toString(), locale.getDisplayName() }; 116 String result = MessageFormat.format( 117 webappBundle.getString("LBL_LocaleComboBoxDisplayText"), args); 119 if(result == null || result.length() == 0) { 120 result = webappBundle.getString("LBL_UnnamedLocale"); } 122 123 textOutOfDate = false; 124 125 return result; 126 } 127 128 134 public int compareTo(Object obj) { 135 int result = -1; 136 137 if(obj instanceof LocaleMapping) { 138 LocaleMapping targetMapping = (LocaleMapping) obj; 139 result = locale.toString().compareTo(targetMapping.getLocale().toString()); 140 } 141 142 return result; 143 } 144 145 private static SortedMap sortedLocaleMappings = getSortedAvailableLocaleMappings(); 146 147 152 public static SortedMap getSortedAvailableLocaleMappings() { 153 if(sortedLocaleMappings == null) { 154 Locale [] isoInstalledLocales = Locale.getAvailableLocales(); 155 156 sortedLocaleMappings = new TreeMap (new LocaleComparator()); 157 for(int i = 0; i < isoInstalledLocales.length; i++) { 158 sortedLocaleMappings.put(isoInstalledLocales[i], new LocaleMapping(isoInstalledLocales[i])); 159 } 160 } 161 162 return sortedLocaleMappings; 163 } 164 165 170 public static LocaleMapping getLocaleMapping(Locale l) { 171 return (LocaleMapping) sortedLocaleMappings.get(l); 172 } 173 174 179 public static LocaleMapping getLocaleMapping(String ls) { 180 return (LocaleMapping) sortedLocaleMappings.get(getLocale(ls)); 181 } 182 183 190 public static Locale getLocale(String localeSpec) { 191 Locale result = null; 192 193 if(localeSpec != null) { 194 String [] parts = localeSpec.split("_", 3); 198 if(parts.length >= 1) { String language = parts[0]; 200 if(language == null) { 201 language = ""; } 203 204 if(parts.length >= 2) { String country = parts[1]; 206 if(country == null) { 207 country = ""; } 209 210 if(parts.length >= 3) { String variant = parts[2]; 212 if(variant == null) { 213 variant = ""; } 215 result = new Locale (language, country, variant); 217 } else { 218 result = new Locale (language, country); 220 } 221 } else { 222 result = new Locale (language); 224 } 225 } 226 } 227 228 return result; 229 } 230 231 234 public static class LocaleComparator implements Comparator { 235 243 public int compare(Object o1, Object o2) { 244 int result = -1; 245 246 if(o1 instanceof Locale && o2 instanceof Locale ) { 247 Locale l1 = (Locale ) o1; 248 Locale l2 = (Locale ) o2; 249 250 result = l1.toString().compareTo(l2.toString()); 251 } 252 253 return result; 254 } 255 } 256 } 257 | Popular Tags |