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}