1 package net.sf.openrocket.util.enums;
3 import java.util.EnumMap;
4 import java.util.HashMap;
7 import net.sf.openrocket.util.BugException;
9 public class EnumName<E extends Enum<E>> {
11 public static final EnumConversion NAME = new EnumConversion() {
13 public String convert(Enum<?> e) {
19 private final Class<E> type;
20 private final Map<E, String> map;
21 private final Map<String, E> reverse;
23 public EnumName(Class<E> type) {
27 public EnumName(Class<E> type, EnumConversion conversion) {
29 map = new EnumMap<E, String>(type);
30 reverse = new HashMap<String, E>();
32 E[] keys = type.getEnumConstants();
34 throw new IllegalArgumentException("Type " + type + " is not of enum type");
37 String value = conversion.convert(key);
38 if (reverse.containsKey(value)) {
39 throw new BugException("Two enum constants were converted to have the name value: " + reverse.get(value)
40 + " and " + key + " both convert to '" + value + "'");
43 reverse.put(value, key);
50 public String getName(E key) {
51 String name = map.get(key);
53 throw new IllegalArgumentException("No name found for enum " + key + " from map of type " + type);
58 public E getEnum(String name) {
59 return reverse.get(name);