package de.flower.rmt.ui.page.event.player; import de.flower.common.ui.ajax.event.AjaxEventSender; import de.flower.rmt.model.db.entity.Invitation; import de.flower.rmt.model.db.entity.event.Event; import de.flower.rmt.model.db.type.RSVPStatus; import de.flower.rmt.service.IEventManager; import de.flower.rmt.service.IInvitationManager; import de.flower.rmt.ui.model.EventModel; import de.flower.rmt.ui.page.Pages; import de.flower.rmt.ui.page.base.player.PlayerBasePage; 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 PlayerBasePage { private final static Logger log = LoggerFactory.getLogger(EventPage.class); @SpringBean private IEventManager eventManager; @SpringBean private IInvitationManager invitationManager; private EventInvitationModel invitationModel; /** * Deep link support * * @param params */ public EventPage(PageParameters params) { Event event; try { Long eventId = params.get(de.flower.rmt.ui.page.event.manager.EventPage.PARAM_EVENTID).toLong(); event = eventManager.loadById(eventId); } catch (Exception e) { log.warn("EventPage accessed with invalid parameter: " + e.toString()); throw new AbortWithHttpErrorCodeException(404, "Invalid page parameter: " + e.getMessage()); } // as associations are often needed use a fully initialized event object model. init(new EventModel(event, true)); } public static PageParameters getPageParams(Long eventId) { return de.flower.rmt.ui.page.event.manager.EventPage.getPageParams(eventId); } public EventPage(final IModel<Event> model) { init(model); } private void init(IModel<Event> model) { setDefaultModel(model); setHeading("player.event.heading"); addMainPanel(new EventTabPanel(model)); invitationModel = new EventInvitationModel(model); addSecondaryPanel(new EventSecondaryPanel(model, invitationModel)); } @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 user must confirm cancellation of event info(new ConfirmEventCanceledMessage(invitationModel) { @Override protected void confirm() { Invitation invitation = invitationModel.getObject(); invitation.setStatus(RSVPStatus.DECLINED); invitationManager.save(invitation); AjaxEventSender.entityEvent(EventPage.this, Invitation.class); } }); } @Override public String getActiveTopBarItem() { return Pages.EVENTS.name(); } @Override protected void onDetach() { if (invitationModel != null) { invitationModel.detach(); } super.onDetach(); } }