001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.data.osm;
003
004import java.util.Arrays;
005
006/**
007 * IRelationMember captures the common functions of {@link RelationMember} and {@link RelationMemberData}.
008 * @since 13677
009 */
010public interface IRelationMember extends PrimitiveId {
011
012    /**
013     * Returns the role of this relation member.
014     * @return Role name or "". Never returns null
015     */
016    String getRole();
017
018    /**
019     * Determines if this relation member has a role.
020     * @return True if role is set
021     */
022    default boolean hasRole() {
023        return !"".equals(getRole());
024    }
025
026    /**
027     * Determines if this relation member's role is in the given list.
028     * @param roles The roles to look after
029     * @return True if role is in the given list
030     */
031    default boolean hasRole(String... roles) {
032        return Arrays.asList(roles).contains(getRole());
033    }
034
035    /**
036     * Determines if this relation member is a node.
037     * @return True if member is node
038     */
039    boolean isNode();
040
041    /**
042     * Determines if this relation member is a way.
043     * @return True if member is way
044     */
045    boolean isWay();
046
047    /**
048     * Determines if this relation member is a relation.
049     * @return True if member is relation
050     */
051    boolean isRelation();
052}