org.sigmah.server.servlet.exporter.utils.CalcUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.sigmah.server.servlet.exporter.utils.CalcUtils.java

Source

package org.sigmah.server.servlet.exporter.utils;

/*
 * #%L
 * Sigmah
 * %%
 * Copyright (C) 2010 - 2016 URD
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 * 
 * 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 General Public
 * License along with this program.  If not, see
 * <http://www.gnu.org/licenses/gpl-3.0.html>.
 * #L%
 */

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.httpclient.util.URIUtil;
import org.odftoolkit.odfdom.dom.style.OdfStyleFamily;
import org.odftoolkit.odfdom.dom.style.props.OdfParagraphProperties;
import org.odftoolkit.odfdom.dom.style.props.OdfStyleProperty;
import org.odftoolkit.odfdom.dom.style.props.OdfTableCellProperties;
import org.odftoolkit.odfdom.dom.style.props.OdfTextProperties;
import org.odftoolkit.odfdom.incubator.doc.office.OdfOfficeAutomaticStyles;
import org.odftoolkit.odfdom.incubator.doc.style.OdfStyle;
import org.odftoolkit.odfdom.type.Color;
import org.odftoolkit.simple.SpreadsheetDocument;
import org.odftoolkit.simple.style.Border;
import org.odftoolkit.simple.style.Font;
import org.odftoolkit.simple.style.StyleTypeDefinitions;
import org.odftoolkit.simple.style.StyleTypeDefinitions.CellBordersType;
import org.odftoolkit.simple.style.StyleTypeDefinitions.FontStyle;
import org.odftoolkit.simple.table.Cell;
import org.odftoolkit.simple.table.CellRange;
import org.odftoolkit.simple.table.Row;
import org.odftoolkit.simple.table.Table;
import org.sigmah.server.servlet.exporter.data.LogFrameExportData;

/**
 * @author sherzod (v1.3)
 */
public final class CalcUtils {

    private CalcUtils() {
        // Only provides static methods.
    }

    private static String coreStyleName = null;

    private static Map<OdfStyleProperty, String> styleMap;

    static {
        styleMap = new HashMap<OdfStyleProperty, String>();

        styleMap.put(OdfTableCellProperties.Border, "0.035cm solid #000000");
        styleMap.put(OdfTableCellProperties.WrapOption, "wrap");
        styleMap.put(OdfTableCellProperties.BackgroundColor, "#ffffff");
        styleMap.put(OdfTableCellProperties.VerticalAlign, "middle");
        styleMap.put(OdfParagraphProperties.TextAlign, "left");
        styleMap.put(OdfParagraphProperties.MarginBottom, "0.15cm");
        styleMap.put(OdfParagraphProperties.MarginTop, "0.15cm");
        styleMap.put(OdfTableCellProperties.PaddingTop, "0.15cm");
        styleMap.put(OdfTableCellProperties.PaddingBottom, "0.15cm");
        styleMap.put(OdfTableCellProperties.PaddingLeft, "0.25cm");
        styleMap.put(OdfTableCellProperties.PaddingRight, "0.25cm");
        styleMap.put(OdfTextProperties.FontWeight, "Regular");
        styleMap.put(OdfTextProperties.FontSize, "10pt");
    }

    public static String prepareCoreStyle(final SpreadsheetDocument doc) throws Throwable {
        OdfOfficeAutomaticStyles styles = doc.getContentDom().getOrCreateAutomaticStyles();
        OdfStyle style = styles.newStyle(OdfStyleFamily.TableCell);

        for (OdfStyleProperty property : styleMap.keySet()) {
            style.setProperty(property, styleMap.get(property));
        }
        coreStyleName = style.getStyleNameAttribute();
        return coreStyleName;
    }

    public static Cell putHeader(final Row row, int cellIndex, String header) {

        Cell cell = row.getCellByIndex(cellIndex);
        cell.setStringValue(header);
        cell.setBorders(CellBordersType.ALL_FOUR, getBlackBorder());
        cell.setCellBackgroundColor(ExportConstants.CALC_COL_GRAY10);
        cell.setFont(getBoldFont(10));
        cell.setVerticalAlignment(ExportConstants.ALIGN_VER_MIDDLE);
        cell.setHorizontalAlignment(ExportConstants.ALIGH_HOR_CENTER);
        cell.setTextWrapped(true);
        return cell;
    }

