package pl.net.bluesoft.rnd.pt.ext.bpmnotifications.portlet.components; import com.vaadin.data.util.BeanItemContainer; import com.vaadin.ui.ListSelect; import org.aperteworkflow.util.vaadin.ui.Dialog; import pl.net.bluesoft.rnd.util.i18n.I18NSource; import pl.net.bluesoft.util.lang.Pair; import java.util.List; import java.util.Set; /** * User: POlszewski * Date: 2012-10-14 * Time: 16:34 */ public abstract class SelectValuesDialog<ItemType> extends Dialog { private Class<ItemType> itemClass; private I18NSource i18NSource; private ListSelect itemSelect; public SelectValuesDialog(Class<ItemType> itemClass, String title, I18NSource i18NSource) { super(title); this.itemClass = itemClass; this.i18NSource = i18NSource; buildDialogLayout(); } private void buildDialogLayout() { itemSelect = new ListSelect(); itemSelect.setWidth("100%"); itemSelect.setNullSelectionAllowed(false); itemSelect.setMultiSelect(true); itemSelect.setContainerDataSource(new BeanItemContainer<ItemType>(itemClass)); itemSelect.setRows(10); itemSelect.setImmediate(true); addDialogContent(itemSelect); addDialogAction(getMessage("bpmnot.button.choose"), new ActionListener() { @Override public void handleAction(String action) { valuesSelected((Set<ItemType>)itemSelect.getValue()); } }); addDialogAction(getMessage("bpmnot.button.cancel"), null); } protected abstract void valuesSelected(Set<ItemType> items); private String getMessage(String key) { return i18NSource.getMessage(key); } public void setAvailableItems(List<Pair<String, ItemType>> items) { itemSelect.removeAllItems(); for (Pair<String, ItemType> item : items) { itemSelect.addItem(item.getSecond()); itemSelect.setItemCaption(item.getSecond(), item.getFirst()); } } public void setItems(Set<ItemType> items) { itemSelect.setValue(items); } }