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

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

/*!
* 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.output.crosstab;

import org.pentaho.reporting.engine.classic.core.CrosstabCell;
import org.pentaho.reporting.engine.classic.core.CrosstabCellBody;
import org.pentaho.reporting.engine.classic.core.CrosstabColumnGroup;
import org.pentaho.reporting.engine.classic.core.CrosstabDetailMode;
import org.pentaho.reporting.engine.classic.core.InvalidReportStateException;
import org.pentaho.reporting.engine.classic.core.ReportProcessingException;
import org.pentaho.reporting.engine.classic.core.event.ReportEvent;
import org.pentaho.reporting.engine.classic.core.layout.Renderer;
import org.pentaho.reporting.engine.classic.core.layout.build.LayoutModelBuilder;
import org.pentaho.reporting.engine.classic.core.layout.output.DefaultOutputFunction;
import org.pentaho.reporting.engine.classic.core.layout.output.GroupOutputHandler;

public class CrosstabColumnOutputHandler implements GroupOutputHandler
{
  public CrosstabColumnOutputHandler()
  {
  }

  public void groupStarted(final DefaultOutputFunction outputFunction,
                           final ReportEvent event) throws ReportProcessingException
  {
    final RenderedCrosstabLayout crosstabLayout = outputFunction.getCurrentRenderedCrosstabLayout();
    final LayoutModelBuilder layoutModelBuilder = outputFunction.getRenderer().getNormalFlowLayoutModelBuilder();
    final int gidx = event.getState().getCurrentGroupIndex();
    final CrosstabColumnGroup group = (CrosstabColumnGroup) event.getReport().getGroup(gidx);

    if (crosstabLayout.getFirstColGroupIndex() == -1)
    {
      // record the start of the column groups.
      crosstabLayout.setFirstColGroupIndex(gidx);
    }

    if (crosstabLayout.isCrosstabHeaderOpen() == false)
    {
      return;
    }

    expandColumnSpanAfterRowStart(crosstabLayout, layoutModelBuilder, gidx);

    if (crosstabLayout.isGenerateColumnTitleHeaders())
    {
      layoutModelBuilder.startSubFlow(crosstabLayout.getColumnTitleHeaderSubflowId(gidx));
      CrosstabOutputHelper.createAutomaticCell(layoutModelBuilder);
      crosstabLayout.setColumnTitleHeaderCellId(gidx - crosstabLayout.getFirstColGroupIndex(), layoutModelBuilder.dangerousRawAccess().getInstanceId());
      outputFunction.getRenderer().add(group.getTitleHeader(), outputFunction.getRuntime());
      layoutModelBuilder.finishBox();
      layoutModelBuilder.suspendSubFlow();
    }

    layoutModelBuilder.startSubFlow(crosstabLayout.getColumnHeaderSubflowId(gidx));
    CrosstabOutputHelper.createAutomaticCell(layoutModelBuilder);
    crosstabLayout.setColumnHeaderCellId(gidx - crosstabLayout.getFirstColGroupIndex(), layoutModelBuilder.dangerousRawAccess().getInstanceId());
    outputFunction.getRenderer().add(group.getHeader(), outputFunction.getRuntime());
    layoutModelBuilder.finishBox();
    layoutModelBuilder.suspendSubFlow();

  }

  private void expandColumnSpanAfterRowStart(final RenderedCrosstabLayout crosstabLayout,
                                             final LayoutModelBuilder layoutModelBuilder, final int gidx)
  {
    if (crosstabLayout.isProcessingCrosstabHeader() == false)
    {
      crosstabLayout.setProcessingCrosstabHeader(true);

      CrosstabOutputHelper.expandColumnHeaderSpan(crosstabLayout, layoutModelBuilder, gidx);
    }
  }

  public void groupFinished(final DefaultOutputFunction outputFunction,
                            final ReportEvent event) throws ReportProcessingException
  {
    if (CrosstabOutputHelper.isLastColumnGroup(event))
    {
      return;
    }

    CrosstabOutputHelper.printCrosstabSummary(outputFunction, event);
  }

  public void groupBodyFinished(final DefaultOutputFunction outputFunction,
                                final ReportEvent event) throws ReportProcessingException
  {
  }

  public void itemsStarted(final DefaultOutputFunction outputFunction,
                           final ReportEvent event) throws ReportProcessingException
  {
    generateMeasureHeader(outputFunction, event);

    final LayoutModelBuilder layoutModelBuilder = outputFunction.getRenderer().getNormalFlowLayoutModelBuilder();
    CrosstabOutputHelper.createAutomaticCell(layoutModelBuilder);
    layoutModelBuilder.legacyFlagNotEmpty();

    final RenderedCrosstabLayout crosstabLayout = outputFunction.getCurrentRenderedCrosstabLayout();
    crosstabLayout.setDetailsRendered(false);
    crosstabLayout.setProcessingCrosstabHeader(false);
  }

  private void generateMeasureHeader(final DefaultOutputFunction outputFunction,
                                     final ReportEvent event) throws ReportProcessingException
  {
    final RenderedCrosstabLayout crosstabLayout = outputFunction.getCurrentRenderedCrosstabLayout();
    if (!crosstabLayout.isCrosstabHeaderOpen())
    {
      return;
    }

    if (!crosstabLayout.isGenerateMeasureHeaders())
    {
      return;
    }

    final CrosstabCellBody dataBody = event.getReport().getCrosstabCellBody();
    if (dataBody == null)
    {
      throw new InvalidReportStateException();
    }

    final LayoutModelBuilder layoutModelBuilder = outputFunction.getRenderer().getNormalFlowLayoutModelBuilder();
    layoutModelBuilder.startSubFlow(crosstabLayout.getMeasureHeaderSubflowId());
    CrosstabOutputHelper.createAutomaticCell(layoutModelBuilder);
    outputFunction.getRenderer().add(dataBody.getHeader(), outputFunction.getRuntime());
    layoutModelBuilder.finishBox();
    layoutModelBuilder.suspendSubFlow();
  }

  public void itemsAdvanced(final DefaultOutputFunction outputFunction,
                            final ReportEvent event) throws ReportProcessingException
  {
    final CrosstabCellBody dataBody = event.getReport().getCrosstabCellBody();
    if (dataBody == null)
    {
      return;
    }

    final RenderedCrosstabLayout crosstabLayout = outputFunction.getCurrentRenderedCrosstabLayout();
    if (crosstabLayout.isDetailsRendered())
    {
      return;
    }

    final CrosstabCell element = dataBody.findElement(null, null);
    if (element != null)
    {
      final CrosstabDetailMode detailMode = crosstabLayout.getDetailMode();
      if (detailMode == null)
      {
        throw new IllegalStateException();
      }
      if (CrosstabDetailMode.last.equals(detailMode))
      {
        crosstabLayout.setDetailsRendered(true);
        return;
      }

      outputFunction.getRenderer().startSection(Renderer.SectionType.NORMALFLOW);
      outputFunction.getRenderer().add(element, outputFunction.getRuntime());
      outputFunction.addSubReportMarkers(outputFunction.getRenderer().endSection());
      if (CrosstabDetailMode.first.equals(detailMode))
      {
        crosstabLayout.setDetailsRendered(true);
      }
    }
  }

  public void itemsFinished(final DefaultOutputFunction outputFunction,
                            final ReportEvent event) throws ReportProcessingException
  {
    final RenderedCrosstabLayout crosstabLayout = outputFunction.getCurrentRenderedCrosstabLayout();
    if (CrosstabDetailMode.last.equals(crosstabLayout.getDetailMode()))
    {
      final CrosstabCellBody dataBody = event.getReport().getCrosstabCellBody();
      final CrosstabCell element = dataBody.findElement(null, null);
      if (element != null)
      {
        outputFunction.getRenderer().startSection(Renderer.SectionType.NORMALFLOW);
        outputFunction.getRenderer().add(element, outputFunction.getRuntime());
        outputFunction.addSubReportMarkers(outputFunction.getRenderer().endSection());
      }
    }

    final LayoutModelBuilder layoutModelBuilder = outputFunction.getRenderer().getNormalFlowLayoutModelBuilder();
    layoutModelBuilder.finishBox();
  }


  public void summaryRowStart(final DefaultOutputFunction outputFunction,
                              final ReportEvent event) throws ReportProcessingException
  {
    throw new ReportProcessingException("Crosstab-column groups handler cannot contain summary-rows");
  }

  public void summaryRowEnd(final DefaultOutputFunction outputFunction,
                            final ReportEvent event) throws ReportProcessingException
  {
    throw new ReportProcessingException("Crosstab-column groups handler cannot contain summary-rows");
  }

  public void summaryRow(final DefaultOutputFunction outputFunction,
                         final ReportEvent event) throws ReportProcessingException
  {
    throw new ReportProcessingException("Crosstab-column groups handler cannot contain summary-rows");
  }
}
TOP

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

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.