Package org.pentaho.reporting.engine.classic.core.layout.table

Source Code of org.pentaho.reporting.engine.classic.core.layout.table.TableLayoutTest

/*!
* 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;
  }
}
TOP

Related Classes of org.pentaho.reporting.engine.classic.core.layout.table.TableLayoutTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.