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 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    @Override
044    public List<RelationMemberData> getMembers() {
045        return members;
046    }
047
048    @Override
049    public void setMembers(List<RelationMemberData> memberData) {
050        members = new ArrayList<>(memberData);
051    }
052
053    @Override
054    public int getMembersCount() {
055        return members.size();
056    }
057
058    @Override
059    public RelationMemberData getMember(int index) {
060        return members.get(index);
061    }
062
063    @Override
064    public long getMemberId(int idx) {
065        return getMember(idx).getMemberId();
066    }
067
068    @Override
069    public String getRole(int idx) {
070        return getMember(idx).getRole();
071    }
072
073    @Override
074    public OsmPrimitiveType getMemberType(int idx) {
075        return getMember(idx).getMemberType();
076    }
077
078    @Override
079    public RelationData makeCopy() {
080        return new RelationData(this);
081    }
082
083    @Override
084    public String toString() {
085        return super.toString() + " REL " + members;
086    }
087
088    @Override
089    public OsmPrimitiveType getType() {
090        return OsmPrimitiveType.RELATION;
091    }
092
093    @Override
094    public void accept(PrimitiveVisitor visitor) {
095        visitor.visit(this);
096    }
097
098    @Override
099    public BBox getBBox() {
100        throw new UnsupportedOperationException();
101    }
102}