package org.openbakery.racecontrol.plugin.rcsv.web; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler; import org.apache.wicket.request.resource.ContentDisposition; import org.apache.wicket.util.resource.StringResourceStream; import org.openbakery.racecontrol.data.RaceEntry; import org.openbakery.racecontrol.persistence.RCSVGenerator; import org.openbakery.racecontrol.service.RaceEntryService; import org.openbakery.racecontrol.service.ServiceLocateException; import org.openbakery.racecontrol.service.ServiceLocator; import org.openbakery.racecontrol.web.RaceControlSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import java.nio.charset.Charset; import java.text.SimpleDateFormat; /** * Created by IntelliJ IDEA. * User: rene * Date: 23.03.12 * Time: 15:29 * To change this template use File | Settings | File Templates. */ public class RCSVGenerateButton extends Button { private static Logger log = LoggerFactory.getLogger(RCSVPage.class); private static final String SEPARATOR = ";"; private static final String NEWLINE = System.getProperty("line.separator"); private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); private RCSV rcsv; public RCSVGenerateButton(String id, RCSV rcsv) { super(id, new ResourceModel(id)); this.rcsv = rcsv; } public void onSubmit() { RaceEntry raceEntry = rcsv.getRaceEntry(); log.debug("submit pressed for entry {}", raceEntry); RaceEntryService raceEntryService = getRaceEntryService(); String rcsvData = raceEntryService.createRcsv(raceEntry); StringResourceStream resourceStream = new StringResourceStream(rcsvData); resourceStream.setCharset(Charset.forName("UTF-8")); ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(resourceStream); StringBuilder builder = new StringBuilder(); builder.append(raceEntry.getTrack()); builder.append(DATE_FORMAT.format(raceEntry.getStartTime())); builder.append(".rcsv"); handler.setFileName(builder.toString()); handler.setContentDisposition(ContentDisposition.ATTACHMENT); getRequestCycle().scheduleRequestHandlerAfterCurrent(handler); } // TODO: change to SpringBean public RaceEntryService getRaceEntryService() { ServiceLocator serviceLocator = ((RaceControlSession)getSession()).getServiceLocator(); try { return (RaceEntryService) serviceLocator.getService(RaceEntryService.class); } catch (ServiceLocateException e) { error("Internal error!"); log.error(e.getMessage(), e); } return null; } }