package de.flower.rmt.ui.page.event.manager.lineup.match;
import de.flower.common.ui.ajax.event.AjaxEventListener;
import de.flower.common.ui.panel.BasePanel;
import de.flower.rmt.model.db.entity.Invitation;
import de.flower.rmt.model.db.entity.Lineup;
import de.flower.rmt.model.db.entity.LineupItem;
import de.flower.rmt.model.db.entity.event.Event;
import de.flower.rmt.service.ILineupManager;
import de.flower.rmt.ui.model.LineupModel;
import de.flower.rmt.ui.page.event.manager.lineup.DraggableInviteeListPanel;
import de.flower.rmt.ui.page.event.manager.lineup.PublishPanel;
import org.apache.wicket.ajax.AjaxRequestTarget;
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 LineupSecondaryPanel extends BasePanel {
public LineupSecondaryPanel(final IModel<Event> model) {
// treat subpanels as top level secondary panels to have spacer between them
setRenderBodyOnly(true);
add(new LineupPublishPanel(model));
add(new LineupInviteeListPanel(model));
}
public static class LineupPublishPanel extends PublishPanel<Event> {
@SpringBean
private ILineupManager lineupManager;
private IModel<Lineup> lineupModel;
public LineupPublishPanel(final IModel<Event> model) {
super(model);
lineupModel = new LineupModel(model);
}
@Override
protected void publish(final AjaxRequestTarget target) {
lineupManager.publishLineup(getModel().getObject());
lineupModel.detach();
}
@Override
protected boolean isPublished() {
return lineupModel.getObject().isPublished();
}
}
public static class LineupInviteeListPanel extends DraggableInviteeListPanel {
@SpringBean
private ILineupManager lineupManager;
// used to filter out those players that are already dragged to the lineup-grid.
private final IModel<List<Invitation>> lineupItemListModel;
public LineupInviteeListPanel(final IModel<Event> model) {
super(model);
add(new AjaxEventListener(LineupItem.class));
lineupItemListModel = new LoadableDetachableModel<List<Invitation>>() {
@Override
protected List<Invitation> load() {
return lineupManager.findInvitationsInLinuep(model.getObject());
}
};
}
@Override
protected boolean isDraggablePlayerVisible(final Invitation invitation) {
return !lineupItemListModel.getObject().contains(invitation);
}
@Override
public void detachModels() {
super.detachModels();
if (lineupItemListModel != null) {
lineupItemListModel.detach();
}
}
}
}