    public static Cell putGlobalExportHeader(final Row row, int cellIndex, String header) {

        Cell cell = row.getCellByIndex(cellIndex);
        cell.setStringValue(header);
        cell.setCellStyleName(coreStyleName);
        cell.setCellBackgroundColor(ExportConstants.CALC_COL_GRAY5);
        cell.setFont(getFont(10, false, true));
        return cell;
    }

    public static CellRange mergeCell(final Table table, int startCol, int startRow, int endCol, int endRow) {
        CellRange cellRange = table.getCellRangeByPosition(startCol, startRow, endCol, endRow);
        cellRange.merge();
        return cellRange;
    }

    public static void putGroupCell(final Table table, int colIndex, int rowIndex, String value) {
        final Cell cell = createBasicCell(table, colIndex, rowIndex, value);
        cell.setCellBackgroundColor(ExportConstants.CALC_COL_ORANGE);
        cell.setFont(getFont(10, false, true));
        cell.setHorizontalAlignment(ExportConstants.ALIGH_HOR_LEFT);
    }

    public static Cell createBasicCell(final Table table, int colIndex, int rowIndex, Object value) {
        final Cell cell = table.getCellByPosition(colIndex, rowIndex);
        String strValue;
        if (value == null) {
            strValue = "";
        } else if (value instanceof String) {
            strValue = (String) value;
        } else if (value instanceof Double) {
            Double d = (Double) value;
            strValue = LogFrameExportData.AGGR_AVG_FORMATTER.format(d.doubleValue());
        } else if (value instanceof Long) {
            Long l = (Long) value;
            strValue = LogFrameExportData.AGGR_SUM_FORMATTER.format(l.longValue());
        } else { // date
            strValue = ExportConstants.EXPORT_DATE_FORMAT.format((Date) value);
        }

        cell.setStringValue(strValue);
        cell.setCellStyleName(coreStyleName);
        return cell;
    }

    public static Border getBlackBorder() {
        return new Border(Color.BLACK, 1, StyleTypeDefinitions.SupportedLinearMeasure.PT);
    }

    public static Font getBoldFont(int size) {
        return getFont(size, true, false);
    }

    public static Font getFont(int size, boolean bold, boolean italic) {

        FontStyle style = StyleTypeDefinitions.FontStyle.REGULAR;
        if (bold)
            style = StyleTypeDefinitions.FontStyle.BOLD;
        if (italic)
            style = StyleTypeDefinitions.FontStyle.ITALIC;
        return new Font("Arial", style, size, Color.BLACK);
    }

    public static void putEmptyRow(final Table table, int rowIndex) {
        Row row = table.getRowByIndex(rowIndex);
        row.setHeight(3.8, false);
    }

    public static void applyLink(final Cell cell, String linkName, String target) throws Throwable {
        java.net.URI uri = new java.net.URI(URIUtil.encodeQuery("#" + normalizeAsLink(target)));
        cell.addParagraph(linkName).applyHyperlink(uri);
    }

    public static String normalizeAsLink(String linkName) {
        linkName = linkName.replace(" ", "_");
        if (linkName.length() > 25) {
            linkName = linkName.substring(0, 25);
        }
        return linkName;
    }

    public static void putMainTitle(final Table table, int rowIndex, int maxCols, String title) {
        Row row = table.getRowByIndex(rowIndex);
        Cell cell = row.getCellByIndex(1);
        cell.setStringValue(title);
        cell.setTextWrapped(true);
        cell.setFont(CalcUtils.getBoldFont(14));
        cell.setVerticalAlignment(ExportConstants.ALIGN_VER_MIDDLE);
        cell.setHorizontalAlignment(ExportConstants.ALIGH_HOR_CENTER);
        CellRange cellRange = table.getCellRangeByPosition(1, rowIndex, maxCols, rowIndex);
        cellRange.merge();
        row.setHeight(7, false);
    }
}