package helpers;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
/**
* @author fo
*/
public class Countries {
public static List<Map<String,String>> list(Locale aLocale) {
List<Map<String,String>> countryList = new ArrayList<>();
// Hard-coded workaround for Kosovo
Map<String, String> kosovo = new HashMap<>();
kosovo.put("name", "Kosovo");
kosovo.put("alpha-2", "XK");
kosovo.put("alpha-3", "UNK");
countryList.add(kosovo);
for (String countryCode : Locale.getISOCountries()) {
Locale country = new Locale("en", countryCode);
Map<String, String> entry = new HashMap<>();
entry.put("name", country.getDisplayCountry(aLocale));
entry.put("alpha-2", country.getCountry());
entry.put("alpha-3", country.getISO3Country());
countryList.add(entry);
}
final Collator collator = Collator.getInstance(aLocale);
Collections.sort(countryList, new Comparator<Map<String, String>>() {
@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
return collator.compare(o1.get("name"), o2.get("name"));
}
});
return countryList;
}
public static List<String> synonyms() {
List<String> countries = new ArrayList<>();
for (String countryCode : Locale.getISOCountries()) {
Locale locale = new Locale("en", countryCode);
Set<String> country = new HashSet<>();
for (String languageCode : Locale.getISOLanguages()) {
country.add(locale.getDisplayCountry(new Locale(languageCode)));
}
countries.add(countryCode.concat(",").concat(String.join(",", country)).toLowerCase());
}
return countries;
}
public static Map<String,String> map(Locale aLocale) {
Map<String,String> countryMap = new HashMap<>();
// Hard-coded workaround for Kosovo
countryMap.put("XK", "Kosovo");
for (String countryCode : Locale.getISOCountries()) {
Locale country = new Locale("en", countryCode);
countryMap.put(country.getCountry(), country.getDisplayCountry(aLocale));
}
return countryMap;
}
public static String propertyString(Locale aLocale) {
String propertyString = "";
for (String countryCode : Locale.getISOCountries()) {
Locale country = new Locale("en", countryCode);
propertyString = propertyString.concat(country.getCountry()).concat("=")
.concat(country.getDisplayCountry(aLocale)).concat("\n");
}
return propertyString;
}
public static String getNameFor(String aCountryCode, Locale aLocale) {
Locale country = new Locale("en", aCountryCode);
return country.getDisplayCountry(aLocale);
}
}