package de.flower.rmt.ui.page.event.manager.lineup.teams;
import de.flower.common.ui.ajax.event.AjaxEventListener;
import de.flower.common.ui.ajax.event.AjaxEventSender;
import de.flower.common.ui.ajax.markup.html.AjaxEditableLabelExtended;
import de.flower.common.ui.ajax.markup.html.AjaxLinkWithConfirmation;
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.IEventTeamManager;
import de.flower.rmt.service.ILineupManager;
import de.flower.rmt.ui.model.LineupModel;
import de.flower.rmt.ui.page.event.manager.lineup.teams.TeamsSecondaryPanel.EventTeamInviteeListPanel;
import de.flower.rmt.ui.panel.RMTBasePanel;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableLabel;
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.model.PropertyModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* Panel serves manager and player view.
*
* @author flowerrrr
*/
public class TeamsEditPanel extends RMTBasePanel {
private final static Logger log = LoggerFactory.getLogger(TeamsEditPanel.class);
@SpringBean
private IEventTeamManager eventTeamManager;
@SpringBean
private ILineupManager lineupManager;
public TeamsEditPanel(String id, final IModel<Event> model) {
super(id);
Check.notNull(model);
add(new AjaxEventListener(EventTeam.class));
final IModel<List<EventTeam>> listModel = getListModel(model);
final IModel<Lineup> lineupModel = new LineupModel(model);
// render existing event teams
final ListView<EventTeam> teamList = new ListView<EventTeam>("teamList", listModel) {
@Override
protected void populateItem(final ListItem<EventTeam> item) {
// item.add(new Label("name", item.getModelObject().getName()));
final AjaxEditableLabel<String> editableLabel = new AjaxEditableLabelExtended<String>("name", new PropertyModel<String>(item.getModel(), "name")) {
{
getEditor().add(AttributeModifier.replace("maxlength", 15));
setEnabled(TeamsEditPanel.this.isManagerView());
}
@Override
protected void onSubmit(final AjaxRequestTarget target) {
super.onSubmit(target);
if (!StringUtils.isBlank(item.getModelObject().getName())) {
eventTeamManager.save(item.getModelObject());
}
}
};
item.add(editableLabel);
item.add(new EventTeamPanel(item.getModel()));
AjaxLinkWithConfirmation button = new AjaxLinkWithConfirmation("removeTeamButton", new ResourceModel("manager.eventteam.remove.confirm")) {
@Override
public void onClick(final AjaxRequestTarget target) {
eventTeamManager.removeTeam(item.getModelObject());
AjaxEventSender.entityEvent(this, EventTeam.class);
AjaxEventSender.send(this, EventTeamInviteeListPanel.class);
}
};
button.setVisible(TeamsEditPanel.this.isManagerView());
item.add(button);
}
@Override
public boolean isVisible() {
return isManagerView() || lineupModel.getObject().isPublished();
}
};
add(teamList);
add(new WebMarkupContainer("noLineup", lineupModel /* pass to component so it gets detached automatically */) {
@Override
public boolean isVisible() {
return !lineupModel.getObject().isPublished() && !isManagerView();
}
});
add(new RankingPanel(model));
}
private IModel<List<EventTeam>> getListModel(final IModel<Event> model) {
return new LoadableDetachableModel<List<EventTeam>>() {
@Override
protected List<EventTeam> load() {
return eventTeamManager.findTeams(model.getObject());
}
};
}
}