diff options
Diffstat (limited to 'reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupLayoutController.java')
-rw-r--r-- | reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupLayoutController.java | 275 |
1 files changed, 136 insertions, 139 deletions
diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupLayoutController.java index 25e12d17edab..12604e931238 100644 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupLayoutController.java +++ b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupLayoutController.java @@ -27,8 +27,6 @@ * for a copy of the LGPLv3 License. * ************************************************************************/ - - package com.sun.star.report.pentaho.layoutprocessor; import com.sun.star.report.pentaho.model.OfficeGroup; @@ -52,158 +50,157 @@ import org.jfree.report.structure.Element; * @since 15.03.2007 */ public class OfficeGroupLayoutController extends SectionLayoutController - implements OfficeRepeatingStructureLayoutController + implements OfficeRepeatingStructureLayoutController { - public static final int STATE_PROCESS_REPEATING_HEADER = 0; - public static final int STATE_PROCESS_REPEATING_FOOTER = 1; - public static final int STATE_PROCESS_NORMAL_FLOW = 3; - private boolean waitForJoin; - private int state; - private VariablesCollection variablesCollection; - private boolean repeatHeader; - private boolean repeatFooter; - - public OfficeGroupLayoutController() - { - } - - - /** - * Initializes the layout controller. This method is called exactly once. It - * is the creators responsibility to call this method. - * <p/> - * Calling initialize after the first advance must result in a - * IllegalStateException. - * - * @param node the currently processed object or layout node. - * @param flowController the current flow controller. - * @param parent the parent layout controller that was responsible for - * instantiating this controller. - * @throws org.jfree.report.DataSourceException - * if there was a problem reading data from the datasource. - * @throws org.jfree.report.ReportProcessingException - * if there was a general problem during the report processing. - * @throws org.jfree.report.ReportDataFactoryException - * if a query failed. - */ - public void initialize(final Object node, - final FlowController flowController, - final LayoutController parent) - throws DataSourceException, ReportDataFactoryException, - ReportProcessingException - { - super.initialize(node, flowController, parent); - state = OfficeGroupLayoutController.STATE_PROCESS_REPEATING_HEADER; - variablesCollection = new VariablesCollection(computeVariablesPrefix()); - - - final OfficeGroup group = (OfficeGroup) getElement(); - final OfficeGroupSection header = group.getHeader(); - repeatHeader = (header != null && header.isRepeatSection()); - - final OfficeGroupSection footer = group.getFooter(); - repeatFooter = (footer != null && footer.isRepeatSection()); - } - - - protected LayoutController processContent(final ReportTarget target) - throws DataSourceException, ReportProcessingException, - ReportDataFactoryException - { - if (state == OfficeGroupLayoutController.STATE_PROCESS_REPEATING_HEADER) + + public static final int STATE_PROCESS_REPEATING_HEADER = 0; + public static final int STATE_PROCESS_REPEATING_FOOTER = 1; + public static final int STATE_PROCESS_NORMAL_FLOW = 3; + private boolean waitForJoin; + private int state; + private VariablesCollection variablesCollection; + private boolean repeatHeader; + private boolean repeatFooter; + + public OfficeGroupLayoutController() + { + } + + /** + * Initializes the layout controller. This method is called exactly once. It + * is the creators responsibility to call this method. + * <p/> + * Calling initialize after the first advance must result in a + * IllegalStateException. + * + * @param node the currently processed object or layout node. + * @param flowController the current flow controller. + * @param parent the parent layout controller that was responsible for + * instantiating this controller. + * @throws org.jfree.report.DataSourceException + * if there was a problem reading data from the datasource. + * @throws org.jfree.report.ReportProcessingException + * if there was a general problem during the report processing. + * @throws org.jfree.report.ReportDataFactoryException + * if a query failed. + */ + public void initialize(final Object node, + final FlowController flowController, + final LayoutController parent) + throws DataSourceException, ReportDataFactoryException, + ReportProcessingException { + super.initialize(node, flowController, parent); + state = OfficeGroupLayoutController.STATE_PROCESS_REPEATING_HEADER; + variablesCollection = new VariablesCollection(computeVariablesPrefix()); - final OfficeGroupLayoutController controller = - (OfficeGroupLayoutController) clone(); - controller.state = - OfficeGroupLayoutController.STATE_PROCESS_REPEATING_FOOTER; - if (!repeatHeader) - { - return controller; - } + final OfficeGroup group = (OfficeGroup) getElement(); + final OfficeGroupSection header = group.getHeader(); + repeatHeader = (header != null && header.isRepeatSection()); - final OfficeGroup group = (OfficeGroup) getElement(); - final OfficeGroupSection header = group.getHeader(); - controller.waitForJoin = true; - return processChild(controller, header, getFlowController()); + final OfficeGroupSection footer = group.getFooter(); + repeatFooter = (footer != null && footer.isRepeatSection()); } - if (state == OfficeGroupLayoutController.STATE_PROCESS_REPEATING_FOOTER) + protected LayoutController processContent(final ReportTarget target) + throws DataSourceException, ReportProcessingException, + ReportDataFactoryException { + if (state == OfficeGroupLayoutController.STATE_PROCESS_REPEATING_HEADER) + { + + final OfficeGroupLayoutController controller = + (OfficeGroupLayoutController) clone(); + controller.state = + OfficeGroupLayoutController.STATE_PROCESS_REPEATING_FOOTER; + + if (!repeatHeader) + { + return controller; + } + + final OfficeGroup group = (OfficeGroup) getElement(); + final OfficeGroupSection header = group.getHeader(); + controller.waitForJoin = true; + return processChild(controller, header, getFlowController()); + } + + if (state == OfficeGroupLayoutController.STATE_PROCESS_REPEATING_FOOTER) + { + + final OfficeGroupLayoutController controller = + (OfficeGroupLayoutController) clone(); + controller.state = OfficeGroupLayoutController.STATE_PROCESS_NORMAL_FLOW; + + if (!repeatFooter) + { + return controller; + } + + final OfficeGroup group = (OfficeGroup) getElement(); + final OfficeGroupSection footer = group.getFooter(); + controller.waitForJoin = true; + return processChild(controller, footer, getFlowController()); + } + + return super.processContent(target); + } - final OfficeGroupLayoutController controller = - (OfficeGroupLayoutController) clone(); - controller.state = OfficeGroupLayoutController.STATE_PROCESS_NORMAL_FLOW; + /** + * 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. + * + * @param flowController the flow controller of the parent. + * @return the joined layout controller that incorperates all changes from the + * delegate. + */ + public LayoutController join(final FlowController flowController) + { + if (waitForJoin) + { + final OfficeGroupLayoutController derived = (OfficeGroupLayoutController) clone(); + derived.setProcessingState(ElementLayoutController.OPENED); + derived.setFlowController(flowController); + derived.waitForJoin = false; + return derived; + } + return super.join(flowController); + } - if (!repeatFooter) - { - return controller; - } + public boolean isNormalFlowProcessing() + { + return state == OfficeGroupLayoutController.STATE_PROCESS_NORMAL_FLOW; + } - final OfficeGroup group = (OfficeGroup) getElement(); - final OfficeGroupSection footer = group.getFooter(); - controller.waitForJoin = true; - return processChild(controller, footer, getFlowController()); + private String computeVariablesPrefix() + { + int count = 0; + LayoutController lc = this; + while (lc != null) + { + if (lc instanceof OfficeGroupLayoutController) + { + count++; + } + lc = lc.getParent(); + } + return "auto_group_" + count + "_"; } - return super.processContent(target); - } - - /** - * 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. - * - * @param flowController the flow controller of the parent. - * @return the joined layout controller that incorperates all changes from the - * delegate. - */ - public LayoutController join(final FlowController flowController) - { - if (waitForJoin) + public VariablesCollection getVariablesCollection() { - final OfficeGroupLayoutController derived = (OfficeGroupLayoutController) clone(); - derived.setProcessingState(ElementLayoutController.OPENED); - derived.setFlowController(flowController); - derived.waitForJoin = false; - return derived; + return variablesCollection; } - return super.join(flowController); - } - - public boolean isNormalFlowProcessing () - { - return state == OfficeGroupLayoutController.STATE_PROCESS_NORMAL_FLOW; - } - - private String computeVariablesPrefix() - { - int count = 0; - LayoutController lc = this; - while (lc != null) + + protected AttributeMap computeAttributes(final FlowController fc, final Element element, final ReportTarget target) + throws DataSourceException { - if (lc instanceof OfficeGroupLayoutController) - { - count++; - } - lc = lc.getParent(); + final AttributeMap map = new AttributeMap(super.computeAttributes(fc, element, target)); + final String value = String.valueOf(repeatHeader || repeatFooter); + map.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "repeating-header-or-footer", value); + map.makeReadOnly(); + return map; } - return "auto_group_" + count + "_"; - } - - public VariablesCollection getVariablesCollection() - { - return variablesCollection; - } - - protected AttributeMap computeAttributes(final FlowController fc, final Element element, final ReportTarget target) - throws DataSourceException - { - final AttributeMap map = new AttributeMap( super.computeAttributes(fc, element, target) ); - final String value = String.valueOf(repeatHeader || repeatFooter); - map.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "repeating-header-or-footer", value); - map.makeReadOnly(); - return map; - } } |