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

Examples of org.pentaho.reporting.engine.classic.core.states.ReportState


    {
      return;
    }
    if (parentRow != null)
    {
      final ReportState parentState = event.getState().getParentSubReportState();
      final ReportEvent deepEvent;
      if (parentState == null)
      {
        deepEvent = event;
      }
View Full Code Here


      final ReportDefinition report = event.getReport();
      if (event.getState().isSubReportEvent() == false)
      {
        renderer.startReport(report);

        final ReportState reportState = event.getState();
        final ExpressionRuntime runtime = getRuntime();
        try
        {
          reportState.setCurrentPage(1);
          reportState.firePageStartedEvent(reportState.getEventCode());
        }
        finally
        {
          // restore the current event, as the page-started event will clear it ..
          setRuntime(runtime);
View Full Code Here

    }
  }

  private int computeRowPosition(final ReportEvent event)
  {
    final ReportState state = event.getState();
    final int groupIndex = state.getCurrentGroupIndex();
    Group group = event.getReport().getGroup(groupIndex);
    int retval = -1;
    while (group instanceof CrosstabRowGroup)
    {
      retval += 1;
View Full Code Here

    return retval;
  }

  private int computeColumnPosition(final ReportEvent event)
  {
    final ReportState state = event.getState();
    final int groupIndex = state.getCurrentGroupIndex();
    Group group = event.getReport().getGroup(groupIndex);
    int retval = -1;
    while (group instanceof CrosstabColumnGroup)
    {
      retval += 1;
View Full Code Here

  {
    if (processingContext == null)
    {
      throw new NullPointerException();
    }
    ReportState parentState = state.getParentSubReportState();
    if (parentState == null)
    {
      return EMPTY_LAYOUTER_LEVEL;
    }

    MasterDataRow dataRow = state.getFlowController().getMasterRow();
    dataRow = dataRow.getParentDataRow();
    if (dataRow == null)
    {
      throw new IllegalStateException("Parent-DataRow in a subreport-state must be defined.");
    }

    final ArrayList<LayouterLevel> stack = new ArrayList<LayouterLevel>();
    while (parentState != null)
    {
      if (parentState.isInlineProcess() == false)
      {
        final LayoutExpressionRuntime runtime = createRuntime(dataRow, parentState, processingContext);
        stack.add(new LayouterLevel
            (parentState.getReport(), parentState.getCurrentGroupIndex(), runtime, parentState.isInItemGroup()));
      }
      parentState = parentState.getParentSubReportState();
      dataRow = dataRow.getParentDataRow();
      if (dataRow == null)
      {
        throw new IllegalStateException("Parent-DataRow in a subreport-state must be defined.");
      }
View Full Code Here

  }

  protected void updateHeaderArea(final ReportState givenState)
      throws ReportProcessingException
  {
    ReportState state = givenState;
    while (state != null && state.isInlineProcess())
    {
      state = state.getParentSubReportState();
    }
    if (state == null)
    {
      return;
    }

    final ProcessingContext processingContext = getRuntime().getProcessingContext();
    final ReportDefinition report = state.getReport();
    LayouterLevel[] levels = null;
    ExpressionRuntime runtime = null;
    final OutputProcessorMetaData metaData = renderer.getOutputProcessor().getMetaData();
    if (metaData.isFeatureSupported(OutputProcessorFeature.WATERMARK_SECTION))
    {
      renderer.startSection(Renderer.TYPE_WATERMARK);
      // a new page has started, so reset the cursor ...
      // Check the subreport for sticky watermarks ...
      levels = DefaultOutputFunction.collectSubReportStates(state, processingContext);

      for (int i = levels.length - 1; i >= 0; i -= 1)
      {
        final LayouterLevel level = levels[i];
        final ReportDefinition def = level.getReportDefinition();
        final Watermark watermark = def.getWatermark();
        if (watermark.isSticky())
        {
          if (isPageHeaderPrinting(watermark, state))
          {
            print(level.getRuntime(), watermark);
          }
          else
          {
            printEmptyRootLevelBand();
          }
        }
      }

      // and finally print the watermark of the subreport itself ..
      final Band watermark = report.getWatermark();
      if (isPageHeaderPrinting(watermark, state))
      {
        runtime = createRuntime(state.getFlowController().getMasterRow(), state, processingContext);
        print(runtime, watermark);
      }
      addSubReportMarkers(renderer.endSection());
    }

    if (metaData.isFeatureSupported(OutputProcessorFeature.PAGE_SECTIONS))
    {
      renderer.startSection(Renderer.TYPE_HEADER);
      // after printing the watermark, we are still at the top of the page.

      if (levels == null)
      {
        levels = DefaultOutputFunction.collectSubReportStates(state, processingContext);
      }

      for (int i = levels.length - 1; i >= 0; i -= 1)
      {
        // This is propably wrong (or at least incomplete) in case a subreport uses header or footer which should
        // not be printed with the report-footer or header ..
        final LayouterLevel level = levels[i];
        final ReportDefinition def = level.getReportDefinition();
        final PageHeader header = def.getPageHeader();
        if (header.isSticky())
        {
          if (isPageHeaderPrinting(header, state))
          {
            print(level.getRuntime(), header);
          }
          else
          {
            printEmptyRootLevelBand();
          }
        }
      }

      // and print the ordinary page header ..
      final Band b = report.getPageHeader();
      if (isPageHeaderPrinting(b, state))
      {
        if (runtime == null)
        {
          runtime = createRuntime(state.getFlowController().getMasterRow(), state, processingContext);
        }
        print(runtime, b);
      }

      /**
       * Dive into the pending group to print the group header ...
       */

      for (int i = levels.length - 1; i >= 0; i -= 1)
      {
        final LayouterLevel level = levels[i];
        final ReportDefinition def = level.getReportDefinition();

        for (int gidx = 0; gidx < level.getGroupIndex(); gidx++)
        {
          final Group g = def.getGroup(gidx);
          final GroupHeader header = g.getHeader();
          if (header.isSticky())
          {
            if (header.isRepeat())
            {
              print(level.getRuntime(), header);
            }
            else
            {
              printEmptyRootLevelBand();
            }
          }
        }

        if (level.isInItemGroup())
        {
          final DetailsHeader detailsHeader = def.getDetailsHeader();
          if (detailsHeader.isRepeat())
          {
            print(level.getRuntime(), detailsHeader);
          }
        }
      }

      final int groupsPrinted;
      if (groupStartPending || state.isInItemGroup() == false)
      {
        groupsPrinted = state.getCurrentGroupIndex() - 1;
      }
      else
      {
        groupsPrinted = state.getCurrentGroupIndex();
      }

      for (int gidx = 0; gidx <= groupsPrinted; gidx++)
      {
        final Group g = report.getGroup(gidx);
        final GroupHeader header = g.getHeader();
        if (header.isRepeat())
        {
          print(runtime, header);
        }
      }

      if (state.isInItemGroup())
      {
        final DetailsHeader detailsHeader = report.getDetailsHeader();
        if (detailsHeader.isRepeat())
        {
          print(runtime, detailsHeader);
View Full Code Here

    final ReportDefinition report = event.getReport();

    boolean somethingSticks = false;

    final ReportState state = event.getState();
    if (state.isInItemGroup())
    {
      final DetailsFooter detailsFooter = report.getDetailsFooter();
      if (detailsFooter.isRepeat())
      {
        print(getRuntime(), detailsFooter);
        somethingSticks = detailsFooter.isSticky();
      }
    }

    /**
     * Repeating group header are only printed while ItemElements are
     * processed.
     */
    final int groupsPrinted = state.getCurrentGroupIndex();
    for (int gidx = groupsPrinted; gidx >= 0; gidx -= 1)
    {
      final Group g = report.getGroup(gidx);
      final GroupFooter footer = g.getFooter();
      if (footer.isRepeat())
      {
        print(getRuntime(), footer);
        somethingSticks |= footer.isSticky();
      }
    }

    final LayouterLevel[] levels = DefaultOutputFunction.collectSubReportStates(event.getState(), getRuntime().getProcessingContext());
    final int levelCount = levels.length;
    for (int i = 0; i < levelCount; i++)
    {
      final LayouterLevel level = levels[i];
      final ReportDefinition def = level.getReportDefinition();

      if (level.isInItemGroup())
      {
        final DetailsFooter subDetailsFooter = report.getDetailsFooter();
        if (subDetailsFooter.isSticky())
        {
          if (subDetailsFooter.isRepeat())
          {
            print(level.getRuntime(), subDetailsFooter);
          }
          else
          {
            printEmptyRootLevelBand();
          }
          somethingSticks = true;
        }
        else if (somethingSticks)
        {
          printEmptyRootLevelBand();
        }
      }

      for (int gidx = level.getGroupIndex(); gidx >= 0; gidx -= 1)
      {
        final Group g = def.getGroup(gidx);
        final GroupFooter footer = g.getFooter();
        if (footer.isSticky())
        {
          if (footer.isRepeat())
          {
            print(level.getRuntime(), footer);
          }
          else
          {
            printEmptyRootLevelBand();
          }
          somethingSticks = true;
        }
        else if (somethingSticks)
        {
          printEmptyRootLevelBand();
        }
      }
    }

    final PageFooter pageFooter = report.getPageFooter();
    final ElementStyleSheet pageFooterStyle = pageFooter.getStyle();
    if (state.getCurrentPage() == 1)
    {
      if (pageFooterStyle.getBooleanStyleProperty(BandStyleKeys.DISPLAY_ON_FIRSTPAGE) == true)
      {
        print(getRuntime(), pageFooter);
      }
      else if (somethingSticks)
      {
        printEmptyRootLevelBand();
      }
    }
    else if (isLastPagebreak())
    {
      if (pageFooterStyle.getBooleanStyleProperty(BandStyleKeys.DISPLAY_ON_LASTPAGE, false) == true)
      {
        print(getRuntime(), pageFooter);
      }
      else if (somethingSticks)
      {
        printEmptyRootLevelBand();
      }
    }
    else
    {
      if (somethingSticks)
      {
        printEmptyRootLevelBand();
      }
      else
      {
        print(getRuntime(), pageFooter);
      }
    }
    somethingSticks |= pageFooter.isSticky();

    for (int i = 0; i < levelCount; i++)
    {
      final LayouterLevel level = levels[i];
      final ReportDefinition def = level.getReportDefinition();
      final PageFooter b = def.getPageFooter();
      if (b.isSticky() == false)
      {
        if (somethingSticks)
        {
          printEmptyRootLevelBand();
        }
        continue;
      }

      somethingSticks = true;

      final ElementStyleSheet style = b.getStyle();
      if (state.getCurrentPage() == 1)
      {
        if (style.getBooleanStyleProperty(BandStyleKeys.DISPLAY_ON_FIRSTPAGE) == true)
        {
          print(level.getRuntime(), b);
        }
View Full Code Here

   *
   * @param event the event.
   */
  public void groupStarted(final ReportEvent event)
  {
    final ReportState state = event.getState();
    if (event.getLevel() == getDependencyLevel())
    {
      final Group group = event.getReport().getGroup(state.getCurrentGroupIndex());
      if (group instanceof CrosstabGroup)
      {
        final CrosstabGroup crosstabGroup = (CrosstabGroup) group;
        // yeay! we encountered a crosstab.
        if (processingStack == null)
        {
          processingStack = new FastStack();
        }
        final String[] columnSet = computeColumns(crosstabGroup);
        final ReportStateKey processKey = state.getProcessKey();
        final DataSchema dataSchema = getRuntime().getDataSchema();
        final DataAttributes tableAttributes = dataSchema.getTableAttributes();
        final DataAttributeContext context = new DefaultDataAttributeContext
            (getRuntime().getProcessingContext().getOutputProcessorMetaData(),
                getRuntime().getResourceBundleFactory().getLocale());

        final String mode = (String) tableAttributes.getMetaAttribute
            (MetaAttributeNames.Core.NAMESPACE, MetaAttributeNames.Core.CROSSTAB_MODE, String.class, context);
        if ("normalized".equals(mode))
        {
          processingStack.push(new OrderedMergeCrosstabSpecification(processKey, columnSet));
        }
        else
        {
          processingStack.push(new SortedMergeCrosstabSpecification(processKey, columnSet));
        }
        return;
      }

      if (processingStack == null || processingStack.isEmpty())
      {
        return;
      }

      final CrosstabSpecification csstate = (CrosstabSpecification) processingStack.peek();
      if (csstate == null)
      {
        return;
      }

      if (group instanceof CrosstabRowGroup)
      {
        if (group.getBody() instanceof CrosstabColumnGroupBody)
        {
          csstate.startRow();
        }
      }

      return;
    }

    if (results == null || processingStack == null || processingStack.isEmpty())
    {
      return;
    }

    // recall ..
    final Group group = event.getReport().getGroup(state.getCurrentGroupIndex());
    if (group instanceof CrosstabGroup)
    {
      final ReportStateKey processKey = state.getProcessKey();
      final CrosstabSpecification o = (CrosstabSpecification) results.get(processKey);
      if (o == null)
      {
        throw new IllegalStateException("Expected crosstab result, but got nothing at all");
      }
View Full Code Here

    if (csstate == null)
    {
      return;
    }

    final ReportState state = event.getState();
    if (event.getLevel() == getDependencyLevel())
    {
      final Group group = event.getReport().getGroup(state.getCurrentGroupIndex());
      if (group instanceof CrosstabGroup)
      {
        final CrosstabSpecification cs = (CrosstabSpecification) processingStack.pop();
        if (results == null)
        {
          results = new HashMap();
        }
        results.put(cs.getKey(), cs);
        return;
      }

      if (group instanceof CrosstabRowGroup)
      {
        if (group.getBody() instanceof CrosstabColumnGroupBody)
        {
          csstate.endRow();
        }
      }
      return;
    }

    if (results == null)
    {
      return;
    }

    final Group group = event.getReport().getGroup(state.getCurrentGroupIndex());
    if (group instanceof CrosstabGroup)
    {
      processingStack.pop();
    }
  }
View Full Code Here

    if (getGroup() == null)
    {
      return;
    }

    final ReportState state = event.getState();
    final Group group = event.getReport().getGroup(state.getCurrentGroupIndex());
    if (getGroup().equals(group.getName()))
    {
      setCount(0);
    }
  }
View Full Code Here

TOP

Related Classes of org.pentaho.reporting.engine.classic.core.states.ReportState

Copyright © 2018 www.massapicom. 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.