org.sysmodb.xml.HSSFXMLStyleHelper.java Source code

Java tutorial

Introduction

Here is the source code for org.sysmodb.xml.HSSFXMLStyleHelper.java

Source

/*******************************************************************************
 * Copyright (c) 2009-2013, University of Manchester
 *  
 * Licensed under the New BSD License. 
 * Please see LICENSE file that is distributed with the source code
 ******************************************************************************/
package org.sysmodb.xml;

import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFPalette;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
import org.apache.poi.ss.usermodel.CellStyle;

/**
 * 
 * @author Finn, Stuart Owen
 */

public class HSSFXMLStyleHelper implements XMLStyleHelper {

    private static HSSFWorkbook workbook;
    private static HSSFPalette palette;

    private static final HSSFColor HSSF_AUTO = HSSFColorPredefined.AUTOMATIC.getColor();

    public HSSFXMLStyleHelper(HSSFWorkbook wb) {
        workbook = wb;
        palette = wb.getCustomPalette();
    }

    public String getBGColour(CellStyle style) {
        return getRGBString(style.getFillForegroundColor());
    }

    public boolean areFontsEmpty(CellStyle style) {
        HSSFCellStyle newStyle = (HSSFCellStyle) style;
        HSSFFont font = newStyle.getFont(workbook);
        if (font.getBold())
            return false;
        if (font.getItalic())
            return false;
        if (font.getUnderline() != HSSFFont.U_NONE)
            return false;
        // Ignore same-ish defaults
        if (font.getFontHeightInPoints() != 10 && font.getFontHeightInPoints() != 11)
            return false;
        // Arial is default for Excel, Calibri is default for OO
        if (!font.getFontName().equals("Arial") && !font.getFontName().equals("Calibri"))
            return false;
        if ((font.getColor() != HSSFFont.COLOR_NORMAL) && (getRGBString(font.getColor()) != null)
                && !getRGBString(font.getColor()).equals("#000"))
            return false;

        return true;
    }

    @Override
    public void writeFontProperties(XMLStreamWriter xmlWriter, CellStyle style) throws XMLStreamException {
        HSSFCellStyle newStyle = (HSSFCellStyle) style;
        HSSFFont font = newStyle.getFont(workbook);
        if (font.getBold()) {
            xmlWriter.writeStartElement("font-weight");
            xmlWriter.writeCharacters("bold");
            xmlWriter.writeEndElement();
        }
        if (font.getItalic()) {
            xmlWriter.writeStartElement("font-style");
            xmlWriter.writeCharacters("italics");
            xmlWriter.writeEndElement();
        }
        if (font.getUnderline() != HSSFFont.U_NONE) {
            xmlWriter.writeStartElement("text-decoration");
            xmlWriter.writeCharacters("underline");
            xmlWriter.writeEndElement();
        }
        // Ignore same-ish defaults
        if (font.getFontHeightInPoints() != 10 && font.getFontHeightInPoints() != 11) {
            xmlWriter.writeStartElement("font-size");
            xmlWriter.writeCharacters(String.valueOf(font.getFontHeightInPoints() + "pt"));
            xmlWriter.writeEndElement();
        }
        // Arial is default for Excel, Calibri is default for OO
        if (!font.getFontName().equals("Arial") && !font.getFontName().equals("Calibri")) {
            xmlWriter.writeStartElement("font-family");
            xmlWriter.writeCharacters(font.getFontName());
            xmlWriter.writeEndElement();
        }
        if ((font.getColor() != HSSFFont.COLOR_NORMAL) && (getRGBString(font.getColor()) != null)
                && !getRGBString(font.getColor()).equals("#000")) {
            xmlWriter.writeStartElement("color");
            xmlWriter.writeCharacters(getRGBString(font.getColor()));
            xmlWriter.writeEndElement();
        }

    }

    private String getRGBString(short index) {
        String string = null;
        HSSFColor color = palette.getColor(index);

        if (index == HSSF_AUTO.getIndex() || color == null) {

        } else {
            short[] rgb = color.getTriplet();
            string = "#";
            for (int i = 0; i <= 2; i++) {
                String colourSection = Integer.toHexString((int) rgb[i]);
                if (colourSection.length() == 1)
                    colourSection = "0" + colourSection;

                string += colourSection;
            }
        }

        return string;
    }

}