001 /* ===========================================================
002 * JFreeChart : a free chart library for the Java(tm) platform
003 * ===========================================================
004 *
005 * (C) Copyright 2000-2007, 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 * MeterInterval.java
029 * ------------------
030 * (C) Copyright 2005, 2007, by Object Refinery Limited and Contributors.
031 *
032 * Original Author: David Gilbert (for Object Refinery Limited);
033 * Contributor(s): -;
034 *
035 * Changes
036 * -------
037 * 22-Mar-2005 : Version 1 (DG);
038 * 29-Mar-2005 : Fixed serialization (DG);
039 *
040 */
041
042 package org.jfree.chart.plot;
043
044 import java.awt.BasicStroke;
045 import java.awt.Color;
046 import java.awt.Paint;
047 import java.awt.Stroke;
048 import java.io.IOException;
049 import java.io.ObjectInputStream;
050 import java.io.ObjectOutputStream;
051 import java.io.Serializable;
052
053 import org.jfree.data.Range;
054 import org.jfree.io.SerialUtilities;
055 import org.jfree.util.ObjectUtilities;
056 import org.jfree.util.PaintUtilities;
057
058 /**
059 * An interval to be highlighted on a {@link MeterPlot}. Instances of this
060 * class are immutable.
061 */
062 public class MeterInterval implements Serializable {
063
064 /** For serialization. */
065 private static final long serialVersionUID = 1530982090622488257L;
066
067 /** The interval label. */
068 private String label;
069
070 /** The interval range. */
071 private Range range;
072
073 /** The outline paint (used for the arc marking the interval). */
074 private transient Paint outlinePaint;
075
076 /** The outline stroke (used for the arc marking the interval). */
077 private transient Stroke outlineStroke;
078
079 /** The background paint for the interval. */
080 private transient Paint backgroundPaint;
081
082 /**
083 * Creates a new interval.
084 *
085 * @param label the label (<code>null</code> not permitted).
086 * @param range the range (<code>null</code> not permitted).
087 */
088 public MeterInterval(String label, Range range) {
089 this(label, range, Color.yellow, new BasicStroke(2.0f), null);
090 }
091
092 /**
093 * Creates a new interval.
094 *
095 * @param label the label (<code>null</code> not permitted).
096 * @param range the range (<code>null</code> not permitted).
097 * @param outlinePaint the outline paint (<code>null</code> permitted).
098 * @param outlineStroke the outline stroke (<code>null</code> permitted).
099 * @param backgroundPaint the background paint (<code>null</code>
100 * permitted).
101 */
102 public MeterInterval(String label, Range range, Paint outlinePaint,
103 Stroke outlineStroke, Paint backgroundPaint) {
104 if (label == null) {
105 throw new IllegalArgumentException("Null 'label' argument.");
106 }
107 if (range == null) {
108 throw new IllegalArgumentException("Null 'range' argument.");
109 }
110 this.label = label;
111 this.range = range;
112 this.outlinePaint = outlinePaint;
113 this.outlineStroke = outlineStroke;
114 this.backgroundPaint = backgroundPaint;
115 }
116
117 /**
118 * Returns the label.
119 *
120 * @return The label (never <code>null</code>).
121 */
122 public String getLabel() {
123 return this.label;
124 }
125
126 /**
127 * Returns the range.
128 *
129 * @return The range (never <code>null</code>).
130 */
131 public Range getRange() {
132 return this.range;
133 }
134
135 /**
136 * Returns the background paint. If <code>null</code>, the background
137 * should remain unfilled.
138 *
139 * @return The background paint (possibly <code>null</code>).
140 */
141 public Paint getBackgroundPaint() {
142 return this.backgroundPaint;
143 }
144
145 /**
146 * Returns the outline paint.
147 *
148 * @return The outline paint (possibly <code>null</code>).
149 */
150 public Paint getOutlinePaint() {
151 return this.outlinePaint;
152 }
153
154 /**
155 * Returns the outline stroke.
156 *
157 * @return The outline stroke (possibly <code>null</code>).
158 */
159 public Stroke getOutlineStroke() {
160 return this.outlineStroke;
161 }
162
163 /**
164 * Checks this instance for equality with an arbitrary object.
165 *
166 * @param obj the object (<code>null</code> permitted).
167 *
168 * @return A boolean.
169 */
170 public boolean equals(Object obj) {
171 if (obj == this) {
172 return true;
173 }
174 if (!(obj instanceof MeterInterval)) {
175 return false;
176 }
177 MeterInterval that = (MeterInterval) obj;
178 if (!this.label.equals(that.label)) {
179 return false;
180 }
181 if (!this.range.equals(that.range)) {
182 return false;
183 }
184 if (!PaintUtilities.equal(this.outlinePaint, that.outlinePaint)) {
185 return false;
186 }
187 if (!ObjectUtilities.equal(this.outlineStroke, that.outlineStroke)) {
188 return false;
189 }
190 if (!PaintUtilities.equal(this.backgroundPaint, that.backgroundPaint)) {
191 return false;
192 }
193 return true;
194 }
195
196 /**
197 * Provides serialization support.
198 *
199 * @param stream the output stream.
200 *
201 * @throws IOException if there is an I/O error.
202 */
203 private void writeObject(ObjectOutputStream stream) throws IOException {
204 stream.defaultWriteObject();
205 SerialUtilities.writePaint(this.outlinePaint, stream);
206 SerialUtilities.writeStroke(this.outlineStroke, stream);
207 SerialUtilities.writePaint(this.backgroundPaint, stream);
208 }
209
210 /**
211 * Provides serialization support.
212 *
213 * @param stream the input stream.
214 *
215 * @throws IOException if there is an I/O error.
216 * @throws ClassNotFoundException if there is a classpath problem.
217 */
218 private void readObject(ObjectInputStream stream)
219 throws IOException, ClassNotFoundException {
220 stream.defaultReadObject();
221 this.outlinePaint = SerialUtilities.readPaint(stream);
222 this.outlineStroke = SerialUtilities.readStroke(stream);
223 this.backgroundPaint = SerialUtilities.readPaint(stream);
224 }
225
226 }