EnumConverter.java
package org.cyclopsgroup.caff.conversion;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
import org.cyclopsgroup.caff.NormalizedValue;
/**
* Converter that converts enum.
*
* @param <T> Type of enum to convert from/to.
*/
public class EnumConverter<T extends Enum<T>> implements Converter<T> {
private final Map<String, T> stringToValue;
private final Map<T, String> valueToString;
/**
* @param enumType Type of enum to convert
*/
public EnumConverter(Class<T> enumType) {
boolean normalized = NormalizedValue.class.isAssignableFrom(enumType);
Map<String, T> stringValues = new HashMap<String, T>();
Map<T, String> valueStrings = new HashMap<T, String>();
for (T e : EnumSet.allOf(enumType)) {
String key = normalized ? ((NormalizedValue<?>) e).getIdentifier().toString() : e.name();
stringValues.put(key, e);
valueStrings.put(e, key);
}
stringToValue = Collections.unmodifiableMap(stringValues);
valueToString = Collections.unmodifiableMap(valueStrings);
}
@Override
public T fromCharacters(CharSequence text) {
T result = stringToValue.get(text.toString());
if (result == null) {
throw new ConversionFailedException("Value " + text + " is unknown");
}
return result;
}
@Override
public CharSequence toCharacters(T value) {
return valueToString.get(value);
}
}