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: * GroupCountFunction.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.Group;
032: import org.jfree.report.event.ReportEvent;
033:
034: /**
035: * A report function that counts groups in a report. If a null-groupname is given, all
036: * groups are counted.
037: * <p/>
038: * The group to be counted can be defined using the property "group". An optional
039: * container group can be defined using the property "parent-group". When the group start
040: * event of that group is encountered, the counter will be reset to '0'.
041: * <p/>
042: * If the group property is not set, all group starts get counted.
043: *
044: * @author David Gilbert
045: */
046: public class GroupCountFunction extends AbstractFunction {
047: /**
048: * The name of the group that should be counted. This can be set to null to compute the count for all sub-groups
049: * of the parent-group.
050: */
051: private String group;
052: /**
053: * The name of the group on which to reset the count. This can be set to null to count the sub-groups of the whole
054: * report.
055: */
056: private String parentGroup;
057: /**
058: * The number of groups.
059: */
060: private int count;
061:
062: /**
063: * Default constructor.
064: */
065: public GroupCountFunction() {
066: }
067:
068: /**
069: * Constructs a report function for counting groups.
070: *
071: * @param name The function name.
072: * @param group The group name.
073: * @throws NullPointerException if the given name is null
074: */
075: public GroupCountFunction(final String name, final String group) {
076: setName(name);
077: setGroup(group);
078: }
079:
080: /**
081: * Returns the name of the group on which to reset the counter.
082: *
083: * @return the name of the group or null, if all groups are counted
084: */
085: public String getParentGroup() {
086: return parentGroup;
087: }
088:
089: /**
090: * defines the name of the group on which to reset the counter. If the name is null, all
091: * groups are counted.
092: *
093: * @param group the name of the group to be counted.
094: */
095: public void setParentGroup(final String group) {
096: this .parentGroup = group;
097: }
098:
099: /**
100: * Returns the name of the group to be counted.
101: *
102: * @return the name of the group or null, if all groups are counted
103: */
104: public String getGroup() {
105: return group;
106: }
107:
108: /**
109: * defines the name of the group to be counted. If the name is null, all groups are
110: * counted.
111: *
112: * @param group the name of the group to be counted.
113: */
114: public void setGroup(final String group) {
115: this .group = group;
116: }
117:
118: /**
119: * Receives notification that a new report is about to start. Resets the count.
120: *
121: * @param event the current report event received.
122: */
123: public void reportInitialized(final ReportEvent event) {
124: setCount(0);
125: }
126:
127: /**
128: * Receives notification that a new group is about to start. Increases the count if all
129: * groups are counted or the name defines the current group.
130: *
131: * @param event the current report event received.
132: */
133: public void groupStarted(final ReportEvent event) {
134: final Group group = FunctionUtilities.getCurrentGroup(event);
135:
136: if (getParentGroup() != null) {
137: if (getParentGroup().equals(group.getName())) {
138: setCount(0);
139: }
140: }
141:
142: if (getGroup() == null) {
143: // count all groups...
144: setCount(getCount() + 1);
145: } else if (getGroup().equals(group.getName())) {
146: setCount(getCount() + 1);
147: }
148: }
149:
150: /**
151: * Returns the current group count value.
152: *
153: * @return the curernt group count.
154: */
155: protected int getCount() {
156: return count;
157: }
158:
159: /**
160: * Defines the current group count value.
161: *
162: * @param count the curernt group count.
163: */
164: protected void setCount(final int count) {
165: this .count = count;
166: }
167:
168: /**
169: * Returns the number of groups processed so far (including the current group).
170: *
171: * @return the number of groups processed as java.lang.Integer.
172: */
173: public Object getValue() {
174: return new Integer(getCount());
175: }
176: }
|