001    // License: GPL. Copyright 2007 by Immanuel Scholz and others
002    package org.openstreetmap.josm.data.coor;
003    
004    import java.awt.geom.Point2D;
005    import java.io.Serializable;
006    
007    /**
008     * Base class of points of both coordinate systems.
009     *
010     * The variables are default package protected to allow routines in the
011     * data package to access them directly.
012     *
013     * As the class itself is package protected too, it is not visible
014     * outside of the data package. Routines there should only use LatLon or
015     * EastNorth.
016     *
017     * @author imi
018     */
019    abstract class Coordinate extends Point2D implements Serializable {
020    
021        protected double x;
022        protected double y;
023    
024        /**
025         * Construct the point with latitude / longitude values.
026         *
027         * @param x X coordinate of the point.
028         * @param y Y coordinate of the point.
029         */
030        Coordinate(double x, double y) {
031            this.x = x; this.y = y;
032        }
033    
034        public double getX() {
035            return x;
036        }
037    
038        public double getY() {
039            return y;
040        }
041    
042        public void setLocation (double x, double y) {
043            this.x = x;
044            this.y = y;
045        }
046    
047        @Override
048        public int hashCode() {
049            final int prime = 31;
050            int result = super.hashCode();
051            long temp;
052            temp = java.lang.Double.doubleToLongBits(x);
053            result = prime * result + (int) (temp ^ (temp >>> 32));
054            temp = java.lang.Double.doubleToLongBits(y);
055            result = prime * result + (int) (temp ^ (temp >>> 32));
056            return result;
057        }
058    
059        @Override
060        public boolean equals(Object obj) {
061            if (this == obj)
062                return true;
063            if (!super.equals(obj))
064                return false;
065            if (getClass() != obj.getClass())
066                return false;
067            Coordinate other = (Coordinate) obj;
068            if (java.lang.Double.doubleToLongBits(x) != java.lang.Double.doubleToLongBits(other.x))
069                return false;
070            if (java.lang.Double.doubleToLongBits(y) != java.lang.Double.doubleToLongBits(other.y))
071                return false;
072            return true;
073        }
074    }