org.jberet.support.io.ExcelStreamingItemWriter.java Source code

Java tutorial

Introduction

Here is the source code for org.jberet.support.io.ExcelStreamingItemWriter.java

Source

/*
 * Copyright (c) 2014 Red Hat, Inc. and/or its affiliates.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 * Cheng Fang - Initial API and implementation
 */

package org.jberet.support.io;

import java.io.IOException;
import java.io.InputStream;
import javax.batch.api.BatchProperty;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import javax.inject.Named;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jberet.support._private.SupportMessages;

/**
 * An implementation of {@code javax.batch.api.chunk.ItemWriter} for Excel 2007 OOXML (.xlsx) file format.
 * This implementation is currently based on Apache POI SXSSF (buffered streaming) API, and is suitable for handling
 * large data set. Note that different versions of Excel have different limits for row number and column numbers.
 * As of Excel 2010, the row number limit is 1048576. For more details, see
 * http://office.microsoft.com/en-us/excel-help/excel-specifications-and-limits-HP010342495.aspx
 *
 * @see     ExcelUserModelItemWriter
 * @see     ExcelItemReaderWriterBase
 * @since   1.1.0
 */
@Named
@Dependent
public class ExcelStreamingItemWriter extends ExcelUserModelItemWriter {
    /**
     * Whether to compress the temp files in the course of generating Excel file, defaults to false.
     */
    @Inject
    @BatchProperty
    protected Boolean compressTempFiles;

    @Override
    protected Workbook createWorkbook(final InputStream templateInputStream)
            throws IOException, InvalidFormatException {
        if (templateInputStream != null) {
            final Workbook template = WorkbookFactory.create(templateInputStream);
            if (template instanceof XSSFWorkbook) {
                workbook = compressTempFiles == Boolean.TRUE
                        ? new SXSSFWorkbook((XSSFWorkbook) template, -1, compressTempFiles)
                        : new SXSSFWorkbook((XSSFWorkbook) template, -1);
                return template;
            } else {
                throw SupportMessages.MESSAGES.incompatibleExcelFileFormat(templateResource);
            }
        } else if (resource.endsWith("xlsx")) {
            final SXSSFWorkbook workbook1 = new SXSSFWorkbook(-1);
            if (compressTempFiles == Boolean.TRUE) {
                workbook1.setCompressTempFiles(true);
            }
            workbook = workbook1;
        } else {
            throw SupportMessages.MESSAGES.incompatibleExcelFileFormat(resource);
        }
        return null;
    }
}