package de.flower.rmt.ui.page.venues.player;
import de.flower.rmt.model.db.entity.Venue;
import de.flower.rmt.service.IVenueManager;
import de.flower.rmt.ui.markup.html.weather.WeatherPanel;
import de.flower.rmt.ui.model.VenueModel;
import de.flower.rmt.ui.page.Pages;
import de.flower.rmt.ui.page.base.player.PlayerBasePage;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.model.AbstractReadOnlyModel;
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 VenuePage extends PlayerBasePage {
private final static Logger log = LoggerFactory.getLogger(VenuePage.class);
public final static String PARAM_VENUEID = "venue";
@SpringBean
private IVenueManager venueManager;
/**
* Deep link support
*
* @param params
*/
public VenuePage(PageParameters params) {
Venue venue;
try {
Long id = params.get(PARAM_VENUEID).toLong();
venue = venueManager.loadById(id);
} catch (Exception e) {
log.warn("VenuePage accessed with invalid parameter: " + e.toString());
throw new AbortWithHttpErrorCodeException(404, "Invalid page parameter: " + e.getMessage());
}
init(new VenueModel(venue));
}
public static PageParameters getPageParams(Long venueId) {
return new PageParameters().set(PARAM_VENUEID, venueId);
}
public VenuePage(IModel<Venue> model) {
init(model);
}
private void init(final IModel<Venue> model) {
setDefaultModel(model);
setHeading("player.venue.heading", null);
addMainPanel(new VenuePanel(model) {
@Override
protected void onClose(AjaxRequestTarget target) {
setResponsePage(VenuesPage.class);
}
});
addSecondaryPanel(new GetDirectionsPanel(model), new WeatherPanel(new AbstractReadOnlyModel<String>() {
@Override
public String getObject() {
return model.getObject().getAddress();
}
}));
}
@Override
public String getActiveTopBarItem() {
return Pages.VENUES.name();
}
}