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

org.efaps.dataexporter.model.Column Maven / Gradle / Ivy

Go to download

Data-exporter is a Java library to export the tabular data (like List of rows) into many output formats. As of latest release, this library supports following formats.

The newest version!
/*
 * #%L
 * data-exporter
 * %%
 * Copyright (C) 2012 - 2013 http://www.brsanthu.com
 * %%
 * 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.
 * #L%
 */
package org.efaps.dataexporter.model;

import java.util.List;

import org.efaps.dataexporter.TextAligner;

/**
 * Base class for all other columns. This abstract class also provides some common functionality
 * which subclasses can make use of.
 * 
 * @author Santhosh Kumar
 */
public abstract class Column {
    public static TextAligner aligner = new TextAligner();
    
    private CellValueGenerator cellValueGenerator = null;
    private String title = null;
    private String title2 = "";
    private String title3 = "";
    private String name = null;
    private int width = 0;
    private AlignType align = null;
    private boolean generatesOwnData = false;
    private boolean nillable = false;

    protected String headerCellCssClass = null;
    protected String headerCellCssId = null;
    protected String headerCellCssStyle = null;
    protected String rowCellCssClass = null;
    protected String rowCellCssId = null;
    protected String rowCellCssStyle = null;

    
    public Column(String name) {
        this(name, name.length());
    }

    public Column(String name, int width) {
        this(name, null, width, AlignType.MIDDLE_LEFT);
    }

    public Column(String name, int width, AlignType align) {
        this(name, null, width, align);
    }

    public Column(String name, String title, int width, AlignType align) {
        super();
        this.title = title==null?name:title;
        this.name = name;
        this.width = width;
        this.align = align;
    }
    
    public CellValueGenerator getCellValueGenerator() {
        return cellValueGenerator;
    }

    public Column setCellValueGenerator(CellValueGenerator generator) {
        this.cellValueGenerator = generator;
        return this;
    }

    public boolean isGeneratesOwnData() {
        return generatesOwnData;
    }

    public Column setGeneratesOwnData(boolean generatesOwnData) {
        this.generatesOwnData = generatesOwnData;
        return this;
    }
    
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getTitle2() {
        return title2;
    }

    public void setTitle2(String title2) {
        this.title2 = title2;
    }

    public String getTitle3() {
        return title3;
    }

    public void setTitle3(String title3) {
        this.title3 = title3;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public AlignType getAlign() {
        return align;
    }

    public void setAlign(AlignType align) {
        this.align = align;
    }

    public String getHeaderCellCssClass() {
        return headerCellCssClass;
    }

    public void setHeaderCellCssClass(String headerCellCssClass) {
        this.headerCellCssClass = headerCellCssClass;
    }

    public String getHeaderCellCssId() {
        return headerCellCssId;
    }

    public void setHeaderCellCssId(String headerCellCssId) {
        this.headerCellCssId = headerCellCssId;
    }

    public String getHeaderCellCssStyle() {
        return headerCellCssStyle;
    }

    public void setHeaderCellCssStyle(String headerCellCssStyle) {
        this.headerCellCssStyle = headerCellCssStyle;
    }

    public String getRowCellCssClass() {
        return rowCellCssClass;
    }

    public void setRowCellCssClass(String rowCellCssClass) {
        this.rowCellCssClass = rowCellCssClass;
    }

    public String getRowCellCssId() {
        return rowCellCssId;
    }

    public void setRowCellCssId(String rowCellCssId) {
        this.rowCellCssId = rowCellCssId;
    }

    public String getRowCellCssStyle() {
        return rowCellCssStyle;
    }

    public void setRowCellCssStyle(String rowCellCssStyle) {
        this.rowCellCssStyle = rowCellCssStyle;
    }

    public boolean isNillable() {
        return nillable;
    }

    public void setNillable(boolean nillable) {
        this.nillable = nillable;
    }
    
    /**
     * Aligns the given cellData using the details given in cellDetails
     * and alignment override value returned by the call back (if there is one).
     * 

* This method is usually called by the specific column implementation after they have formatted * the string. * * @param cellDetails the object containing the details about this cell * @param cellData the string which should be aligned * * @return the ArrayList containing the Strings split and aligned as per cellDetails */ public List align(CellDetails cellDetails, String cellData) { return align(cellDetails, cellData, " "); } public List align(CellDetails cellDetails, String cellData, String filler) { AlignType alignOverride = cellDetails.getCellAlign(); if (alignOverride == null) { alignOverride = cellDetails.getColumn().getAlign(); } return align(cellDetails.getColumn().getWidth(), cellDetails.getRowHeight(), alignOverride, cellData, filler); } public static List align(int width, int height, AlignType align, String value) { return align(width, height, align, value, " "); } public static List align(int width, int height, AlignType align, String value, String filler) { return aligner.align(width, height, align, value, filler); } /** * Method calculates the approximate row height based on the given data length * and this column's width. It is only a approximation because once the data is split and aligned * some times it could have been rendered in less height than what is returned in this method. * * @param cellData the formatted string which would get displayed in the cell. * * @return the approximation height that is required to display this cellData in this column */ public int getMaxRowHeight(String cellData) { return getMaxRowHeight(getWidth(), cellData); } public static int getMaxRowHeight(int width, String value) { if (width <= 0) { width = 1; } return (int) Math.ceil((float) value.length()/width); } /** * Implementation should calculate the maximum row height they would be needed to render * the defaultCellValue given in cellDetails parameter. * * @param cellDetails the object containing the details about the cell * * @return the positive integer specifying the minimum row height this cell needs to render * the cell value. */ public abstract int getMaxRowHeight(CellDetails cellDetails); /** * Implementation should format the cell value object as appropriate into a string, align * the string vertically/horizontally to fit with in the column width and row height. Allowed column * width is specified via cellDetails.getColumn().getWidth(). Allowed row height * is provided via cellDetails.getRowHeight() * * @param cellDetails * * @return List of Strings to be rendered for this column. List should have exactly * cellDetails.getRowHeight() strings and each of size cellDetails.getColumn().getWidth() */ public abstract String format(CellDetails cellDetails); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy