package com.revolsys.record.comparator; import java.util.Comparator; import com.revolsys.geometry.model.Polygon; import com.revolsys.record.Record; public class RecordGeometryAreaComparator implements Comparator<Record> { private boolean clockwise = false; private boolean decending = false; public RecordGeometryAreaComparator() { } public RecordGeometryAreaComparator(final boolean decending, final boolean clockwise) { this.decending = decending; this.clockwise = clockwise; } @Override public int compare(final Record object1, final Record object2) { if (object1 == object2) { return 0; } int compare = -1; final Polygon geometry1 = object1.getGeometry(); final Polygon geometry2 = object2.getGeometry(); final double area1 = geometry1.getArea(); final double area2 = geometry2.getArea(); compare = Double.compare(area1, area2); if (compare == 0) { compare = geometry1.compareTo(geometry2); if (compare == 0) { final boolean clockwise1 = geometry1.getShell().isClockwise(); final boolean clockwise2 = geometry2.getShell().isClockwise(); if (clockwise1) { if (clockwise2) { return 0; } else { if (this.clockwise) { compare = -1; } else { compare = 1; } } } else { if (clockwise2) { if (this.clockwise) { compare = 1; } else { compare = -1; } } else { return 0; } } } } if (this.decending) { return -compare; } else { return compare; } } }