package javango.forms.fields;
import java.lang.annotation.Annotation;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import com.google.inject.Inject;
import javango.forms.fields.annotations.Choice;
import javango.forms.fields.annotations.ChoiceFieldProperties;
import javango.forms.widgets.WidgetFactory;
/**
*
* @author johns
*/
public class SelectField extends AbstractChoiceField<String, String> {
@Inject
public SelectField(WidgetFactory widgetFactory) {
super(widgetFactory);
// TODO Auto-generated constructor stub
}
@Override
public String clean(String value, Map<String, String> errors) {
if (StringUtils.isEmpty(value)) {
if (isRequired()) {
errors.put(getName(), REQUIRED_ERROR);
return null;
} // no need to test for allowNull, select field with an empty value can only return null;
return null;
}
Map<String,String> localChoices = getChoices();
if (localChoices == null) {
errors.put(this.name, NO_CHOICES_ERROR);
} else if (!localChoices.containsKey(value)) {
errors.put(this.name, UNKNOWN_CHOICE_ERROR);
}
return value;
}
@Override
public void handleAnnotation(Annotation annotation) {
if (annotation instanceof ChoiceFieldProperties) {
ChoiceFieldProperties props = (ChoiceFieldProperties)annotation;
if (getChoices() == null) {
setChoices(new LinkedHashMap<String,String>());
}
for(Choice c : props.choices()) {
getChoices().put(c.key(), c.value());
}
}
super.handleAnnotation(annotation);
}
}