package de.flower.rmt.ui.page.event.player;
import de.flower.common.ui.ajax.event.AjaxEventListener;
import de.flower.common.ui.markup.html.list.EntityListView;
import de.flower.common.ui.panel.BasePanel;
import de.flower.common.util.Check;
import de.flower.rmt.model.db.entity.Invitation;
import de.flower.rmt.model.db.entity.Invitation_;
import de.flower.rmt.model.db.entity.event.Event;
import de.flower.rmt.model.db.type.RSVPStatus;
import de.flower.rmt.service.IInvitationManager;
import de.flower.rmt.ui.app.Links;
import de.flower.rmt.ui.page.event.CommentsPanel;
import org.apache.wicket.Component;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import java.util.List;
/**
* @author flowerrrr
*/
public class InvitationListPanel extends BasePanel {
@SpringBean
private IInvitationManager invitationManager;
public InvitationListPanel(String id, IModel<Event> model) {
super(id);
Check.notNull(model);
add(createListView("acceptedList", RSVPStatus.ACCEPTED, model, true));
add(createListView("unsureList", RSVPStatus.UNSURE, model, false));
add(createListView("declinedList", RSVPStatus.DECLINED, model, false));
add(createListView("noresponseList", RSVPStatus.NORESPONSE, model, false));
add(new AjaxEventListener(Invitation.class));
}
private Component createListView(String id, RSVPStatus status, IModel<Event> model, final boolean printOrder) {
ListView list = new EntityListView<Invitation>(id, getInvitationList(model, status)) {
@Override
protected void populateItem(ListItem<Invitation> item) {
item.add(createInvitationFragement(item, printOrder));
}
/**
* Needed for wicket:enclosure to work.
* @return
*/
@Override
public boolean isVisible() {
return !this.getList().isEmpty();
}
};
return list;
}
private Component createInvitationFragement(final ListItem<Invitation> item, final boolean printOrder) {
final Invitation invitation = item.getModelObject();
Fragment frag = new Fragment("itemPanel", "itemFragment", this);
final Label label = new Label("position", (item.getIndex() + 1) + ".");
label.setVisible(printOrder);
frag.add(label);
frag.add(new Label("name", invitation.getName()));
frag.add(new CommentsPanel(item.getModel()));
ExternalLink link = Links.mailLink("emailLink", (invitation.hasEmail() ? invitation.getEmail() : ""), null);
link.setVisible(invitation.hasEmail());
frag.add(link);
return frag;
}
private IModel<List<Invitation>> getInvitationList(final IModel<Event> model, final RSVPStatus rsvpStatus) {
return new LoadableDetachableModel<List<Invitation>>() {
@Override
protected List<Invitation> load() {
return invitationManager.findAllByEventAndStatus(model.getObject(), rsvpStatus, Invitation_.user, Invitation_.comments);
}
};
}
}