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

Source Code of org.pentaho.reporting.engine.classic.core.layout.output.PreparedCrosstabLayout

/*
* 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) 2009 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.reporting.engine.classic.core.layout.output;

import java.util.ArrayList;

import org.pentaho.reporting.engine.classic.core.layout.InlineSubreportMarker;
import org.pentaho.reporting.engine.classic.core.layout.model.BlockRenderBox;
import org.pentaho.reporting.engine.classic.core.layout.model.RenderBox;
import org.pentaho.reporting.engine.classic.core.layout.model.RowRenderBox;
import org.pentaho.reporting.engine.classic.core.layout.style.CrosstabHeaderStyleSheet;
import org.pentaho.reporting.engine.classic.core.util.InstanceID;

/**
* Todo: Document Me
*
* @author Thomas Morgner
*/
public class PreparedCrosstabLayout implements Cloneable
{
  private InstanceID columnHeaderTitleBoxId;
  private InstanceID columnHeaderBoxId;
  private InstanceID rowHeaderTitleBoxId;
  private InstanceID rowFooterTitleBoxId;

  private InstanceID rowHeaderBoxId;
  private InstanceID rowFooterBoxId;
  private InstanceID cellDataBoxId;

  private RowRenderBox headerBox;
  private RowRenderBox dataBox;

  private ArrayList headerSubReports;
  private ArrayList dataSubReports;
  private boolean finishPending;
  private int rowCount;

  public PreparedCrosstabLayout()
  {
    headerSubReports = new ArrayList();
    dataSubReports = new ArrayList();

    final CrosstabHeaderStyleSheet styleSheet = new CrosstabHeaderStyleSheet();
    final RenderBox rowFooterTitleBox = new RowRenderBox(styleSheet);
    rowFooterTitleBox.setName("rowFooterTitleBox");
    final RenderBox rowHeaderTitleBox = new RowRenderBox(styleSheet);
    rowHeaderTitleBox.setName("rowHeaderTitleBox");
    final RenderBox columnHeaderTitleBox = new RowRenderBox(styleSheet);
    columnHeaderTitleBox.setName("columnHeaderTitleBox");
    final RenderBox columnHeaderBox = new RowRenderBox(styleSheet);
    columnHeaderBox.setName("columnHeaderBox");

    rowFooterTitleBoxId = rowFooterTitleBox.getInstanceId();
    rowHeaderTitleBoxId = rowHeaderTitleBox.getInstanceId();
    columnHeaderTitleBoxId = columnHeaderTitleBox.getInstanceId();
    columnHeaderBoxId = columnHeaderBox.getInstanceId();

    final RenderBox rowHeaderBox = new RowRenderBox(styleSheet);
    rowHeaderBox.setName("rowHeaderBox");
    final RenderBox rowFooterBox = new RowRenderBox(styleSheet);
    rowFooterBox.setName("rowFooterBox");
    final RenderBox cellDataBox = new RowRenderBox(styleSheet);
    cellDataBox.setName("cellDataBox");

    rowHeaderBoxId = rowHeaderBox.getInstanceId();
    rowFooterBoxId = rowFooterBox.getInstanceId();
    cellDataBoxId = cellDataBox.getInstanceId();

    final BlockRenderBox columnHeaderArea = new BlockRenderBox(styleSheet);
    columnHeaderArea.setName("columnHeaderArea");
    columnHeaderArea.addChild(columnHeaderTitleBox);
    columnHeaderArea.addChild(columnHeaderBox);
    columnHeaderArea.close();

    headerBox = new RowRenderBox(styleSheet);
    headerBox.setName("headerBox");
    headerBox.addChild(rowHeaderTitleBox);
    headerBox.addChild(columnHeaderArea);
    headerBox.addChild(rowFooterTitleBox);
    headerBox.close();

    dataBox = new RowRenderBox(styleSheet);
    dataBox.setName("dataBox");
    dataBox.addChild(rowHeaderBox);
    dataBox.addChild(cellDataBox);
    dataBox.addChild(rowFooterBox);
    dataBox.close();
  }

  public RenderBox getColumnHeaderTitleBox()
  {
    final RenderBox renderBox = (RenderBox) headerBox.findNodeById(columnHeaderTitleBoxId);
    if (renderBox == null)
    {
      throw new IllegalStateException();
    }
    return renderBox;
  }

  public RenderBox getColumnHeaderBox()
  {
    final RenderBox renderBox = (RenderBox) headerBox.findNodeById(columnHeaderBoxId);
    if (renderBox == null)
    {
      throw new IllegalStateException();
    }
    return renderBox;
  }

