package de.flower.rmt.ui.page.event.manager;
import de.flower.common.ui.ajax.event.AjaxEventListener;
import de.flower.rmt.model.db.entity.event.Event;
import de.flower.rmt.service.IEventManager;
import de.flower.rmt.ui.model.EventModel;
import de.flower.rmt.ui.page.Pages;
import de.flower.rmt.ui.page.base.manager.ManagerBasePage;
import de.flower.rmt.ui.page.event.EventCanceledPanel;
import de.flower.rmt.ui.page.event.EventDetailsPanel;
import de.flower.rmt.ui.page.event.manager.edit.EventEditSecondaryPanel;
import de.flower.rmt.ui.page.event.manager.invitees.InviteeSecondaryPanel;
import de.flower.rmt.ui.page.event.manager.lineup.match.LineupSecondaryPanel;
import de.flower.rmt.ui.page.event.manager.lineup.teams.TeamsSecondaryPanel;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.model.IModel;
import org.apache.wicket.request.http.flow.AbortWithHttpErrorCodeException;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author flowerrrr
*/
public class EventPage extends ManagerBasePage {
private final static Logger log = LoggerFactory.getLogger(EventPage.class);
public final static String PARAM_EVENTID = "event";
@SpringBean
private IEventManager eventManager;
public static PageParameters getPageParams(Long eventId) {
return new PageParameters().set(EventPage.PARAM_EVENTID, eventId);
}
public static PageParameters getPageParams(Long eventId, int tabIndex) {
return getPageParams(eventId).set(EventTabPanel.TAB_INDEX_KEY, tabIndex);
}
public EventPage(PageParameters params) {
Event event;
try {
Long eventId = params.get(EventPage.PARAM_EVENTID).toLong();
event = eventManager.loadById(eventId);
} catch (Exception e) {
log.error(e.toString(), e);
throw new AbortWithHttpErrorCodeException(404, "Invalid page parameter: " + e.getMessage());
}
init(new EventModel(event));
}
public EventPage(IModel<Event> model) {
// super(model); do not call super(model). model is set in init-method. overriding an already set model would
// lead to detach of the model.
init(model);
}
private void init(final IModel<Event> model) {
setDefaultModel(model);
setHeading("manager.event.edit.heading", null);
final EventTabPanel tabPanel = new EventTabPanel(model) {
@Override
protected void onAjaxUpdate(final AjaxRequestTarget target, final int selectedTab) {
// allow secondary panel to update when tabs change
target.add(getSecondaryPanel());
}
};
addMainPanel(tabPanel);
getSecondaryPanel().add(new EventCanceledPanel(model));
getSecondaryPanel().add(new EventDetailsPanel(model) {
@Override
public boolean isVisible() {
return tabPanel.getSelectedTab() == EventTabPanel.INVITATIONS_PANEL_INDEX
|| tabPanel.getSelectedTab() == EventTabPanel.NOTIFICATION_PANEL_INDEX;
}
});
getSecondaryPanel().add(new InviteeSecondaryPanel(model) {
@Override
public boolean isVisible() {
return tabPanel.getSelectedTab() == EventTabPanel.INVITEES_PANEL_INDEX;
}
});
getSecondaryPanel().add(new EventEditSecondaryPanel(model) {
@Override
public boolean isVisible() {
return tabPanel.getSelectedTab() == EventTabPanel.EVENT_EDIT_PANEL_INDEX;
}
});
getSecondaryPanel().add(new LineupSecondaryPanel(model) {
@Override
public boolean isVisible() {
return tabPanel.getSelectedTab() == EventTabPanel.LINEUP_PANEL_INDEX;
}
});
getSecondaryPanel().add(new TeamsSecondaryPanel(model) {
@Override
public boolean isVisible() {
return tabPanel.getSelectedTab() == EventTabPanel.TEAM_PANEL_INDEX;
}
});
getSecondaryPanel().add(new AjaxEventListener(Event.class));
}
@Override
protected void onBeforeRender() {
super.onBeforeRender();
// makes messages back-button and reload-save. must be called after super.onBeforeRender to have this
// message listed after messages of super-page
// check if an invitation has been sent for this event already
info(new NoInvitationSentMessage((IModel<Event>) getDefaultModel()));
}
@Override
public String getActiveTopBarItem() {
return Pages.EVENTS.name();
}
@Override
protected boolean hasModalWindow() {
return true;
}
}