FlowController fc)
throws ReportProcessingException, ReportDataFactoryException,
DataSourceException
{
final Element element = getElement();
final PrecomputedValueRegistry pcvr = fc.getPrecomputedValueRegistry();
if (isPrecomputing() == false)
{
pcvr.startElement(new ElementPrecomputeKey(element));
}
if (expressions.length > 0)
{
final ExpressionSlot[] slots = new ExpressionSlot[expressions.length];
final StaticExpressionRuntimeData runtimeData =
LayoutControllerUtil.getStaticExpressionRuntime(fc, element);
for (int i = 0; i < expressions.length; i++)
{
final Expression expression = expressions[i];
if (isPrecomputing() == false && expression.isPrecompute())
{
// ok, we have to precompute the expression's value. For that
// we fork a new layout process, compute the value and then come
// back with the result.
final Object value = LayoutControllerUtil.performPrecompute
(i, new ElementPrecomputeKey(element),
this, getFlowController());
slots[i] = new PrecomputedExpressionSlot(expression.getName(), value,
expression.isPreserve());
}
else
{
// thats a bit easier; we dont have to do anything special ..
slots[i] = new RunningExpressionSlot(expression, runtimeData,
pcvr.currentNode());
}
}
fc = fc.activateExpressions(slots);
}