diff options
Diffstat (limited to 'reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java')
-rw-r--r-- | reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java | 132 |
1 files changed, 5 insertions, 127 deletions
diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java index dfa7f16863a6..83c572a2591b 100644 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java +++ b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java @@ -78,106 +78,19 @@ public abstract class AbstractReportElementLayoutController throw new IllegalStateException(); } - boolean isPrintableContent = true; - final ReportElement text = (ReportElement) getNode(); - // Tests we have to perform: - // 1. Print when group changes. We can know whether a group changed by - // looking at the newly introduced iteration counter. - // - // Whether we use the next one or the one after that depends on whether - // this element is a child of a group-header or group-footer. - - // 2. Print repeated values. This never applies to static text or static - // elements. - if ((text.isPrintWhenGroupChanges() && !isGroupChanged()) || (!text.isPrintRepeatedValues() && !isValueChanged())) - { - // if this is set to true, then we print the element only if this is the - // first occurrence in this group. - // or - // If this is set to true, we evaluate the formula of the element and - // try to derive whether there was a change. - isPrintableContent = false; - } - - // 3. Evaluate the Display Condition - final Expression dc = text.getDisplayCondition(); - if (dc != null) - { - final Object o = LayoutControllerUtil.evaluateExpression(getFlowController(), text, dc); - if (Boolean.FALSE.equals(o)) - { -// LOGGER.debug ("DISPLAY Condition forbids printing"); - isPrintableContent = false; - } - } - - if (!isPrintableContent) - { - // There is no printable content at all. Set the state to FINISHED - return join(getFlowController()); - } - else + if (FormatValueUtility.shouldPrint(this, (ReportElement)getNode())) { // delegate to the handler .. return delegateContentGeneration(target); } - - } - - protected abstract boolean isValueChanged(); - - protected boolean isGroupChanged() - { - // search the group. - final SectionLayoutController slc = findGroup(); - if (slc == null) + else { - // Always print the content of the report header and footer and - // the page header and footer. - return true; + // There is no printable content at all. Set the state to FINISHED + return join(getFlowController()); } - - // we are in the first iteration, so yes, the group has changed recently. - return slc.getIterationCount() == 0; } - private SectionLayoutController findGroup() - { - LayoutController parent = getParent(); - boolean skipNext = false; - while (parent != null) - { - if (!(parent instanceof SectionLayoutController)) - { - parent = parent.getParent(); - } - else - { - final SectionLayoutController slc = (SectionLayoutController) parent; - final Element element = slc.getElement(); - if (element instanceof OfficeGroupSection) - { - // This is a header or footer. So we take the next group instead. - skipNext = true; - parent = parent.getParent(); - } - else if (!(element instanceof Group)) - { - parent = parent.getParent(); - } - else if (skipNext) - { - skipNext = false; - parent = parent.getParent(); - } - else - { - return (SectionLayoutController) parent; - } - } - } - return null; - } + public abstract boolean isValueChanged(); /** * Joins with a delegated process flow. This is generally called from a child @@ -213,41 +126,6 @@ public abstract class AbstractReportElementLayoutController return state != AbstractReportElementLayoutController.FINISHED; } - protected boolean isReferenceChanged(final LValue lValue) - { - if (lValue instanceof ContextLookup) - { - final ContextLookup rval = (ContextLookup) lValue; - final String s = rval.getName(); - final DataRow view = getFlowController().getMasterRow().getGlobalView(); - try - { - final DataFlags flags = view.getFlags(s); - if (flags != null && flags.isChanged()) - { -// LOGGER.debug ("Reference " + s + " is changed"); - return true; - } -// LOGGER.debug ("Reference " + s + " is unchanged"); - } - catch (DataSourceException e) - { - // ignore .. assume that the reference has not changed. - } - } - final LValue[] childValues = lValue.getChildValues(); - for (int i = 0; i < childValues.length; i++) - { - final LValue value = childValues[i]; - if (isReferenceChanged(value)) - { - return true; - } - } -// LOGGER.debug ("Unchanged."); - return false; - } - public int getState() { return state; |