package org.stagemonitor.configuration.converter; /** * Converts an {@link Enum} to a {@link String} and back */ public class EnumValueConverter<T extends Enum<T>> implements ValueConverter<T> { private final Class<T> enumClass; public EnumValueConverter(Class<T> enumClass) { this.enumClass = enumClass; } /** * Converts a String into an Enum. * * @param name The Enum's name. May be in the form THE_ENUM, the_enum or the-enum. * @return The Enum * @throws IllegalArgumentException if there is no such Enum constant */ @Override public T convert(String name) throws IllegalArgumentException { if (name == null) { throw new IllegalArgumentException("Cant convert 'null' to " + enumClass.getSimpleName()); } try { return Enum.valueOf(enumClass, name); } catch (IllegalArgumentException e) { // ignore } try { return Enum.valueOf(enumClass, name.toUpperCase()); } catch (IllegalArgumentException e) { // ignore } try { return Enum.valueOf(enumClass, name.toUpperCase().replace("-", "_")); } catch (IllegalArgumentException e) { // ignore } throw new IllegalArgumentException("Can't convert " + name + " to " + enumClass.getSimpleName()); } @Override public String toString(T value) { if (value == null) { return null; } return value.name(); } }