de.iteratec.iteraplan.businesslogic.exchange.elasticExcel.export.template.ExcelStylesCreator.java Source code

Java tutorial

Introduction

Here is the source code for de.iteratec.iteraplan.businesslogic.exchange.elasticExcel.export.template.ExcelStylesCreator.java

Source

/*
 * iteraplan is an IT Governance web application developed by iteratec, GmbH
 * Copyright (C) 2004 - 2014 iteratec, GmbH
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Affero General Public License version 3 as published by
 * the Free Software Foundation with the addition of the following permission
 * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
 * WORK IN WHICH THE COPYRIGHT IS OWNED BY ITERATEC, ITERATEC DISCLAIMS THE
 * WARRANTY OF NON INFRINGEMENT  OF THIRD PARTY RIGHTS.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program; if not, see http://www.gnu.org/licenses or write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301 USA.
 *
 * You can contact iteratec GmbH headquarters at Inselkammerstr. 4
 * 82008 Munich - Unterhaching, Germany, or at email address info@iteratec.de.
 *
 * The interactive user interfaces in modified source and object code versions
 * of this program must display Appropriate Legal Notices, as required under
 * Section 5 of the GNU Affero General Public License version 3.
 *
 * In accordance with Section 7(b) of the GNU Affero General Public License
 * version 3, these Appropriate Legal Notices must retain the display of the
 * "iteraplan" logo. If the display of the logo is not reasonably
 * feasible for technical reasons, the Appropriate Legal Notices must display
 * the words "Powered by iteraplan".
 */
package de.iteratec.iteraplan.businesslogic.exchange.elasticExcel.export.template;

import java.util.Map;

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.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;

import com.google.common.collect.Maps;

/**
 * Generates the styles required for the Excel template. All the styles defined in {@link IteraExcelStyle} 
 * will be generated by this class.
 */
public final class ExcelStylesCreator {

    private static final short EXCEL_HEADER_FONT_HEIGHT = 10;
    private static final String EXCEL_HEADER_FONT_NAME = "Arial";

    /** Default constructor. */
    private ExcelStylesCreator() {
        // prevents class instances
    }

    /**
     * Generates the Excel styles. It is ensured, that all styles names defined in 
     * {@link IteraExcelStyle} enum class will be contained in returned map.
     * 
     * @param wb the workbook to create the styles for
     * @return the map containing the Excel styles
     */
    public static Map<IteraExcelStyle, CellStyle> createStyles(Workbook wb) {
        Map<IteraExcelStyle, CellStyle> styles = Maps.newEnumMap(IteraExcelStyle.class);

        CellStyle headerStyle = getHeaderStyle(wb);
        styles.put(IteraExcelStyle.HEADER, headerStyle);

        CellStyle dataStyle = getDataStyle(wb);
        styles.put(IteraExcelStyle.DATA, dataStyle);

        CellStyle dataHiddenStyle = getDataHiddenStyle(wb, dataStyle);
        styles.put(IteraExcelStyle.DATA_HIDDEN, dataHiddenStyle);

        CellStyle dateStyle = getDateStyle(wb, dataStyle);
        styles.put(IteraExcelStyle.DATA_DATE, dateStyle);

        CellStyle hyperlinkStyle = getHyperlinkStyle(wb);
        styles.put(IteraExcelStyle.HYPERLINK, hyperlinkStyle);

        return styles;
    }

    private static CellStyle getHeaderStyle(Workbook workbook) {
        CellStyle style = workbook.createCellStyle();
        style.setFillPattern(CellStyle.SOLID_FOREGROUND);
        setCustomVioletForegroundColor(workbook, style);
        Font font = workbook.createFont();
        font.setColor(IndexedColors.WHITE.getIndex());
        font.setBoldweight(Font.BOLDWEIGHT_BOLD);
        font.setFontHeightInPoints(EXCEL_HEADER_FONT_HEIGHT);
        font.setFontName(EXCEL_HEADER_FONT_NAME);
        style.setFont(font);

        return style;
    }

    private static void setCustomVioletForegroundColor(Workbook wb, CellStyle style) {
        if (wb instanceof HSSFWorkbook) {
            HSSFPalette palette = ((HSSFWorkbook) wb).getCustomPalette();
            palette.setColorAtIndex(HSSFColor.VIOLET.index, (byte) 169, (byte) 33, (byte) 142);
            style.setFillForegroundColor(IndexedColors.VIOLET.getIndex());
        } else {
            XSSFColor xssfColor = new XSSFColor(new java.awt.Color(169, 33, 142));
            ((XSSFCellStyle) style).setFillForegroundColor(xssfColor);
        }
    }

    private static CellStyle getDataStyle(Workbook workbook) {
        CellStyle style = workbook.createCellStyle();
        style.setBorderRight(CellStyle.BORDER_THIN);
        style.setRightBorderColor(IndexedColors.BLACK.getIndex());
        style.setBorderLeft(CellStyle.BORDER_THIN);
        style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
        style.setBorderTop(CellStyle.BORDER_THIN);
        style.setTopBorderColor(IndexedColors.BLACK.getIndex());
        style.setBorderBottom(CellStyle.BORDER_THIN);
        style.setBottomBorderColor(IndexedColors.BLACK.getIndex());

        return style;
    }

    private static CellStyle getDataHiddenStyle(Workbook workbook, CellStyle dataStyle) {
        CellStyle style = workbook.createCellStyle();
        style.cloneStyleFrom(dataStyle);
        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setFillPattern(CellStyle.SOLID_FOREGROUND);

        return style;
    }

    private static CellStyle getDateStyle(Workbook workbook, CellStyle dataStyle) {
        CellStyle cellStyle = workbook.createCellStyle();
        cellStyle.cloneStyleFrom(dataStyle);
        cellStyle.setDataFormat(workbook.getCreationHelper().createDataFormat().getFormat("m/d/yy"));

        return cellStyle;
    }

    private static CellStyle getHyperlinkStyle(Workbook workbook) {
        CellStyle hyperlinkStyle = workbook.createCellStyle();
        Font hyperlinkFont = workbook.createFont();
        hyperlinkFont.setUnderline(Font.U_SINGLE);
        hyperlinkFont.setColor(IndexedColors.BLUE.getIndex());
        hyperlinkStyle.setFont(hyperlinkFont);

        return hyperlinkStyle;
    }
}