All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tools.dynamia.web.util.HtmlTableBuilder Maven / Gradle / Ivy

/*
 * Copyright (C) 2021 Dynamia Soluciones IT S.A.S - NIT 900302344-1
 * Colombia / South America
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


package tools.dynamia.web.util;

import java.io.Serializable;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Date;

/**
 * Util class to build and render to String html table
 *
 * @author Ing. Mario Serrano
 */
public class HtmlTableBuilder implements Serializable {

    public static int LEFT = -1, CENTER = 0, RIGHT = 1;
    private final StringBuilder sb = new StringBuilder();
    private final NumberFormat numberFormat = NumberFormat.getInstance();
    private final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);
    private final NumberFormat decimalFormat = DecimalFormat.getInstance();
    private boolean rowCreated;
    private String title;
    private int titleLevel = 1;
    private int currencyAlign = 1;
    private int numberAlign = 1;
    private int dateAlign;
    private String description;
    private String styleClass = "";
    private String rowClass = "";
    private String cellClass = "";
    private String headerClass = "";
    private String headerBackground = "#ccc";

    public HtmlTableBuilder() {
        this("100%", "12px");
    }

    public HtmlTableBuilder(String width, String fontSize) {
        sb.append(String.format("", width, fontSize));
    }

    public void setCurrencyAlign(int i) {
        this.currencyAlign = i;
    }

    public void setDateAlign(int i) {
        this.dateAlign = i;
    }

    public void setTitle(String title, int level) {
        if (titleLevel <= 0) {
            titleLevel = 1;
        }
        this.title = title;
        this.titleLevel = level;
    }

    public void addRow() {
        if (rowCreated) {
            sb.append("");
        }
        rowCreated = true;
        sb.append(String.format("", rowClass));

    }

    public void addColumnHeader(String... name) {
        for (String text : name) {
            sb.append(String.format("");
        }

    }

    public void addData(Object... data) {
        for (Object obj : data) {
            if (obj instanceof BigDecimal) {
                addCurrency((BigDecimal) obj);
            } else if (obj instanceof Integer) {
                addInteger((Integer) obj);
            } else if (obj instanceof Number) {
                addNumber((Number) obj);
            } else if (obj instanceof Date) {
                addDate((Date) obj);
            } else {
                addText(obj);
            }
        }
    }

    public void addText(Object text) {
        sb.append(String.format("");
    }

    public void addCurrency(BigDecimal number) {
        String align = computeAlign("right", currencyAlign);
        sb.append(String.format("");
    }

    public void addInteger(Integer integer) {
        sb.append(String.format("");
    }

    public void addNumber(Number number) {
        String align = computeAlign("right", numberAlign);
        sb.append(String.format("");
    }


    public void addDate(Date fecha) {
        String align = computeAlign("center", dateAlign);
        sb.append(String.format("");
    }

    private String computeAlign(String defaultAlign, int align) {
        String result = defaultAlign;
        if (align == RIGHT) {
            result = "right";
        } else if (align == LEFT) {
            result = "left";
        } else if (align == CENTER) {
            result = "center";
        }
        return result;
    }

    public String render() {
        if (rowCreated) {
            sb.append("");
        }
        sb.append("
", headerBackground, headerClass)); sb.append(text); sb.append("", cellClass)); sb.append(text); sb.append("", align, cellClass)); sb.append("$").append(numberFormat.format(number)); sb.append("", cellClass)); sb.append(integer); sb.append("", align, cellClass)); if (number instanceof Double) { sb.append(decimalFormat.format(number)); } else { sb.append(numberFormat.format(number)); } sb.append("", align, cellClass)); sb.append(dateFormat.format(fecha)); sb.append("
"); String result = sb.toString(); if (title != null) { title = "" + title + ""; if (description != null) { title += description; } result = title + result; } return result; } public void setDescription(String description) { if (description != null) { this.description = "

" + description + "

"; } } @Override public String toString() { return render(); } /** * Shortcut chained method to invoke addRow() and then addData(..) methods * * @param data */ public HtmlTableBuilder addRowAndData(Object... data) { addRow(); addData(data); return this; } public String getDescription() { return description; } public String getStyleClass() { return styleClass; } public void setStyleClass(String styleClass) { this.styleClass = styleClass; } public String getRowClass() { return rowClass; } public void setRowClass(String rowClass) { this.rowClass = rowClass; } public String getCellClass() { return cellClass; } public void setCellClass(String cellClass) { this.cellClass = cellClass; } public String getHeaderClass() { return headerClass; } public void setHeaderClass(String headerClass) { this.headerClass = headerClass; } public String getHeaderBackground() { return headerBackground; } public void setHeaderBackground(String headerBackground) { this.headerBackground = headerBackground; } public int getCurrencyAlign() { return currencyAlign; } public int getDateAlign() { return dateAlign; } public int getNumberAlign() { return numberAlign; } public void setNumberAlign(int numberAlign) { this.numberAlign = numberAlign; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy