package ilarkesto.form; import ilarkesto.base.Str; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; import org.apache.commons.fileupload.FileItem; public class DropdownFormField<E> extends AFormField { private E value; private SortedMap<String, E> selectableItems; private boolean localizeItems; public DropdownFormField(String name) { super(name); } public DropdownFormField<E> setLocalizeItems(boolean localizeItems) { this.localizeItems = localizeItems; return this; } public boolean isLocalizeItems() { return localizeItems; } public DropdownFormField<E> setSelectableItems(Collection<E> items) { List<E> itemList = (List<E>) (items instanceof List ? items : new ArrayList<E>(items)); if (!itemList.isEmpty() && itemList.get(0) instanceof Comparable) Collections.sort((List) itemList); this.selectableItems = new TreeMap<String, E>(); int i = 0; for (E item : itemList) { String key = Str.fillUpLeft(String.valueOf(i++), "0", 4); selectableItems.put(key, item); } return this; } public Map<String, E> getSelectableItems() { return selectableItems; } public DropdownFormField<E> setValue(E value) { this.value = value; return this; } public E getValue() { return value; } public String getValueAsString() { return value == null ? null : value.toString(); } public void update(Map<String, String> data, Collection<FileItem> uploadedFiles) { value = selectableItems.get(data.get(getName())); } public void validate() throws ValidationException { if (value == null && isRequired()) throw new ValidationException("Eingabe erforderlich."); } }