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 * @param <P> the base type of OSM primitives 009 * @since 13677 010 */ 011public interface IRelationMember<P extends IPrimitive> extends PrimitiveId { 012 013 /** 014 * Returns the role of this relation member. 015 * @return Role name or "". Never returns null 016 */ 017 String getRole(); 018 019 /** 020 * Determines if this relation member has a role. 021 * @return True if role is set 022 */ 023 default boolean hasRole() { 024 return !"".equals(getRole()); 025 } 026 027 /** 028 * Determines if this relation member's role is in the given list. 029 * @param roles The roles to look after 030 * @return True if role is in the given list 031 */ 032 default boolean hasRole(String... roles) { 033 return Arrays.asList(roles).contains(getRole()); 034 } 035 036 /** 037 * Determines if this relation member is a node. 038 * @return True if member is node 039 */ 040 boolean isNode(); 041 042 /** 043 * Determines if this relation member is a way. 044 * @return True if member is way 045 */ 046 boolean isWay(); 047 048 /** 049 * Determines if this relation member is a relation. 050 * @return True if member is relation 051 */ 052 boolean isRelation(); 053 054 /** 055 * Returns type of member for icon display. 056 * @return type of member for icon display 057 * @since 13766 (IRelationMember) 058 */ 059 default OsmPrimitiveType getDisplayType() { 060 return getMember().getDisplayType(); 061 } 062 063 /** 064 * Returns the relation member. 065 * @return Member. Returned value is never null. 066 * @since 13766 (IRelationMember) 067 */ 068 P getMember(); 069 070 /** 071 * Returns the relation member as a way. 072 * @return Member as a way 073 * @since 17862 074 */ 075 default IWay<?> getWay() { 076 return (IWay<?>) getMember(); 077 } 078}