/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2009 Jaspersoft Corporation. All rights reserved.
* http://www.jaspersoft.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JasperReports 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JasperReports. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Special thanks to Google 'Summer of Code 2005' program for supporting this development
*
* Contributors:
* Majid Ali Khan - majidkk@users.sourceforge.net
* Frank Sch�nheit - Frank.Schoenheit@Sun.COM
*/
package net.sf.jasperreports.engine.export.oasis;
import java.io.IOException;
import java.io.Writer;
/**
* @author Teodor Danciu (teodord@users.sourceforge.net)
* @version $Id: TableBuilder.java 3673 2010-04-01 13:14:19Z shertage $
*/
public class TableBuilder
{
private String tableName = null;
private int reportIndex = 0;
private Writer bodyWriter = null;
private Writer styleWriter = null;
private boolean isFrame = false;
private boolean isPageBreak = false;
protected TableBuilder(
String name,
Writer bodyWriter,
Writer styleWriter
)
{
isFrame = true;
isPageBreak = false;
this.bodyWriter = bodyWriter;
this.styleWriter = styleWriter;
this.tableName = "TBL_" + name;
}
protected TableBuilder(
int reportIndex,
int pageIndex,
Writer bodyWriter,
Writer styleWriter
)
{
isFrame = false;
isPageBreak = (reportIndex != 0 || pageIndex != 0);
this.reportIndex = reportIndex;
this.bodyWriter = bodyWriter;
this.styleWriter = styleWriter;
this.tableName = "TBL_" + reportIndex + "_" + pageIndex;
}
public void buildTableStyle(int width) throws IOException
{
styleWriter.write(" <style:style style:name=\"" + tableName + "\"");//FIXMEODT can we have only one page style per report?
if (!isFrame)
{
styleWriter.write(" style:master-page-name=\"master_" + reportIndex +"\"");
}
styleWriter.write(" style:family=\"table\">\n");
styleWriter.write(" <style:table-properties");
styleWriter.write(" table:align=\"left\" style:width=\"" + Utility.translatePixelsToInches(width) + "in\"");
if (isPageBreak)
{
styleWriter.write(" fo:break-before=\"page\"");
}
// FIXMEODT
// if (tableWidth != null)
// {
// styleWriter.write(" style:width=\""+ tableWidth +"in\"");
// }
// if (align != null)
// {
// styleWriter.write(" table:align=\""+ align +"\"");
// }
// if (margin != null)
// {
// styleWriter.write(" fo:margin=\""+ margin +"\"");
// }
// if (backGroundColor != null)
// {
// styleWriter.write(" fo:background-color=\""+ backGroundColor +"\"");
// }
styleWriter.write("/>\n");
styleWriter.write(" </style:style>\n");
}
public void buildTableHeader() throws IOException
{
bodyWriter.write("<table:table");
if (isFrame)
{
bodyWriter.write(" is-subtable=\"true\"");
}
bodyWriter.write(" table:name=\"");
bodyWriter.write(tableName);
bodyWriter.write("\"");
bodyWriter.write(" table:style-name=\"");
bodyWriter.write(tableName);
bodyWriter.write("\"");
bodyWriter.write(">\n");
}
public void buildTableFooter() throws IOException
{
bodyWriter.write("</table:table>\n");
}
public void buildRowStyle(int rowIndex, int rowHeight) throws IOException
{
String rowName = tableName + "_row_" + rowIndex;
styleWriter.write(" <style:style style:name=\"" + rowName + "\"");
styleWriter.write(" style:family=\"table-row\">\n");
styleWriter.write(" <style:table-row-properties");
styleWriter.write(" style:use-optimal-row-height=\"false\"");
//FIXMEODT check this styleWriter.write(" style:use-optimal-row-height=\"true\"");
styleWriter.write(" style:row-height=\"" + Utility.translatePixelsToInches(rowHeight) + "in\"");
styleWriter.write("/>\n");
styleWriter.write(" </style:style>\n");
}
public void buildRowHeader(int rowIndex) throws IOException
{
String rowName = tableName + "_row_" + rowIndex;
bodyWriter.write("<table:table-row");
bodyWriter.write(" table:style-name=\"" + rowName + "\"");
bodyWriter.write(">\n");
}
public void buildRowFooter() throws IOException
{
bodyWriter.write("</table:table-row>\n");
}
public void buildColumnStyle(int colIndex, int colWidth) throws IOException
{
String columnName = tableName + "_col_" + colIndex;
styleWriter.write(" <style:style style:name=\"" + columnName + "\"");
styleWriter.write(" style:family=\"table-column\">\n");
styleWriter.write(" <style:table-column-properties");
styleWriter.write(" style:column-width=\"" + Utility.translatePixelsToInches(colWidth) + "in\"");
styleWriter.write("/>\n");
styleWriter.write(" </style:style>\n");
}
public void buildColumnHeader(int colIndex) throws IOException
{
String columnName = tableName + "_col_" + colIndex;
bodyWriter.write("<table:table-column");
bodyWriter.write(" table:style-name=\"" + columnName + "\"");
bodyWriter.write(">\n");
}
public void buildColumnFooter() throws IOException
{
bodyWriter.write("</table:table-column>\n");
}
public void buildCellHeader(String cellStyleName, int colSpan, int rowSpan) throws IOException
{
//FIXMEODT officevalue bodyWriter.write("<table:table-cell office:value-type=\"string\"");
bodyWriter.write("<table:table-cell");
if (cellStyleName != null)
{
bodyWriter.write(" table:style-name=\"" + cellStyleName + "\"");
}
if (colSpan > 1)
{
bodyWriter.write(" table:number-columns-spanned=\"" + colSpan + "\"");
}
if (rowSpan > 1)
{
bodyWriter.write(" table:number-rows-spanned=\"" + rowSpan + "\"");
}
bodyWriter.write(">\n");
}
public void buildCellFooter() throws IOException {
bodyWriter.write("</table:table-cell>\n");
}
}