001    /* ===========================================================
002     * JFreeChart : a free chart library for the Java(tm) platform
003     * ===========================================================
004     *
005     * (C) Copyright 2000-2008, 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     * WindNeedle.java
029     * ---------------
030     * (C) Copyright 2002-2008, by the Australian Antarctic Division and
031     *                          Contributors.
032     *
033     * Original Author:  Bryan Scott (for the Australian Antarctic Division);
034     * Contributor(s):   David Gilbert (for Object Refinery Limited);
035     *
036     * Changes:
037     * --------
038     * 25-Sep-2002 : Version 1, contributed by Bryan Scott (DG);
039     * 09-Sep-2003 : Added equals() method (DG);
040     * 22-Nov-2007 : Implemented hashCode() (DG)
041     *
042     */
043    
044    package org.jfree.chart.needle;
045    
046    import java.awt.Graphics2D;
047    import java.awt.geom.Point2D;
048    import java.awt.geom.Rectangle2D;
049    import java.io.Serializable;
050    
051    /**
052     * A needle that indicates wind direction, for use with the
053     * {@link org.jfree.chart.plot.CompassPlot} class.
054     */
055    public class WindNeedle extends ArrowNeedle
056                                    implements Cloneable, Serializable {
057    
058        /** For serialization. */
059        private static final long serialVersionUID = -2861061368907167834L;
060    
061        /**
062         * Default constructor.
063         */
064        public WindNeedle() {
065            super(false);  // isArrowAtTop
066        }
067    
068        /**
069         * Draws the needle.
070         *
071         * @param g2  the graphics device.
072         * @param plotArea  the plot area.
073         * @param rotate  the rotation point.
074         * @param angle  the angle.
075         */
076        protected void drawNeedle(Graphics2D g2, Rectangle2D plotArea,
077                                  Point2D rotate, double angle) {
078    
079            super.drawNeedle(g2, plotArea, rotate, angle);
080            if ((rotate != null) && (plotArea != null)) {
081    
082                int spacing = getSize() * 3;
083                Rectangle2D newArea = new Rectangle2D.Double();
084    
085                Point2D newRotate = rotate;
086                newArea.setRect(plotArea.getMinX() - spacing, plotArea.getMinY(),
087                        plotArea.getWidth(), plotArea.getHeight());
088                super.drawNeedle(g2, newArea, newRotate, angle);
089    
090                newArea.setRect(plotArea.getMinX() + spacing,
091                        plotArea.getMinY(), plotArea.getWidth(),
092                        plotArea.getHeight());
093                super.drawNeedle(g2, newArea, newRotate, angle);
094    
095            }
096        }
097    
098        /**
099         * Tests another object for equality with this object.
100         *
101         * @param object  the object to test.
102         *
103         * @return A boolean.
104         */
105        public boolean equals(Object object) {
106            if (object == null) {
107                return false;
108            }
109            if (object == this) {
110                return true;
111            }
112            if (super.equals(object) && object instanceof WindNeedle) {
113                return true;
114            }
115            return false;
116        }
117    
118        /**
119         * Returns a hash code for this instance.
120         *
121         * @return A hash code.
122         */
123        public int hashCode() {
124            return super.hashCode();
125        }
126    
127    }
128