blob: 60e83bd1ba3521966f12a1db6e08f671341dd310 [file] [log] [blame]
package org.unicode.cldr.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
public class EnumNames<T extends Enum<?>> {
private Map<String, T> namesToEnum = new HashMap<String, T>();
private ArrayList<String> enumToPreferredName = new ArrayList<String>();
public void add(T enumItem, String... alternateNames) {
final String name = enumItem.name();
namesToEnum.put(name, enumItem);
namesToEnum.put(name.toLowerCase(Locale.ENGLISH), enumItem);
// add() is safe, because we are guaranteed that they are added in order.
if (alternateNames.length == 0) {
enumToPreferredName.add(name);
} else {
enumToPreferredName.add(alternateNames[0]);
for (String other : alternateNames) {
namesToEnum.put(other, enumItem);
namesToEnum.put(other.toLowerCase(Locale.ENGLISH), enumItem);
}
}
}
public T forString(String name) {
T result = namesToEnum.get(name);
if (result != null) {
return result;
}
result = namesToEnum.get(name.toLowerCase(Locale.ENGLISH));
if (result != null) {
return result;
}
throw new IllegalArgumentException("No enum value for " + name + ", should be one of " + namesToEnum.keySet());
}
public String toString(T item) {
return enumToPreferredName.get(item.ordinal());
}
}