package org.gbif.checklistbank.neo.traverse;
import org.gbif.checklistbank.neo.NeoProperties;
import java.util.Comparator;
import org.neo4j.graphdb.Node;
/**
* Orders taxon nodes by their rank first, then canonical name and scientificName ultimately.
*/
public class TaxonomicOrder implements Comparator<Node> {
@Override
public int compare(Node n1, Node n2) {
int r1 = (int) n1.getProperty(NeoProperties.RANK, Integer.MAX_VALUE);
int r2 = (int) n2.getProperty(NeoProperties.RANK, Integer.MAX_VALUE);
if (r1!=r2) {
return r1 - r2;
}
String c1 = NeoProperties.getCanonicalName(n1);
String c2 = NeoProperties.getCanonicalName(n2);
int canonicalComparison = c1.compareTo(c2);
if (canonicalComparison == 0) {
return NeoProperties.getScientificName(n1).compareTo(NeoProperties.getScientificName(n2));
}
return canonicalComparison;
}
}