package de.flower.rmt.ui.page.user.manager;
import de.flower.common.ui.markup.html.form.BooleanDropDownChoice;
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.Player_;
import de.flower.rmt.model.db.entity.User;
import de.flower.rmt.service.IPlayerManager;
import de.flower.rmt.ui.markup.html.form.field.DropDownChoicePanel;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.DropDownChoice;
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.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import java.util.Collections;
import java.util.List;
/**
* @author flowerrrr
*/
public class PlayerTeamsPanel extends BasePanel<User> {
@SpringBean
private IPlayerManager playerManager;
public PlayerTeamsPanel(String id, IModel<User> model) {
super(id, model);
final IModel<? extends List<? extends Player>> listModel = getListModel(model);
final WebMarkupContainer noTeam = new WebMarkupContainer("noTeam") {
@Override
public boolean isVisible() {
return listModel.getObject().isEmpty();
}
};
add(noTeam);
ListView<Player> list = new EntityListView<Player>("list", listModel) {
@Override
public boolean isVisible() {
return !noTeam.isVisible();
}
@Override
protected void populateItem(final ListItem<Player> item) {
Player player = item.getModelObject();
item.add(new Label("name", player.getTeam().getName()));
item.add(createForm(item.getModel()));
}
};
add(list);
}
private Form<Player> createForm(IModel<Player> model) {
final Form<Player> form = new Form<Player>("form", new CompoundPropertyModel<Player>(model));
DropDownChoice<Boolean> dropDownChoice = new BooleanDropDownChoice("input", "choice.player.notification");
dropDownChoice.add(new OnChangeAjaxBehavior() {
@Override
protected void onUpdate(final AjaxRequestTarget target) {
playerManager.save(form.getModelObject());
}
});
form.add(new DropDownChoicePanel.NonValidatingDropDownChoicePanel("notification", dropDownChoice));
/*
dropDownChoice = new BooleanDropDownChoice("input", "choice.player.response.optional", true);
dropDownChoice.add(new OnChangeAjaxBehavior() {
@Override
protected void onUpdate(final AjaxRequestTarget target) {
playerManager.save(form.getModelObject());
}
});
form.add(new DropDownChoicePanel.NonValidatingDropDownChoicePanel("optional", dropDownChoice));
dropDownChoice = new BooleanDropDownChoice("input", "choice.player.retired", true);
dropDownChoice.add(new OnChangeAjaxBehavior() {
@Override
protected void onUpdate(final AjaxRequestTarget target) {
playerManager.save(form.getModelObject());
}
});
form.add(new DropDownChoicePanel.NonValidatingDropDownChoicePanel("retired", dropDownChoice));
*/
return form;
}
private IModel<? extends List<? extends Player>> getListModel(final IModel<User> model) {
return new LoadableDetachableModel<List<? extends Player>>() {
@Override
protected List<? extends Player> load() {
if (model.getObject().isNew()) {
return Collections.emptyList();
} else {
List<Player> allByUser = playerManager.findAllByUser(model.getObject(), Player_.team);
return playerManager.sortByTeam(allByUser);
}
}
};
}
}