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

Source Code of org.pentaho.reporting.engine.classic.core.layout.ModelPrinter

/*
* 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.layout;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.pentaho.reporting.engine.classic.core.layout.model.BreakMarkerRenderBox;
import org.pentaho.reporting.engine.classic.core.layout.model.FinishedRenderNode;
import org.pentaho.reporting.engine.classic.core.layout.model.LogicalPageBox;
import org.pentaho.reporting.engine.classic.core.layout.model.ParagraphRenderBox;
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.RenderableComplexText;
import org.pentaho.reporting.engine.classic.core.layout.model.RenderableText;
import org.pentaho.reporting.engine.classic.core.layout.model.table.TableCellRenderBox;
import org.pentaho.reporting.engine.classic.core.layout.model.table.TableRenderBox;
import org.pentaho.reporting.engine.classic.core.layout.model.table.TableRowRenderBox;
import org.pentaho.reporting.engine.classic.core.layout.model.table.TableSectionRenderBox;
import org.pentaho.reporting.engine.classic.core.style.BandStyleKeys;
import org.pentaho.reporting.engine.classic.core.style.TableLayout;

@SuppressWarnings("HardCodedStringLiteral")
public class ModelPrinter
{
  public static final ModelPrinter INSTANCE = new ModelPrinter();
  private static final Log logger = LogFactory.getLog(ModelPrinter.class);
  private static final boolean PRINT_LINEBOX_CONTENTS = false;
  private static final boolean PRINT_TABLE_CELL_CONTENTS = true;

  public ModelPrinter()
  {
  }

  public static RenderBox getRoot(final RenderNode node)
  {
    RenderBox parent = node.getParent();
    RenderBox retval = node.getParent();
    while (parent != null)
    {
      retval = parent;
      parent = parent.getParent();
    }
    return retval;
  }

  protected void print(final String s)
  {
    logger.debug(s);
  }

  @SuppressWarnings("UnusedDeclaration")
  public void printParents(RenderNode box)
  {
    int level = 0;
    while (box != null)
    {
      if (box instanceof RenderBox)
      {
        printBoxDetails((RenderBox) box, level);
      }
      else
      {
        printNode(box, level);
      }
      level += 1;

      box = box.getParent();
    }
  }

  public void print(final RenderNode box)
  {
    if (!isPrintingEnabled())
    {
      return;
    }

    if (box instanceof RenderBox)
    {
      printBox((RenderBox) box, 0);
    }
    else
    {
      printNode(box, 0);
    }
  }

  protected boolean isPrintingEnabled()
  {
    return logger.isDebugEnabled();
  }

  public void print(final RenderBox box)
  {
    if (!isPrintingEnabled())
    {
      return;
    }
    printBox(box, 0);
  }

  protected void printBox(final RenderBox box, final int level)
  {
    printBoxDetails(box, level);

    final StringBuilder b = new StringBuilder();
    for (int i = 0; i < level; i++)
    {
      b.append("   ");
    }
    print(b.toString());

    if (box instanceof ParagraphRenderBox)
    {
      if (PRINT_LINEBOX_CONTENTS)
      {
        final ParagraphRenderBox paraBox = (ParagraphRenderBox) box;
        print("----------------  START PARAGRAPH POOL CONTAINER -------------------------------------");
        printBox(paraBox.getPool(), level + 1);
        print("---------------- FINISH PARAGRAPH POOL CONTAINER -------------------------------------");

        if (paraBox.isComplexParagraph())
        {
          print("----------------  START PARAGRAPH LINEBOX CONTAINER -------------------------------------");
          printBox(paraBox.getLineboxContainer(), level + 1);
          print("---------------- FINISH PARAGRAPH LINEBOX CONTAINER -------------------------------------");
        }
      }
    }

    if (isPrintPageHeader() && box instanceof LogicalPageBox)
    {
      final LogicalPageBox lbox = (LogicalPageBox) box;
      printBox(lbox.getHeaderArea(), level + 1);
      printBox(lbox.getWatermarkArea(), level + 1);
    }
    printChilds(box, level);
    if (isPrintPageFooter() && box instanceof LogicalPageBox)
    {
      final LogicalPageBox lbox = (LogicalPageBox) box;
      printBox(lbox.getRepeatFooterArea(), level + 1);
      printBox(lbox.getFooterArea(), level + 1);
    }
  }

  protected boolean isPrintPageHeader()
  {
    return true;
  }

  protected boolean isPrintPageFooter()
  {
    return true;
  }

  private void printBoxDetails(final RenderBox box, final int level)
  {
    StringBuilder b = new StringBuilder();
    for (int i = 0; i < level; i++)
    {
      b.append("   ");
    }
    b.append(box.getClass().getName());
    b.append('[');
    b.append(box.getElementType().getClass().getName());
    //b.append(Integer.toHexString(System.identityHashCode(box)));
    b.append(';');
    b.append(box.getName());
    b.append(']');
    b.append("={stateKey=");
    b.append(box.getStateKey());
    b.append(", pinned=");
    b.append(box.getPinned());
    b.append('}');
    print(b.toString());

    b = new StringBuilder();
    for (int i = 0; i < level; i++)
    {
      b.append("   ");
    }
    b.append("- layout x=");
    b.append(box.getX());
    b.append(", y=");
    b.append(box.getY());
    b.append(", width=");
    b.append(box.getWidth());
    b.append(", height=");
    b.append(box.getHeight());
    b.append(", min-chunk-width=");
    b.append(box.getMinimumChunkWidth());
    b.append(", x2=");
    b.append(box.getX() + box.getWidth());
    b.append(", y2=");
    b.append(box.getY2());
    b.append(", y2-overflow=");
    b.append(box.getY() + box.getOverflowAreaHeight());
    print(b.toString());

    b = new StringBuilder();
    for (int i = 0; i < level; i++)
    {
      b.append("   ");
    }
    b.append("- cached-layout cached-x=");
    b.append(box.getCachedX());
    b.append(", cached-y=");
    b.append(box.getCachedY());
    b.append(", cached-width=");
    b.append(box.getCachedWidth());
    b.append(", cached-height=");
    b.append(box.getCachedHeight());
    b.append(", content-area-x1=");
    b.append(box.getContentAreaX1());
    b.append(", content-area-x2=");
    b.append(box.getContentAreaX2());
    print(b.toString());

    b = new StringBuilder();
    for (int i = 0; i < level; i++)
    {
      b.append("   ");
    }
    b.append("- widow-size=");
    b.append(box.getWidowConstraintSize());
    b.append("- widow-size-with-keep-together=");
    b.append(box.getWidowConstraintSizeWithKeepTogether());
    b.append(", orphan-size=");
    b.append(box.getOrphanConstraintSize());
    b.append(", widows=");
    b.append(box.getStaticBoxLayoutProperties().getWidows());
    b.append(", orphans=");
    b.append(box.getStaticBoxLayoutProperties().getOrphans());
    b.append(", keep-together=");
    b.append(box.getStaticBoxLayoutProperties().isAvoidPagebreakInside());
    b.append(", widow-orphan-opt-out=");
    b.append(box.getStaticBoxLayoutProperties().isWidowOrphanOptOut());
    b.append(", widows-box=");
    b.append(box.isWidowBox());
    b.append(", orphan-restrict-finish=");
    b.append(box.getRestrictFinishedClearOut());
    b.append(", invalid-widow-orphan-node=");
    b.append(box.isInvalidWidowOrphanNode());
    print(b.toString());

    b = new StringBuilder();
    for (int i = 0; i < level; i++)
    {
      b.append("   ");
    }
    b.append("- boxDefinition=");
    b.append(box.getBoxDefinition());
    print(b.toString());

    b = new StringBuilder();
    for (int i = 0; i < level; i++)
    {
      b.append("   ");
    }
    b.append("- nodeLayoutProperties=");
    b.append(box.getNodeLayoutProperties());
    print(b.toString());

    b = new StringBuilder();
    for (int i = 0; i < level; i++)
    {
      b.append("   ");
    }
    b.append("- staticBoxLayoutProperties=");
    b.append(box.getStaticBoxLayoutProperties());
    print(b.toString());

    b = new StringBuilder();
    for (int i = 0; i < level; i++)
    {
      b.append("   ");
    }
    print(b.toString());

    if (box instanceof LogicalPageBox)
    {
      final LogicalPageBox pageBox = (LogicalPageBox) box;
      b = new StringBuilder();
      for (int i = 0; i < level; i++)
      {
        b.append("   ");
      }
      b.append("- PageBox={PageOffset=");
      b.append(pageBox.getPageOffset());
      b.append(", PageHeight=");
      b.append(pageBox.getPageHeight());
      b.append(", PageEnd=");
      b.append(pageBox.getPageEnd());
      b.append(", PageWidth=");
      b.append(pageBox.getPageWidth());
      b.append('}');
      print(b.toString());

      b = new StringBuilder();
      for (int i = 0; i < level; i++)
      {
        b.append("   ");
      }
      b.append("- PageBreaks={");
      b.append(pageBox.getAllVerticalBreaks());
      b.append('}');
      print(b.toString());
    }

    if (box instanceof TableRenderBox)
    {
      final TableRenderBox pageBox = (TableRenderBox) box;
      b = new StringBuilder();
      for (int i = 0; i < level; i++)
      {
        b.append("   ");
      }
      b.append("- Layout: ");
      Object styleProperty = pageBox.getStyleSheet().getStyleProperty(BandStyleKeys.TABLE_LAYOUT);
      if (TableLayout.auto.equals(styleProperty))
      {
        b.append(TableLayout.auto);
      }
      else
      {
        b.append(TableLayout.fixed);
      }
      print(b.toString());
    }

    if (box instanceof TableSectionRenderBox)
    {
      final TableSectionRenderBox pageBox = (TableSectionRenderBox) box;
      b = new StringBuilder();
      for (int i = 0; i < level; i++)
      {
        b.append("   ");
      }
      b.append("- Role: ");
      b.append(pageBox.getDisplayRole());
      print(b.toString());
    }

    if (box instanceof TableRowRenderBox)
    {
      final TableRowRenderBox pageBox = (TableRowRenderBox) box;
      b = new StringBuilder();
      for (int i = 0; i < level; i++)
      {
        b.append("   ");
      }
      b.append("- Row: ");
      b.append(pageBox.getRowIndex());
      print(b.toString());
    }

    if (box instanceof TableCellRenderBox)
    {
      final TableCellRenderBox pageBox = (TableCellRenderBox) box;
      b = new StringBuilder();
      for (int i = 0; i < level; i++)
      {
        b.append("   ");
      }
      b.append("- Column-Index=");
      b.append(pageBox.getColumnIndex());
      b.append(", ColSpan=");
      b.append(pageBox.getColSpan());
      b.append(", RowSpan=");
      b.append(pageBox.getRowSpan());
      print(b.toString());
    }

    if (box instanceof BreakMarkerRenderBox)
    {
      final BreakMarkerRenderBox pageBox = (BreakMarkerRenderBox) box;
      b = new StringBuilder();
      for (int i = 0; i < level; i++)
      {
        b.append("   ");
      }
      b.append("- InstanceID=");
      b.append(pageBox.getInstanceId());
      b.append(", validity-range=");
      b.append(pageBox.getValidityRange());
      print(b.toString());
    }


    if (box.isOpen())
    {
      b = new StringBuilder();
      for (int i = 0; i < level; i++)
      {
        b.append("   ");
      }
      b.append("- WARNING: THIS BOX IS STILL OPEN");
      print(b.toString());
    }

    if (box.isFinishedTable() || box.isFinishedPaginate())
    {
      b = new StringBuilder();
      for (int i = 0; i < level; i++)
      {
        b.append("   ");
      }
      b.append("- INFO: THIS BOX IS FINISHED: ");
      if (box.isFinishedTable())
      {
        b.append("- TABLE ");
      }
      if (box.isFinishedPaginate())
      {
        b.append("- PAGE ");
      }
      print(b.toString());
    }
    if (box.isCommited())
    {
      b = new StringBuilder();
      for (int i = 0; i < level; i++)
      {
        b.append("   ");
      }
      b.append("- INFO: THIS BOX IS COMMITED");
      print(b.toString());
    }
  }

  private void printChilds(final RenderBox box, final int level)
  {
    if (PRINT_TABLE_CELL_CONTENTS == false && box instanceof TableCellRenderBox)
    {
      return;
    }

    RenderNode childs = box.getFirstChild();
    while (childs != null)
    {
      if (childs instanceof RenderBox)
      {
        printBox((RenderBox) childs, level + 1);
      }
      else
      {
        printNode(childs, level + 1);
      }
      childs = childs.getNext();
    }
  }

  private void printNode(final RenderNode node, final int level)
  {
    StringBuilder b = new StringBuilder();
    for (int i = 0; i < level; i++)
    {
      b.append("   ");
    }
    b.append(node.getClass().getName());
    b.append('[');
    //b.append(Integer.toHexString(System.identityHashCode(node)));
    b.append(']');
    print(b.toString());

    b = new StringBuilder();
    for (int i = 0; i < level; i++)
    {
      b.append("   ");
    }
    b.append("- layout x=");
    b.append(node.getX());
    b.append(", y=");
    b.append(node.getY());
    b.append(", width=");
    b.append(node.getWidth());
    b.append(", height=");
    b.append(node.getHeight());
    b.append(", min-chunk-width=");
    b.append(node.getMinimumChunkWidth());
    b.append(", x2=");
    b.append(node.getX() + node.getWidth());
    b.append(", y2=");
    b.append(node.getY() + node.getHeight());
    print(b.toString());

    b = new StringBuilder();
    for (int i = 0; i < level; i++)
    {
      b.append("   ");
    }
    b.append("- cached-layout cached-x=");
    b.append(node.getCachedX());
    b.append(", cached-y=");
    b.append(node.getCachedY());
    b.append(", cached-width=");
    b.append(node.getCachedWidth());
    b.append(", cached-height=");
    b.append(node.getCachedHeight());
    print(b.toString());

    if (node instanceof FinishedRenderNode)
    {
      b = new StringBuilder();
      for (int i = 0; i < level; i++)
      {
        b.append("   ");
      }
      final FinishedRenderNode fn = (FinishedRenderNode) node;
      b.append("layouted-y=");
      b.append(fn.getLayoutedY());
      b.append(", layouted-width=");
      b.append(fn.getLayoutedWidth());
      b.append(", layouted-height=");
      b.append(fn.getLayoutedHeight());
      b.append(", orphan-leaf=");
      b.append(fn.isOrphanLeaf());
      print(b.toString());
    }

    if (node instanceof RenderableText)
    {
      final RenderableText text = (RenderableText) node;
      b = new StringBuilder();
      for (int i = 0; i < level; i++)
      {
        b.append("   ");
      }
      b.append("- text='");
      b.append(text.getRawText());
      b.append("'");
      print(b.toString());
    }

    if (node instanceof RenderableComplexText)
    {
      final RenderableComplexText text = (RenderableComplexText) node;
      b = new StringBuilder();
      for (int i = 0; i < level; i++)
      {
        b.append("   ");
      }
      b.append("- complex-text='");
      b.append(text.getRawText());
      b.append("'");
      print(b.toString());
    }

    b = new StringBuilder();
    for (int i = 0; i < level; i++)
    {
      b.append("   ");
    }
    b.append("- nodeLayoutProperties=");
    b.append(node.getNodeLayoutProperties());
    print(b.toString());
    print(" ");
  }
}
TOP

Related Classes of org.pentaho.reporting.engine.classic.core.layout.ModelPrinter

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.