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}