Search in sources :

Example 1 with EntityDataGridItems

use of io.jmix.ui.component.data.meta.EntityDataGridItems in project jmix by jmix-framework.

the class ExcelExporter method exportDataGrid.

@Override
public void exportDataGrid(Downloader downloader, DataGrid<Object> dataGrid, ExportMode exportMode) {
    if (downloader == null) {
        throw new IllegalArgumentException("Downloader is null");
    }
    createWorkbookWithSheet();
    createFonts();
    createFormats();
    List<DataGrid.Column<Object>> columns = dataGrid.getColumns();
    int r = 0;
    Row row = sheet.createRow(r);
    createAutoColumnSizers(columns.size());
    float maxHeight = sheet.getDefaultRowHeightInPoints();
    CellStyle headerCellStyle = wb.createCellStyle();
    headerCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
    for (DataGrid.Column column : columns) {
        String caption = column.getCaption();
        int countOfReturnSymbols = StringUtils.countMatches(caption, "\n");
        if (countOfReturnSymbols > 0) {
            maxHeight = Math.max(maxHeight, (countOfReturnSymbols + 1) * sheet.getDefaultRowHeightInPoints());
            headerCellStyle.setWrapText(true);
        }
    }
    row.setHeightInPoints(maxHeight);
    for (int c = 0; c < columns.size(); c++) {
        DataGrid.Column column = columns.get(c);
        String caption = column.getCaption();
        Cell cell = row.createCell(c);
        RichTextString richTextString = createStringCellValue(caption);
        richTextString.applyFont(boldFont);
        cell.setCellValue(richTextString);
        ExcelAutoColumnSizer sizer = new ExcelAutoColumnSizer();
        sizer.notifyCellValue(caption, boldFont);
        sizers[c] = sizer;
        cell.setCellStyle(headerCellStyle);
    }
    EntityDataGridItems<Object> dataGridSource = (EntityDataGridItems) dataGrid.getItems();
    if (dataGridSource == null) {
        throw new IllegalStateException("DataGrid is not bound to data");
    }
    if (exportMode == ExportMode.SELECTED && dataGrid.getSelected().size() > 0) {
        Set<Object> selected = dataGrid.getSelected();
        List<Object> ordered = dataGridSource.getItems().filter(selected::contains).collect(Collectors.toList());
        for (Object item : ordered) {
            if (checkIsRowNumberExceed(r)) {
                break;
            }
            createDataGridRow(dataGrid, columns, 0, ++r, Id.of(item).getValue());
        }
    } else {
        if (dataGrid instanceof TreeDataGrid) {
            TreeDataGrid treeDataGrid = (TreeDataGrid) dataGrid;
            TreeDataGridItems<Object> treeDataGridItems = (TreeDataGridItems) dataGridSource;
            List<Object> items = treeDataGridItems.getChildren(null).collect(Collectors.toList());
            for (Object item : items) {
                if (checkIsRowNumberExceed(r)) {
                    break;
                }
                r = createDataGridHierarchicalRow(treeDataGrid, treeDataGridItems, columns, 0, r, item);
            }
        } else {
            for (Object itemId : dataGridSource.getItems().map(entity -> Id.of(entity).getValue()).collect(Collectors.toList())) {
                if (checkIsRowNumberExceed(r)) {
                    break;
                }
                createDataGridRow(dataGrid, columns, 0, ++r, itemId);
            }
        }
    }
    for (int c = 0; c < columns.size(); c++) {
        sheet.setColumnWidth(c, sizers[c].getWidth() * COL_WIDTH_MAGIC);
    }
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    try {
        wb.write(out);
    } catch (IOException e) {
        throw new RuntimeException("Unable to write document", e);
    }
    ByteArrayDataProvider dataProvider = new ByteArrayDataProvider(out.toByteArray(), uiProperties.getSaveExportedByteArrayDataThresholdBytes(), coreProperties.getTempDir());
    switch(exportFormat) {
        case XLSX:
            downloader.download(dataProvider, getFileName(dataGrid) + "." + XLSX.getFileExt(), XLSX);
            break;
        case XLS:
            downloader.download(dataProvider, getFileName(dataGrid) + "." + XLS.getFileExt(), XLS);
            break;
    }
}
Also used : Id(io.jmix.core.Id) java.util(java.util) ByteArrayOutputStream(java.io.ByteArrayOutputStream) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath) EntityDataGridItems(io.jmix.ui.component.data.meta.EntityDataGridItems) ByteArrayDataProvider(io.jmix.ui.download.ByteArrayDataProvider) BooleanUtils(org.apache.commons.lang3.BooleanUtils) ExportMode(io.jmix.uiexport.exporter.ExportMode) StringUtils(org.apache.commons.lang3.StringUtils) Function(java.util.function.Function) XLS(io.jmix.ui.download.DownloadFormat.XLS) EntityValues(io.jmix.core.entity.EntityValues) Scope(org.springframework.context.annotation.Scope) Notifications(io.jmix.ui.Notifications) org.apache.poi.ss.usermodel(org.apache.poi.ss.usermodel) XSSFWorkbook(org.apache.poi.xssf.usermodel.XSSFWorkbook) io.jmix.ui.component.data(io.jmix.ui.component.data) InstanceContainer(io.jmix.ui.model.InstanceContainer) XLSX(io.jmix.ui.download.DownloadFormat.XLSX) XSSFRichTextString(org.apache.poi.xssf.usermodel.XSSFRichTextString) BeanDefinition(org.springframework.beans.factory.config.BeanDefinition) Range(io.jmix.core.metamodel.model.Range) ParseException(java.text.ParseException) Nullable(javax.annotation.Nullable) AbstractTableExporter(io.jmix.uiexport.exporter.AbstractTableExporter) IOException(java.io.IOException) Datatype(io.jmix.core.metamodel.datatype.Datatype) Collectors(java.util.stream.Collectors) Table(io.jmix.ui.component.Table) ExportAction(io.jmix.uiexport.action.ExportAction) HSSFRichTextString(org.apache.poi.hssf.usermodel.HSSFRichTextString) Component(org.springframework.stereotype.Component) Entity(io.jmix.core.Entity) Downloader(io.jmix.ui.download.Downloader) Element(org.dom4j.Element) MetaProperty(io.jmix.core.metamodel.model.MetaProperty) HSSFWorkbook(org.apache.poi.hssf.usermodel.HSSFWorkbook) io.jmix.ui.component(io.jmix.ui.component) EntityDataGridItems(io.jmix.ui.component.data.meta.EntityDataGridItems) XSSFRichTextString(org.apache.poi.xssf.usermodel.XSSFRichTextString) HSSFRichTextString(org.apache.poi.hssf.usermodel.HSSFRichTextString) ByteArrayDataProvider(io.jmix.ui.download.ByteArrayDataProvider) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) XSSFRichTextString(org.apache.poi.xssf.usermodel.XSSFRichTextString) HSSFRichTextString(org.apache.poi.hssf.usermodel.HSSFRichTextString)

