001// License: GPL. For details, see Readme.txt file.
002package org.openstreetmap.gui.jmapviewer;
003
004import java.awt.geom.Point2D;
005import java.io.IOException;
006import java.io.ObjectInputStream;
007import java.io.ObjectOutputStream;
008import java.util.Objects;
009
010import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
011
012/**
013 * This class encapsulates a Point2D.Double and provide access
014 * via <tt>lat</tt> and <tt>lon</tt>.
015 *
016 * @author Jan Peter Stotz
017 *
018 */
019public class Coordinate implements ICoordinate {
020    private transient Point2D.Double data;
021
022    public Coordinate(double lat, double lon) {
023        data = new Point2D.Double(lon, lat);
024    }
025
026    @Override
027    public double getLat() {
028        return data.y;
029    }
030
031    @Override
032    public void setLat(double lat) {
033        data.y = lat;
034    }
035
036    @Override
037    public double getLon() {
038        return data.x;
039    }
040
041    @Override
042    public void setLon(double lon) {
043        data.x = lon;
044    }
045
046    private void writeObject(ObjectOutputStream out) throws IOException {
047        out.writeObject(data.x);
048        out.writeObject(data.y);
049    }
050
051    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
052        data = new Point2D.Double();
053        data.x = (Double) in.readObject();
054        data.y = (Double) in.readObject();
055    }
056
057    @Override
058    public String toString() {
059        return "Coordinate[" + data.y + ", " + data.x + ']';
060    }
061
062    @Override
063    public int hashCode() {
064        int hash = 3;
065        hash = 61 * hash + Objects.hashCode(this.data);
066        return hash;
067    }
068
069    @Override
070    public boolean equals(Object obj) {
071        if (obj == null) {
072            return false;
073        }
074        if (getClass() != obj.getClass()) {
075            return false;
076        }
077        final Coordinate other = (Coordinate) obj;
078        if (!Objects.equals(this.data, other.data)) {
079            return false;
080        }
081        return true;
082    }
083}