/* * * * 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) 2006 - 2009 Pentaho Corporation.. All rights reserved. * */ package org.pentaho.reporting.engine.classic.core.bugs; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.pentaho.reporting.engine.classic.core.ClassicEngineBoot; import org.pentaho.reporting.engine.classic.core.MasterReport; import org.pentaho.reporting.engine.classic.core.ReportProcessingException; import org.pentaho.reporting.engine.classic.core.TableDataFactory; import org.pentaho.reporting.engine.classic.core.event.ReportEvent; import org.pentaho.reporting.engine.classic.core.function.AbstractExpression; import org.pentaho.reporting.engine.classic.core.function.AbstractFunction; import org.pentaho.reporting.engine.classic.core.states.ReportStateKey; import org.pentaho.reporting.engine.classic.core.testsupport.DebugReportRunner; import javax.swing.table.DefaultTableModel; public class Prd5041IT { private static class DependencyFunction extends AbstractFunction { private ReportStateKey key; private DependencyFunction( final int dependencyLevel, final String name ) { setName( name ); setDependencyLevel( dependencyLevel ); } protected void validateHook() { } public void reportInitialized( final ReportEvent event ) { key = event.getState().getProcessKey(); validateHook(); } public void reportStarted( final ReportEvent event ) { key = event.getState().getProcessKey(); validateHook(); } public void reportFinished( final ReportEvent event ) { key = event.getState().getProcessKey(); validateHook(); } public void groupStarted( final ReportEvent event ) { key = event.getState().getProcessKey(); validateHook(); } public void groupFinished( final ReportEvent event ) { key = event.getState().getProcessKey(); validateHook(); } public void itemsAdvanced( final ReportEvent event ) { key = event.getState().getProcessKey(); validateHook(); } public void itemsStarted( final ReportEvent event ) { key = event.getState().getProcessKey(); validateHook(); } public void itemsFinished( final ReportEvent event ) { key = event.getState().getProcessKey(); validateHook(); } public void reportDone( final ReportEvent event ) { key = event.getState().getProcessKey(); validateHook(); } public void summaryRowSelection( final ReportEvent event ) { key = event.getState().getProcessKey(); validateHook(); } public Object getValue() { return key; } } private static class ForwardExpression extends AbstractExpression { private String field; private ForwardExpression( final int depLevel, final String name, final String field ) { this.field = field; setName( name ); setDependencyLevel( depLevel ); } public Object getValue() { return getDataRow().get( field ); } } private static class ValidateFunction extends DependencyFunction { private String field; private ValidateFunction( final int depLevel, final String name, final String field ) { super( depLevel, name ); this.field = field; } protected void validateHook() { final Object o = getDataRow().get( field ); Assert.assertEquals( o, getValue() ); } } @Before public void setUp() throws Exception { ClassicEngineBoot.getInstance().start(); } @Test public void testDependenciesSingleLevel() throws ReportProcessingException { final MasterReport report = new MasterReport(); report.setDataFactory( new TableDataFactory( "query", new DefaultTableModel( 2, 2 ) ) ); report.addExpression( new DependencyFunction( 1, "source" ) ); report.addExpression( new ForwardExpression( 1, "forward", "source" ) ); report.addExpression( new ValidateFunction( 1, "validate", "forward" ) ); DebugReportRunner.createPDF( report ); } @Test public void testDependenciesMultiLevel() throws ReportProcessingException { final MasterReport report = new MasterReport(); report.setDataFactory( new TableDataFactory( "query", new DefaultTableModel( 2, 2 ) ) ); report.addExpression( new DependencyFunction( 1, "source" ) ); report.addExpression( new ForwardExpression( 1, "forward", "source" ) ); report.addExpression( new ValidateFunction( 0, "validate", "forward" ) ); DebugReportRunner.createPDF( report ); } @Test public void testDependenciesMultiLevel2() throws ReportProcessingException { final MasterReport report = new MasterReport(); report.setDataFactory( new TableDataFactory( "query", new DefaultTableModel( 2, 2 ) ) ); report.addExpression( new DependencyFunction( 1, "source" ) ); report.addExpression( new ForwardExpression( 0, "forward", "source" ) ); report.addExpression( new ValidateFunction( 0, "validate", "forward" ) ); DebugReportRunner.createPDF( report ); } @Test public void testDependenciesTotalLevel() throws ReportProcessingException { final MasterReport report = new MasterReport(); report.setDataFactory( new TableDataFactory( "query", new DefaultTableModel( 2, 2 ) ) ); report.addExpression( new DependencyFunction( 2, "source" ) ); report.addExpression( new ForwardExpression( 1, "forward", "source" ) ); report.addExpression( new ValidateFunction( 0, "validate", "forward" ) ); DebugReportRunner.createPDF( report ); } }