package de.flower.rmt.ui.page.squad.manager;
import de.flower.common.ui.ajax.event.AjaxEventListener;
import de.flower.common.ui.ajax.event.AjaxEventSender;
import de.flower.common.ui.ajax.markup.html.AjaxLinkWithConfirmation;
import de.flower.common.ui.ajax.markup.html.tab.AbstractAjaxTabbedPanel;
import de.flower.common.ui.markup.html.list.EntityListView;
import de.flower.common.ui.panel.BasePanel;
import de.flower.rmt.model.db.entity.Player;
import de.flower.rmt.model.db.entity.Team;
import de.flower.rmt.service.IPlayerManager;
import de.flower.rmt.service.ITeamManager;
import de.flower.rmt.ui.model.UserModel;
import de.flower.rmt.ui.page.user.manager.PlayerMainPanel;
import de.flower.rmt.ui.page.user.manager.PlayerPage;
import de.flower.rmt.ui.panel.DropDownMenuPanel;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import java.util.List;
/**
* @author flowerrrr
*/
public class PlayerListPanel extends BasePanel<Team> {
@SpringBean
private ITeamManager teamManager;
@SpringBean
private IPlayerManager playerManager;
public PlayerListPanel(IModel<Team> model) {
super(model);
final IModel<List<Player>> listModel = getListModel(model);
WebMarkupContainer playerListContainer = new WebMarkupContainer("listContainer");
add(playerListContainer);
playerListContainer.add(new WebMarkupContainer("noPlayer") {
@Override
public boolean isVisible() {
return listModel.getObject().isEmpty();
}
});
playerListContainer.add(new EntityListView<Player>("playerList", listModel) {
@Override
public boolean isVisible() {
return !getList().isEmpty();
}
@Override
protected void populateItem(final ListItem<Player> item) {
final Player player = item.getModelObject();
Link editLink = createEditLink("editLink", item);
editLink.add(new Label("fullname", player.getFullname()));
item.add(editLink);
// item.add(new Label("status", new ResourceModel("player.status." + player.getUser().getStatus().toString().toLowerCase())));
item.add(new Label("notification", new ResourceModel("choice.player.notification." + player.isNotification().toString())));
// item.add(new Label("response", new ResourceModel("choice.player.response.optional." + player.isOptional().toString())));
DropDownMenuPanel menuPanel = new DropDownMenuPanel();
item.add(menuPanel);
menuPanel.addLink(createEditLink("link", item), "button.edit");
menuPanel.addLink(new AjaxLinkWithConfirmation("link", new ResourceModel("manager.squad.remove.confirm")) {
@Override
public void onClick(AjaxRequestTarget target) {
playerManager.removePlayer(PlayerListPanel.this.getModelObject(), item.getModelObject());
AjaxEventSender.entityEvent(this, Player.class);
}
}, "button.squad.player.remove");
}
});
playerListContainer.add(new AjaxEventListener(Player.class));
}
private IModel<List<Player>> getListModel(final IModel<Team> model) {
return new LoadableDetachableModel<List<Player>>() {
@Override
protected List<Player> load() {
return playerManager.findAllByTeam(model.getObject());
}
};
}
private Link createEditLink(String id, final ListItem<Player> item) {
return new Link(id) {
@Override
public void onClick() {
PlayerPage page = new PlayerPage(new UserModel(item.getModelObject().getUser()));
page.getPageParameters().set(AbstractAjaxTabbedPanel.TAB_INDEX_KEY, PlayerMainPanel.TEAM_SETTINGS_PANEL_INDEX);
setResponsePage(page);
}
};
}
}