/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* 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 Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.reporting.engine.classic.core.layout.table;
import junit.framework.TestCase;
import org.junit.Assert;
import org.pentaho.reporting.engine.classic.core.AttributeNames;
import org.pentaho.reporting.engine.classic.core.Band;
import org.pentaho.reporting.engine.classic.core.ClassicEngineBoot;
import org.pentaho.reporting.engine.classic.core.ClassicEngineCoreModule;
import org.pentaho.reporting.engine.classic.core.Element;
import org.pentaho.reporting.engine.classic.core.MasterReport;
import org.pentaho.reporting.engine.classic.core.ReportProcessingException;
import org.pentaho.reporting.engine.classic.core.layout.model.LogicalPageBox;
import org.pentaho.reporting.engine.classic.core.layout.model.RenderBox;
import org.pentaho.reporting.engine.classic.core.layout.model.RenderNode;
import org.pentaho.reporting.engine.classic.core.layout.output.ContentProcessingException;
import org.pentaho.reporting.engine.classic.core.style.BandStyleKeys;
import org.pentaho.reporting.engine.classic.core.style.ElementStyleKeys;
import org.pentaho.reporting.engine.classic.core.style.TableLayout;
import org.pentaho.reporting.engine.classic.core.style.TextStyleKeys;
import org.pentaho.reporting.engine.classic.core.testsupport.DebugReportRunner;
import org.pentaho.reporting.engine.classic.core.testsupport.selector.MatchFactory;
import org.pentaho.reporting.engine.classic.core.util.geom.StrictGeomUtility;
import org.pentaho.reporting.libraries.base.util.GenericObjectTable;
@SuppressWarnings("HardCodedStringLiteral")
public class TableLayoutTest extends TestCase
{
public TableLayoutTest()
{
}
public TableLayoutTest(final String name)
{
super(name);
}
protected void setUp() throws Exception
{
ClassicEngineBoot.getInstance().start();
}
public void testLayoutSmallToLarge() throws ReportProcessingException, ContentProcessingException
{
if (DebugReportRunner.isSkipLongRunTest())
{
return;
}
final int[][] layout = new int[][]{
{200, 400},
{400, 800}
};
final Band table = createTable(layout, 1);
final LogicalPageBox logicalPageBox = DebugReportRunner.layoutSingleBand(new MasterReport(), table);
// TESTBUG: Test disabled for a few days, until we can deal with it properly
// ModelPrinter.print(logicalPageBox);
// assertWidth(layout, logicalPageBox);
}
public void testLayoutLargeToSmall() throws ReportProcessingException, ContentProcessingException
{
final int[][] layout = new int[][]{
{300, 600},
{200, 100}
};
final Band table = createTable(layout, 1);
final LogicalPageBox logicalPageBox = DebugReportRunner.layoutSingleBand(new MasterReport(), table);
// TESTBUG: Test disabled for a few days, until we can deal with it properly
// ModelPrinter.INSTANCE.print(logicalPageBox);
// assertWidth(layout, logicalPageBox);
}
public void assertWidth(final int[][] layout, final RenderNode logicalPageBox)
{
final GenericObjectTable<Long> table = new GenericObjectTable<Long>();
for (int r = 0; r < layout.length; r++)
{
final int[] cells = layout[r];
for (int c = 0; c < cells.length; c++)
{
final Long object = table.getObject(0, c);
final long l = StrictGeomUtility.toInternalValue(cells[c]);
if (object == null)
{
table.setObject(0, c, Long.valueOf(l));
}
else
{
table.setObject(0, c, Long.valueOf(Math.max(object.longValue(), l)));
}
}
}
for (int r = 0; r < layout.length; r++)
{
final int[] cells = layout[r];
for (int c = 0; c < cells.length; c++)
{
final String cellName = "c-" + r + "-" + c;
final RenderNode[] elementsByName = MatchFactory.findElementsByName(logicalPageBox, cellName);
assertEquals("Cell '" + cellName + "' exists", 1, elementsByName.length);
assertEquals(table.getObject(0, c).longValue(), elementsByName[0].getWidth());
}
}
}
public void testFixedSizeTableCells() throws Exception
{
final Band tableCell1 = TableTestUtil.createCell(0, 0, 100, 20, TableTestUtil.createDataItem("Text", 100, 20));
tableCell1.setAttribute(AttributeNames.Table.NAMESPACE, AttributeNames.Table.ROWSPAN, Integer.valueOf(2));
final Band tableCell2 = TableTestUtil.createCell(0, 1, 100, 20, TableTestUtil.createDataItem("Text2", 100, 20));
final Band tableRow = new Band();
tableRow.setLayout(BandStyleKeys.LAYOUT_TABLE_ROW);
tableRow.addElement(tableCell1);
tableRow.addElement(tableCell2);
final Band tableCell3 = TableTestUtil.createCell(1, 1, 100, 20, TableTestUtil.createDataItem("Text3", 100, 20));
final Band tableRow2 = new Band();
tableRow2.setLayout(BandStyleKeys.LAYOUT_TABLE_ROW);
tableRow2.addElement(tableCell3);
final Band tableSection = new Band();
tableSection.setLayout(BandStyleKeys.LAYOUT_TABLE_BODY);
tableSection.addElement(tableRow);
tableSection.addElement(tableRow2);
final MasterReport report = new MasterReport();
report.getReportHeader().setLayout(BandStyleKeys.LAYOUT_TABLE);
report.getReportHeader().addElement(tableSection);
final LogicalPageBox logicalPageBox = DebugReportRunner.layoutPage(report, 0);
//ModelPrinter.print(logicalPageBox);
final RenderNode renderedCell1 = MatchFactory.findElementByName(logicalPageBox, "c-0-0");
assertNotNull(renderedCell1);
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell1.getY());
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell1.getX());
assertEquals(StrictGeomUtility.toInternalValue(40), renderedCell1.getHeight());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell1.getWidth());
final RenderNode renderedCell2 = MatchFactory.findElementByName(logicalPageBox, "c-0-1");
assertNotNull(renderedCell2);
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell2.getY());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell2.getX());
assertEquals(StrictGeomUtility.toInternalValue(20), renderedCell2.getHeight());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell2.getWidth());
final RenderNode renderedCell3 = MatchFactory.findElementByName(logicalPageBox, "c-1-1");
assertNotNull(renderedCell3);
assertEquals(StrictGeomUtility.toInternalValue(20), renderedCell3.getY());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell3.getX());
assertEquals(StrictGeomUtility.toInternalValue(20), renderedCell3.getHeight());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell3.getWidth());
// Validate that tableCell1 has a layouted height of 40 (2* 20)
}
public void testFixedSizeTableCellsRelativeSizeComplex() throws Exception
{
final Band tableCell1 = TableTestUtil.createCell(0, 0, 100, 10, TableTestUtil.createDataItem("Text", -100, -100));
tableCell1.setAttribute(AttributeNames.Table.NAMESPACE, AttributeNames.Table.ROWSPAN, Integer.valueOf(2));
final Band tableCell2 = TableTestUtil.createCell(0, 1, 100, 10, TableTestUtil.createDataItem("Text2", -100, -100));
final Band tableRow = new Band();
tableRow.setLayout(BandStyleKeys.LAYOUT_TABLE_ROW);
tableRow.addElement(tableCell1);
tableRow.addElement(tableCell2);
final Band tableCell3 = TableTestUtil.createCell(1, 1, 100, 10, TableTestUtil.createDataItem("Text3", -100, -100));
final Band tableRow2 = new Band();
tableRow2.setLayout(BandStyleKeys.LAYOUT_TABLE_ROW);
tableRow2.addElement(tableCell3);
final Band tableSection = new Band();
tableSection.setLayout(BandStyleKeys.LAYOUT_TABLE_BODY);
tableSection.addElement(tableRow);
tableSection.addElement(tableRow2);
final MasterReport report = new MasterReport();
report.getStyle().setStyleProperty(TextStyleKeys.WORDBREAK, true);
report.getReportConfiguration().setConfigProperty(ClassicEngineCoreModule.COMPLEX_TEXT_CONFIG_OVERRIDE_KEY, "true");
report.getReportHeader().setLayout(BandStyleKeys.LAYOUT_TABLE);
report.getReportHeader().addElement(tableSection);
final LogicalPageBox logicalPageBox = DebugReportRunner.layoutPage(report, 0);
//ModelPrinter.print(logicalPageBox);
final RenderNode renderedCell1 = MatchFactory.findElementByName(logicalPageBox, "c-0-0");
assertNotNull(renderedCell1);
long heightCell00 = renderedCell1.getHeight();
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell1.getY());
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell1.getX());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell1.getWidth());
final RenderNode renderedCell2 = MatchFactory.findElementByName(logicalPageBox, "c-0-1");
assertNotNull(renderedCell2);
long heightCell01 = renderedCell2.getHeight();
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell2.getY());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell2.getX());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell2.getWidth());
final RenderNode renderedCell3 = MatchFactory.findElementByName(logicalPageBox, "c-1-1");
assertNotNull(renderedCell3);
long heightCell11 = renderedCell3.getHeight();
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell3.getX());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell3.getWidth());
Assert.assertTrue(heightCell00 > 0);
Assert.assertTrue(heightCell01 > 0);
Assert.assertTrue(heightCell11 > 0);
// Validate that tableCell1 has a layouted height of 40 (2* 20)
assertEquals(heightCell00, heightCell01 + heightCell11);
}
public void testFixedSizeTableCellsRelativeSize() throws Exception
{
final Band tableCell1 = TableTestUtil.createCell(0, 0, 100, 10, TableTestUtil.createDataItem("Text", -100, -100));
tableCell1.setAttribute(AttributeNames.Table.NAMESPACE, AttributeNames.Table.ROWSPAN, Integer.valueOf(2));
final Band tableCell2 = TableTestUtil.createCell(0, 1, 100, 10, TableTestUtil.createDataItem("Text2", -100, -100));
final Band tableRow = new Band();
tableRow.setLayout(BandStyleKeys.LAYOUT_TABLE_ROW);
tableRow.addElement(tableCell1);
tableRow.addElement(tableCell2);
final Band tableCell3 = TableTestUtil.createCell(1, 1, 100, 10, TableTestUtil.createDataItem("Text3", -100, -100));
final Band tableRow2 = new Band();
tableRow2.setLayout(BandStyleKeys.LAYOUT_TABLE_ROW);
tableRow2.addElement(tableCell3);
final Band tableSection = new Band();
tableSection.setLayout(BandStyleKeys.LAYOUT_TABLE_BODY);
tableSection.addElement(tableRow);
tableSection.addElement(tableRow2);
final MasterReport report = new MasterReport();
report.getReportConfiguration().setConfigProperty(ClassicEngineCoreModule.COMPLEX_TEXT_CONFIG_OVERRIDE_KEY, "false");
report.getReportHeader().setLayout(BandStyleKeys.LAYOUT_TABLE);
report.getReportHeader().addElement(tableSection);
final LogicalPageBox logicalPageBox = DebugReportRunner.layoutPage(report, 0);
//ModelPrinter.print(logicalPageBox);
final RenderNode renderedCell1 = MatchFactory.findElementByName(logicalPageBox, "c-0-0");
assertNotNull(renderedCell1);
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell1.getY());
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell1.getX());
assertEquals(StrictGeomUtility.toInternalValue(20), renderedCell1.getHeight());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell1.getWidth());
final RenderNode renderedCell2 = MatchFactory.findElementByName(logicalPageBox, "c-0-1");
assertNotNull(renderedCell2);
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell2.getY());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell2.getX());
assertEquals(StrictGeomUtility.toInternalValue(10), renderedCell2.getHeight());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell2.getWidth());
final RenderNode renderedCell3 = MatchFactory.findElementByName(logicalPageBox, "c-1-1");
assertNotNull(renderedCell3);
assertEquals(StrictGeomUtility.toInternalValue(10), renderedCell3.getY());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell3.getX());
assertEquals(StrictGeomUtility.toInternalValue(10), renderedCell3.getHeight());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell3.getWidth());
// Validate that tableCell1 has a layouted height of 40 (2* 20)
}
private Band wrapInCanvas(final Element e)
{
final Band band = new Band();
band.setLayout(BandStyleKeys.LAYOUT_CANVAS);
band.getStyle().setStyleProperty(ElementStyleKeys.MIN_WIDTH, -100f);
band.getStyle().setStyleProperty(ElementStyleKeys.MIN_HEIGHT, -100f);
band.addElement(e);
return band;
}
public void testFixedSizeTableCellsRelativeSizeCanvas() throws Exception
{
final Band tableCell1 = TableTestUtil.createCell(0, 0, 100, 10,
wrapInCanvas(TableTestUtil.createDataItem("Text", -100, -100)));
tableCell1.setAttribute(AttributeNames.Table.NAMESPACE, AttributeNames.Table.ROWSPAN, 2);
final Band tableCell2 = TableTestUtil.createCell(0, 1, 100, 10,
wrapInCanvas(TableTestUtil.createDataItem("Text2", -100, -100)));
final Band tableRow = new Band();
tableRow.setLayout(BandStyleKeys.LAYOUT_TABLE_ROW);
tableRow.addElement(tableCell1);
tableRow.addElement(tableCell2);
final Band tableCell3 = TableTestUtil.createCell(1, 1, 100, 10,
wrapInCanvas(TableTestUtil.createDataItem("Text3", -100, -100)));
final Band tableRow2 = new Band();
tableRow2.setLayout(BandStyleKeys.LAYOUT_TABLE_ROW);
tableRow2.addElement(tableCell3);
final Band tableSection = new Band();
tableSection.setLayout(BandStyleKeys.LAYOUT_TABLE_BODY);
tableSection.addElement(tableRow);
tableSection.addElement(tableRow2);
final MasterReport report = new MasterReport();
report.getReportConfiguration().setConfigProperty(ClassicEngineCoreModule.COMPLEX_TEXT_CONFIG_OVERRIDE_KEY, "false");
report.getReportHeader().setLayout(BandStyleKeys.LAYOUT_TABLE);
report.getReportHeader().addElement(tableSection);
final LogicalPageBox logicalPageBox = DebugReportRunner.layoutPage(report, 0);
//ModelPrinter.print(logicalPageBox);
final RenderBox renderedCell1 = (RenderBox) MatchFactory.findElementByName(logicalPageBox, "c-0-0");
assertNotNull(renderedCell1);
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell1.getY());
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell1.getX());
assertEquals(StrictGeomUtility.toInternalValue(20), renderedCell1.getHeight());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell1.getWidth());
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell1.getFirstChild().getY());
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell1.getFirstChild().getX());
assertEquals(StrictGeomUtility.toInternalValue(20), renderedCell1.getFirstChild().getHeight());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell1.getFirstChild().getWidth());
final RenderBox renderedCell2 = (RenderBox) MatchFactory.findElementByName(logicalPageBox, "c-0-1");
assertNotNull(renderedCell2);
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell2.getY());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell2.getX());
assertEquals(StrictGeomUtility.toInternalValue(10), renderedCell2.getHeight());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell2.getWidth());
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell2.getFirstChild().getY());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell2.getFirstChild().getX());
assertEquals(StrictGeomUtility.toInternalValue(10), renderedCell2.getFirstChild().getHeight());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell2.getFirstChild().getWidth());
final RenderBox renderedCell3 = (RenderBox) MatchFactory.findElementByName(logicalPageBox, "c-1-1");
assertNotNull(renderedCell3);
assertEquals(StrictGeomUtility.toInternalValue(10), renderedCell3.getY());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell3.getX());
assertEquals(StrictGeomUtility.toInternalValue(10), renderedCell3.getHeight());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell3.getWidth());
assertEquals(StrictGeomUtility.toInternalValue(10), renderedCell3.getFirstChild().getY());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell3.getFirstChild().getX());
assertEquals(StrictGeomUtility.toInternalValue(10), renderedCell3.getFirstChild().getHeight());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell3.getFirstChild().getWidth());
// Validate that tableCell1 has a layouted height of 40 (2* 20)
}
public void testFixedSizeTableCellsRelativeSizeCanvasComplex() throws Exception
{
final Band tableCell1 = TableTestUtil.createCell(0, 0, 100, 10,
wrapInCanvas(TableTestUtil.createDataItem("Text", -100, -100)));
tableCell1.setAttribute(AttributeNames.Table.NAMESPACE, AttributeNames.Table.ROWSPAN, 2);
final Band tableCell2 = TableTestUtil.createCell(0, 1, 100, 10,
wrapInCanvas(TableTestUtil.createDataItem("Text2", -100, -100)));
final Band tableRow = new Band();
tableRow.setLayout(BandStyleKeys.LAYOUT_TABLE_ROW);
tableRow.addElement(tableCell1);
tableRow.addElement(tableCell2);
final Band tableCell3 = TableTestUtil.createCell(1, 1, 100, 10,
wrapInCanvas(TableTestUtil.createDataItem("Text3", -100, -100)));
final Band tableRow2 = new Band();
tableRow2.setLayout(BandStyleKeys.LAYOUT_TABLE_ROW);
tableRow2.addElement(tableCell3);
final Band tableSection = new Band();
tableSection.setLayout(BandStyleKeys.LAYOUT_TABLE_BODY);
tableSection.addElement(tableRow);
tableSection.addElement(tableRow2);
final MasterReport report = new MasterReport();
report.getStyle().setStyleProperty(TextStyleKeys.WORDBREAK, true);
report.getReportConfiguration().setConfigProperty(ClassicEngineCoreModule.COMPLEX_TEXT_CONFIG_OVERRIDE_KEY, "true");
report.getReportHeader().setLayout(BandStyleKeys.LAYOUT_TABLE);
report.getReportHeader().addElement(tableSection);
final LogicalPageBox logicalPageBox = DebugReportRunner.layoutPage(report, 0);
//ModelPrinter.print(logicalPageBox);
final RenderBox renderedCell1 = (RenderBox) MatchFactory.findElementByName(logicalPageBox, "c-0-0");
assertNotNull(renderedCell1);
long heightCell00 = renderedCell1.getHeight();
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell1.getY());
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell1.getX());
assertTrue(heightCell00 > StrictGeomUtility.toInternalValue(20));
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell1.getWidth());
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell1.getFirstChild().getY());
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell1.getFirstChild().getX());
assertEquals(heightCell00, renderedCell1.getFirstChild().getHeight());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell1.getFirstChild().getWidth());
final RenderBox renderedCell2 = (RenderBox) MatchFactory.findElementByName(logicalPageBox, "c-0-1");
assertNotNull(renderedCell2);
long heightCell01 = renderedCell2.getHeight();
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell2.getY());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell2.getX());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell2.getWidth());
assertEquals(StrictGeomUtility.toInternalValue(0), renderedCell2.getFirstChild().getY());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell2.getFirstChild().getX());
assertEquals(heightCell01, renderedCell2.getFirstChild().getHeight());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell2.getFirstChild().getWidth());
final RenderBox renderedCell3 = (RenderBox) MatchFactory.findElementByName(logicalPageBox, "c-1-1");
long heightCell11 = renderedCell3.getHeight();
assertNotNull(renderedCell3);
assertEquals(heightCell01, renderedCell3.getY());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell3.getX());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell3.getWidth());
assertEquals(heightCell01, renderedCell3.getFirstChild().getY());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell3.getFirstChild().getX());
assertEquals(StrictGeomUtility.toInternalValue(234), renderedCell3.getFirstChild().getWidth());
// Validate that tableCell1 has a layouted height of 40 (2* 20)
assertEquals(heightCell00, heightCell01 + heightCell11);
}
public static Band createTable(final int[][] layout, final int headerRows)
{
final Band table = new Band();
table.getStyle().setStyleProperty(BandStyleKeys.LAYOUT, BandStyleKeys.LAYOUT_TABLE);
table.getStyle().setStyleProperty(BandStyleKeys.TABLE_LAYOUT, TableLayout.fixed);
if (headerRows > 0)
{
final Band tableHeader = new Band();
tableHeader.getStyle().setStyleProperty(BandStyleKeys.LAYOUT, BandStyleKeys.LAYOUT_TABLE_HEADER);
for (int r = 0; r < headerRows; r += 1)
{
final Band row = new Band();
row.getStyle().setStyleProperty(BandStyleKeys.LAYOUT, BandStyleKeys.LAYOUT_TABLE_ROW);
row.setName("r-" + r);
final int[] rowDefinition = layout[r];
for (int cellNumber = 0; cellNumber < rowDefinition.length; cellNumber++)
{
final int cellWidth = rowDefinition[cellNumber];
final Band cell = TableTestUtil.createCell(r, cellNumber, cellWidth, 10);
cell.setName("c-" + r + "-" + cellNumber);
row.addElement(cell);
}
tableHeader.addElement(row);
}
table.addElement(tableHeader);
}
final Band tableBody = new Band();
tableBody.getStyle().setStyleProperty(BandStyleKeys.LAYOUT, BandStyleKeys.LAYOUT_TABLE_BODY);
for (int r = headerRows; r < layout.length; r += 1)
{
final Band row = new Band();
row.getStyle().setStyleProperty(BandStyleKeys.LAYOUT, BandStyleKeys.LAYOUT_TABLE_ROW);
row.setName("r-" + r);
final int[] rowDefinition = layout[r];
for (int cellNumber = 0; cellNumber < rowDefinition.length; cellNumber++)
{
final int cellWidth = rowDefinition[cellNumber];
final Band cell = TableTestUtil.createCell(r, cellNumber, cellWidth, 10);
cell.setName("c-" + r + "-" + cellNumber);
row.addElement(cell);
}
tableBody.addElement(row);
}
table.addElement(tableBody);
return table;
}
}