Package org.jfree.report.flow.layoutprocessor

## Class BufferingLayoutController

- java.lang.Object
- - org.jfree.report.flow.layoutprocessor.AbstractLayoutController
  - - org.jfree.report.flow.layoutprocessor.BufferingLayoutController

- All Implemented Interfaces:
    `java.lang.Cloneable`, `LayoutController`

      public abstract class BufferingLayoutController
      extends AbstractLayoutController

  Todo: Document me!
  Since:
    05.03.2007
  Author:
    Thomas Morgner

- - ### Constructor Summary

    Constructors
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `BufferingLayoutController()` |

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `LayoutController` | `advance​(ReportTarget target)` | Advances the processing position.
    `java.lang.Object` | `clone()` | Creates a copy of this layout controller.
    `protected abstract LayoutController` | `getInitialDelegate()` |
    `void` | `initialize​(java.lang.Object node, FlowController flowController, LayoutController parent)` | Initializes the layout controller.
    `boolean` | `isAdvanceable()` | Checks, whether the layout controller would be advanceable.
    `LayoutController` | `join​(FlowController flowController)` | Joins with a delegated process flow.
    `protected LayoutController` | `joinWithParent()` | Joins the layout controller with the parent.

    - ### Methods inherited from class org.jfree.report.flow.layoutprocessor.AbstractLayoutController

      `createPrecomputeInstance, getFlowController, getNode, getParent, isInitialized`

    - ### Methods inherited from class java.lang.Object

      `equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### BufferingLayoutController

          protected BufferingLayoutController()

  - ### Method Detail

    - #### advance

          public LayoutController advance​(ReportTarget target)
                                   throws DataSourceException,
                                          ReportDataFactoryException,
                                          ReportProcessingException

      Advances the processing position.
      Parameters:
        `target` - the report target that receives generated events.
      Returns:
        the new layout controller instance representing the new state.
      Throws:
        `DataSourceException` - if there was a problem reading data from the datasource.
        `ReportProcessingException` - if there was a general problem during the report processing.
        `ReportDataFactoryException` - if a query failed.

    - #### joinWithParent

          protected LayoutController joinWithParent()
                                             throws ReportProcessingException,
                                                    ReportDataFactoryException,
                                                    DataSourceException

      Joins the layout controller with the parent. This simply calls `join(org.jfree.report.flow.FlowController)` on the parent. A join operation is necessary to propagate changes in the flow-controller to the parent for further processing.
      Returns:
        the joined parent.
      Throws:
        `java.lang.IllegalStateException` - if this layout controller has no parent.
        `ReportProcessingException`
        `ReportDataFactoryException`
        `DataSourceException`

    - #### initialize

          public void initialize​(java.lang.Object node,
                                 FlowController flowController,
                                 LayoutController parent)
                          throws DataSourceException,
                                 ReportDataFactoryException,
                                 ReportProcessingException

      Initializes the layout controller. This method is called exactly once. It is the creators responsibility to call this method.

      Calling initialize after the first advance must result in a IllegalStateException.
      Specified by:
        `initialize` in interface `LayoutController`
      Overrides:
        `initialize` in class `AbstractLayoutController`
      Parameters:
        `node` - the currently processed object or layout node.
        `flowController` - the current flow controller.
        `parent` - the parent layout controller that was responsible for instantiating this controller.
      Throws:
        `DataSourceException` - if there was a problem reading data from the datasource.
        `ReportProcessingException` - if there was a general problem during the report processing.
        `ReportDataFactoryException` - if a query failed.

    - #### getInitialDelegate

          protected abstract LayoutController getInitialDelegate()

    - #### isAdvanceable

          public boolean isAdvanceable()

      Description copied from interface: `LayoutController`
      Checks, whether the layout controller would be advanceable. If this method returns true, it is generally safe to call the 'advance()' method.
      Returns:
        true, if the layout controller is advanceable, false otherwise.

    - #### join

          public LayoutController join​(FlowController flowController)
                                throws ReportProcessingException,
                                       DataSourceException

      Joins with a delegated process flow. This is generally called from a child flow and should *not* (I mean it!) be called from outside. If you do, you'll suffer.
      Parameters:
        `flowController` - the flow controller of the parent.
      Returns:
        the joined layout controller that incorperates all changes from the delegate.
      Throws:
        `ReportProcessingException`
        `DataSourceException`

    - #### clone

          public java.lang.Object clone()

      Description copied from interface: `LayoutController`
      Creates a copy of this layout controller.
      Specified by:
        `clone` in interface `LayoutController`
      Overrides:
        `clone` in class `AbstractLayoutController`
      Returns:
        a copy.