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