package org.sql2o.converters; /** * Default implementation of {@link EnumConverterFactory}, * used by sql2o to convert a value from the database into an {@link Enum}. */ public class DefaultEnumConverterFactory implements EnumConverterFactory { public <E extends Enum> Converter<E> newConverter(final Class<E> enumType) { return new Converter<E>() { @SuppressWarnings("unchecked") public E convert(Object val) throws ConverterException { if (val == null) { return null; } try { if (val instanceof String){ return (E)Enum.valueOf(enumType, val.toString()); } else if (val instanceof Number){ return enumType.getEnumConstants()[((Number)val).intValue()]; } } catch (Throwable t) { throw new ConverterException("Error converting value '" + val.toString() + "' to " + enumType.getName(), t); } throw new ConverterException("Cannot convert type '" + val.getClass().getName() + "' to an Enum"); } public Object toDatabaseParam(Enum val) { return val.name(); } }; } }