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

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

/*!
* 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.model.table;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.pentaho.reporting.engine.classic.core.ReportAttributeMap;
import org.pentaho.reporting.engine.classic.core.filter.types.AutoLayoutBoxType;
import org.pentaho.reporting.engine.classic.core.layout.model.AutoRenderBox;
import org.pentaho.reporting.engine.classic.core.layout.model.LayoutNodeTypes;
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.model.context.BoxDefinition;
import org.pentaho.reporting.engine.classic.core.layout.style.SimpleStyleSheet;
import org.pentaho.reporting.engine.classic.core.metadata.ElementType;
import org.pentaho.reporting.engine.classic.core.states.ReportStateKey;
import org.pentaho.reporting.engine.classic.core.style.StyleSheet;
import org.pentaho.reporting.engine.classic.core.util.InstanceID;

/**
* A table section box does not much rendering or layouting at all. It
* represents one of the three possible sections and behaves like any other
* block box. But (here it comes!) it refuses to be added to anything else than
* a TableRenderBox (a small check to save me a lot of insanity ..).
* <p/>
* For a valid layout, the major and minor axes need to be flipped.
*
* @author Thomas Morgner
*/
public class TableRowRenderBox extends RenderBox
{
  private static final Log logger = LogFactory.getLog(TableRowRenderBox.class);
  private int rowIndex;
  private boolean bodySection;

  public TableRowRenderBox()
  {
    this(SimpleStyleSheet.EMPTY_STYLE, new InstanceID(), BoxDefinition.EMPTY,
        AutoLayoutBoxType.INSTANCE, ReportAttributeMap.EMPTY_MAP, null);
  }

  public TableRowRenderBox(final StyleSheet styleSheet,
                           final InstanceID instanceID,
                           final BoxDefinition boxDefinition,
                           final ElementType elementType,
                           final ReportAttributeMap attributes,
                           final ReportStateKey stateKey)
  {
    super(HORIZONTAL_AXIS, VERTICAL_AXIS,
        styleSheet, instanceID, boxDefinition, elementType, attributes, stateKey);
    this.rowIndex = -1;
  }

  public boolean useMinimumChunkWidth()
  {
    return true;
  }

  public boolean isAutoGenerated()
  {
    return AutoLayoutBoxType.INSTANCE == getElementType();
  }


  public int getNodeType()
  {
    return LayoutNodeTypes.TYPE_BOX_TABLE_ROW;
  }

  /**
   * If that method returns true, the element will not be used for rendering.
   * For the purpose of computing sizes or performing the layouting (in the
   * validate() step), this element will treated as if it is not there.
   * <p/>
   * If the element reports itself as non-empty, however, it will affect the
   * margin computation.
   *
   * @return
   */
  public boolean isIgnorableForRendering()
  {
    return false;
  }

  protected void reinit(final StyleSheet styleSheet,
                        final ElementType elementType,
                        final ReportAttributeMap attributes,
                        final InstanceID instanceId)
  {
    super.reinit(styleSheet, elementType, attributes, instanceId);
    rowIndex = -1;
    bodySection = false;
  }

  public boolean isBodySection()
  {
    return bodySection;
  }

  public void setBodySection(final boolean bodySection)
  {
    this.bodySection = bodySection;
  }

  public int getRowIndex()
  {
    return rowIndex;
  }

  public void setRowIndex(final int rowIndex)
  {
    this.rowIndex = rowIndex;
  }

  public void setCachedY(final long cachedY)
  {
    super.setCachedY(cachedY);
  }

  public void shiftCached(final long amount)
  {
    super.shiftCached(amount);
  }

  public long extendHeight(final RenderNode child, final long heightOffset)
  {
    return extendHeightInRowMode(child, heightOffset);
  }

  public void addChild(final RenderNode child)
  {
    if (isValid(child) == false)
    {
      TableCellRenderBox tsrb = new TableCellRenderBox();
      tsrb.addChild(child);
      addChild(tsrb);
      tsrb.close();
      return;
    }

    super.addChild(child);
  }

  private boolean isValid(final RenderNode child)
  {
    if ((child.getNodeType() & LayoutNodeTypes.MASK_BOX) != LayoutNodeTypes.MASK_BOX)
    {
      return true;
    }

    if (child.getNodeType() == LayoutNodeTypes.TYPE_BOX_AUTOLAYOUT)
    {
      return true;
    }

    if (child.getNodeType() == LayoutNodeTypes.TYPE_BOX_TABLE_CELL)
    {
      return true;
    }

    if (child.getNodeType() == LayoutNodeTypes.TYPE_BOX_BREAKMARK)
    {
      if (logger.isDebugEnabled())
      {
        logger.debug("WARN: BREAK MARKER INSIDE TABLE ROW");
      }
      return false;
    }

    if (child.getNodeType() == LayoutNodeTypes.TYPE_BOX_PROGRESS_MARKER)
    {
      if (logger.isDebugEnabled())
      {
        logger.debug("WARN: PROGRESS MARKER INSIDE TABLE ROW");
      }
      return true;
    }

    return false;
  }

  public RenderBox create(final StyleSheet styleSheet)
  {
    return new AutoRenderBox(styleSheet);
  }
}
TOP

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

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.