001 /* ===========================================================
002 * JFreeChart : a free chart library for the Java(tm) platform
003 * ===========================================================
004 *
005 * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors.
006 *
007 * Project Info: http://www.jfree.org/jfreechart/index.html
008 *
009 * This library is free software; you can redistribute it and/or modify it
010 * under the terms of the GNU Lesser General Public License as published by
011 * the Free Software Foundation; either version 2.1 of the License, or
012 * (at your option) any later version.
013 *
014 * This library is distributed in the hope that it will be useful, but
015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
017 * License for more details.
018 *
019 * You should have received a copy of the GNU Lesser General Public
020 * License along with this library; if not, write to the Free Software
021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
022 * USA.
023 *
024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
025 * in the United States and other countries.]
026 *
027 * -------------------------------------
028 * IntervalCategoryToolTipGenerator.java
029 * -------------------------------------
030 * (C) Copyright 2004-2008, by Object Refinery Limited.
031 *
032 * Original Author: David Gilbert (for Object Refinery Limited);
033 * Contributor(s): -;
034 *
035 * Changes
036 * -------
037 * 11-May-2004 : Version 1, split from IntervalCategoryItemLabelGenerator (DG);
038 * 08-Oct-2008 : Override equals() method (DG);
039 *
040 */
041
042 package org.jfree.chart.labels;
043
044 import java.text.DateFormat;
045 import java.text.NumberFormat;
046
047 import org.jfree.data.category.CategoryDataset;
048 import org.jfree.data.category.IntervalCategoryDataset;
049
050 /**
051 * A tooltip generator for plots that use data from an
052 * {@link IntervalCategoryDataset}.
053 */
054 public class IntervalCategoryToolTipGenerator
055 extends StandardCategoryToolTipGenerator {
056
057 /** For serialization. */
058 private static final long serialVersionUID = -3853824986520333437L;
059
060 /** The default format string. */
061 public static final String DEFAULT_TOOL_TIP_FORMAT_STRING
062 = "({0}, {1}) = {3} - {4}";
063
064 /**
065 * Creates a new generator with a default number formatter.
066 */
067 public IntervalCategoryToolTipGenerator() {
068 super(DEFAULT_TOOL_TIP_FORMAT_STRING, NumberFormat.getInstance());
069 }
070
071 /**
072 * Creates a new generator with the specified number formatter.
073 *
074 * @param labelFormat the label format string (<code>null</code> not
075 * permitted).
076 * @param formatter the number formatter (<code>null</code> not permitted).
077 */
078 public IntervalCategoryToolTipGenerator(String labelFormat,
079 NumberFormat formatter) {
080 super(labelFormat, formatter);
081 }
082
083 /**
084 * Creates a new generator with the specified date formatter.
085 *
086 * @param labelFormat the label format string (<code>null</code> not
087 * permitted).
088 * @param formatter the date formatter (<code>null</code> not permitted).
089 */
090 public IntervalCategoryToolTipGenerator(String labelFormat,
091 DateFormat formatter) {
092 super(labelFormat, formatter);
093 }
094
095 /**
096 * Creates the array of items that can be passed to the
097 * <code>MessageFormat</code> class for creating labels.
098 *
099 * @param dataset the dataset (<code>null</code> not permitted).
100 * @param row the row index (zero-based).
101 * @param column the column index (zero-based).
102 *
103 * @return The items (never <code>null</code>).
104 */
105 protected Object[] createItemArray(CategoryDataset dataset,
106 int row, int column) {
107 Object[] result = new Object[5];
108 result[0] = dataset.getRowKey(row).toString();
109 result[1] = dataset.getColumnKey(column).toString();
110 Number value = dataset.getValue(row, column);
111 if (getNumberFormat() != null) {
112 result[2] = getNumberFormat().format(value);
113 }
114 else if (getDateFormat() != null) {
115 result[2] = getDateFormat().format(value);
116 }
117
118 if (dataset instanceof IntervalCategoryDataset) {
119 IntervalCategoryDataset icd = (IntervalCategoryDataset) dataset;
120 Number start = icd.getStartValue(row, column);
121 Number end = icd.getEndValue(row, column);
122 if (getNumberFormat() != null) {
123 result[3] = getNumberFormat().format(start);
124 result[4] = getNumberFormat().format(end);
125 }
126 else if (getDateFormat() != null) {
127 result[3] = getDateFormat().format(start);
128 result[4] = getDateFormat().format(end);
129 }
130 }
131 return result;
132 }
133
134 /**
135 * Tests this tool tip generator for equality with an arbitrary
136 * object.
137 *
138 * @param obj the object (<code>null</code> permitted).
139 *
140 * @return A boolean.
141 */
142 public boolean equals(Object obj) {
143 if (obj == this) {
144 return true;
145 }
146 if (!(obj instanceof IntervalCategoryToolTipGenerator)) {
147 return false;
148 }
149 // no fields to test
150 return super.equals(obj);
151 }
152
153 }