001 /* ===========================================================
002 * JFreeChart : a free chart library for the Java(tm) platform
003 * ===========================================================
004 *
005 * (C) Copyright 2000-2006, 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 * LegendItem.java
029 * ---------------
030 * (C) Copyright 2000-2006, by Object Refinery Limited and Contributors.
031 *
032 * Original Author: David Gilbert (for Object Refinery Limited);
033 * Contributor(s): Andrzej Porebski;
034 * David Li;
035 * Wolfgang Irler;
036 * Luke Quinane;
037 *
038 * $Id: LegendItem.java,v 1.9.2.6 2006/12/13 11:23:38 mungady Exp $
039 *
040 * Changes (from 2-Oct-2002)
041 * -------------------------
042 * 02-Oct-2002 : Fixed errors reported by Checkstyle (DG);
043 * 17-Jan-2003 : Dropped outlineStroke attribute (DG);
044 * 08-Oct-2003 : Applied patch for displaying series line style, contributed by
045 * Luke Quinane (DG);
046 * 21-Jan-2004 : Added the shapeFilled flag (DG);
047 * 04-Jun-2004 : Added equals() method, implemented Serializable (DG);
048 * 25-Nov-2004 : Changes required by new LegendTitle implementation (DG);
049 * 11-Jan-2005 : Removed deprecated code in preparation for the 1.0.0
050 * release (DG);
051 * 20-Apr-2005 : Added tooltip and URL text (DG);
052 * 28-Nov-2005 : Separated constructors for AttributedString labels (DG);
053 * 10-Dec-2005 : Fixed serialization bug (1377239) (DG);
054 * ------------- JFREECHART 1.0.x ---------------------------------------------
055 * 20-Jul-2006 : Added dataset and series index fields (DG);
056 * 13-Dec-2006 : Added fillPaintTransformer attribute (DG);
057 *
058 */
059
060 package org.jfree.chart;
061
062 import java.awt.BasicStroke;
063 import java.awt.Color;
064 import java.awt.Paint;
065 import java.awt.Shape;
066 import java.awt.Stroke;
067 import java.awt.geom.Line2D;
068 import java.io.IOException;
069 import java.io.ObjectInputStream;
070 import java.io.ObjectOutputStream;
071 import java.io.Serializable;
072 import java.text.AttributedString;
073 import java.text.CharacterIterator;
074
075 import org.jfree.io.SerialUtilities;
076 import org.jfree.ui.GradientPaintTransformer;
077 import org.jfree.ui.StandardGradientPaintTransformer;
078 import org.jfree.util.AttributedStringUtilities;
079 import org.jfree.util.ObjectUtilities;
080 import org.jfree.util.ShapeUtilities;
081
082 /**
083 * A temporary storage object for recording the properties of a legend item,
084 * without any consideration for layout issues.
085 */
086 public class LegendItem implements Serializable {
087
088 /** For serialization. */
089 private static final long serialVersionUID = -797214582948827144L;
090
091 /** The dataset index. */
092 private int datasetIndex;
093
094 /** The series index. */
095 private int series;
096
097 /** The label. */
098 private String label;
099
100 /** The attributed label (if null, fall back to the regular label). */
101 private transient AttributedString attributedLabel;
102
103 /**
104 * The description (not currently used - could be displayed as a tool tip).
105 */
106 private String description;
107
108 /** The tool tip text. */
109 private String toolTipText;
110
111 /** The url text. */
112 private String urlText;
113
114 /** A flag that controls whether or not the shape is visible. */
115 private boolean shapeVisible;
116
117 /** The shape. */
118 private transient Shape shape;
119
120 /** A flag that controls whether or not the shape is filled. */
121 private boolean shapeFilled;
122
123 /** The paint. */
124 private transient Paint fillPaint;
125
126 /**
127 * A gradient paint transformer.
128 *
129 * @since 1.0.4
130 */
131 private GradientPaintTransformer fillPaintTransformer;
132
133 /** A flag that controls whether or not the shape outline is visible. */
134 private boolean shapeOutlineVisible;
135
136 /** The outline paint. */
137 private transient Paint outlinePaint;
138
139 /** The outline stroke. */
140 private transient Stroke outlineStroke;
141
142 /** A flag that controls whether or not the line is visible. */
143 private boolean lineVisible;
144
145 /** The line. */
146 private transient Shape line;
147
148 /** The stroke. */
149 private transient Stroke lineStroke;
150
151 /** The line paint. */
152 private transient Paint linePaint;
153
154 /**
155 * The shape must be non-null for a LegendItem - if no shape is required,
156 * use this.
157 */
158 private static final Shape UNUSED_SHAPE = new Line2D.Float();
159
160 /**
161 * The stroke must be non-null for a LegendItem - if no stroke is required,
162 * use this.
163 */
164 private static final Stroke UNUSED_STROKE = new BasicStroke(0.0f);
165
166 /**
167 * Creates a legend item with a filled shape. The shape is not outlined,
168 * and no line is visible.
169 *
170 * @param label the label (<code>null</code> not permitted).
171 * @param description the description (<code>null</code> permitted).
172 * @param toolTipText the tool tip text (<code>null</code> permitted).
173 * @param urlText the URL text (<code>null</code> permitted).
174 * @param shape the shape (<code>null</code> not permitted).
175 * @param fillPaint the paint used to fill the shape (<code>null</code>
176 * not permitted).
177 */
178 public LegendItem(String label, String description,
179 String toolTipText, String urlText,
180 Shape shape, Paint fillPaint) {
181
182 this(label, description, toolTipText, urlText,
183 /* shape visible = */ true, shape,
184 /* shape filled = */ true, fillPaint,
185 /* shape outlined */ false, Color.black, UNUSED_STROKE,
186 /* line visible */ false, UNUSED_SHAPE, UNUSED_STROKE,
187 Color.black);
188
189 }
190
191 /**
192 * Creates a legend item with a filled and outlined shape.
193 *
194 * @param label the label (<code>null</code> not permitted).
195 * @param description the description (<code>null</code> permitted).
196 * @param toolTipText the tool tip text (<code>null</code> permitted).
197 * @param urlText the URL text (<code>null</code> permitted).
198 * @param shape the shape (<code>null</code> not permitted).
199 * @param fillPaint the paint used to fill the shape (<code>null</code>
200 * not permitted).
201 * @param outlineStroke the outline stroke (<code>null</code> not
202 * permitted).
203 * @param outlinePaint the outline paint (<code>null</code> not
204 * permitted).
205 */
206 public LegendItem(String label, String description,
207 String toolTipText, String urlText,
208 Shape shape, Paint fillPaint,
209 Stroke outlineStroke, Paint outlinePaint) {
210
211 this(label, description, toolTipText, urlText,
212 /* shape visible = */ true, shape,
213 /* shape filled = */ true, fillPaint,
214 /* shape outlined = */ true, outlinePaint, outlineStroke,
215 /* line visible */ false, UNUSED_SHAPE, UNUSED_STROKE,
216 Color.black);
217
218 }
219
220 /**
221 * Creates a legend item using a line.
222 *
223 * @param label the label (<code>null</code> not permitted).
224 * @param description the description (<code>null</code> permitted).
225 * @param toolTipText the tool tip text (<code>null</code> permitted).
226 * @param urlText the URL text (<code>null</code> permitted).
227 * @param line the line (<code>null</code> not permitted).
228 * @param lineStroke the line stroke (<code>null</code> not permitted).
229 * @param linePaint the line paint (<code>null</code> not permitted).
230 */
231 public LegendItem(String label, String description,
232 String toolTipText, String urlText,
233 Shape line, Stroke lineStroke, Paint linePaint) {
234
235 this(label, description, toolTipText, urlText,
236 /* shape visible = */ false, UNUSED_SHAPE,
237 /* shape filled = */ false, Color.black,
238 /* shape outlined = */ false, Color.black, UNUSED_STROKE,
239 /* line visible = */ true, line, lineStroke, linePaint);
240 }
241
242 /**
243 * Creates a new legend item.
244 *
245 * @param label the label (<code>null</code> not permitted).
246 * @param description the description (not currently used,
247 * <code>null</code> permitted).
248 * @param toolTipText the tool tip text (<code>null</code> permitted).
249 * @param urlText the URL text (<code>null</code> permitted).
250 * @param shapeVisible a flag that controls whether or not the shape is
251 * displayed.
252 * @param shape the shape (<code>null</code> permitted).
253 * @param shapeFilled a flag that controls whether or not the shape is
254 * filled.
255 * @param fillPaint the fill paint (<code>null</code> not permitted).
256 * @param shapeOutlineVisible a flag that controls whether or not the
257 * shape is outlined.
258 * @param outlinePaint the outline paint (<code>null</code> not permitted).
259 * @param outlineStroke the outline stroke (<code>null</code> not
260 * permitted).
261 * @param lineVisible a flag that controls whether or not the line is
262 * visible.
263 * @param line the line.
264 * @param lineStroke the stroke (<code>null</code> not permitted).
265 * @param linePaint the line paint (<code>null</code> not permitted).
266 */
267 public LegendItem(String label, String description,
268 String toolTipText, String urlText,
269 boolean shapeVisible, Shape shape,
270 boolean shapeFilled, Paint fillPaint,
271 boolean shapeOutlineVisible, Paint outlinePaint,
272 Stroke outlineStroke,
273 boolean lineVisible, Shape line,
274 Stroke lineStroke, Paint linePaint) {
275
276 if (label == null) {
277 throw new IllegalArgumentException("Null 'label' argument.");
278 }
279 if (fillPaint == null) {
280 throw new IllegalArgumentException("Null 'fillPaint' argument.");
281 }
282 if (lineStroke == null) {
283 throw new IllegalArgumentException("Null 'lineStroke' argument.");
284 }
285 if (outlinePaint == null) {
286 throw new IllegalArgumentException("Null 'outlinePaint' argument.");
287 }
288 if (outlineStroke == null) {
289 throw new IllegalArgumentException(
290 "Null 'outlineStroke' argument.");
291 }
292 this.label = label;
293 this.attributedLabel = null;
294 this.description = description;
295 this.shapeVisible = shapeVisible;
296 this.shape = shape;
297 this.shapeFilled = shapeFilled;
298 this.fillPaint = fillPaint;
299 this.fillPaintTransformer = new StandardGradientPaintTransformer();
300 this.shapeOutlineVisible = shapeOutlineVisible;
301 this.outlinePaint = outlinePaint;
302 this.outlineStroke = outlineStroke;
303 this.lineVisible = lineVisible;
304 this.line = line;
305 this.lineStroke = lineStroke;
306 this.linePaint = linePaint;
307 this.toolTipText = toolTipText;
308 this.urlText = urlText;
309 }
310
311 /**
312 * Creates a legend item with a filled shape. The shape is not outlined,
313 * and no line is visible.
314 *
315 * @param label the label (<code>null</code> not permitted).
316 * @param description the description (<code>null</code> permitted).
317 * @param toolTipText the tool tip text (<code>null</code> permitted).
318 * @param urlText the URL text (<code>null</code> permitted).
319 * @param shape the shape (<code>null</code> not permitted).
320 * @param fillPaint the paint used to fill the shape (<code>null</code>
321 * not permitted).
322 */
323 public LegendItem(AttributedString label, String description,
324 String toolTipText, String urlText,
325 Shape shape, Paint fillPaint) {
326
327 this(label, description, toolTipText, urlText,
328 /* shape visible = */ true, shape,
329 /* shape filled = */ true, fillPaint,
330 /* shape outlined = */ false, Color.black, UNUSED_STROKE,
331 /* line visible = */ false, UNUSED_SHAPE, UNUSED_STROKE,
332 Color.black);
333
334 }
335
336 /**
337 * Creates a legend item with a filled and outlined shape.
338 *
339 * @param label the label (<code>null</code> not permitted).
340 * @param description the description (<code>null</code> permitted).
341 * @param toolTipText the tool tip text (<code>null</code> permitted).
342 * @param urlText the URL text (<code>null</code> permitted).
343 * @param shape the shape (<code>null</code> not permitted).
344 * @param fillPaint the paint used to fill the shape (<code>null</code>
345 * not permitted).
346 * @param outlineStroke the outline stroke (<code>null</code> not
347 * permitted).
348 * @param outlinePaint the outline paint (<code>null</code> not
349 * permitted).
350 */
351 public LegendItem(AttributedString label, String description,
352 String toolTipText, String urlText,
353 Shape shape, Paint fillPaint,
354 Stroke outlineStroke, Paint outlinePaint) {
355
356 this(label, description, toolTipText, urlText,
357 /* shape visible = */ true, shape,
358 /* shape filled = */ true, fillPaint,
359 /* shape outlined = */ true, outlinePaint, outlineStroke,
360 /* line visible = */ false, UNUSED_SHAPE, UNUSED_STROKE,
361 Color.black);
362 }
363
364 /**
365 * Creates a legend item using a line.
366 *
367 * @param label the label (<code>null</code> not permitted).
368 * @param description the description (<code>null</code> permitted).
369 * @param toolTipText the tool tip text (<code>null</code> permitted).
370 * @param urlText the URL text (<code>null</code> permitted).
371 * @param line the line (<code>null</code> not permitted).
372 * @param lineStroke the line stroke (<code>null</code> not permitted).
373 * @param linePaint the line paint (<code>null</code> not permitted).
374 */
375 public LegendItem(AttributedString label, String description,
376 String toolTipText, String urlText,
377 Shape line, Stroke lineStroke, Paint linePaint) {
378
379 this(label, description, toolTipText, urlText,
380 /* shape visible = */ false, UNUSED_SHAPE,
381 /* shape filled = */ false, Color.black,
382 /* shape outlined = */ false, Color.black, UNUSED_STROKE,
383 /* line visible = */ true, line, lineStroke, linePaint
384 );
385 }
386
387 /**
388 * Creates a new legend item.
389 *
390 * @param label the label (<code>null</code> not permitted).
391 * @param description the description (not currently used,
392 * <code>null</code> permitted).
393 * @param toolTipText the tool tip text (<code>null</code> permitted).
394 * @param urlText the URL text (<code>null</code> permitted).
395 * @param shapeVisible a flag that controls whether or not the shape is
396 * displayed.
397 * @param shape the shape (<code>null</code> permitted).
398 * @param shapeFilled a flag that controls whether or not the shape is
399 * filled.
400 * @param fillPaint the fill paint (<code>null</code> not permitted).
401 * @param shapeOutlineVisible a flag that controls whether or not the
402 * shape is outlined.
403 * @param outlinePaint the outline paint (<code>null</code> not permitted).
404 * @param outlineStroke the outline stroke (<code>null</code> not
405 * permitted).
406 * @param lineVisible a flag that controls whether or not the line is
407 * visible.
408 * @param line the line.
409 * @param lineStroke the stroke (<code>null</code> not permitted).
410 * @param linePaint the line paint (<code>null</code> not permitted).
411 */
412 public LegendItem(AttributedString label, String description,
413 String toolTipText, String urlText,
414 boolean shapeVisible, Shape shape,
415 boolean shapeFilled, Paint fillPaint,
416 boolean shapeOutlineVisible, Paint outlinePaint,
417 Stroke outlineStroke,
418 boolean lineVisible, Shape line, Stroke lineStroke,
419 Paint linePaint) {
420
421 if (label == null) {
422 throw new IllegalArgumentException("Null 'label' argument.");
423 }
424 if (fillPaint == null) {
425 throw new IllegalArgumentException("Null 'fillPaint' argument.");
426 }
427 if (lineStroke == null) {
428 throw new IllegalArgumentException("Null 'lineStroke' argument.");
429 }
430 if (outlinePaint == null) {
431 throw new IllegalArgumentException("Null 'outlinePaint' argument.");
432 }
433 if (outlineStroke == null) {
434 throw new IllegalArgumentException(
435 "Null 'outlineStroke' argument.");
436 }
437 this.label = characterIteratorToString(label.getIterator());
438 this.attributedLabel = label;
439 this.description = description;
440 this.shapeVisible = shapeVisible;
441 this.shape = shape;
442 this.shapeFilled = shapeFilled;
443 this.fillPaint = fillPaint;
444 this.shapeOutlineVisible = shapeOutlineVisible;
445 this.outlinePaint = outlinePaint;
446 this.outlineStroke = outlineStroke;
447 this.lineVisible = lineVisible;
448 this.line = line;
449 this.lineStroke = lineStroke;
450 this.linePaint = linePaint;
451 this.toolTipText = toolTipText;
452 this.urlText = urlText;
453 }
454
455 /**
456 * Returns a string containing the characters from the given iterator.
457 *
458 * @param iterator the iterator (<code>null</code> not permitted).
459 *
460 * @return A string.
461 */
462 private String characterIteratorToString(CharacterIterator iterator) {
463 int endIndex = iterator.getEndIndex();
464 int beginIndex = iterator.getBeginIndex();
465 int count = endIndex - beginIndex;
466 if (count <= 0) {
467 return "";
468 }
469 char[] chars = new char[count];
470 int i = 0;
471 char c = iterator.first();
472 while (c != CharacterIterator.DONE) {
473 chars[i] = c;
474 i++;
475 c = iterator.next();
476 }
477 return new String(chars);
478 }
479
480 /**
481 * Returns the dataset index for this legend item.
482 *
483 * @return The dataset index.
484 *
485 * @since 1.0.2
486 */
487 public int getDatasetIndex() {
488 return this.datasetIndex;
489 }
490
491 /**
492 * Sets the dataset index for this legend item.
493 *
494 * @param index the index.
495 *
496 * @since 1.0.2
497 */
498 public void setDatasetIndex(int index) {
499 this.datasetIndex = index;
500 }
501
502 /**
503 * Returns the series index for this legend item.
504 *
505 * @return The series index.
506 *
507 * @since 1.0.2
508 */
509 public int getSeriesIndex() {
510 return this.series;
511 }
512
513 /**
514 * Sets the series index for this legend item.
515 *
516 * @param index the index.
517 *
518 * @since 1.0.2
519 */
520 public void setSeriesIndex(int index) {
521 this.series = index;
522 }
523
524 /**
525 * Returns the label.
526 *
527 * @return The label (never <code>null</code>).
528 */
529 public String getLabel() {
530 return this.label;
531 }
532
533 /**
534 * Returns the attributed label.
535 *
536 * @return The attributed label (possibly <code>null</code>).
537 */
538 public AttributedString getAttributedLabel() {
539 return this.attributedLabel;
540 }
541
542 /**
543 * Returns the description for the legend item.
544 *
545 * @return The description.
546 */
547 public String getDescription() {
548 return this.description;
549 }
550
551 /**
552 * Returns the tool tip text.
553 *
554 * @return The tool tip text (possibly <code>null</code>).
555 */
556 public String getToolTipText() {
557 return this.toolTipText;
558 }
559
560 /**
561 * Returns the URL text.
562 *
563 * @return The URL text (possibly <code>null</code>).
564 */
565 public String getURLText() {
566 return this.urlText;
567 }
568
569 /**
570 * Returns a flag that indicates whether or not the shape is visible.
571 *
572 * @return A boolean.
573 */
574 public boolean isShapeVisible() {
575 return this.shapeVisible;
576 }
577
578 /**
579 * Returns the shape used to label the series represented by this legend
580 * item.
581 *
582 * @return The shape (never <code>null</code>).
583 */
584 public Shape getShape() {
585 return this.shape;
586 }
587
588 /**
589 * Returns a flag that controls whether or not the shape is filled.
590 *
591 * @return A boolean.
592 */
593 public boolean isShapeFilled() {
594 return this.shapeFilled;
595 }
596
597 /**
598 * Returns the fill paint.
599 *
600 * @return The fill paint (never <code>null</code>).
601 */
602 public Paint getFillPaint() {
603 return this.fillPaint;
604 }
605
606 /**
607 * Returns the flag that controls whether or not the shape outline
608 * is visible.
609 *
610 * @return A boolean.
611 */
612 public boolean isShapeOutlineVisible() {
613 return this.shapeOutlineVisible;
614 }
615
616 /**
617 * Returns the line stroke for the series.
618 *
619 * @return The stroke (never <code>null</code>).
620 */
621 public Stroke getLineStroke() {
622 return this.lineStroke;
623 }
624
625 /**
626 * Returns the paint used for lines.
627 *
628 * @return The paint.
629 */
630 public Paint getLinePaint() {
631 return this.linePaint;
632 }
633
634 /**
635 * Returns the outline paint.
636 *
637 * @return The outline paint (never <code>null</code>).
638 */
639 public Paint getOutlinePaint() {
640 return this.outlinePaint;
641 }
642
643 /**
644 * Returns the outline stroke.
645 *
646 * @return The outline stroke (never <code>null</code>).
647 */
648 public Stroke getOutlineStroke() {
649 return this.outlineStroke;
650 }
651
652 /**
653 * Returns a flag that indicates whether or not the line is visible.
654 *
655 * @return A boolean.
656 */
657 public boolean isLineVisible() {
658 return this.lineVisible;
659 }
660
661 /**
662 * Returns the line.
663 *
664 * @return The line.
665 */
666 public Shape getLine() {
667 return this.line;
668 }
669
670 /**
671 * Returns the transformer used when the fill paint is an instance of
672 * <code>GradientPaint</code>.
673 *
674 * @return The transformer (never <code>null</code>).
675 *
676 * @since 1.0.4
677 *
678 * @see #setFillPaintTransformer(GradientPaintTransformer)
679 */
680 public GradientPaintTransformer getFillPaintTransformer() {
681 return this.fillPaintTransformer;
682 }
683
684 /**
685 * Sets the transformer used when the fill paint is an instance of
686 * <code>GradientPaint</code>.
687 *
688 * @param transformer the transformer (<code>null</code> not permitted).
689 *
690 * @since 1.0.4
691 *
692 * @see #getFillPaintTransformer()
693 */
694 public void setFillPaintTransformer(GradientPaintTransformer transformer) {
695 if (transformer == null) {
696 throw new IllegalArgumentException("Null 'transformer' attribute.");
697 }
698 this.fillPaintTransformer = transformer;
699 }
700
701 /**
702 * Tests this item for equality with an arbitrary object.
703 *
704 * @param obj the object (<code>null</code> permitted).
705 *
706 * @return A boolean.
707 */
708 public boolean equals(Object obj) {
709 if (obj == this) {
710 return true;
711 }
712 if (!(obj instanceof LegendItem)) {
713 return false;
714 }
715 LegendItem that = (LegendItem) obj;
716 if (this.datasetIndex != that.datasetIndex) {
717 return false;
718 }
719 if (this.series != that.series) {
720 return false;
721 }
722 if (!this.label.equals(that.label)) {
723 return false;
724 }
725 if (!AttributedStringUtilities.equal(this.attributedLabel,
726 that.attributedLabel)) {
727 return false;
728 }
729 if (!ObjectUtilities.equal(this.description, that.description)) {
730 return false;
731 }
732 if (this.shapeVisible != that.shapeVisible) {
733 return false;
734 }
735 if (!ShapeUtilities.equal(this.shape, that.shape)) {
736 return false;
737 }
738 if (this.shapeFilled != that.shapeFilled) {
739 return false;
740 }
741 if (!this.fillPaint.equals(that.fillPaint)) {
742 return false;
743 }
744 if (!ObjectUtilities.equal(this.fillPaintTransformer,
745 that.fillPaintTransformer)) {
746 return false;
747 }
748 if (this.shapeOutlineVisible != that.shapeOutlineVisible) {
749 return false;
750 }
751 if (!this.outlineStroke.equals(that.outlineStroke)) {
752 return false;
753 }
754 if (!this.outlinePaint.equals(that.outlinePaint)) {
755 return false;
756 }
757 if (!this.lineVisible == that.lineVisible) {
758 return false;
759 }
760 if (!ShapeUtilities.equal(this.line, that.line)) {
761 return false;
762 }
763 if (!this.lineStroke.equals(that.lineStroke)) {
764 return false;
765 }
766 if (!this.linePaint.equals(that.linePaint)) {
767 return false;
768 }
769 return true;
770 }
771
772 /**
773 * Provides serialization support.
774 *
775 * @param stream the output stream (<code>null</code> not permitted).
776 *
777 * @throws IOException if there is an I/O error.
778 */
779 private void writeObject(ObjectOutputStream stream) throws IOException {
780 stream.defaultWriteObject();
781 SerialUtilities.writeAttributedString(this.attributedLabel, stream);
782 SerialUtilities.writeShape(this.shape, stream);
783 SerialUtilities.writePaint(this.fillPaint, stream);
784 SerialUtilities.writeStroke(this.outlineStroke, stream);
785 SerialUtilities.writePaint(this.outlinePaint, stream);
786 SerialUtilities.writeShape(this.line, stream);
787 SerialUtilities.writeStroke(this.lineStroke, stream);
788 SerialUtilities.writePaint(this.linePaint, stream);
789 }
790
791 /**
792 * Provides serialization support.
793 *
794 * @param stream the input stream (<code>null</code> not permitted).
795 *
796 * @throws IOException if there is an I/O error.
797 * @throws ClassNotFoundException if there is a classpath problem.
798 */
799 private void readObject(ObjectInputStream stream)
800 throws IOException, ClassNotFoundException {
801 stream.defaultReadObject();
802 this.attributedLabel = SerialUtilities.readAttributedString(stream);
803 this.shape = SerialUtilities.readShape(stream);
804 this.fillPaint = SerialUtilities.readPaint(stream);
805 this.outlineStroke = SerialUtilities.readStroke(stream);
806 this.outlinePaint = SerialUtilities.readPaint(stream);
807 this.line = SerialUtilities.readShape(stream);
808 this.lineStroke = SerialUtilities.readStroke(stream);
809 this.linePaint = SerialUtilities.readPaint(stream);
810 }
811
812 }