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 List<Long> nodes = new ArrayList<>();
012
013    /**
014     * Constructs a new {@code NodeData}.
015     */
016    public WayData() {
017        // contents can be set later with setters
018    }
019
020    /**
021     * Constructs a new {@code WayData}.
022     * @param data way data to copy
023     */
024    public WayData(WayData data) {
025        super(data);
026        nodes.addAll(data.getNodes());
027    }
028
029    public List<Long> getNodes() {
030        return nodes;
031    }
032
033    @Override
034    public int getNodesCount() {
035        return nodes.size();
036    }
037
038    @Override
039    public long getNodeId(int idx) {
040        return nodes.get(idx);
041    }
042
043    @Override
044    public boolean isClosed() {
045        if (isIncomplete()) return false;
046        return nodes.get(0).equals(nodes.get(nodes.size() - 1));
047    }
048
049    public void setNodes(List<Long> nodes) {
050        this.nodes = new ArrayList<>(nodes);
051    }
052
053    @Override
054    public WayData makeCopy() {
055        return new WayData(this);
056    }
057
058    @Override
059    public String toString() {
060        return super.toString() + " WAY" + nodes;
061    }
062
063    @Override
064    public OsmPrimitiveType getType() {
065        return OsmPrimitiveType.WAY;
066    }
067
068    @Override
069    public void accept(PrimitiveVisitor visitor) {
070        visitor.visit(this);
071    }
072
073}