package com.qcadoo.report.api.xls.abstractview;
import org.apache.poi.POIXMLProperties;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.servlet.view.AbstractView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.util.Map;
public abstract class AbstractXLSXView extends AbstractView {
/** The content type for an Excel response */
private static final String CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
/** The extension to look for existing templates */
private static final String EXTENSION = ".xlsx";
private static final String CREATOR = "qcadoo MES";
private String url;
/** * Default Constructor. * Sets the content type of the view to "application/vnd.ms-excel". */
public AbstractXLSXView() {
setContentType(CONTENT_TYPE);
}
public void setUrl(String url) {
this.url = url;
}
@Override
protected boolean generatesDownloadContent() {
return true;
}
/**
* Renders the Excel view, given the specified model.
*/
@Override
protected final void renderMergedOutputModel(
Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
XSSFWorkbook workbook;
ByteArrayOutputStream baos = createTemporaryOutputStream();
workbook = new XSSFWorkbook();
POIXMLProperties xmlProps = workbook.getProperties();
POIXMLProperties.CoreProperties coreProps = xmlProps.getCoreProperties();
coreProps.setCreator(CREATOR);
buildExcelDocument(model, workbook, request, response);
workbook.write(baos);
writeToResponse(response, baos);
}
protected abstract void buildExcelDocument(
Map<String, Object> model, XSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response)
throws Exception;
}