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 RelationData extends PrimitiveData implements IRelation { 010 011 private static final long serialVersionUID = 1163664954890478565L; 012 private List<RelationMemberData> members = new ArrayList<>(); 013 014 /** 015 * Constructs a new {@code RelationData}. 016 */ 017 public RelationData() { 018 // contents can be set later with setters 019 } 020 021 /** 022 * Constructs a new {@code RelationData}. 023 * @param data relation data to copy 024 */ 025 public RelationData(RelationData data) { 026 super(data); 027 members.addAll(data.members); 028 } 029 030 public List<RelationMemberData> getMembers() { 031 return members; 032 } 033 034 public void setMembers(List<RelationMemberData> memberData) { 035 members = new ArrayList<>(memberData); 036 } 037 038 @Override 039 public int getMembersCount() { 040 return members.size(); 041 } 042 043 @Override 044 public long getMemberId(int idx) { 045 return members.get(idx).getMemberId(); 046 } 047 048 @Override 049 public String getRole(int idx) { 050 return members.get(idx).getRole(); 051 } 052 053 @Override 054 public OsmPrimitiveType getMemberType(int idx) { 055 return members.get(idx).getMemberType(); 056 } 057 058 @Override 059 public RelationData makeCopy() { 060 return new RelationData(this); 061 } 062 063 @Override 064 public String toString() { 065 return super.toString() + " REL " + members; 066 } 067 068 @Override 069 public OsmPrimitiveType getType() { 070 return OsmPrimitiveType.RELATION; 071 } 072 073 @Override 074 public void accept(PrimitiveVisitor visitor) { 075 visitor.visit(this); 076 } 077 078}