/** * $Id: EnumConverter.java 2 2008-10-01 10:04:26Z azeckoski $ * $URL: http://reflectutils.googlecode.com/svn/trunk/src/main/java/org/azeckoski/reflectutils/converters/EnumConverter.java $ * EnumConverter.java - genericdao - Sep 11, 2008 5:35:21 PM - azeckoski ************************************************************************** * Copyright (c) 2008 Aaron Zeckoski * Licensed under the Apache License, Version 2.0 * * A copy of the Apache License has been included in this * distribution and is available at: http://www.apache.org/licenses/LICENSE-2.0.txt * * Aaron Zeckoski (azeckoski @ gmail.com) (aaronz @ vt.edu) (aaron @ caret.cam.ac.uk) */ package org.azeckoski.reflectutils.converters; import java.util.List; import org.azeckoski.reflectutils.ClassFields; import org.azeckoski.reflectutils.FieldUtils; import org.azeckoski.reflectutils.converters.api.InterfaceConverter; /** * Handles conversions to enums (this is fairly limited to simply converting strings to enums) * * @author Aaron Zeckoski (azeckoski @ gmail.com) */ @SuppressWarnings("unchecked") public class EnumConverter implements InterfaceConverter<Enum> { public Enum convert(Object value) { // no default so we cannot handle this case throw new IllegalArgumentException("Cannot convert to an enum without having the enum type available"); } protected FieldUtils getFieldUtils() { return FieldUtils.getInstance(); } public Enum convertInterface(Object value, Class<? extends Enum> implementationType) { Enum convert = null; String name = value.toString(); // can only deal with strings // now we try to find the enum field in this enum class ClassFields<Enum> cf = (ClassFields<Enum>) getFieldUtils().analyzeClass(implementationType); List<Enum> enumConstants = cf.getClassData().getEnumConstants(); for (Enum e : enumConstants) { if (e.name().equals(name)) { // found the matching enum convert = e; break; } } if (convert == null) { throw new UnsupportedOperationException("Failure attempting to create enum for name ("+name+") in ("+implementationType+")"); } return convert; } }