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.form.AjaxSubmitLink; 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.model.db.entity.User; import de.flower.rmt.service.IPlayerManager; import de.flower.rmt.service.IUserManager; 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.form.Check; import org.apache.wicket.markup.html.form.CheckGroup; import org.apache.wicket.markup.html.form.Form; 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 java.util.ArrayList; import java.util.List; /** * @author flowerrrr */ public class AddPlayerPanel extends BasePanel<Team> { @SpringBean private IUserManager userManager; @SpringBean private IPlayerManager playerManager; /** * Ok to store entities in field cause field is dismissed when panel is processed. */ private List<User> selectedPlayers = new ArrayList<User>(); public AddPlayerPanel(String id, final IModel<Team> model) { super(id); Form form = new Form("form"); add(form); // list of not-assigned players WebMarkupContainer playerListContainer = new WebMarkupContainer("playerListContainer"); form.add(playerListContainer); CheckGroup group = new CheckGroup<User>("group", selectedPlayers); playerListContainer.add(group); ListView playerList = new EntityListView<User>("playerList", getListModel(model)) { @Override protected void populateItem(ListItem<User> item) { User player = item.getModelObject(); item.add(new Check<User>("checkbox", item.getModel())); item.add(new Label("name", player.getFullname())); } }; group.add(playerList); // add and cancel buttons form.add(new AjaxSubmitLink("addButton") { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { playerManager.addPlayers(model.getObject(), selectedPlayers); AjaxEventSender.entityEvent(this, Player.class); close(target); } }); add(new AjaxEventListener(Player.class)); } /** * Selects all unassigned players of a club. * * @return */ private IModel<List<User>> getListModel(final IModel<Team> model) { return new LoadableDetachableModel<List<User>>() { @Override protected List<User> load() { return userManager.findAllUnassignedPlayers(model.getObject()); } }; } private void close(AjaxRequestTarget target) { selectedPlayers.clear(); onClose(target); } }