Converting/Parsing an Enumeration to a String More Generically
private interface EnumerationToStringHelper
{
List<Object> ProvideEnumerationValues();
Boolean CompareEnumerationToString(String possibleEnumeration, Object enumerationValue);
}
private class ExampleEnumToStringHelper implements EnumerationToStringHelperExampleEnum
{
public List<Object> ProvideEnumerationValues(){ return (List<Object>)ExampleEnum.values(); }
public Boolean CompareEnumerationToString(String possibleEnumeration, Object enumerationValue)
{
return ((ExampleEnum)enumerationValue).name().equalsIgnoreCase(possibleEnumeration);
}
}
private static Map<Type, EnumerationToStringHelper> TypeToEnumerationMap;
private static void PopulateTypeToEnumerationMap()
{
TypeToEnumerationMap = new Map<Type, EnumerationToStringHelper>
{
Type.forName('ExampleEnum') => new ExampleEnumToStringHelper()
};
}
public static Object ConvertStringToEnumeration(Type enumerationType, String possibleEnumeration)
{
if(possibleEnumeration == null) return null;
if(TypeToEnumerationMap == null)
PopulateTypeToEnumerationMap();
EnumerationToStringHelper conversionAction = TypeToEnumerationMap.get(enumerationType);
if(conversionAction == null)
throw new EnumerationToStringException('The Type you enter is either a) not an enumeration or b) not a supported enumeration.');
for(Object particalarEnumValue : conversionAction.ProvideEnumerationValues())
if(conversionAction.CompareEnumerationToString(possibleEnumeration, particalarEnumValue))
return particalarEnumValue;
return null;
}
public class EnumerationToStringException extends Exception { }