001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.gui.dialogs.relation; 003 004 import static org.openstreetmap.josm.gui.dialogs.relation.WayConnectionType.Direction.NONE; 005 import static org.openstreetmap.josm.tools.I18n.tr; 006 007 public class WayConnectionType { 008 009 /** True, if the corresponding primitive is not a way or the way is incomplete */ 010 private final boolean invalid; 011 012 /** True, if linked to the previous / next member. */ 013 public boolean linkPrev; 014 public boolean linkNext; 015 016 /** 017 * direction is FORWARD if the first node of this way is connected to the previous way 018 * and / or the last node of this way is connected to the next way. 019 * direction is BACKWARD if it is the other way around. 020 * direction has a ROUNDABOUT value, if it is tagged as such and it is somehow 021 * connected to the previous / next member. 022 * If there is no connection to the previous or next member, then 023 * direction has the value NONE. 024 */ 025 public Direction direction; 026 027 public enum Direction { 028 FORWARD, BACKWARD, ROUNDABOUT_LEFT, ROUNDABOUT_RIGHT, NONE; 029 030 public boolean isRoundabout() { 031 return this == ROUNDABOUT_RIGHT || this == ROUNDABOUT_LEFT; 032 } 033 } 034 035 /** True, if the element is part of a closed loop of ways. */ 036 public boolean isLoop; 037 038 public boolean isOnewayLoopForwardPart = false; 039 public boolean isOnewayLoopBackwardPart = false; 040 public boolean isOnewayHead = false; 041 public boolean isOnewayTail = false; 042 043 public WayConnectionType(boolean linkPrev, boolean linkNext, Direction direction) { 044 this.linkPrev = linkPrev; 045 this.linkNext = linkNext; 046 this.isLoop = false; 047 this.direction = direction; 048 invalid = false; 049 } 050 051 public WayConnectionType(boolean invalid){ 052 this.invalid = invalid; 053 } 054 055 /** construct invalid instance */ 056 public WayConnectionType() { 057 this.linkPrev = false; 058 this.linkNext = false; 059 this.isLoop = false; 060 this.direction = NONE; 061 invalid = true; 062 } 063 064 public boolean isValid() { 065 return !invalid; 066 } 067 068 @Override 069 public String toString() { 070 return "[P "+linkPrev+" ;N "+linkNext+" ;D "+direction+" ;L "+isLoop+ 071 " ;FP " + isOnewayLoopForwardPart+";BP " + isOnewayLoopBackwardPart+ 072 ";OH " + isOnewayHead+";OT " + isOnewayTail+"]"; 073 } 074 075 public String getToolTip() { 076 if (!isValid()) 077 return ""; 078 else if (linkPrev && linkNext) 079 return tr("way is connected"); 080 else if (linkPrev) 081 return tr("way is connected to previous relation member"); 082 else if (linkNext) 083 return tr("way is connected to next relation member"); 084 else 085 return tr("way is not connected to previous or next relation member"); 086 } 087 }