package de.flower.rmt.ui.page.event.manager.lineup.match;
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.ui.behavior.AbsolutePositionBehavior;
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.LineupItem;
import de.flower.rmt.model.db.entity.QLineupItem;
import de.flower.rmt.model.db.entity.event.Event;
import de.flower.rmt.service.ILineupManager;
import de.flower.rmt.ui.page.event.manager.lineup.dragndrop.DraggableEntityLabel;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* @author flowerrrr
*/
public class LineupEditPanel extends BasePanel {
private final static Logger log = LoggerFactory.getLogger(LineupEditPanel.class);
@SpringBean
private ILineupManager lineupManager;
public LineupEditPanel(String id, final IModel<Event> model) {
super(id);
Check.notNull(model);
final WebMarkupContainer grid = new WebMarkupContainer("grid");
add(grid);
final WebMarkupContainer itemContainer = new WebMarkupContainer("itemContainer");
itemContainer.add(new AjaxEventListener(LineupItem.class));
grid.add(itemContainer);
// render existing lineup items
ListView<LineupItem> items = new ListView<LineupItem>("items", getListModel(model)) {
@Override
protected void populateItem(final ListItem<LineupItem> item) {
LineupItem lineupItem = item.getModelObject();
Invitation invitation = lineupItem.getInvitation();
DraggableEntityLabel draggablePlayer = new DraggableEntityLabel(invitation.getId(), invitation.getName(), true) {
@Override
protected void onRemove(final AjaxRequestTarget target, final Long invitationId) {
// remove lineupitem
lineupManager.removeLineupItem(invitationId);
AjaxEventSender.entityEvent(this, LineupItem.class);
}
};
draggablePlayer.add(new AbsolutePositionBehavior(lineupItem.getTop(), lineupItem.getLeft()));
item.add(draggablePlayer);
}
};
itemContainer.add(items);
grid.add(new DroppableBehavior(false) {
@Override
protected void onDrop(final AjaxRequestTarget target, final DraggableDto dto) {
lineupManager.drop(dto);
AjaxEventSender.entityEvent(grid, LineupItem.class);
}
});
}
private IModel<List<LineupItem>> getListModel(final IModel<Event> model) {
return new LoadableDetachableModel<List<LineupItem>>() {
@Override
protected List<LineupItem> load() {
return lineupManager.findLineupItems(model.getObject(), QLineupItem.lineupItem.invitation);
}
};
}
}