// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.data.osm.history; import java.util.Date; import org.openstreetmap.josm.data.coor.LatLon; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.NodeData; import org.openstreetmap.josm.data.osm.OsmPrimitiveType; import org.openstreetmap.josm.data.osm.User; /** * Represents an immutable OSM node in the context of a historical view on OSM data. * @since 1670 */ public class HistoryNode extends HistoryOsmPrimitive { /** the coordinates. May be null for deleted nodes */ private LatLon coords; /** * Constructs a new {@code HistoryNode}. * * @param id the id (> 0 required) * @param version the version (> 0 required) * @param visible whether the node is still visible * @param user the user (!= null required) * @param changesetId the changeset id (> 0 required) * @param timestamp the timestamp (!= null required) * @param coords the coordinates * @throws IllegalArgumentException if preconditions are violated */ public HistoryNode(long id, long version, boolean visible, User user, long changesetId, Date timestamp, LatLon coords) { this(id, version, visible, user, changesetId, timestamp, coords, true); } /** * Constructs a new {@code HistoryNode} with a configurable checking of historic parameters. * This is needed to build virtual HistoryNodes for modified nodes, which do not have a timestamp and a changeset id. * * @param id the id (> 0 required) * @param version the version (> 0 required) * @param visible whether the node is still visible * @param user the user (!= null required) * @param changesetId the changeset id (> 0 required if {@code checkHistoricParams} is true) * @param timestamp the timestamp (!= null required if {@code checkHistoricParams} is true) * @param coords the coordinates * @param checkHistoricParams if true, checks values of {@code changesetId} and {@code timestamp} * @throws IllegalArgumentException if preconditions are violated * @since 5440 */ public HistoryNode(long id, long version, boolean visible, User user, long changesetId, Date timestamp, LatLon coords, boolean checkHistoricParams) { super(id, version, visible, user, changesetId, timestamp, checkHistoricParams); setCoords(coords); } /** * Constructs a new {@code HistoryNode} from an existing {@link Node}. * @param n the node */ public HistoryNode(Node n) { super(n); setCoords(n.getCoor()); } @Override public OsmPrimitiveType getType() { return OsmPrimitiveType.NODE; } /** * Replies the coordinates. May be null. * @return the coordinates. May be null. */ public final LatLon getCoords() { return coords; } /** * Sets the coordinates. Can be null. * @param coords the coordinates. Can be null. */ public final void setCoords(LatLon coords) { this.coords = coords; } @Override public String getDisplayName(HistoryNameFormatter formatter) { return formatter.format(this); } /** * Fills the node attributes with values from this history. * @param data node data to fill * @return filled node data * @since 11878 */ public NodeData fillPrimitiveData(NodeData data) { super.fillPrimitiveCommonData(data); data.setCoor(coords); return data; } }