package de.flower.rmt.ui.page.event.manager.notification;
import de.flower.common.ui.modal.ModalPanel;
import de.flower.common.ui.model.AbstractChainingModel;
import de.flower.rmt.model.db.entity.Invitation;
import de.flower.rmt.model.db.entity.event.Event;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Check;
import org.apache.wicket.markup.html.form.CheckGroup;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;
import javax.mail.internet.InternetAddress;
import java.util.ArrayList;
import java.util.List;
/**
* @author flowerrrr
*/
public abstract class SelectRecipientPanel extends ModalPanel {
private List<InternetAddress[]> recipients = new ArrayList<InternetAddress[]>();
public SelectRecipientPanel(final IModel<Event> model, IModel<List<Invitation>> invitationListModel) {
super();
setHeading("manager.notification.select.recipients.heading");
setSubmitLabel("button.add");
final Form form = new Form("form");
addForm(form);
// list of invitees
final CheckGroup<InternetAddress[]> group = new CheckGroup<InternetAddress[]>("group", recipients);
form.add(group);
final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
listContainer.setOutputMarkupId(true);
group.add(listContainer);
ListView invitationList = new ListView<Invitation>("list", invitationListModel) {
@Override
protected void populateItem(ListItem<Invitation> item) {
Invitation invitation = item.getModelObject();
item.add(new Check("checkbox", new CheckModel(item.getModel())));
item.add(new Label("name", invitation.getName()));
}
};
listContainer.add(invitationList);
}
@Override
protected boolean onSubmit(final AjaxRequestTarget target, final Form form) {
onSubmit(target, recipients);
return true;
}
protected abstract void onSubmit(final AjaxRequestTarget target, final List<InternetAddress[]> recipients);
private static class CheckModel extends AbstractChainingModel<InternetAddress[], Invitation> {
public CheckModel(final IModel<Invitation> wrappedModel) {
super(wrappedModel);
}
@Override
public InternetAddress[] getObject() {
return getChainedModelObject().getInternetAddresses();
}
@Override
public void setObject(final InternetAddress[] object) {
throw new UnsupportedOperationException();
}
}
}