package pl.net.bluesoft.rnd.processtool.ui.generic;
import com.vaadin.ui.*;
import org.aperteworkflow.ui.view.GenericPortletViewRenderer;
import pl.net.bluesoft.rnd.pt.utils.lang.Lang2;
import pl.net.bluesoft.rnd.util.i18n.I18NSource;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import static pl.net.bluesoft.util.lang.cquery.CQuery.from;
/**
* User: POlszewski
* Date: 2012-07-19
* Time: 21:08
*/
public class GenericUserPortletSettingsPanel extends VerticalLayout {
private final Set<SaveListener> listeners = new HashSet<SaveListener>();
private I18NSource i18NSource;
private TwinColSelect select;
public interface SaveListener {
void onSave();
}
public GenericUserPortletSettingsPanel(I18NSource i18NSource, String[] selectedViewKeys, Collection<GenericPortletViewRenderer> registeredViews) {
this.i18NSource = i18NSource;
addComponent(new Label(getMessage("settings")));
addComponent(select = createSelection(selectedViewKeys, registeredViews));
addComponent(new Button(getMessage("save"), new Button.ClickListener() {
@Override
public void buttonClick(Button.ClickEvent clickEvent) {
for (SaveListener listener : listeners) {
listener.onSave();
}
}
}));
}
private TwinColSelect createSelection(String[] selectedViewKeys, Collection<GenericPortletViewRenderer> registeredViews) {
TwinColSelect select = new TwinColSelect(getMessage("select.views"));
select.setLeftColumnCaption(getMessage("available.views"));
select.setRightColumnCaption(getMessage("selected.views"));
select.setImmediate(true);
select.addContainerProperty("name", String.class, "");
for (GenericPortletViewRenderer viewRenderer : registeredViews) {
select.addItem(viewRenderer.getKey()).getItemProperty("name").setValue(viewRenderer.getName(i18NSource));
}
select.setValue(from(selectedViewKeys).toSet());
select.setItemCaptionMode(AbstractSelect.ITEM_CAPTION_MODE_PROPERTY);
select.setItemCaptionPropertyId("name");
return select;
}
public void addListener(SaveListener listener) {
listeners.add(listener);
}
public String[] getSelectedViewKeys() {
return Lang2.toStringArray(from((Collection<String>)select.getValue()));
}
private String getMessage(String key) {
return i18NSource.getMessage("generic.portlet." + key);
}
}