package is.idega.idegaweb.golf.tournament.business;
import java.util.Comparator;
import com.idega.util.IsCollator;
/**
* Title:
* Description:
* Copyright: Copyright (c) 2001
* Company:
* @author
* @version 1.0
*/
public class ResultComparator implements Comparator {
public static final int TOTALSTROKES = 1;
public static final int TOTALSTROKESWITHHANDICAP = 2;
public static final int TOTALPOINTS = 3;
public static final int TOTALPOINTSWITHOUTHANDICAP = 8;
public static final int NAME = 4;
public static final int ABBREVATION = 5;
public static final int TOURNAMENTROUND = 6;
public static final int TOTAL_STROKES_V_2 = 7;
private int sortBy;
private int roundNumber_ = 0;
public ResultComparator() {
sortBy = TOTALSTROKES;
}
public ResultComparator(int toSortBy) {
sortBy = toSortBy;
}
public void sortBy(int toSortBy) {
sortBy = toSortBy;
}
public void sortByRound(int roundNumber) {
roundNumber_ = roundNumber;
}
public int compare(Object o1, Object o2) {
ResultsCollector r1 = (ResultsCollector)o1;
ResultsCollector r2 = (ResultsCollector)o2;
int result = 0;
try {
r1.calculateCompareInfo();
r2.calculateCompareInfo();
}
catch(Exception e) {
System.err.println("Something wrong here... "+r1.getMemberId()+"/"+r2.getMemberId());
}
switch (sortBy) {
case TOTALSTROKES :
result = totalStrokesCompare(r1,r2);
if (result == 0)
result = nameCompare(r1,r2);
break;
case TOTALSTROKESWITHHANDICAP :
result = totalStrokesHandicapCompare(r1,r2);
if (result == 0)
result = nameCompare(r1,r2);
break;
case TOTALPOINTSWITHOUTHANDICAP :
case TOTALPOINTS :
result = totalPointsCompare(r1,r2);
if (result == 0)
result = nameCompare(r1,r2);
break;
case NAME :
result = nameCompare(r1,r2);
break;
case ABBREVATION :
result = abbrevationCompare(r1,r2);
if (result == 0)
result = nameCompare(r1,r2);
break;
case TOURNAMENTROUND :
result = roundCompare(r1,r2);
if (result == 0)
result = nameCompare(r1,r2);
break;
case TOTAL_STROKES_V_2 :
result = totalStrokesCompareV2(r1,r2);
if (result == 0)
result = nameCompare(r1,r2);
break;
}
return(result);
}
public boolean equals(Object obj) {
if (compare(this,obj) == 0)
return(true);
else
return(false);
}
public int nameCompare(Object o1, Object o2) {
ResultsCollector r1 = (ResultsCollector) o1;
ResultsCollector r2 = (ResultsCollector) o2;
int result = 0;
String one = r1.getFirstName()!=null?r1.getFirstName():"";
String two = r2.getFirstName()!=null?r2.getFirstName():"";
result = IsCollator.getIsCollator().compare(one,two);
if (result == 0){
one = r1.getLastName()!=null?r1.getLastName():"";
two = r2.getLastName()!=null?r2.getLastName():"";
result = IsCollator.getIsCollator().compare(one,two);
}
if (result == 0){
one = r1.getMiddleName()!=null?r1.getMiddleName():"";
two = r2.getMiddleName()!=null?r2.getMiddleName():"";
result = IsCollator.getIsCollator().compare(one,two);
}
return result;
}
public int abbrevationCompare(Object o1, Object o2) {
ResultsCollector r1 = (ResultsCollector) o1;
ResultsCollector r2 = (ResultsCollector) o2;
int result = 0;
String one = r1.getAbbrevation()!=null?r1.getAbbrevation():"";
String two = r2.getAbbrevation()!=null?r2.getAbbrevation():"";
result = IsCollator.getIsCollator().compare(one,two);
return result;
}
public int totalStrokesCompare(Object o1, Object o2) {
ResultsCollector r1 = (ResultsCollector) o1;
ResultsCollector r2 = (ResultsCollector) o2;
int result = 0;
if ( r1.getDismissal() == 0 && r2.getDismissal() == 0 ) {
if ( r1.getDifference() == r2.getDifference() ) {
if ( r1.getTournamentPosition() == r2.getTournamentPosition() ) {
if ( r1.getDate() != null && r2.getDate() != null ) {
if ( r1.getDate().isLaterThan(r2.getDate()) ) {
result = 1;
}
else if ( r2.getDate().isLaterThan(r1.getDate()) ) {
result = -1;
}
}
if ( result == 0 ) {
if (r1.getLastNine() == r2.getLastNine()) {
if (r1.getLastSix() == r2.getLastSix()) {
if (r1.getLastThree() == r2.getLastThree()) {
if (r1.getLast() == r2.getLast())
result = 0;
else {
if (r1.getLast() < r2.getLast())
result = -1;
else
result = 1;
}
}
else {
if (r1.getLastThree() < r2.getLastThree())
result = -1;
else
result = 1;
}
}
else {
if (r1.getLastSix() < r2.getLastSix())
result = -1;
else
result = 1;
}
}
else {
if (r1.getLastNine() < r2.getLastNine())
result = -1;
else
result = 1;
}
}
}
else {
if ( r1.getTournamentPosition() != -1 && r1.getTournamentPosition() != -1 ) {
if ( r1.getTournamentPosition() < r2.getTournamentPosition() ) {
result = -1;
}
else {
result = 1;
}
}
else {
if ( r1.getTournamentPosition() == -1 && r2.getTournamentPosition() != -1 ) {
result = 1;
}
else if ( r1.getTournamentPosition() != -1 && r2.getTournamentPosition() == -1 ) {
result = -1;
}
else if ( r1.getTournamentPosition() == -1 && r2.getTournamentPosition() == -1 ) {
result = 0;
}
}
}
}
else {
if ( r1.getDifference() < r2.getDifference() )
result = -1;
else
result = 1;
}
if ( r1.getTotalScore() == 0 && r2.getTotalScore() > 0 )
result = 1;
if ( r1.getTotalScore() > 0 && r2.getTotalScore() == 0 )
result = -1;
if ( r1.getTotalScore() == 0 && r2.getTotalScore() == 0 )
result = 0;
}
else {
if ( r1.getDismissal() == 0 && r2.getDismissal() > 0 ) {
result = -1;
}
else if ( r1.getDismissal() > 0 && r2.getDismissal() == 0 ) {
result = 1;
}
else {
result = totalStrokesCompareV2(r1,r2);
}
}
return result;
}
public int totalStrokesCompareV2(Object o1, Object o2) {
ResultsCollector r1 = (ResultsCollector) o1;
ResultsCollector r2 = (ResultsCollector) o2;
int result = 0;
if ( r1.getDifference() == r2.getDifference() ) {
if ( r1.getTournamentPosition() == r2.getTournamentPosition() ) {
if ( r1.getDate() != null && r2.getDate() != null ) {
if ( r1.getDate().isLaterThan(r2.getDate()) ) {
result = 1;
}
else if ( r2.getDate().isLaterThan(r1.getDate()) ) {
result = -1;
}
else {
result = 0;
}
}
}
else {
if ( r1.getTournamentPosition() != -1 && r1.getTournamentPosition() != -1 ) {
if ( r1.getTournamentPosition() < r2.getTournamentPosition() ) {
result = -1;
}
else {
result = 1;
}
}
else {
if ( r1.getTournamentPosition() == -1 && r2.getTournamentPosition() != -1 ) {
result = 1;
}
else if ( r1.getTournamentPosition() != -1 && r2.getTournamentPosition() == -1 ) {
result = -1;
}
else if ( r1.getTournamentPosition() == -1 && r2.getTournamentPosition() == -1 ) {
result = 0;
}
}
}
}
else {
if ( r1.getDifference() < r2.getDifference() )
result = -1;
else
result = 1;
}
if ( r1.getTotalScore() == 0 && r2.getTotalScore() > 0 )
result = 1;
if ( r1.getTotalScore() > 0 && r2.getTotalScore() == 0 )
result = -1;
if ( r1.getTotalScore() == 0 && r2.getTotalScore() == 0 )
result = 0;
if ( r1.getDismissal() == 15 && r2.getDismissal() != 15 ) {
result = -1;
}
if ( r1.getDismissal() != 15 && r2.getDismissal() == 15 ) {
result = 1;
}
return result;
}
public int totalStrokesHandicapCompare(Object o1, Object o2) {
ResultsCollector r1 = (ResultsCollector) o1;
ResultsCollector r2 = (ResultsCollector) o2;
int result = 0;
if ( r1.getDismissal() == 0 && r2.getDismissal() == 0 ) {
if (r1.getTotalStrokesWithHandicap() == r2.getTotalStrokesWithHandicap()) {
if (r1.getLastNine() == r2.getLastNine()) {
if (r1.getLastSix() == r2.getLastSix()) {
if (r1.getLastThree() == r2.getLastThree()) {
if (r1.getLast() == r2.getLast())
result = 0;
else {
if (r1.getLast() < r2.getLast())
result = -1;
else
result = 1;
}
}
else {
if (r1.getLastThree() < r2.getLastThree())
result = -1;
else
result = 1;
}
}
else {
if (r1.getLastSix() < r2.getLastSix())
result = -1;
else
result = 1;
}
}
else {
if (r1.getLastNine() < r2.getLastNine())
result = -1;
else
result = 1;
}
}
else {
if (r1.getTotalStrokesWithHandicap() < r2.getTotalStrokesWithHandicap())
result = -1;
else
result = 1;
}
if ( r1.getTotalScore() == 0 && r2.getTotalScore() > 0 )
result = 1;
if ( r1.getTotalScore() > 0 && r2.getTotalScore() == 0 )
result = -1;
if ( r1.getTotalScore() == 0 && r2.getTotalScore() == 0 )
result = 0;
}
else {
if ( r1.getDismissal() == 0 && r2.getDismissal() > 0 ) {
result = -1;
}
else if ( r1.getDismissal() > 0 && r2.getDismissal() == 0 ) {
result = 1;
}
else {
return 0;
}
}
return result;
}
public int totalPointsCompare(Object o1, Object o2) {
ResultsCollector r1 = (ResultsCollector) o1;
ResultsCollector r2 = (ResultsCollector) o2;
int result = 0;
if ( r1.getDismissal() == 0 && r2.getDismissal() == 0 ) {
if (r1.getTotalPoints() == r2.getTotalPoints()) {
if (r1.getLastNine() == r2.getLastNine()) {
if (r1.getLastSix() == r2.getLastSix()) {
if (r1.getLastThree() == r2.getLastThree()) {
if (r1.getLast() == r2.getLast())
result = 0;
else {
if (r1.getLast() < r2.getLast())
result = 1;
else
result = -1;
}
}
else {
if (r1.getLastThree() < r2.getLastThree())
result = 1;
else
result = -1;
}
}
else {
if (r1.getLastSix() < r2.getLastSix())
result = 1;
else
result = -1;
}
}
else {
if (r1.getLastNine() < r2.getLastNine())
result = 1;
else
result = -1;
}
}
else {
if (r1.getTotalPoints() < r2.getTotalPoints())
result = 1;
else
result = -1;
}
}
else {
if ( r1.getDismissal() == 0 && r2.getDismissal() > 0 ) {
result = -1;
}
else if ( r1.getDismissal() > 0 && r2.getDismissal() == 0 ) {
result = 1;
}
else {
return 0;
}
}
return result;
}
public int roundCompare(Object o1, Object o2) {
ResultsCollector r1 = (ResultsCollector) o1;
ResultsCollector r2 = (ResultsCollector) o2;
int result = 0;
int tournamentType = r1.getGameType();
if ( r1.getRoundScore(roundNumber_) == r2.getRoundScore(roundNumber_) ) {
result = 0;
}
else {
if ( r1.getRoundScore(roundNumber_) < r2.getRoundScore(roundNumber_) ) {
if ( tournamentType == TOTALPOINTS )
result = 1;
else
result = -1;
}
else {
if ( tournamentType == TOTALPOINTS )
result = -1;
else
result = 1;
}
}
return result;
}
}