Aggregations

Entity (io.jmix.core.Entity)1 Id (io.jmix.core.Id)1 EntityValues (io.jmix.core.entity.EntityValues)1 Datatype (io.jmix.core.metamodel.datatype.Datatype)1 MetaProperty (io.jmix.core.metamodel.model.MetaProperty)1 MetaPropertyPath (io.jmix.core.metamodel.model.MetaPropertyPath)1 Range (io.jmix.core.metamodel.model.Range)1 Notifications (io.jmix.ui.Notifications)1 io.jmix.ui.component (io.jmix.ui.component)1 Table (io.jmix.ui.component.Table)1 io.jmix.ui.component.data (io.jmix.ui.component.data)1 EntityDataGridItems (io.jmix.ui.component.data.meta.EntityDataGridItems)1 ByteArrayDataProvider (io.jmix.ui.download.ByteArrayDataProvider)1 XLS (io.jmix.ui.download.DownloadFormat.XLS)1 XLSX (io.jmix.ui.download.DownloadFormat.XLSX)1 Downloader (io.jmix.ui.download.Downloader)1 InstanceContainer (io.jmix.ui.model.InstanceContainer)1 ExportAction (io.jmix.uiexport.action.ExportAction)1 AbstractTableExporter (io.jmix.uiexport.exporter.AbstractTableExporter)1 ExportMode (io.jmix.uiexport.exporter.ExportMode)1