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