package org.springframework.roo.classpath.operations.jsr303;
import static org.springframework.roo.model.JpaJavaType.ENUMERATED;
import static org.springframework.roo.model.JpaJavaType.ENUM_TYPE;
import java.util.ArrayList;
import java.util.List;
import org.springframework.roo.classpath.details.FieldDetails;
import org.springframework.roo.classpath.details.annotations.AnnotationAttributeValue;
import org.springframework.roo.classpath.details.annotations.AnnotationMetadataBuilder;
import org.springframework.roo.classpath.details.annotations.EnumAttributeValue;
import org.springframework.roo.classpath.operations.EnumType;
import org.springframework.roo.model.EnumDetails;
import org.springframework.roo.model.JavaSymbolName;
import org.springframework.roo.model.JavaType;
/**
* This field is intended for use with JSR 220 and will create a @Enumerated
* annotation.
*
* @author Ben Alex
* @since 1.0
*/
public class EnumField extends FieldDetails {
private EnumType enumType;
public EnumField(final String physicalTypeIdentifier, final JavaType fieldType,
final JavaSymbolName fieldName) {
super(physicalTypeIdentifier, fieldType, fieldName);
}
@Override
public void decorateAnnotationsList(final List<AnnotationMetadataBuilder> annotations) {
super.decorateAnnotationsList(annotations);
final List<AnnotationAttributeValue<?>> attributes =
new ArrayList<AnnotationAttributeValue<?>>();
if (enumType != null) {
JavaSymbolName value = new JavaSymbolName("ORDINAL");
if (enumType == EnumType.STRING) {
value = new JavaSymbolName("STRING");
}
attributes.add(new EnumAttributeValue(new JavaSymbolName("value"), new EnumDetails(ENUM_TYPE,
value)));
}
annotations.add(new AnnotationMetadataBuilder(ENUMERATED, attributes));
}
public EnumType getEnumType() {
return enumType;
}
public void setEnumType(final EnumType enumType) {
this.enumType = enumType;
}
}