/*! * 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; import junit.framework.TestCase; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.pentaho.reporting.engine.classic.core.elementfactory.TextFieldElementFactory; import org.pentaho.reporting.engine.classic.core.modules.misc.datafactory.StaticDataFactory; import org.pentaho.reporting.engine.classic.core.style.FontDefinition; import org.pentaho.reporting.engine.classic.core.testsupport.DebugReportRunner; import org.pentaho.reporting.libraries.resourceloader.Resource; import org.pentaho.reporting.libraries.resourceloader.ResourceManager; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import java.awt.*; import java.net.URL; /** * Creation-Date: 02.08.2007, 09:23:19 * * @author Thomas Morgner */ public class SubReportIT extends TestCase { private static final Log logger = LogFactory.getLog( SubReportIT.class ); public SubReportIT() { } public SubReportIT( final String string ) { super( string ); } protected void setUp() throws Exception { ClassicEngineBoot.getInstance().start(); } public static TableModel createMainTableModel() { logger.debug( "TestDataFactory.createTableModel" ); return new DefaultTableModel( new String[][] { { "1.1", "1.2" }, { "2.1", "2.2" } }, new String[] { "c1", "c2" } ); } public static TableModel createSubReportTableModel( final String param1 ) { logger.debug( "TestDataFactory.createTableModel(" + param1 + ")" ); return new DefaultTableModel( new String[][] { { "1.1:" + param1, "1.2:" + param1 }, { "2.1:" + param1, "2.2:" + param1 } }, new String[] { "t1", "t2" } ); } public String getDemoName() { return "Test-Case: Reports with subreports crash under certain conditions."; } public MasterReport createReport() { final MasterReport report = new MasterReport(); final StaticDataFactory staticDataFactory = new StaticDataFactory(); report.setDataFactory( staticDataFactory ); report.setQuery( SubReportIT.class.getName() + "#createMainTableModel()" ); final Element textElement = TextFieldElementFactory.createStringElement( "reportField1", new Rectangle( 0, 0, 100, 20 ), Color.BLACK, ElementAlignment.LEFT, ElementAlignment.TOP, new FontDefinition( "Arial", 12 ), "-", "c1" ); report.getItemBand().addElement( textElement ); final SubReport subReport = new SubReport(); subReport.addInputParameter( "c1", "c1" ); subReport.setQuery( SubReportIT.class.getName() + "#createSubReportTableModel(c1)" ); final Element subReportTextElement = TextFieldElementFactory.createStringElement( "subreportField1", new Rectangle( 20, 0, 100, 20 ), Color.RED, ElementAlignment.LEFT, ElementAlignment.TOP, new FontDefinition( "Arial", 12 ), "-", "t1" ); subReport.getItemBand().addElement( subReportTextElement ); report.getItemBand().addSubReport( subReport ); final Element textElementT1 = TextFieldElementFactory.createStringElement( "reportFieldT1", new Rectangle( 0, 20, 100, 20 ), Color.BLACK, ElementAlignment.LEFT, ElementAlignment.TOP, new FontDefinition( "Arial", 12 ), "-", "t2" ); report.getItemBand().addElement( textElementT1 ); final ParameterMapping[] parameterMappings = subReport.getExportMappings(); for ( int i = 0; i < parameterMappings.length; i++ ) { final ParameterMapping parameterMapping = parameterMappings[i]; logger.debug( "parameterMapping.getAlias() = " + parameterMapping.getAlias() ); logger.debug( "parameterMapping.getName() = " + parameterMapping.getName() ); } return report; } public void testXmlSubReport() throws Exception { final URL url = getClass().getResource( "subreport-test-master.xml" ); assertNotNull( url ); final ResourceManager resourceManager = new ResourceManager(); final Resource directly = resourceManager.createDirectly( url, MasterReport.class ); final MasterReport resource = (MasterReport) directly.getResource(); final TableDataFactory tableDataFactory = new TableDataFactory(); tableDataFactory.addTable( "fruit", createFruitTableModel() ); tableDataFactory.addTable( "color", createColorTableModel() ); tableDataFactory.addTable( "default", new DefaultTableModel() ); resource.setDataFactory( tableDataFactory ); DebugReportRunner.executeAll( resource ); } private TableModel createFruitTableModel() { final String[] names = new String[] { "Id Number", "Cat", "Fruit" }; final Object[][] data = new Object[][] { { "I1", "A", "Apple" }, { "I2", "A", "Orange" }, { "I2", "A", "Orange" }, { "I2", "A", "Orange" }, { "I2", "A", "Orange" }, { "I2", "A", "Orange" }, { "I2", "A", "Orange" }, { "I2", "A", "Orange" }, { "I2", "A", "Orange" }, { "I3", "B", "Water melon" }, { "I3", "B", "Water melon" }, { "I3", "B", "Water melon" }, { "I3", "B", "Water melon" }, { "I3", "B", "Water melon" }, { "I3", "B", "Water melon" }, { "I3", "B", "Water melon" }, { "I3", "B", "Water melon" }, { "I4", "B", "Strawberry" }, }; return new DefaultTableModel( data, names ); } private TableModel createColorTableModel() { final String[] names = new String[] { "Number", "Group", "Color" }; final Object[][] data = new Object[][] { { new Integer( 1 ), "X", "Red" }, { new Integer( 2 ), "X", "Green" }, { new Integer( 3 ), "Y", "Yellow" }, { new Integer( 3 ), "Y", "Yellow" }, { new Integer( 4 ), "Y", "Blue" }, { new Integer( 4 ), "Y", "Blue" }, { new Integer( 5 ), "Z", "Orange" }, { new Integer( 5 ), "Z", "Orange" }, { new Integer( 5 ), "Z", "Orange" }, { new Integer( 6 ), "Z", "White" }, { new Integer( 6 ), "Z", "White" }, { new Integer( 6 ), "Z", "White" }, }; return new DefaultTableModel( data, names ); } public void testAPISubReport() throws Exception { final MasterReport report = createReport(); DebugReportRunner.executeAll( report ); } public void testNestedEmptySubReports() throws Exception { final SubReport sr = new SubReport(); sr.getReportHeader().addSubReport( new SubReport() ); sr.getReportHeader().addSubReport( new SubReport() ); final MasterReport report = new MasterReport(); report.getReportHeader().addSubReport( sr ); report.getReportHeader().addSubReport( new SubReport() ); report.getReportHeader().addSubReport( new SubReport() ); DebugReportRunner.executeAll( report ); } }