// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.graphview.core.util;
import org.openstreetmap.josm.plugins.graphview.core.graph.GraphNode;
import org.openstreetmap.josm.plugins.graphview.core.graph.WayGraph;
import org.openstreetmap.josm.plugins.graphview.core.transition.Segment;
import org.openstreetmap.josm.plugins.graphview.core.transition.SegmentNode;
/**
* utility class for calculating information about {@link WayGraph}s
*/
public final class GraphUtil {
/** prevents instantiation */
private GraphUtil() { }
/**
* checks whether a node is an "end node"
* (a node whose {@link SegmentNode} is connected to at most one other {@link SegmentNode})
*/
public static boolean isEndNode(GraphNode node) {
SegmentNode ownSegmentNode = node.getSegmentNode();
SegmentNode connectedNode = null;
for (Segment inboundSegment : node.getSegmentNode().getInboundSegments()) {
SegmentNode otherSegmentNode = inboundSegment.getNode1();
if (otherSegmentNode != ownSegmentNode) {
if (connectedNode == null) {
connectedNode = otherSegmentNode;
} else if (connectedNode != otherSegmentNode) {
return false;
}
}
}
for (Segment outboundSegment : node.getSegmentNode().getOutboundSegments()) {
SegmentNode otherSegmentNode = outboundSegment.getNode2();
if (otherSegmentNode != ownSegmentNode) {
if (connectedNode == null) {
connectedNode = otherSegmentNode;
} else if (connectedNode != otherSegmentNode) {
return false;
}
}
}
return true;
}
}