package ilarkesto.form; import ilarkesto.base.StringProvider; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.fileupload.FileItem; public class MultiCheckboxFormField<T> extends AFormField { private Set<T> value; private List<T> selectableItems; private StringProvider<T> itemTooltipProvider; public MultiCheckboxFormField(String name) { super(name); } public MultiCheckboxFormField<T> setItemTooltipProvider(StringProvider<T> itemTooltipProvider) { this.itemTooltipProvider = itemTooltipProvider; return this; } public StringProvider<T> getItemTooltipProvider() { return itemTooltipProvider; } public List<T> getSelectableItems() { return selectableItems; } public MultiCheckboxFormField<T> setSelectableItems(Collection<T> items) { this.selectableItems = items == null ? new ArrayList<T>() : new ArrayList<T>(items); return this; } public MultiCheckboxFormField<T> setValue(Set<T> value) { if (value == null) { this.value = null; } else { this.value = new HashSet<T>(value); this.value.retainAll(selectableItems); } return this; } public boolean isSelected(T item) { return value != null && value.contains(item); } public Set<T> getValue() { return value; } public String getValueAsString() { return value == null ? "0" : String.valueOf(value.size()); } public void update(Map<String, String> data, Collection<FileItem> uploadedFiles) { value = new HashSet<T>(); int index = 0; for (T item : selectableItems) { if (data.containsKey(getName() + '_' + index)) value.add(item); index++; } } public void validate() throws ValidationException { if (isRequired() && (value == null || value.size() == 0)) throw new ValidationException("Hier ist eine Auswahl erforderlich."); } // --- dependencies --- }