001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.data.osm;
003
004import java.util.ArrayList;
005import java.util.List;
006
007import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
008
009public class WayData extends PrimitiveData implements IWay {
010
011    private static final long serialVersionUID = 106944939313286415L;
012    private List<Long> nodes = new ArrayList<>();
013
014    /**
015     * Constructs a new {@code NodeData}.
016     */
017    public WayData() {
018        // contents can be set later with setters
019    }
020
021    /**
022     * Constructs a new {@code WayData}.
023     * @param data way data to copy
024     */
025    public WayData(WayData data) {
026        super(data);
027        nodes.addAll(data.getNodes());
028    }
029
030    public List<Long> getNodes() {
031        return nodes;
032    }
033
034    @Override
035    public int getNodesCount() {
036        return nodes.size();
037    }
038
039    @Override
040    public long getNodeId(int idx) {
041        return nodes.get(idx);
042    }
043
044    @Override
045    public boolean isClosed() {
046        if (isIncomplete()) return false;
047        return nodes.get(0).equals(nodes.get(nodes.size() - 1));
048    }
049
050    public void setNodes(List<Long> nodes) {
051        this.nodes = new ArrayList<>(nodes);
052    }
053
054    @Override
055    public WayData makeCopy() {
056        return new WayData(this);
057    }
058
059    @Override
060    public String toString() {
061        return super.toString() + " WAY" + nodes;
062    }
063
064    @Override
065    public OsmPrimitiveType getType() {
066        return OsmPrimitiveType.WAY;
067    }
068
069    @Override
070    public void accept(PrimitiveVisitor visitor) {
071        visitor.visit(this);
072    }
073
074}