/* * 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 - 2013 Pentaho Corporation.. All rights reserved. */ package org.pentaho.reporting.engine.classic.core.modules.output.fast.template; import org.pentaho.reporting.engine.classic.core.AttributeNames; import org.pentaho.reporting.engine.classic.core.Band; import org.pentaho.reporting.engine.classic.core.ReportElement; import org.pentaho.reporting.engine.classic.core.Section; import org.pentaho.reporting.engine.classic.core.modules.output.table.xls.helper.SheetPropertySource; import org.pentaho.reporting.engine.classic.core.style.BandStyleKeys; import org.pentaho.reporting.engine.classic.core.util.AbstractStructureVisitor; public class SheetPropertyCollector extends AbstractStructureVisitor implements SheetPropertySource { private String sheetName; private String pageHeaderCenter; private String pageFooterCenter; private String pageHeaderLeft; private String pageFooterLeft; private String pageHeaderRight; private String pageFooterRight; private Integer freezeTop; private Integer freezeLeft; public SheetPropertyCollector() { } public String compute( Band band ) { sheetName = null; inspectElement( band ); traverseSection( band ); if ( sheetName == null ) { Section parentSection = band.getParentSection(); while ( parentSection != null ) { inspectElement( parentSection ); parentSection = parentSection.getParentSection(); } } return sheetName; } protected void traverseSection( final Section section ) { traverseSectionWithoutSubReports( section ); } protected void inspectElement( final ReportElement element ) { if ( sheetName != null ) { return; } Object styleProperty = element.getComputedStyle().getStyleProperty( BandStyleKeys.COMPUTED_SHEETNAME ); if ( styleProperty != null ) { sheetName = String.valueOf( styleProperty ); } this.pageHeaderCenter = lookup( element, AttributeNames.Excel.PAGE_HEADER_CENTER, this.pageHeaderCenter ); this.pageHeaderLeft = lookup( element, AttributeNames.Excel.PAGE_HEADER_LEFT, this.pageHeaderLeft ); this.pageHeaderRight = lookup( element, AttributeNames.Excel.PAGE_HEADER_RIGHT, this.pageHeaderRight ); this.pageFooterCenter = lookup( element, AttributeNames.Excel.PAGE_FOOTER_CENTER, this.pageFooterCenter ); this.pageFooterLeft = lookup( element, AttributeNames.Excel.PAGE_FOOTER_LEFT, this.pageFooterLeft ); this.pageFooterRight = lookup( element, AttributeNames.Excel.PAGE_FOOTER_RIGHT, this.pageFooterRight ); final Integer freezeTop = (Integer) element.getAttribute( AttributeNames.Excel.NAMESPACE, AttributeNames.Excel.FREEZING_TOP_POSITION ); if ( this.freezeTop == null && freezeTop != null ) { this.freezeTop = freezeTop; } final Integer freezeLeft = (Integer) element.getAttribute( AttributeNames.Excel.NAMESPACE, AttributeNames.Excel.FREEZING_LEFT_POSITION ); if ( this.freezeLeft == null && freezeLeft != null ) { this.freezeLeft = freezeLeft; } } public int getFreezeTop() { if ( freezeTop == null ) { return 0; } return freezeTop; } public int getFreezeLeft() { if ( freezeLeft == null ) { return 0; } return freezeLeft; } public String getPageHeaderCenter() { return pageHeaderCenter; } public String getPageFooterCenter() { return pageFooterCenter; } public String getPageHeaderLeft() { return pageHeaderLeft; } public String getPageFooterLeft() { return pageFooterLeft; } public String getPageHeaderRight() { return pageHeaderRight; } public String getPageFooterRight() { return pageFooterRight; } private String lookup( final ReportElement box, final String attribute, final String defaultValue ) { final Object value = box.getAttribute( AttributeNames.Excel.NAMESPACE, attribute ); if ( value != null && defaultValue == null ) { return String.valueOf( value ); } return defaultValue; } }