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
188: + (this .obj != null ? this .obj.hashCode() : 0);
189: return result;
190: }
191:
192: }
|