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