package net.rrm.ehour.ui.common.report.excel; import org.apache.wicket.request.IRequestCycle; import org.apache.wicket.request.IRequestHandler; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; public class ExcelRequestHandler implements IRequestHandler { public enum Format { XLS("application/vnd.ms-excel"), XLSX("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); final String mimetype; Format(String mimetype) { this.mimetype = mimetype; } } private String filename; private final IWriteBytes byteWriter; private final Format format; public ExcelRequestHandler(String filename, IWriteBytes byteWriter) { this(filename, byteWriter, Format.XLS); } public ExcelRequestHandler(String filename, IWriteBytes byteWriter, Format format) { this.filename = filename; this.byteWriter = byteWriter; this.format = format; } @Override public void detach(IRequestCycle requestCycle) { } @Override public void respond(IRequestCycle requestCycle) { try { HttpServletResponse httpResponse = (HttpServletResponse) requestCycle.getResponse().getContainerResponse(); httpResponse.setContentType(format.mimetype); httpResponse.setHeader("Content-disposition", "attachment; filename=" + filename); ServletOutputStream outputStream = httpResponse.getOutputStream(); byteWriter.write(outputStream); } catch (Exception e) { throw new RuntimeException(e); } } }