if (availableCountries == null) {
final String EMPTY = "";
final Locale[] available = Locale.getAvailableLocales();
final List<LabelValue> countries = new ArrayList<LabelValue>();
countries.add(new LabelValue("", ""));
for (Locale anAvailable : available) {
final String iso = anAvailable.getCountry();
final String name = anAvailable.getDisplayCountry(locale);
if (!EMPTY.equals(iso) && !EMPTY.equals(name)) {
final LabelValue country = new LabelValue(name, iso);
if (!countries.contains(country)) {
countries.add(new LabelValue(name, iso));
}
}
}
Collections.sort(countries, new LabelValueComparator(locale));
final Map<String, String> options = new LinkedHashMap<String, String>();
// loop through and convert list to a JSF-Friendly Map for a
// <select>
for (Object country : countries) {
final LabelValue option = (LabelValue) country;
if (!options.containsValue(option.getValue())) {
options.put(option.getLabel(), option.getValue());
}
}
this.availableCountries = options;
}