org.jfree.report.flow.layoutprocessor

Class ElementLayoutController

Implemented Interfaces:
Cloneable, LayoutController
Known Direct Subclasses:
AutoTableItemLayoutController, AutoTableLayoutController, ContentElementLayoutController, SectionLayoutController

public abstract class ElementLayoutController
extends java.lang.Object
implements LayoutController

Creation-Date: 24.11.2006, 13:56:30
Author:
Thomas Morgner

Nested Class Summary

protected static class
ElementLayoutController.ElementPrecomputeKey

Field Summary

static int
FINISHED
static int
FINISHING
static int
NOT_STARTED
static int
OPENED
static int
WAITING_FOR_JOIN

Constructor Summary

ElementLayoutController()

Method Summary

LayoutController
advance(ReportTarget target)
Advances the layout controller to the next state.
Object
clone()
protected AttributeMap
computeAttributes(FlowController fc, Element element, ReportTarget target)
LayoutController
createPrecomputeInstance(FlowController fc)
Derives a copy of this controller that is suitable to perform a precomputation.
protected LayoutController
finishElement(ReportTarget target)
Finishes the processing of this element.
AttributeMap
getAttributeMap()
Element
getElement()
int
getExpressionsCount()
FlowController
getFlowController()
int
getIterationCount()
Object
getNode()
LayoutController
getParent()
Retrieves the parent of this layout controller.
int
getProcessingState()
protected FlowController
handleDefaultEndElement(ReportTarget target)
void
initialize(Object node, FlowController flowController, LayoutController parent)
Initializes the layout controller.
boolean
isAdvanceable()
boolean
isPrecomputing()
protected FlowController
performElementPrecomputation(Expression[] expressions, FlowController fc)
protected abstract LayoutController
processContent(ReportTarget target)
Processes any content in this element.
void
setFlowController(FlowController flowController)
void
setParent(LayoutController parent)
void
setProcessingState(int processingState)
protected FlowController
startData(ReportTarget target, FlowController fc)
protected LayoutController
startElement(ReportTarget target)
This method is called for each newly instantiated layout controller.
String
toString()
protected FlowController
tryRepeatingCommit(FlowController fc)

Field Details

FINISHED

public static final int FINISHED
Field Value:
4

FINISHING

public static final int FINISHING
Field Value:
3

NOT_STARTED

public static final int NOT_STARTED
Field Value:
0

OPENED

public static final int OPENED
Field Value:
1

WAITING_FOR_JOIN

public static final int WAITING_FOR_JOIN
Field Value:
2

Constructor Details

ElementLayoutController

protected ElementLayoutController()

Method Details

advance

public final LayoutController advance(ReportTarget target)
            throws DataSourceException,
                   ReportProcessingException,
                   ReportDataFactoryException
Advances the layout controller to the next state. This method delegates the call to one of the following methods:
Specified by:
advance in interface LayoutController
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.

clone

public Object clone()
Specified by:
clone in interface LayoutController

computeAttributes

protected AttributeMap computeAttributes(FlowController fc,
                                         Element element,
                                         ReportTarget target)
            throws DataSourceException

createPrecomputeInstance

public LayoutController createPrecomputeInstance(FlowController fc)
Derives a copy of this controller that is suitable to perform a precomputation.
Specified by:
createPrecomputeInstance in interface LayoutController
Parameters:
fc -
Returns:

finishElement

protected LayoutController finishElement(ReportTarget target)
            throws ReportProcessingException,
                   DataSourceException,
                   ReportDataFactoryException
Finishes the processing of this element. This method is called when the processing state is 'FINISHING'. The element should be closed now and all privatly owned resources should be freed. If the element has a parent, it would be time to join up with the parent now, else the processing state should be set to 'FINISHED'.
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 there was an error trying query data.

getAttributeMap

public AttributeMap getAttributeMap()

getElement

public Element getElement()

getExpressionsCount

public int getExpressionsCount()

getFlowController

public FlowController getFlowController()
Specified by:
getFlowController in interface LayoutController

getIterationCount

public int getIterationCount()

getNode

public Object getNode()
Specified by:
getNode in interface LayoutController

getParent

public LayoutController getParent()
Retrieves the parent of this layout controller. This allows childs to query their context.
Specified by:
getParent in interface LayoutController
Returns:
the layout controller's parent to null if there is no parent.

getProcessingState

public int getProcessingState()

handleDefaultEndElement

protected FlowController handleDefaultEndElement(ReportTarget target)
            throws ReportProcessingException,
                   DataSourceException,
                   ReportDataFactoryException

initialize

public void initialize(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
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.

isAdvanceable

public boolean isAdvanceable()
Specified by:
isAdvanceable in interface LayoutController

isPrecomputing

public boolean isPrecomputing()

performElementPrecomputation

protected FlowController performElementPrecomputation(Expression[] expressions,
                                                      FlowController fc)
            throws ReportProcessingException,
                   ReportDataFactoryException,
                   DataSourceException

processContent

protected abstract LayoutController processContent(ReportTarget target)
            throws DataSourceException,
                   ReportProcessingException,
                   ReportDataFactoryException
Processes any content in this element. This method is called when the processing state is 'OPENED'. The returned layout controller will retain the 'OPENED' state as long as there is more content available. Once all content has been processed, the returned layout controller should carry a 'FINISHED' state.
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.

setFlowController

public void setFlowController(FlowController flowController)

setParent

public void setParent(LayoutController parent)

setProcessingState

public void setProcessingState(int processingState)

startData

protected FlowController startData(ReportTarget target,
                                   FlowController fc)
            throws DataSourceException,
                   ReportProcessingException,
                   ReportDataFactoryException

startElement

protected LayoutController startElement(ReportTarget target)
            throws DataSourceException,
                   ReportProcessingException,
                   ReportDataFactoryException
This method is called for each newly instantiated layout controller. The returned layout controller instance should have a processing state of either 'OPEN' or 'FINISHING' depending on whether there is any content or any child nodes to process.
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.

toString

public String toString()

tryRepeatingCommit

protected FlowController tryRepeatingCommit(FlowController fc)
            throws DataSourceException