001    /* ===========================================================
002     * JFreeChart : a free chart library for the Java(tm) platform
003     * ===========================================================
004     *
005     * (C) Copyright 2000-2007, 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     * VectorSeries.java
029     * -----------------
030     * (C) Copyright 2007, by Object Refinery Limited.
031     *
032     * Original Author:  David Gilbert (for Object Refinery Limited);
033     * Contributor(s):   -;
034     *
035     * Changes
036     * -------
037     * 30-Jan-2007 : Version 1 (DG);
038     * 24-May-2007 : Renamed getDeltaXValue() --> getVectorXValue(), and likewise
039     *               for getDeltaYValue() (DG);
040     * 25-May-2007 : Added remove(int) and clear() methods, and moved from the
041     *               experimental to the main source tree (DG);
042     *               
043     */
044    
045    package org.jfree.data.xy;
046    
047    import org.jfree.data.ComparableObjectItem;
048    import org.jfree.data.ComparableObjectSeries;
049    import org.jfree.data.general.SeriesChangeEvent;
050    
051    /**
052     * A list of (x,y, deltaX, deltaY) data items.
053     *
054     * @since 1.0.6
055     * 
056     * @see VectorSeriesCollection
057     */
058    public class VectorSeries extends ComparableObjectSeries {
059        
060        /**
061         * Creates a new empty series.
062         *
063         * @param key  the series key (<code>null</code> not permitted).
064         */
065        public VectorSeries(Comparable key) {
066            this(key, false, true);
067        }
068        
069        /**
070         * Constructs a new series that contains no data.  You can specify 
071         * whether or not duplicate x-values are allowed for the series.
072         *
073         * @param key  the series key (<code>null</code> not permitted).
074         * @param autoSort  a flag that controls whether or not the items in the 
075         *                  series are sorted.
076         * @param allowDuplicateXValues  a flag that controls whether duplicate 
077         *                               x-values are allowed.
078         */
079        public VectorSeries(Comparable key, boolean autoSort, 
080                boolean allowDuplicateXValues) {
081            super(key, autoSort, allowDuplicateXValues);
082        }
083        
084        /**
085         * Adds a data item to the series.
086         *
087         * @param x  the x-value.
088         * @param y  the y-value.
089         * @param deltaX  the vector x.
090         * @param deltaY  the vector y.
091         */
092        public void add(double x, double y, double deltaX, double deltaY) {
093            super.add(new VectorDataItem(x, y, deltaX, deltaY), true);
094        }
095        
096        /**
097         * Removes the item at the specified index and sends a 
098         * {@link SeriesChangeEvent} to all registered listeners.
099         * 
100         * @param index  the index.
101         * 
102         * @return The item removed.
103         */
104        public ComparableObjectItem remove(int index) {
105            VectorDataItem result = (VectorDataItem) this.data.remove(index);
106            fireSeriesChanged();
107            return result;
108        }
109        
110        /**
111         * Removes all data items from the series and sends a 
112         * {@link SeriesChangeEvent} to all registered listeners.
113         */
114        public void clear() {
115            if (this.data.size() > 0) {
116                this.data.clear();
117                fireSeriesChanged();
118            }
119        }
120    
121        /**
122         * Returns the x-value for the specified item.
123         *
124         * @param index  the item index.
125         *
126         * @return The x-value.
127         */
128        public double getXValue(int index) {
129            VectorDataItem item = (VectorDataItem) this.getDataItem(index);
130            return item.getXValue();
131        }
132        
133        /**
134         * Returns the y-value for the specified item.
135         *
136         * @param index  the item index.
137         *
138         * @return The y-value.
139         */
140        public double getYValue(int index) {
141            VectorDataItem item = (VectorDataItem) getDataItem(index);
142            return item.getYValue();
143        }
144        
145        /**
146         * Returns the x-component of the vector for an item in the series.
147         * 
148         * @param index  the item index.
149         * 
150         * @return The x-component of the vector.
151         */
152        public double getVectorXValue(int index) {
153            VectorDataItem item = (VectorDataItem) getDataItem(index);
154            return item.getVectorX();        
155        }
156        
157        /**
158         * Returns the y-component of the vector for an item in the series.
159         * 
160         * @param index  the item index.
161         * 
162         * @return The y-component of the vector.
163         */
164        public double getVectorYValue(int index) {
165            VectorDataItem item = (VectorDataItem) getDataItem(index);
166            return item.getVectorY();        
167        }
168        
169        /**
170         * Returns the data item at the specified index.
171         * 
172         * @param index  the item index.
173         * 
174         * @return The data item.
175         */
176        public ComparableObjectItem getDataItem(int index) {
177            // overridden to make public
178            return super.getDataItem(index);
179        }
180        
181    }