/* * 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) 2001 - 2013 Object Refinery Ltd, Pentaho Corporation and Contributors.. All rights reserved. */ package org.pentaho.reporting.engine.classic.core; import org.pentaho.reporting.engine.classic.core.filter.types.bands.GroupDataBodyType; public class GroupDataBody extends GroupBody { private DetailsHeader detailsHeader; private NoDataBand noDataBand; private ItemBand itemBand; private DetailsFooter detailsFooter; public GroupDataBody() { setElementType( new GroupDataBodyType() ); this.noDataBand = new NoDataBand(); this.itemBand = new ItemBand(); this.detailsHeader = new DetailsHeader(); this.detailsFooter = new DetailsFooter(); registerAsChild( noDataBand ); registerAsChild( itemBand ); registerAsChild( detailsHeader ); registerAsChild( detailsFooter ); } public Group getGroup() { return null; } public NoDataBand getNoDataBand() { return noDataBand; } public void setNoDataBand( final NoDataBand noDataBand ) { if ( noDataBand == null ) { throw new NullPointerException( "The noDataBand must not be null" ); } validateLooping( noDataBand ); if ( unregisterParent( noDataBand ) ) { return; } final NoDataBand oldElement = this.noDataBand; this.noDataBand.setParent( null ); this.noDataBand = noDataBand; this.noDataBand.setParent( this ); notifyNodeChildRemoved( oldElement ); notifyNodeChildAdded( this.noDataBand ); } public ItemBand getItemBand() { return itemBand; } public void setItemBand( final ItemBand itemBand ) { if ( itemBand == null ) { throw new NullPointerException( "The itemBand must not be null" ); } validateLooping( itemBand ); if ( unregisterParent( itemBand ) ) { return; } final ItemBand oldElement = this.itemBand; this.itemBand.setParent( null ); this.itemBand = itemBand; this.itemBand.setParent( this ); notifyNodeChildRemoved( oldElement ); notifyNodeChildAdded( this.itemBand ); } public DetailsHeader getDetailsHeader() { return detailsHeader; } public void setDetailsHeader( final DetailsHeader detailsHeader ) { if ( detailsHeader == null ) { throw new NullPointerException( "The detailsHeader must not be null" ); } validateLooping( detailsHeader ); if ( unregisterParent( detailsHeader ) ) { return; } final DetailsHeader oldElement = this.detailsHeader; this.detailsHeader.setParent( null ); this.detailsHeader = detailsHeader; this.detailsHeader.setParent( this ); notifyNodeChildRemoved( oldElement ); notifyNodeChildAdded( this.detailsHeader ); } public DetailsFooter getDetailsFooter() { return detailsFooter; } public void setDetailsFooter( final DetailsFooter detailsFooter ) { if ( detailsFooter == null ) { throw new NullPointerException( "The detailsFooter must not be null" ); } validateLooping( detailsFooter ); if ( unregisterParent( detailsFooter ) ) { return; } final DetailsFooter oldElement = this.detailsFooter; this.detailsFooter.setParent( null ); this.detailsFooter = detailsFooter; this.detailsFooter.setParent( this ); notifyNodeChildRemoved( oldElement ); notifyNodeChildAdded( this.detailsFooter ); } protected void removeElement( final Element element ) { if ( element == null ) { throw new NullPointerException(); } if ( element == itemBand ) { this.itemBand.setParent( null ); this.itemBand = new ItemBand(); this.itemBand.setParent( this ); notifyNodeChildRemoved( element ); notifyNodeChildAdded( this.itemBand ); } else if ( element == noDataBand ) { this.noDataBand.setParent( null ); this.noDataBand = new NoDataBand(); this.noDataBand.setParent( this ); notifyNodeChildRemoved( element ); notifyNodeChildAdded( this.noDataBand ); } else if ( element == detailsHeader ) { this.detailsHeader.setParent( null ); this.detailsHeader = new DetailsHeader(); this.detailsHeader.setParent( this ); notifyNodeChildRemoved( element ); notifyNodeChildAdded( this.detailsHeader ); } else if ( element == detailsFooter ) { this.detailsFooter.setParent( null ); this.detailsFooter = new DetailsFooter(); this.detailsFooter.setParent( this ); notifyNodeChildRemoved( element ); notifyNodeChildAdded( this.detailsFooter ); } } public int getElementCount() { return 4; } public Element getElement( final int index ) { switch ( index ) { case 0: return detailsHeader; case 1: return itemBand; case 2: return noDataBand; case 3: return detailsFooter; default: throw new IndexOutOfBoundsException(); } } public void setElementAt( final int position, final Element element ) { switch ( position ) { case 0: setDetailsHeader( (DetailsHeader) element ); break; case 1: setItemBand( (ItemBand) element ); break; case 2: setNoDataBand( (NoDataBand) element ); break; case 3: setDetailsFooter( (DetailsFooter) element ); break; default: throw new IndexOutOfBoundsException(); } } /** * Clones this Element, the datasource and the private stylesheet of this Element. The clone does no longer have a * parent, as the old parent would not recognize that new object anymore. * * @return a clone of this Element. */ public GroupDataBody clone() { final GroupDataBody dataBody = (GroupDataBody) super.clone(); dataBody.itemBand = (ItemBand) itemBand.clone(); dataBody.noDataBand = (NoDataBand) noDataBand.clone(); dataBody.detailsHeader = (DetailsHeader) detailsHeader.clone(); dataBody.detailsFooter = (DetailsFooter) detailsFooter.clone(); dataBody.registerAsChild( dataBody.itemBand ); dataBody.registerAsChild( dataBody.noDataBand ); dataBody.registerAsChild( dataBody.detailsHeader ); dataBody.registerAsChild( dataBody.detailsFooter ); return dataBody; } public GroupDataBody derive( final boolean preserveElementInstanceIds ) { final GroupDataBody dataBody = (GroupDataBody) super.derive( preserveElementInstanceIds ); dataBody.itemBand = (ItemBand) itemBand.derive( preserveElementInstanceIds ); dataBody.noDataBand = (NoDataBand) noDataBand.derive( preserveElementInstanceIds ); dataBody.detailsHeader = (DetailsHeader) detailsHeader.derive( preserveElementInstanceIds ); dataBody.detailsFooter = (DetailsFooter) detailsFooter.derive( preserveElementInstanceIds ); dataBody.registerAsChild( dataBody.itemBand ); dataBody.registerAsChild( dataBody.noDataBand ); dataBody.registerAsChild( dataBody.detailsHeader ); dataBody.registerAsChild( dataBody.detailsFooter ); return dataBody; } }