package br.com.caelum.stella.gateway.core; import net.vidageek.mirror.Mirror; /** * * * @author Alberto Pc * @param <T> * tipo do retorno */ public class EnumComCodigoFinder { /** * Retorna a Enum baseada no codigo passado como parametro. A mesma deve * implementar a Interface DefinedByCode * * @param enumClass * @param codigo * que serve de base para a busca * @return Enum descoberta */ @SuppressWarnings("unchecked") public <T extends DefinedByCode> T descobreAEnumPeloCodigo( Class<T> enumClass, String codigo) { if (!enumClass.isEnum()) { throw new IllegalArgumentException("O tipo " + enumClass + ", deveria ser uma Enum"); } DefinedByCode[] definedByCodes = (DefinedByCode[]) Mirror.on(enumClass) .invoke().method("values").withoutArgs(); for (DefinedByCode definedByCode : definedByCodes) { if (definedByCode.getCodigo().equals(codigo)) { return (T) definedByCode; } } throw new IntegrationFailedException( "O parametro codigo não foi encontrado(" + codigo + ")"); } }