package de.flower.rmt.ui.page.event.manager.lineup.teams; import de.flower.common.ui.ajax.dragndrop.DraggableDto; import de.flower.common.ui.ajax.dragndrop.DroppableBehavior; import de.flower.common.ui.ajax.event.AjaxEventListener; import de.flower.common.ui.ajax.event.AjaxEventSender; import de.flower.common.util.Check; import de.flower.rmt.model.db.entity.EventTeam; import de.flower.rmt.model.db.entity.Lineup; import de.flower.rmt.model.db.entity.event.Event; import de.flower.rmt.service.IEventManager; import de.flower.rmt.service.IEventTeamManager; import de.flower.rmt.ui.model.LineupModel; import de.flower.rmt.ui.page.event.manager.lineup.dragndrop.DraggableEntityLabel; import de.flower.rmt.ui.page.event.manager.lineup.dragndrop.EntityLabel; import de.flower.rmt.ui.panel.RMTBasePanel; import org.apache.wicket.AttributeModifier; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.spring.injection.annot.SpringBean; import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; /** * Panel servers manager and player view. * @author flowerrrr */ public class RankingPanel extends RMTBasePanel<Event> { private final static Logger log = LoggerFactory.getLogger(RankingPanel.class); @SpringBean private IEventTeamManager eventTeamManager; @SpringBean private IEventManager eventManager; private IModel<Lineup> lineupModel; public RankingPanel(final IModel<Event> model) { super(model); Check.notNull(model); add(new AjaxEventListener(EventTeam.class)); lineupModel = new LineupModel(model); final IModel<List<EventTeam>> listModel = getListModel(model); // render existing event teams ListView<EventTeam> items = new ListView<EventTeam>("items", listModel) { @Override protected void populateItem(final ListItem<EventTeam> item) { EntityLabel entityLabel = new DraggableEntityLabel(item.getModelObject().getId(), item.getModelObject().getName(), false); item.add(entityLabel); if (RankingPanel.this.isManagerView()) { item.add(new DroppableBehavior(true) { @Override protected void onDrop(final AjaxRequestTarget target, final DraggableDto dto) { eventTeamManager.setRank(dto.entityId, item.getModelObject()); AjaxEventSender.entityEvent(RankingPanel.this, EventTeam.class); } }); } // if rank is null indicate that the teams haven't been ranked yet. entityLabel.add(AttributeModifier.append("class", item.getModelObject().getRank() == null ? "not-ranked" : "")); } }; add(items); } @Override public boolean isVisible() { return getModelObject().getDateTimeEnd().isBefore(DateTime.now()) && lineupModel.getObject().isPublished(); } private IModel<List<EventTeam>> getListModel(final IModel<Event> model) { return new LoadableDetachableModel<List<EventTeam>>() { @Override protected List<EventTeam> load() { return eventTeamManager.findTeamsOrderByRank(model.getObject()); } }; } @Override public void detachModels() { super.detachModels(); lineupModel.detach(); } }