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}