package org.opensextant.regex.geo; import java.util.Comparator; import org.opensextant.regex.RegexAnnotation; public class GeocoordComparator implements Comparator<RegexAnnotation> { @Override public int compare(RegexAnnotation o1, RegexAnnotation o2) { if (!"GEOCOORD".equalsIgnoreCase(o1.getType()) || !"GEOCOORD".equalsIgnoreCase(o2.getType())) { return 0; } String fam1 = (String) o1.getFeatures().get("geoFamily"); String fam2 = (String) o2.getFeatures().get("geoFamily"); // if they havent been normalized, no family info if (fam1 == null || fam2 == null) { return 0; } if ("DM".equalsIgnoreCase(fam1) && "DMS".equalsIgnoreCase(fam2)) { return 1; } if ("DMS".equalsIgnoreCase(fam1) && "DM".equalsIgnoreCase(fam2)) { return -1; } long len1 = o1.getEnd() - o1.getStart(); long len2 = o2.getEnd() - o2.getStart(); return Long.compare(len1, len2); } }