01: /**
02: * ===========================================
03: * JFreeReport : a free Java reporting library
04: * ===========================================
05: *
06: * Project Info: http://reporting.pentaho.org/
07: *
08: * (C) Copyright 2001-2007, by Object Refinery Ltd, Pentaho Corporation and Contributors.
09: *
10: * This library is free software; you can redistribute it and/or modify it under the terms
11: * of the GNU Lesser General Public License as published by the Free Software Foundation;
12: * either version 2.1 of the License, or (at your option) any later version.
13: *
14: * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
15: * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16: * See the GNU Lesser General Public License for more details.
17: *
18: * You should have received a copy of the GNU Lesser General Public License along with this
19: * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
20: * Boston, MA 02111-1307, USA.
21: *
22: * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
23: * in the United States and other countries.]
24: *
25: * ------------
26: * TotalGroupSumQuotientPercentFunction.java
27: * ------------
28: * (C) Copyright 2001-2007, by Object Refinery Ltd, Pentaho Corporation and Contributors.
29: */package org.jfree.report.function;
30:
31: import java.math.BigDecimal;
32:
33: /**
34: * A report function that calculates the quotient of two summed fields (columns) from the data-row. This function
35: * produces a global total. The total sum of the group is known when the group processing starts and the report is not
36: * performing a prepare-run. The sum is calculated in the prepare run and recalled in the printing run.
37: * <p/>
38: * The function can be used in two ways: <ul> <li>to calculate a quotient for the entire report;</li> <li>to calculate a
39: * quotient within a particular group;</li> </ul> This function expects its input values to be either java.lang.Number
40: * instances or Strings that can be parsed to java.lang.Number instances using a java.text.DecimalFormat.
41: * <p/>
42: * The function undestands three parameters. The <code>dividend</code> parameter is required and denotes the name of an
43: * ItemBand-field which gets summed up as dividend. The <code>divisor</code> parameter is required and denotes the name
44: * of an ItemBand-field which gets summed up as divisor.
45: * <p/>
46: * The parameter <code>group</code> denotes the name of a group. When this group is started, the counter gets reseted to
47: * null. This parameter is optional.
48: * <p/>
49: * This function scales the computed percentage to 100. A value of 100% will therefore be returned as 100 instead of 1.
50: * The result of this function cannot be used together with the percentage operator of the NumberFormat in a
51: * Number-field.
52: *
53: * @author Thomas Morgner
54: */
55: public class TotalGroupSumQuotientPercentFunction extends
56: TotalGroupSumQuotientFunction {
57: /**
58: * An internal constant.
59: */
60: private static final BigDecimal ONE_HUNDRED = new BigDecimal(100);
61:
62: /**
63: * Default Constructor.
64: */
65: public TotalGroupSumQuotientPercentFunction() {
66: }
67:
68: /**
69: * Computes the scaled percentage.
70: *
71: * @return the computed percentage scaled to 100.
72: */
73: public Object getValue() {
74: final Number value = (Number) super .getValue();
75: if (value == null) {
76: return null;
77: }
78: if (value instanceof BigDecimal) {
79: return ONE_HUNDRED.multiply((BigDecimal) value);
80: }
81:
82: return ONE_HUNDRED.multiply(new BigDecimal(String
83: .valueOf(value)));
84: }
85: }
|