summaryrefslogtreecommitdiff
path: root/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java
diff options
context:
space:
mode:
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.java132
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;