package ilarkesto.form;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.apache.commons.fileupload.FileItem;
public class ItemFormField<T> extends AFormField {
private T value;
private ClearButton clearButton;
private SelectButton selectButton;
private Collection<T> selectableItems;
private boolean autoTrigger;
public ItemFormField(String name) {
super(name);
clearButton = (ClearButton) new ClearButton(Form.BUTTON_PREFIX + Form.CLEAR_ITEM_BUTTON_NAME_PREFIX + name)
.setValidateForm(false).setLabel("Entfernen").setIcon("delete");
selectButton = (SelectButton) new SelectButton(Form.BUTTON_PREFIX + Form.SELECT_ITEM_BUTTON_NAME_PREFIX + name)
.setValidateForm(false).setLabel("Auswahl...").setIcon("edit");
}
public ItemFormField setAutoTrigger(boolean autoTrigger) {
this.autoTrigger = autoTrigger;
return this;
}
public boolean isAutoTrigger() {
return autoTrigger && value == null;
}
public ItemFormField setSelectableItems(Collection<T> items) {
this.selectableItems = items;
return this;
}
public Collection getSelectableItems() {
Set<T> result = new HashSet<T>(selectableItems);
if (value != null) result.remove(value);
return result;
}
public ClearButton getClearButton() {
if (isRequired() || value == null) return null;
return clearButton;
}
public SelectButton getSelectButton() {
return selectButton;
}
public ItemFormField setValue(T value) {
this.value = value;
fireFieldValueChanged();
return this;
}
public T getValue() {
return value;
}
public String getValueAsString() {
return value == null ? null : value.toString();
}
public void update(Map<String, String> data, Collection<FileItem> uploadedFiles) {}
public void validate() throws ValidationException {
if (isRequired() && value == null) throw new ValidationException("Hier ist eine Auswahl erforderlich.");
}
public class SelectButton extends FormButton {
public SelectButton(String name) {
super(name);
}
public ItemFormField getField() {
return ItemFormField.this;
}
}
public class ClearButton extends FormButton {
public ClearButton(String name) {
super(name);
}
public ItemFormField getField() {
return ItemFormField.this;
}
}
}