Source for org.jfree.util.ShapeList

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