KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jfree > chart > labels > AbstractPieItemLabelGenerator


1 /* ===========================================================
2  * JFreeChart : a free chart library for the Java(tm) platform
3  * ===========================================================
4  *
5  * (C) Copyright 2000-2006, by Object Refinery Limited and Contributors.
6  *
7  * Project Info: http://www.jfree.org/jfreechart/index.html
8  *
9  * This library is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU Lesser General Public License as published by
11  * the Free Software Foundation; either version 2.1 of the License, or
12  * (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17  * License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
22  * USA.
23  *
24  * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
25  * in the United States and other countries.]
26  *
27  * ----------------------------------
28  * AbstractPieItemLabelGenerator.java
29  * ----------------------------------
30  * (C) Copyright 2004-2006, by Object Refinery Limited.
31  *
32  * Original Author: David Gilbert (for Object Refinery Limited);
33  * Contributor(s): -;
34  *
35  * $Id: AbstractPieItemLabelGenerator.java,v 1.5.2.2 2006/05/03 10:46:36 mungady Exp $
36  *
37  * Changes
38  * -------
39  * 09-Nov-2004 : Version 1, draws out code from StandardPieItemLabelGenerator
40  * and StandardPieToolTipGenerator (DG);
41  * ------------- JFREECHART 1.0.0 ---------------------------------------------
42  * 03-May-2006 : Fixed bug 1480978, a problem in the clone() method (DG);
43  *
44  */

45
46 package org.jfree.chart.labels;
47
48 import java.io.Serializable JavaDoc;
49 import java.text.MessageFormat JavaDoc;
50 import java.text.NumberFormat JavaDoc;
51
52 import org.jfree.data.general.DatasetUtilities;
53 import org.jfree.data.general.PieDataset;
54
55 /**
56  * A base class used for generating pie chart item labels.
57  */

58 public class AbstractPieItemLabelGenerator implements Serializable JavaDoc {
59     
60     /** For serialization. */
61     private static final long serialVersionUID = 7347703325267846275L;
62     
63     /** The label format string. */
64     private String JavaDoc labelFormat;
65     
66     /** A number formatter for the value. */
67     private NumberFormat JavaDoc numberFormat;
68     
69     /** A number formatter for the percentage. */
70     private NumberFormat JavaDoc percentFormat;
71     
72     /**
73      * Creates an item label generator using the specified number formatters.
74      *
75      * @param labelFormat the label format string (<code>null</code> not
76      * permitted).
77      * @param numberFormat the format object for the values (<code>null</code>
78      * not permitted).
79      * @param percentFormat the format object for the percentages
80      * (<code>null</code> not permitted).
81      */

82     protected AbstractPieItemLabelGenerator(String JavaDoc labelFormat,
83                                             NumberFormat JavaDoc numberFormat,
84                                             NumberFormat JavaDoc percentFormat) {
85
86         if (labelFormat == null) {
87             throw new IllegalArgumentException JavaDoc("Null 'labelFormat' argument.");
88         }
89         if (numberFormat == null) {
90             throw new IllegalArgumentException JavaDoc("Null 'numberFormat' argument.");
91         }
92         if (percentFormat == null) {
93             throw new IllegalArgumentException JavaDoc(
94                 "Null 'percentFormat' argument."
95             );
96         }
97         this.labelFormat = labelFormat;
98         this.numberFormat = numberFormat;
99         this.percentFormat = percentFormat;
100
101     }
102
103     /**
104      * Returns the label format string.
105      *
106      * @return The label format string (never <code>null</code>).
107      */

108     public String JavaDoc getLabelFormat() {
109         return this.labelFormat;
110     }
111     
112     /**
113      * Returns the number formatter.
114      *
115      * @return The formatter (never <code>null</code>).
116      */

117     public NumberFormat JavaDoc getNumberFormat() {
118         return this.numberFormat;
119     }
120
121     /**
122      * Returns the percent formatter.
123      *
124      * @return The formatter (never <code>null</code>).
125      */

126     public NumberFormat JavaDoc getPercentFormat() {
127         return this.percentFormat;
128     }
129
130     /**
131      * Creates the array of items that can be passed to the
132      * {@link MessageFormat} class for creating labels. The returned array
133      * contains four values:
134      * <ul>
135      * <li>result[0] = the section key converted to a <code>String</code>;</li>
136      * <li>result[1] = the formatted data value;</li>
137      * <li>result[2] = the formatted percentage (of the total);</li>
138      * <li>result[3] = the formatted total value.</li>
139      * </ul>
140      *
141      * @param dataset the dataset (<code>null</code> not permitted).
142      * @param key the key (<code>null</code> not permitted).
143      *
144      * @return The items (never <code>null</code>).
145      */

146     protected Object JavaDoc[] createItemArray(PieDataset dataset, Comparable JavaDoc key) {
147         Object JavaDoc[] result = new Object JavaDoc[4];
148         double total = DatasetUtilities.calculatePieDatasetTotal(dataset);
149         result[0] = key.toString();
150         Number JavaDoc value = dataset.getValue(key);
151         if (value != null) {
152             result[1] = this.numberFormat.format(value);
153         }
154         else {
155             result[1] = "null";
156         }
157         double percent = 0.0;
158         if (value != null) {
159             double v = value.doubleValue();
160             if (v > 0.0) {
161                 percent = v / total;
162             }
163         }
164         result[2] = this.percentFormat.format(percent);
165         result[3] = this.numberFormat.format(total);
166         return result;
167     }
168     
169     /**
170      * Generates a label for a pie section.
171      *
172      * @param dataset the dataset (<code>null</code> not permitted).
173      * @param key the section key (<code>null</code> not permitted).
174      *
175      * @return The label (possibly <code>null</code>).
176      */

177     protected String JavaDoc generateSectionLabel(PieDataset dataset, Comparable JavaDoc key) {
178         String JavaDoc result = null;
179         if (dataset != null) {
180             Object JavaDoc[] items = createItemArray(dataset, key);
181             result = MessageFormat.format(this.labelFormat, items);
182         }
183         return result;
184     }
185
186     /**
187      * Tests the generator for equality with an arbitrary object.
188      *
189      * @param obj the object to test against (<code>null</code> permitted).
190      *
191      * @return A boolean.
192      */

193     public boolean equals(Object JavaDoc obj) {
194         if (obj == this) {
195             return true;
196         }
197         if (!(obj instanceof AbstractPieItemLabelGenerator)) {
198             return false;
199         }
200         
201         AbstractPieItemLabelGenerator that
202             = (AbstractPieItemLabelGenerator) obj;
203         if (!this.labelFormat.equals(that.labelFormat)) {
204             return false;
205         }
206         if (!this.numberFormat.equals(that.numberFormat)) {
207             return false;
208         }
209         if (!this.percentFormat.equals(that.percentFormat)) {
210             return false;
211         }
212         return true;
213
214     }
215     
216     /**
217      * Returns an independent copy of the generator.
218      *
219      * @return A clone.
220      *
221      * @throws CloneNotSupportedException should not happen.
222      */

223     public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
224         AbstractPieItemLabelGenerator clone
225             = (AbstractPieItemLabelGenerator) super.clone();
226         if (this.numberFormat != null) {
227             clone.numberFormat = (NumberFormat JavaDoc) this.numberFormat.clone();
228         }
229         if (this.percentFormat != null) {
230             clone.percentFormat = (NumberFormat JavaDoc) this.percentFormat.clone();
231         }
232         return clone;
233     }
234
235 }
236
Popular Tags