package org.ovirt.engine.core.compat; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class EnumCompat { /** * Returns the Enum instances as an Arraylist */ public static <T extends Enum> ArrayList<T> GetValues(Class<T> clazz) { ArrayList<String> returnValues = new ArrayList<String>(); if (!clazz.isEnum()) { throw new CompatException("Class is not an Enum: " + clazz.getName()); } return new ArrayList(Arrays.asList(clazz.getEnumConstants())); } /** * Returns the Enum names as an Arraylist */ public static <T extends Enum> String[] GetNames(Class<T> clazz) { ArrayList<String> returnValues = new ArrayList<String>(); if (!clazz.isEnum()) { throw new CompatException("Class is not an Enum: " + clazz.getName()); } for (Enum e : clazz.getEnumConstants()) { returnValues.add(e.name()); } return returnValues.toArray(new String[0]); } /** * Returns the name of an enum based on its ordinal value */ public static String GetName(Class enumerationType, int val) { Enum enumObject; try { Method forValue = enumerationType.getMethod("forValue", int.class); enumObject = (Enum) forValue.invoke(null, val); } catch (Exception ex) { throw new RuntimeException(ex); } return enumObject.name(); // return ((Enum)enumerationType)..getEnumConstants()[val].toString(); } /** * Returns the ordinal values of the enum */ public static <T extends Enum> int[] GetIntValues(Class<T> enumerationType) { List<T> enums = GetValues(enumerationType); int size = enums.size(); int[] returnValue = new int[size]; try { Method getValue = enumerationType.getMethod("getValue"); for (int x = 0; x < size; x++) { // returnValue[x] = enums.get(x).ordinal(); int enumValue = (Integer) getValue.invoke(enums.get(x)); returnValue[x] = enumValue; } } catch (Exception ex) { throw new RuntimeException(ex); } return returnValue; } /** * Checks whether the enum name is defined */ public static <T extends Enum> boolean IsDefined(Class<T> clazz, String name) { return Arrays.asList(EnumCompat.GetNames(clazz)).contains(name); } }