001: /**
002: * ===========================================
003: * JFreeReport : a free Java reporting library
004: * ===========================================
005: *
006: * Project Info: http://reporting.pentaho.org/
007: *
008: * (C) Copyright 2001-2007, by Object Refinery Ltd, Pentaho Corporation and Contributors.
009: *
010: * This library is free software; you can redistribute it and/or modify it under the terms
011: * of the GNU Lesser General Public License as published by the Free Software Foundation;
012: * either version 2.1 of the License, or (at your option) any later version.
013: *
014: * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015: * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016: * See the GNU Lesser General Public License for more details.
017: *
018: * You should have received a copy of the GNU Lesser General Public License along with this
019: * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020: * Boston, MA 02111-1307, USA.
021: *
022: * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023: * in the United States and other countries.]
024: *
025: * ------------
026: * HideNullValuesFunction.java
027: * ------------
028: * (C) Copyright 2001-2007, by Object Refinery Ltd, Pentaho Corporation and Contributors.
029: */package org.jfree.report.function;
030:
031: import org.jfree.report.Band;
032: import org.jfree.report.Element;
033:
034: /**
035: * Hides the specified elements if the given field contains empty strings or
036: * zero numbers.
037: *
038: * @author Thomas Morgner
039: */
040: public class HideNullValuesFunction extends
041: AbstractElementFormatFunction {
042: /**
043: * The name of the data-row column that is checked for null-values.
044: */
045: private String field;
046:
047: /**
048: * Default Constructor.
049: */
050: public HideNullValuesFunction() {
051: }
052:
053: /**
054: * Returns the field used by the function. The field name corresponds to a column name in the report's data-row.
055: *
056: * @return The field name.
057: */
058: public String getField() {
059: return field;
060: }
061:
062: /**
063: * Sets the field name for the function. The field name corresponds to a column name in the report's data-row.
064: *
065: * @param field the field name.
066: */
067: public void setField(final String field) {
068: this .field = field;
069: }
070:
071: /**
072: * Applies the computed visiblity to all child elements of the given band.
073: *
074: * @param b the visibility.
075: */
076: protected void processRootBand(final Band b) {
077: final Element[] elements = FunctionUtilities.findAllElements(b,
078: getElement());
079: final boolean visible = computeVisibility();
080:
081: for (int i = 0; i < elements.length; i++) {
082: final Element element = elements[i];
083: element.setVisible(visible);
084: }
085: }
086:
087: /**
088: * Computes the visiblity of the specified element.
089: *
090: * @return true, if the element should be visible, false otherwise.
091: */
092: protected boolean computeVisibility() {
093: final Object value = getDataRow().get(getField());
094: if (value == null) {
095: return false;
096: }
097: if (value instanceof String) {
098: final String strValue = (String) value;
099: return strValue.trim().length() > 0;
100: }
101: if (value instanceof Number) {
102: final Number numValue = (Number) value;
103: return numValue.doubleValue() != 0;
104: }
105: return true;
106: }
107: }
|