package org.sakaiproject.tool.assessment.data.dao.grading; import java.util.Comparator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.user.api.UserNotDefinedException; import org.sakaiproject.user.cover.UserDirectoryService; /** * For sorting AssessmentGradingData by score and display id * * @author Gopal Ramasammy-Cook * @version 1.0 */ public class AssessmentGradingComparatorByScoreAndUniqueIdentifier implements Comparator { private static Log log = LogFactory.getLog(AssessmentGradingComparatorByScoreAndUniqueIdentifier.class); private boolean anonymous; public AssessmentGradingComparatorByScoreAndUniqueIdentifier(boolean anonymous) { this.anonymous = anonymous; } public int compare(Object arg0, Object arg1) { // TODO Auto-generated method stub if (arg0 == null || arg1 == null) { throw new RuntimeException("AssessmentGradingData objects expected for comparrison by AssessmentGradingDataScoreAndDisplayIdComparator - null received. "); } if (!(arg0 instanceof AssessmentGradingData) || !(arg1 instanceof AssessmentGradingData)) { throw new RuntimeException("AssessmentGradingData objects expected for comparrison by AssessmentGradingDataScoreAndDisplayIdComparator. "); } AssessmentGradingData assessmentGrading0 = (AssessmentGradingData) arg0; AssessmentGradingData assessmentGrading1 = (AssessmentGradingData) arg1; Double zero = Double.valueOf(0); Double score0 = assessmentGrading0.getFinalScore() == null ? zero : assessmentGrading0.getFinalScore(); Double score1 = assessmentGrading1.getFinalScore() == null ? zero : assessmentGrading1.getFinalScore(); //String id0=null, id1=null; if (!(score0.equals(score1))) return score0.compareTo(score1); else { if (anonymous) { return assessmentGrading0.getAssessmentGradingId() .compareTo(assessmentGrading1.getAssessmentGradingId()); } else { String agentEid0=null, agentEid1=null; try { agentEid0 = UserDirectoryService.getUser(assessmentGrading0.getAgentId()).getEid(); agentEid1 = UserDirectoryService.getUser(assessmentGrading1.getAgentId()).getEid(); return agentEid0.compareTo(agentEid1); } catch (Exception e) { if (agentEid0==null && agentEid1==null) { log.warn("agentEid0==null && agentEid1==null"); return 0; } else if (agentEid0==null) { log.warn("agentEid0 == null"); return -1; } else if (agentEid1==null) { log.warn("agentEid1 == null"); return 1; } else { return agentEid0.compareTo(agentEid1); } } } } } }