public class Lexicographic implements Comparator {
  int xa, ya, xb, yb;
  // Comparator for points in the plane with the standard lexicographic order.
  // Assumes a Point2D has getX() and getY() methods returning its coordinates.
  private void getXY(Object a, Object b) {
    if (a == null || b == null)
      throw new InvalidElementException("Null Argument");
    try{ 
      xa = ((Point2D) a).getX();
      ya = ((Point2D) a).getY();
      xb = ((Point2D) b).getX();
      yb = ((Point2D) b).getY();
    }
    catch (ClassCastException e)
      { throw new InvalidElementException("Argument not a Point2D"); }
  }
  public boolean isLessThan(Object a, Object b) {
    getXY(a, b);
    if (xa == xb)
      return (ya < yb);
    else
      return (xa < xb);
  }
  public boolean isLessThanOrEqualTo(Object a, Object b) {
    getXY(a, b);
    if (xa == xb)
      return (ya <= yb);
    else
      return (xa <= xb);
  }
  public boolean isEqualTo(Object a, Object b) {
    getXY(a, b);
    return (xa == xb) && (ya == yb);
  }