public AbstractReportDefinition derive( final boolean preserveElementInstanceIds ) {
final AbstractReportDefinition report = (AbstractReportDefinition) super.derive( preserveElementInstanceIds );
report.eventListeners = null;
report.rootGroup = rootGroup.derive( preserveElementInstanceIds );
report.watermark = (Watermark) watermark.derive( preserveElementInstanceIds );
report.pageFooter = (PageFooter) pageFooter.derive( preserveElementInstanceIds );
report.pageHeader = (PageHeader) pageHeader.derive( preserveElementInstanceIds );
report.reportFooter = (ReportFooter) reportFooter.derive( preserveElementInstanceIds );
report.reportHeader = (ReportHeader) reportHeader.derive( preserveElementInstanceIds );
report.expressions = expressions.clone();
report.dataSchemaDefinition = (DataSchemaDefinition) dataSchemaDefinition.clone();
report.rootGroup.setParent( report );
report.reportHeader.setParent( report );
report.reportFooter.setParent( report );
report.pageHeader.setParent( report );
report.pageFooter.setParent( report );
report.watermark.setParent( report );
final ReportPreProcessor[] reportPreProcessors = report.getPreProcessors();
for ( int i = 0; i < reportPreProcessors.length; i++ ) {
reportPreProcessors[i] = reportPreProcessors[i].clone();
}
report.setAttribute( AttributeNames.Internal.NAMESPACE, AttributeNames.Internal.PREPROCESSORS, reportPreProcessors );
final StructureFunction[] structureFunctions = report.getStructureFunctions();
for ( int i = 0; i < structureFunctions.length; i++ ) {
structureFunctions[i] = (StructureFunction) structureFunctions[i].getInstance();
}
report.setAttribute( AttributeNames.Internal.NAMESPACE, AttributeNames.Internal.STRUCTURE_FUNCTIONS,
structureFunctions );
return report;
}