Created
March 30, 2016 13:34
-
-
Save ghusta/d069ef5f5b5af369267adc81e49b8b7e to your computer and use it in GitHub Desktop.
Utils for Enums with Java 5
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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