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    }