001 /* ===========================================================
002 * JFreeChart : a free chart library for the Java(tm) platform
003 * ===========================================================
004 *
005 * (C) Copyright 2000-2005, 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 * OHLCDataItem.java
029 * -----------------
030 * (C) Copyright 2003-2005, by Object Refinery Limited.
031 *
032 * Original Author: David Gilbert (for Object Refinery Limited);
033 * Contributor(s): -;
034 *
035 * $Id: OHLCDataItem.java,v 1.6.2.1 2005/10/25 21:36:51 mungady Exp $
036 *
037 * Changes
038 * -------
039 * 03-Dec-2003 : Version 1 (DG);
040 * 29-Apr-2005 : Added equals() method (DG);
041 *
042 */
043
044 package org.jfree.data.xy;
045
046 import java.io.Serializable;
047 import java.util.Date;
048
049 /**
050 * Represents a single (open-high-low-close) data item in
051 * an {@link DefaultOHLCDataset}. This data item is commonly used
052 * to summarise the trading activity of a financial commodity for
053 * a fixed period (most often one day).
054 */
055 public class OHLCDataItem implements Comparable, Serializable {
056
057 /** For serialization. */
058 private static final long serialVersionUID = 7753817154401169901L;
059
060 /** The date. */
061 private Date date;
062
063 /** The open value. */
064 private Number open;
065
066 /** The high value. */
067 private Number high;
068
069 /** The low value. */
070 private Number low;
071
072 /** The close value. */
073 private Number close;
074
075 /** The trading volume (number of shares, contracts or whatever). */
076 private Number volume;
077
078 /**
079 * Creates a new item.
080 *
081 * @param date the date (<code>null</code> not permitted).
082 * @param open the open value.
083 * @param high the high value.
084 * @param low the low value.
085 * @param close the close value.
086 * @param volume the volume.
087 */
088 public OHLCDataItem(Date date,
089 double open,
090 double high,
091 double low,
092 double close,
093 double volume) {
094 if (date == null) {
095 throw new IllegalArgumentException("Null 'date' argument.");
096 }
097 this.date = date;
098 this.open = new Double(open);
099 this.high = new Double(high);
100 this.low = new Double(low);
101 this.close = new Double(close);
102 this.volume = new Double(volume);
103 }
104
105 /**
106 * Returns the date that the data item relates to.
107 *
108 * @return The date (never <code>null</code>).
109 */
110 public Date getDate() {
111 return this.date;
112 }
113
114 /**
115 * Returns the open value.
116 *
117 * @return The open value.
118 */
119 public Number getOpen() {
120 return this.open;
121 }
122
123 /**
124 * Returns the high value.
125 *
126 * @return The high value.
127 */
128 public Number getHigh() {
129 return this.high;
130 }
131
132 /**
133 * Returns the low value.
134 *
135 * @return The low value.
136 */
137 public Number getLow() {
138 return this.low;
139 }
140
141 /**
142 * Returns the close value.
143 *
144 * @return The close value.
145 */
146 public Number getClose() {
147 return this.close;
148 }
149
150 /**
151 * Returns the volume.
152 *
153 * @return The volume.
154 */
155 public Number getVolume() {
156 return this.volume;
157 }
158
159 /**
160 * Checks this instance for equality with an arbitrary object.
161 *
162 * @param obj the object (<code>null</code> permitted).
163 *
164 * @return A boolean.
165 */
166 public boolean equals(Object obj) {
167 if (obj == this) {
168 return true;
169 }
170 if (!(obj instanceof OHLCDataItem)) {
171 return false;
172 }
173 OHLCDataItem that = (OHLCDataItem) obj;
174 if (!this.date.equals(that.date)) {
175 return false;
176 }
177 if (!this.high.equals(that.high)) {
178 return false;
179 }
180 if (!this.low.equals(that.low)) {
181 return false;
182 }
183 if (!this.open.equals(that.open)) {
184 return false;
185 }
186 if (!this.close.equals(that.close)) {
187 return false;
188 }
189 return true;
190 }
191
192 /**
193 * Compares this object with the specified object for order. Returns a
194 * negative integer, zero, or a positive integer as this object is less
195 * than, equal to, or greater than the specified object.
196 *
197 * @param object the object to compare to.
198 *
199 * @return A negative integer, zero, or a positive integer as this object
200 * is less than, equal to, or greater than the specified object.
201 */
202 public int compareTo(Object object) {
203 if (object instanceof OHLCDataItem) {
204 OHLCDataItem item = (OHLCDataItem) object;
205 return this.date.compareTo(item.date);
206 }
207 else {
208 throw new ClassCastException("OHLCDataItem.compareTo().");
209 }
210 }
211
212 }