package ecologylab.serialization.types.scalar; import java.lang.reflect.Field; import java.util.ArrayList; import ecologylab.serialization.ScalarUnmarshallingContext; import ecologylab.serialization.XMLTools; import ecologylab.serialization.annotations.simpl_collection; import ecologylab.serialization.annotations.simpl_nowrap; public class EnumeratedType extends ReferenceType<Enum> { @simpl_nowrap @simpl_collection("enum_string_constants") ArrayList<String> enumStringConstants = new ArrayList<String>(); String enumTypeSimpleName = ""; public EnumeratedType() { super(Enum.class, null, null, null, null); } public EnumeratedType(Field field) { if (field.getType().isEnum()) { Object[] enumArray = field.getType().getEnumConstants(); for (Object enumObj : enumArray) { if (enumObj instanceof Enum<?>) { Enum<?> enumeratedType = ((Enum<?>) enumObj); enumStringConstants.add(enumeratedType.toString()); } } } enumTypeSimpleName = field.getType().getSimpleName(); } @Override public boolean setField(Object context, Field field, String valueString, String[] format, ScalarUnmarshallingContext scalarUnmarshallingContext) { if (valueString == null) return true; boolean result = false; Enum<?> referenceObject; try { referenceObject = XMLTools.createEnumeratedType(field, valueString); if (referenceObject != null) { field.set(context, referenceObject); result = true; } } catch (Exception e) { setFieldError(field, valueString, e); } return result; } @Override public String getSimpleName() { return enumTypeSimpleName; } public ArrayList<String> getEnumStringConstants() { return enumStringConstants; } @Override public Enum getInstance(String value, String[] formatStrings, ScalarUnmarshallingContext scalarUnmarshallingContext) { // TODO Auto-generated method stub return null; } }