// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.dialogs.relation.sort;
import static org.openstreetmap.josm.gui.dialogs.relation.sort.WayConnectionType.Direction.NONE;
import static org.openstreetmap.josm.tools.I18n.tr;
public class WayConnectionType {
/** True, if the corresponding primitive is not a way or the way is incomplete */
private final boolean invalid;
/** True, if linked to the previous / next member. */
public boolean linkPrev;
public boolean linkNext;
/**
* direction is FORWARD if the first node of this way is connected to the previous way
* and / or the last node of this way is connected to the next way.
* direction is BACKWARD if it is the other way around.
* direction has a ROUNDABOUT value, if it is tagged as such and it is somehow
* connected to the previous / next member.
* If there is no connection to the previous or next member, then
* direction has the value NONE.
*/
public Direction direction;
public enum Direction {
FORWARD, BACKWARD, ROUNDABOUT_LEFT, ROUNDABOUT_RIGHT, NONE;
public boolean isRoundabout() {
return this == ROUNDABOUT_RIGHT || this == ROUNDABOUT_LEFT;
}
}
/** True, if the element is part of a closed loop of ways. */
public boolean isLoop;
public boolean isOnewayLoopForwardPart;
public boolean isOnewayLoopBackwardPart;
public boolean isOnewayHead;
public boolean isOnewayTail;
public WayConnectionType(boolean linkPrev, boolean linkNext, Direction direction) {
this.linkPrev = linkPrev;
this.linkNext = linkNext;
this.isLoop = false;
this.direction = direction;
invalid = false;
}
public WayConnectionType(boolean invalid) {
this.invalid = invalid;
}
/** construct invalid instance */
public WayConnectionType() {
this.linkPrev = false;
this.linkNext = false;
this.isLoop = false;
this.direction = NONE;
invalid = true;
}
public boolean isValid() {
return !invalid;
}
@Override
public String toString() {
return "[P "+linkPrev+" ;N "+linkNext+" ;D "+direction+" ;L "+isLoop+
" ;FP " + isOnewayLoopForwardPart+";BP " + isOnewayLoopBackwardPart+
";OH " + isOnewayHead+";OT " + isOnewayTail+']';
}
/**
* Returns tooltip.
* @return tooltip
* @since 10248
*/
public String getTooltip() {
if (!isValid())
return "";
else if (linkPrev && linkNext)
return tr("way is connected");
else if (linkPrev)
return tr("way is connected to previous relation member");
else if (linkNext)
return tr("way is connected to next relation member");
else
return tr("way is not connected to previous or next relation member");
}
}