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 * ComparableObjectItem.java 029 * ------------------------- 030 * (C) Copyright 2006, by Object Refinery Limited. 031 * 032 * Original Author: David Gilbert (for Object Refinery Limited); 033 * Contributor(s): -; 034 * 035 * $Id: ComparableObjectItem.java,v 1.1.2.1 2006/10/20 15:23:22 mungady Exp $ 036 * 037 * Changes 038 * ------- 039 * 19-Oct-2006 : New class, based on XYDataItem (DG); 040 * 041 */ 042 043 package org.jfree.data; 044 045 import java.io.Serializable; 046 047 import org.jfree.util.ObjectUtilities; 048 049 /** 050 * Represents one (Comparable, Object) data item for use in a 051 * {@link ComparableObjectSeries}. 052 * 053 * @since 1.0.3 054 */ 055 public class ComparableObjectItem implements Cloneable, Comparable, 056 Serializable { 057 058 private static final long serialVersionUID = 2751513470325494890L; 059 060 /** The x-value. */ 061 private Comparable x; 062 063 /** The y-value. */ 064 private Object obj; 065 066 /** 067 * Constructs a new data item. 068 * 069 * @param x the x-value (<code>null</code> NOT permitted). 070 * @param y the y-value (<code>null</code> permitted). 071 */ 072 public ComparableObjectItem(Comparable x, Object y) { 073 if (x == null) { 074 throw new IllegalArgumentException("Null 'x' argument."); 075 } 076 this.x = x; 077 this.obj = y; 078 } 079 080 /** 081 * Returns the x-value. 082 * 083 * @return The x-value (never <code>null</code>). 084 */ 085 protected Comparable getComparable() { 086 return this.x; 087 } 088 089 /** 090 * Returns the y-value. 091 * 092 * @return The y-value (possibly <code>null</code>). 093 */ 094 protected Object getObject() { 095 return this.obj; 096 } 097 098 /** 099 * Sets the y-value for this data item. Note that there is no 100 * corresponding method to change the x-value. 101 * 102 * @param y the new y-value (<code>null</code> permitted). 103 */ 104 protected void setObject(Object y) { 105 this.obj = y; 106 } 107 108 /** 109 * Returns an integer indicating the order of this object relative to 110 * another object. 111 * <P> 112 * For the order we consider only the x-value: 113 * negative == "less-than", zero == "equal", positive == "greater-than". 114 * 115 * @param o1 the object being compared to. 116 * 117 * @return An integer indicating the order of this data pair object 118 * relative to another object. 119 */ 120 public int compareTo(Object o1) { 121 122 int result; 123 124 // CASE 1 : Comparing to another ComparableObjectItem object 125 // --------------------------------------------------------- 126 if (o1 instanceof ComparableObjectItem) { 127 ComparableObjectItem that = (ComparableObjectItem) o1; 128 return this.x.compareTo(that.x); 129 } 130 131 // CASE 2 : Comparing to a general object 132 // --------------------------------------------- 133 else { 134 // consider these to be ordered after general objects 135 result = 1; 136 } 137 138 return result; 139 140 } 141 142 /** 143 * Returns a clone of this object. 144 * 145 * @return A clone. 146 * 147 * @throws CloneNotSupportedException not thrown by this class, but 148 * subclasses may differ. 149 */ 150 public Object clone() throws CloneNotSupportedException { 151 return super.clone(); 152 } 153 154 /** 155 * Tests if this object is equal to another. 156 * 157 * @param obj the object to test against for equality (<code>null</code> 158 * permitted). 159 * 160 * @return A boolean. 161 */ 162 public boolean equals(Object obj) { 163 if (obj == this) { 164 return true; 165 } 166 if (!(obj instanceof ComparableObjectItem)) { 167 return false; 168 } 169 ComparableObjectItem that = (ComparableObjectItem) obj; 170 if (!this.x.equals(that.x)) { 171 return false; 172 } 173 if (!ObjectUtilities.equal(this.obj, that.obj)) { 174 return false; 175 } 176 return true; 177 } 178 179 /** 180 * Returns a hash code. 181 * 182 * @return A hash code. 183 */ 184 public int hashCode() { 185 int result; 186 result = this.x.hashCode(); 187 result = 29 * result + (this.obj != null ? this.obj.hashCode() : 0); 188 return result; 189 } 190 191 }