001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.data.vector;
003
004import java.util.Optional;
005
006import org.openstreetmap.josm.data.osm.INode;
007import org.openstreetmap.josm.data.osm.IRelation;
008import org.openstreetmap.josm.data.osm.IRelationMember;
009import org.openstreetmap.josm.data.osm.IWay;
010import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
011import org.openstreetmap.josm.tools.CheckParameterUtil;
012
013/**
014 * Relation members for a Vector Relation
015 */
016public class VectorRelationMember implements IRelationMember<VectorPrimitive> {
017    private final String role;
018    private final VectorPrimitive member;
019
020    /**
021     * Create a new relation member
022     * @param role The role of the member
023     * @param member The member primitive
024     */
025    public VectorRelationMember(String role, VectorPrimitive member) {
026        CheckParameterUtil.ensureParameterNotNull(member, "member");
027        this.role = Optional.ofNullable(role).orElse("").intern();
028        this.member = member;
029    }
030
031    @Override
032    public String getRole() {
033        return this.role;
034    }
035
036    @Override
037    public boolean isNode() {
038        return this.member instanceof INode;
039    }
040
041    @Override
042    public boolean isWay() {
043        return this.member instanceof IWay;
044    }
045
046    @Override
047    public boolean isRelation() {
048        return this.member instanceof IRelation;
049    }
050
051    @Override
052    public VectorPrimitive getMember() {
053        return this.member;
054    }
055
056    @Override
057    public long getUniqueId() {
058        return this.member.getId();
059    }
060
061    @Override
062    public OsmPrimitiveType getType() {
063        return this.member.getType();
064    }
065
066    @Override
067    public boolean isNew() {
068        return this.member.isNew();
069    }
070}