1 /*
2 StatCvs - CVS statistics generation
3 Copyright (C) 2002 Lukasz Pekacki <lukasz@pekacki.de>
4 http://statcvs.sf.net/
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
10
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public
17 License along with this library; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
20 $RCSfile: IntegerColumn.java,v $
21 $Date: 2008/04/02 11:22:14 $
22 */
23 package net.sf.statcvs.reportmodel;
24
25 import java.util.ArrayList;
26 import java.util.List;
27
28 import net.sf.statcvs.renderer.TableCellRenderer;
29
30 /**
31 * A column of integer values. The column's total is the sum of all values.
32 *
33 * @author Richard Cyganiak <rcyg@gmx.de>
34 * @version $Id: IntegerColumn.java,v 1.2 2008/04/02 11:22:14 benoitx Exp $
35 */
36 public class IntegerColumn extends Column {
37
38 private final String title;
39 private final List values = new ArrayList();
40 private int sum = 0;
41 private boolean showValues = true;
42 private boolean showPercentages = true;
43
44 /**
45 * Creates a new <tt>SimpleTextColumn</tt> with the given head
46 * @param title the head of the column
47 */
48 public IntegerColumn(final String title) {
49 this.title = title;
50 }
51
52 /**
53 * Set if the actual integer values should be shown
54 * @param enable show values?
55 */
56 public void setShowValues(final boolean enable) {
57 showValues = enable;
58 }
59
60 /**
61 * Set if the values should be shown as percentages
62 * @param enable show percentages?
63 */
64 public void setShowPercentages(final boolean enable) {
65 showPercentages = enable;
66 }
67
68 /**
69 * Adds a value to this column (in a new row)
70 * @param value the new value
71 */
72 public void addValue(final int value) {
73 values.add(new Integer(value));
74 sum += value;
75 }
76
77 /**
78 * Returns a value in the column
79 * @param rowIndex the row to get, starting at 0
80 * @return the value of this row
81 */
82 public int getValue(final int rowIndex) {
83 return ((Integer) values.get(rowIndex)).intValue();
84 }
85
86 /**
87 * Returns the sum of all values in the column
88 * @return sum
89 */
90 public int getSum() {
91 return sum;
92 }
93
94 /**
95 * Sets the sum of the column. Useful if, for example, the
96 * column contains only the top 10 values of more values, but
97 * the column total should reflect all values.
98 * @param sum the column's total
99 */
100 public void setSum(final int sum) {
101 this.sum = sum;
102 }
103
104 /**
105 * @see net.sf.statcvs.reportmodel.Column#getRows()
106 */
107 public int getRows() {
108 return values.size();
109 }
110
111 /**
112 * @see net.sf.statcvs.reportmodel.Column#renderHead(net.sf.statcvs.renderer.TableCellRenderer)
113 */
114 public void renderHead(final TableCellRenderer renderer) {
115 renderer.renderCell(title);
116 }
117
118 /**
119 * @see net.sf.statcvs.reportmodel.Column#renderCell
120 */
121 public void renderCell(final int rowIndex, final TableCellRenderer renderer) {
122 callRenderer(renderer, getValue(rowIndex));
123 }
124
125 /**
126 * @see net.sf.statcvs.reportmodel.Column#renderTotal(net.sf.statcvs.renderer.TableCellRenderer)
127 */
128 public void renderTotal(final TableCellRenderer renderer) {
129 callRenderer(renderer, sum);
130 }
131
132 private void callRenderer(final TableCellRenderer renderer, final int value) {
133 if (showValues && showPercentages) {
134 renderer.renderIntegerCell(value, sum);
135 } else if (showValues) {
136 renderer.renderIntegerCell(value);
137 } else if (showPercentages) {
138 renderer.renderPercentageCell((double) value / (double) sum);
139 } else {
140 renderer.renderEmptyCell();
141 }
142 }
143 }