  public RenderBox getRowHeaderTitleBox()
  {
    final RenderBox renderBox = (RenderBox) headerBox.findNodeById(rowHeaderTitleBoxId);
    if (renderBox == null)
    {
      throw new IllegalStateException();
    }
    return renderBox;
  }

  public RenderBox getRowFooterTitleBox()
  {
    final RenderBox renderBox = (RenderBox) headerBox.findNodeById(rowFooterTitleBoxId);
    if (renderBox == null)
    {
      throw new IllegalStateException();
    }
    return renderBox;
  }

  public RenderBox getRowHeaderBox()
  {
    final RenderBox renderBox = (RenderBox) dataBox.findNodeById(rowHeaderBoxId);
    if (renderBox == null)
    {
      throw new IllegalStateException();
    }
    return renderBox;
  }

  public RenderBox getRowFooterBox()
  {
    final RenderBox renderBox = (RenderBox) dataBox.findNodeById(rowFooterBoxId);
    if (renderBox == null)
    {
      throw new IllegalStateException();
    }
    return renderBox;
  }

  public RenderBox getCellDataBox()
  {
    final RenderBox renderBox = (RenderBox) dataBox.findNodeById(cellDataBoxId);
    if (renderBox == null)
    {
      throw new IllegalStateException();
    }
    return renderBox;
  }

  public PreparedCrosstabLayout derive() throws CloneNotSupportedException
  {
    final PreparedCrosstabLayout layout = (PreparedCrosstabLayout) super.clone();
    layout.dataBox = (RowRenderBox) dataBox.derive(true);
    layout.headerBox = (RowRenderBox) headerBox.derive(true);
    return layout;
  }

  public Object clone() throws CloneNotSupportedException
  {
    final PreparedCrosstabLayout o = (PreparedCrosstabLayout) super.clone();
    o.dataBox = (RowRenderBox) dataBox.clone();
    o.headerBox = (RowRenderBox) headerBox.clone();
    return o;
  }

  public boolean isFinishPending()
  {
    return finishPending;
  }

  public void setFinishPending(final boolean finishPending)
  {
    this.finishPending = finishPending;
  }

  public InlineSubreportMarker[] getHeaderSubReportMarker()
  {
    return (InlineSubreportMarker[]) headerSubReports.toArray(new InlineSubreportMarker[headerSubReports.size()]);
  }

  public InlineSubreportMarker[] getDataSubReportMarker()
  {
    return (InlineSubreportMarker[]) dataSubReports.toArray(new InlineSubreportMarker[dataSubReports.size()]);
  }

  public int getRowCount()
  {
    return rowCount;
  }

  public void setRowCount(final int rowCount)
  {
    this.rowCount = rowCount;
  }

  public RenderBox getPrintableDataBox()
  {
    final RowRenderBox dataBox = (RowRenderBox) this.dataBox.derive(true);
    final RenderBox cellDataBox = (RenderBox) dataBox.findNodeById(cellDataBoxId);
    final RenderBox rowFooterBox = (RenderBox) dataBox.findNodeById(rowFooterBoxId);
    final RenderBox rowHeaderBox = (RenderBox) dataBox.findNodeById(rowHeaderBoxId);

    closeBoxAndChilds(rowFooterBox, false);
    closeBoxAndChilds(rowHeaderBox, false);
    closeBoxAndChilds(cellDataBox, false);
    return dataBox;
  }

  public RenderBox getPrintableHeaderBox()
  {
    final RowRenderBox headerBox = (RowRenderBox) this.headerBox.derive(true);
    final RenderBox rowFooterTitleBox = (RenderBox) headerBox.findNodeById(rowFooterTitleBoxId);
    final RenderBox rowHeaderTitleBox = (RenderBox) headerBox.findNodeById(rowHeaderTitleBoxId);
    final RenderBox columnHeaderTitleBox = (RenderBox) headerBox.findNodeById(columnHeaderTitleBoxId);
    final RenderBox columnHeaderBox = (RenderBox) headerBox.findNodeById(columnHeaderBoxId);
    closeBoxAndChilds(rowFooterTitleBox, false);
    closeBoxAndChilds(rowHeaderTitleBox, false);
    closeBoxAndChilds(columnHeaderTitleBox, true);
    closeBoxAndChilds(columnHeaderBox, true);
    return headerBox;
  }

  private void closeBoxAndChilds(final RenderBox box, final boolean secondLevel)
  {
    box.close();
    RenderBox child = (RenderBox) box.getFirstChild();
    while (child != null)
    {
      if (secondLevel)
      {
        closeBoxAndChilds(child, false);
      }
      else
      {
        child.close();
      }
      child = (RenderBox) child.getNext();

    }
  }

}
TOP

Related Classes of org.pentaho.reporting.engine.classic.core.layout.output.PreparedCrosstabLayout

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.