001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.data.osm.history;
003
004 import java.util.Date;
005
006 import org.openstreetmap.josm.data.coor.LatLon;
007 import org.openstreetmap.josm.data.osm.Node;
008 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
009 import org.openstreetmap.josm.data.osm.User;
010
011 /**
012 * Represents an immutable OSM node in the context of a historical view on
013 * OSM data.
014 *
015 */
016 public class HistoryNode extends HistoryOsmPrimitive {
017
018 /** the coordinates. May be null for deleted nodes */
019 private LatLon coords;
020
021 /**
022 * Constructs a new {@code HistoryNode}.
023 *
024 * @param id the id (> 0 required)
025 * @param version the version (> 0 required)
026 * @param visible whether the node is still visible
027 * @param user the user (! null required)
028 * @param changesetId the changeset id (> 0 required)
029 * @param timestamp the timestamp (! null required)
030 * @param coords the coordinates
031 * @throws IllegalArgumentException if preconditions are violated
032 */
033 public HistoryNode(long id, long version, boolean visible, User user, long changesetId, Date timestamp, LatLon coords) throws IllegalArgumentException {
034 this(id, version, visible, user, changesetId, timestamp, coords, true);
035 }
036
037 /**
038 * Constructs a new {@code HistoryNode} with a configurable checking of historic parameters.
039 * This is needed to build virtual HistoryNodes for modified nodes, which do not have a timestamp and a changeset id.
040 *
041 * @param id the id (> 0 required)
042 * @param version the version (> 0 required)
043 * @param visible whether the node is still visible
044 * @param user the user (! null required)
045 * @param changesetId the changeset id (> 0 required if {@code checkHistoricParams} is true)
046 * @param timestamp the timestamp (! null required if {@code checkHistoricParams} is true)
047 * @param coords the coordinates
048 * @param checkHistoricParams if true, checks values of {@code changesetId} and {@code timestamp}
049 * @throws IllegalArgumentException if preconditions are violated
050 * @since 5440
051 */
052 public HistoryNode(long id, long version, boolean visible, User user, long changesetId, Date timestamp, LatLon coords, boolean checkHistoricParams) throws IllegalArgumentException {
053 super(id, version, visible, user, changesetId, timestamp, checkHistoricParams);
054 setCoords(coords);
055 }
056
057 /**
058 * Constructs a new {@code HistoryNode} from an existing {@link Node}.
059 * @param n the node
060 */
061 public HistoryNode(Node n) {
062 super(n);
063 setCoords(n.getCoor());
064 }
065
066 @Override
067 public OsmPrimitiveType getType() {
068 return OsmPrimitiveType.NODE;
069 }
070
071 /**
072 * Replies the coordinates. May be null.
073 * @return the coordinates. May be null.
074 */
075 public LatLon getCoords() {
076 return coords;
077 }
078
079 /**
080 * Sets the coordinates. Can be null.
081 * @param coords the coordinates. Can be null.
082 */
083 public void setCoords(LatLon coords) {
084 this.coords = coords;
085 }
086
087 @Override
088 public String getDisplayName(HistoryNameFormatter formatter) {
089 return formatter.format(this);
090 }
091 }