package pl.edu.icm.saos.webapp.court;
import java.text.Collator;
import java.util.Comparator;
import com.google.common.primitives.Ints;
import pl.edu.icm.saos.webapp.common.WebappConst;
/**
* @author Łukasz Pawełczak
*
*/
public abstract class DivisionComparator<T> implements Comparator<T> {
//------------------------ LOGIC --------------------------
/**
* Compare divisions by Roman numbers contained in division name.
* If two division names does not contain Roman number, compare it alphabetically.
*/
public int compare(T divisionOne, T divisionTwo) {
String divisionNameOne = getName(divisionOne);
String divisionNameTwo = getName(divisionTwo);
int romanNumberOne = getNumber(divisionNameOne);
int romanNumberTwo = getNumber(divisionNameTwo);
// If both names do not contain Roman numbers, compare them using simple alphabetic comparison.
if (romanNumberOne == 0 && romanNumberTwo == 0) {
return Collator.getInstance(WebappConst.LOCALE_PL).compare(divisionNameOne, divisionNameTwo);
} else {
return Ints.compare(romanNumberOne, romanNumberTwo);
}
}
protected abstract String getName(T division);
protected abstract int getNumber(String name);
}