Frames | No Frames |
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: }