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