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