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}