package com.revolsys.geometry.graph.comparator;
import java.util.Comparator;
import com.revolsys.geometry.graph.Node;
import com.revolsys.geometry.model.Point;
/**
* Compare the distance of nodes from a given node.
*
* @author paustin
*/
public class NodeDistanceComparator<T> implements Comparator<Node<T>> {
private final boolean invert;
private final Node<T> node;
public NodeDistanceComparator(final Node<T> node) {
this.node = node;
this.invert = false;
}
public NodeDistanceComparator(final Node<T> node, final boolean invert) {
this.node = node;
this.invert = invert;
}
@Override
public int compare(final Node<T> node1, final Node<T> node2) {
int compare;
final double distance1 = node1.distancePoint(this.node);
final double distance2 = node2.distancePoint(this.node);
if (distance1 == distance2) {
final Point point1 = node1;
final Point point2 = node2;
compare = point1.compareTo(point2);
} else if (distance1 < distance2) {
compare = -1;
} else {
compare = 1;
}
if (this.invert) {
return -compare;
} else {
return compare;
}
}
public boolean isInvert() {
return this.invert;
}
}