Skip to content

Instantly share code, notes, and snippets.

@ghusta
Created March 30, 2016 13:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ghusta/d069ef5f5b5af369267adc81e49b8b7e to your computer and use it in GitHub Desktop.
Save ghusta/d069ef5f5b5af369267adc81e49b8b7e to your computer and use it in GitHub Desktop.
Utils for Enums with Java 5
import java.lang.reflect.Field;
import org.apache.commons.lang.StringUtils;
/**
* Inspiré de {@link com.google.common.base.Enums} et {@link org.apache.commons.lang3.EnumUtils}.
*/
public class EnumUtils
{
/**
* Convertir un String en Enum.
*
* @param <T> the type of the enumeration
* @param enumClass
* @param value
* @return Enum ou null.
*/
public static <T extends Enum<T>> T fromValueNullable(Class<T> enumClass, String value)
{
// Impl. Guava
// if (Strings.isNullOrEmpty(value))
// {
// return null;
// }
// return Enums.getIfPresent(enumClass, value).get();
// Impl. Commons-Lang3
return org.apache.commons.lang3.EnumUtils.getEnum(enumClass, value);
}
/**
* Convertir un String en Enum, en testant sur un champ de l'Enum.
*
* @param <T> the type of the enumeration
* @param enumClass
* @param fieldName
* @param value
* @return Enum ou null.
*/
public static <T extends Enum<T>> T fromValueNullableOnField(Class<T> enumClass, String fieldName, String value)
{
T result = null;
final T[] enumConstants = enumClass.getEnumConstants();
Field fieldSearch;
boolean fieldAccessible;
try
{
fieldSearch = enumClass.getDeclaredField(fieldName);
fieldAccessible = fieldSearch.isAccessible();
if (!fieldAccessible)
{
fieldSearch.setAccessible(true);
}
if (!fieldSearch.getType().isAssignableFrom(String.class))
{
throw new IllegalArgumentException("Type String requis pour la propriété de l'enum.");
}
}
catch (NoSuchFieldException e)
{
throw new IllegalArgumentException(e);
}
if (enumConstants != null)
{
for (T enumConstant : enumConstants)
{
try
{
String readValue = (String) fieldSearch.get(enumConstant);
if (StringUtils.equals(readValue, value))
{
result = enumConstant;
break;
}
}
catch (IllegalAccessException e)
{
throw new IllegalArgumentException(e);
}
}
}
// restauration accessible
fieldSearch.setAccessible(false);
return result;
}
/**
* Valider la valeur d'un Enum.
*
* @param <E> the type of the enumeration
* @param enumClass the class of the enum to query, not null
* @param enumName the enum name, null returns false
* @return true if the enum name is valid, otherwise false
* @see org.apache.commons.lang3.EnumUtils#isValidEnum(Class, String)
*/
public static <E extends Enum<E>> boolean isValidEnum(Class<E> enumClass, String enumName)
{
// Impl. Commons-Lang3
return org.apache.commons.lang3.EnumUtils.isValidEnum(enumClass, enumName);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment