package de.flower.rmt.ui.page.event.manager.lineup.teams; import de.flower.common.ui.ajax.event.AjaxEventListener; import de.flower.common.ui.ajax.event.AjaxEventSender; import de.flower.common.ui.ajax.markup.html.AjaxLink; import de.flower.rmt.model.db.entity.EventTeam; import de.flower.rmt.model.db.entity.EventTeamPlayer; import de.flower.rmt.model.db.entity.Invitation; import de.flower.rmt.model.db.entity.event.Event; import de.flower.rmt.service.IEventTeamManager; import de.flower.rmt.ui.page.event.manager.lineup.DraggableInviteeListPanel; import de.flower.rmt.ui.page.event.manager.lineup.match.LineupSecondaryPanel.LineupPublishPanel; import de.flower.rmt.ui.panel.RMTBasePanel; 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 TeamsSecondaryPanel extends RMTBasePanel<Event> { @SpringBean private IEventTeamManager eventTeamManager; public TeamsSecondaryPanel(final IModel<Event> model) { // treat subpanels as top level secondary panels to have spacer between them setRenderBodyOnly(true); add(new LineupPublishPanel(model)); AjaxLink button = new AjaxLink("addTeamButton") { @Override public void onClick(final AjaxRequestTarget target) { eventTeamManager.addTeam(model.getObject()); AjaxEventSender.entityEvent(this, EventTeam.class); } }; button.setVisible(isManagerView()); add(button); add(new EventTeamInviteeListPanel(model)); } public static class EventTeamInviteeListPanel extends DraggableInviteeListPanel { @SpringBean private IEventTeamManager eventTeamManager; // used to filter out those players that are already dragged to the player-grids. private IModel<List<Invitation>> playerItemListModel; public EventTeamInviteeListPanel(final IModel<Event> model) { super(model); add(new AjaxEventListener(EventTeamPlayer.class, EventTeamInviteeListPanel.class)); playerItemListModel = new LoadableDetachableModel<List<Invitation>>() { @Override protected List<Invitation> load() { List<Invitation> lineupItems = eventTeamManager.findInvitationsInEventTeams(model.getObject()); return lineupItems; } }; } @Override protected boolean isDraggablePlayerVisible(final Invitation invitation) { return !playerItemListModel.getObject().contains(invitation); } @Override public void detachModels() { super.detachModels(); if (playerItemListModel != null) { playerItemListModel.detach(); } } } }