fr.ens.biologie.genomique.eoulsan.translators.io.XLSXTranslatorOutputFormat.java Source code

Java tutorial

Introduction

Here is the source code for fr.ens.biologie.genomique.eoulsan.translators.io.XLSXTranslatorOutputFormat.java

Source

/*
 *                  Eoulsan development code
 *
 * This code may be freely distributed and modified under the
 * terms of the GNU Lesser General Public License version 2.1 or
 * later and CeCILL-C. This should be distributed with the code.
 * If you do not have a copy, see:
 *
 *      http://www.gnu.org/licenses/lgpl-2.1.txt
 *      http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.txt
 *
 * Copyright for this code is held jointly by the Genomic platform
 * of the Institut de Biologie de l'cole normale suprieure and
 * the individual authors. These should be listed in @author doc
 * comments.
 *
 * For more information on the Eoulsan project and its aims,
 * or to join the Eoulsan Google group, visit the home page
 * at:
 *
 *      http://outils.genomique.biologie.ens.fr/eoulsan
 *
 */

package fr.ens.biologie.genomique.eoulsan.translators.io;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Hyperlink;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;

/**
 * This class define a TranslatorOutputFormat that generate a Microsoft Excel
 * XLSX file.
 * @since 2.0
 * @author Laurent Jourdren
 */
public class XLSXTranslatorOutputFormat implements TranslatorOutputFormat {

    private static final int MAX_LINES_IN_MEMORY = 10;

    private final OutputStream os;
    private final SXSSFWorkbook wb = new SXSSFWorkbook(MAX_LINES_IN_MEMORY);
    private final Sheet sheet = this.wb.createSheet("new sheet");
    private final CreationHelper createHelper = wb.getCreationHelper();
    private final CellStyle style;
    private int rowCount;
    private int colCount;
    private Row row = this.sheet.createRow(this.rowCount++);

    @Override
    public void addHeaderField(final String fieldName) throws IOException {

        final Cell cell = this.row.createCell(this.colCount++);
        cell.setCellValue(new XSSFRichTextString(fieldName));
        cell.setCellStyle(this.style);
    }

    @Override
    public void newLine() throws IOException {

        this.colCount = 0;
        this.row = this.sheet.createRow(this.rowCount++);
    }

    @Override
    public void writeEmpty() throws IOException {

        this.row.createCell(this.colCount++);
    }

    @Override
    public void writeLong(final long l) throws IOException {

        final Cell cell = this.row.createCell(this.colCount++);
        cell.setCellValue(l);
    }

    @Override
    public void writeDouble(final double d) throws IOException {

        final Cell cell = this.row.createCell(this.colCount++);
        cell.setCellValue(d);
    }

    @Override
    public void writeText(final String text) throws IOException {

        final Cell cell = this.row.createCell(this.colCount++);
        if (text != null) {
            cell.setCellValue(new XSSFRichTextString(text));
        }
    }

    @Override
    public void writeLink(final String text, final String link) throws IOException {

        final Cell cell = this.row.createCell(this.colCount++);

        if (text != null) {

            if (link != null) {
                Hyperlink hyperlink = createHelper.createHyperlink(Hyperlink.LINK_URL);
                hyperlink.setAddress(link);
                cell.setHyperlink(hyperlink);
            }

            cell.setCellValue(new XSSFRichTextString(text));
        }

    }

    @Override
    public void close() throws IOException {

        this.wb.write(this.os);
        this.os.close();

        // Dispose of temporary files backing the workbook on disk
        this.wb.dispose();
    }

    //
    // Constructor
    //

    /**
     * Public constructor.
     * @param os output stream
     */
    public XLSXTranslatorOutputFormat(final OutputStream os) {

        if (os == null) {
            throw new NullPointerException("The output stream is null");
        }

        this.os = os;

        // Temporary files will be compressed
        this.wb.setCompressTempFiles(true);

        // Create a new font and alter it.
        Font font = this.wb.createFont();
        font.setItalic(true);
        font.setFontHeightInPoints((short) 10);

        // Fonts are set into a style so create a new one to use.
        this.style = this.wb.createCellStyle();
        this.style.setFillForegroundColor(HSSFColor.ORANGE.index);
        this.style.setFillPattern(CellStyle.SOLID_FOREGROUND);
        this.style.setFont(font);
    }

    /**
     * Public constructor.
     * @param file output file
     */
    public XLSXTranslatorOutputFormat(final File file) throws IOException {

        this(new FileOutputStream(file));
    }

}