Source for org.jfree.util.PaintList

   1: /* ========================================================================
   2:  * JCommon : a free general purpose class library for the Java(tm) platform
   3:  * ========================================================================
   4:  *
   5:  * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
   6:  * 
   7:  * Project Info:  http://www.jfree.org/jcommon/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:  * PaintList.java
  29:  * --------------
  30:  * (C) Copyright 2003, 2004, by Object Refinery Limited.
  31:  *
  32:  * Original Author:  David Gilbert (for Object Refinery Limited);
  33:  * Contributor(s):   -;
  34:  *
  35:  * $Id: PaintList.java,v 1.5 2005/10/18 13:24:19 mungady Exp $
  36:  *
  37:  * Changes
  38:  * -------
  39:  * 13-Aug-2003 : Version 1 (DG);
  40:  * 27-Jun-2005 : Fixed equals() method to handle GradientPaint (DG);
  41:  * 
  42:  */
  43: 
  44: package org.jfree.util;
  45: 
  46: import java.awt.Paint;
  47: import java.io.IOException;
  48: import java.io.ObjectInputStream;
  49: import java.io.ObjectOutputStream;
  50: 
  51: import org.jfree.io.SerialUtilities;
  52: 
  53: /**
  54:  * A table of {@link Paint} objects.
  55:  *
  56:  * @author David Gilbert
  57:  */
  58: public class PaintList extends AbstractObjectList {
  59: 
  60:     /**
  61:      * Creates a new list.
  62:      */
  63:     public PaintList() {
  64:         super();
  65:     }
  66: 
  67:     /**
  68:      * Returns a {@link Paint} object from the list.
  69:      *
  70:      * @param index the index (zero-based).
  71:      *
  72:      * @return The object.
  73:      */
  74:     public Paint getPaint(final int index) {
  75:         return (Paint) get(index);
  76:     }
  77: 
  78:     /**
  79:      * Sets the {@link Paint} for an item in the list.  The list is expanded if necessary.
  80:      *
  81:      * @param index  the index (zero-based).
  82:      * @param paint  the {@link Paint}.
  83:      */
  84:     public void setPaint(final int index, final Paint paint) {
  85:         set(index, paint);
  86:     }
  87: 
  88:     /**
  89:      * Tests the list for equality with another object (typically also a list).
  90:      *
  91:      * @param obj  the other object (<code>null</code> permitted).
  92:      *
  93:      * @return A boolean.
  94:      */
  95:     public boolean equals(final Object obj) {
  96:         if (obj == null) {
  97:             return false;
  98:         }
  99:         if (obj == this) {
 100:             return true;
 101:         }
 102:         if (obj instanceof PaintList) {
 103:             PaintList that = (PaintList) obj;
 104:             int listSize = size();
 105:             for (int i = 0; i < listSize; i++) {
 106:                if (!PaintUtilities.equal(getPaint(i), that.getPaint(i))) {
 107:                    return false;
 108:                }
 109:             }
 110:         }
 111:         return true;
 112:     }
 113: 
 114:     /**
 115:      * Returns a hash code value for the object.
 116:      *
 117:      * @return the hashcode
 118:      */
 119:     public int hashCode() {
 120:         return super.hashCode();
 121:     }
 122: 
 123:     /**
 124:      * Provides serialization support.
 125:      *
 126:      * @param stream  the output stream.
 127:      *
 128:      * @throws IOException  if there is an I/O error.
 129:      */
 130:     private void writeObject(final ObjectOutputStream stream) throws IOException {
 131: 
 132:         stream.defaultWriteObject();
 133:         final int count = size();
 134:         stream.writeInt(count);
 135:         for (int i = 0; i < count; i++) {
 136:             final Paint paint = getPaint(i);
 137:             if (paint != null) {
 138:                 stream.writeInt(i);
 139:                 SerialUtilities.writePaint(paint, stream);
 140:             }
 141:             else {
 142:                 stream.writeInt(-1);
 143:             }
 144:         }
 145: 
 146:     }
 147:     
 148:     /**
 149:      * Provides serialization support.
 150:      *
 151:      * @param stream  the input stream.
 152:      *
 153:      * @throws IOException  if there is an I/O error.
 154:      * @throws ClassNotFoundException  if there is a classpath problem.
 155:      */
 156:     private void readObject(final ObjectInputStream stream) throws IOException, ClassNotFoundException {
 157: 
 158:         stream.defaultReadObject();
 159:         final int count = stream.readInt();
 160:         for (int i = 0; i < count; i++) {
 161:             final int index = stream.readInt();
 162:             if (index != -1) {
 163:                 setPaint(index, SerialUtilities.readPaint(stream));
 164:             }
 165:         }
 166:         
 167:     }
 168: 
 169: }