1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package net.sf.statcvs.reportmodel;
24
25 import net.sf.statcvs.renderer.TableCellRenderer;
26
27 /**
28 * A column showing the ratio between two {@link IntegerColumn}s.
29 * The two columns do not have to be shown in the table.
30 *
31 * @author Richard Cyganiak <rcyg@gmx.de>
32 * @version $Id: RatioColumn.java,v 1.2 2008/04/02 11:22:14 benoitx Exp $
33 */
34 public class RatioColumn extends Column {
35
36 private final String title;
37 private final IntegerColumn col1;
38 private final IntegerColumn col2;
39
40 /**
41 * Creates a new <tt>RatioColumn</tt>, which contains the ratio
42 * between col1 and col2
43 * @param title the title for the column
44 * @param col1 the first column
45 * @param col2 the second column
46 */
47 public RatioColumn(final String title, final IntegerColumn col1, final IntegerColumn col2) {
48 this.title = title;
49 this.col1 = col1;
50 this.col2 = col2;
51 }
52
53 /**
54 * @see net.sf.statcvs.reportmodel.Column#getRows()
55 */
56 public int getRows() {
57 return col1.getRows();
58 }
59
60 /**
61 * @see net.sf.statcvs.reportmodel.Column#renderHead(net.sf.statcvs.renderer.TableCellRenderer)
62 */
63 public void renderHead(final TableCellRenderer renderer) {
64 renderer.renderCell(title);
65 }
66
67 /**
68 * @see net.sf.statcvs.reportmodel.Column#renderCell
69 */
70 public void renderCell(final int rowIndex, final TableCellRenderer renderer) {
71 renderer.renderCell(getRatio(col1.getValue(rowIndex), col2.getValue(rowIndex)));
72 }
73
74 /**
75 * @see net.sf.statcvs.reportmodel.Column#renderTotal(net.sf.statcvs.renderer.TableCellRenderer)
76 */
77 public void renderTotal(final TableCellRenderer renderer) {
78 renderer.renderCell(getRatio(col1.getSum(), col2.getSum()));
79 }
80
81 private String getRatio(final int val1, final int val2) {
82 if (val2 == 0) {
83 return "-";
84 }
85 final int ratioTimes10 = (val1 * 10) / val2;
86 final double ratio = (double) ratioTimes10 / 10;
87 return Double.toString(ratio);
88 }
89 }