org.jfree.report.flow.layoutprocessor
Class BufferingLayoutController

java.lang.Object
  extended by org.jfree.report.flow.layoutprocessor.AbstractLayoutController
      extended by 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
protected BufferingLayoutController()
           
 
Method Summary
 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.