package com.idega.block.school.business; import java.text.Collator; import java.util.Comparator; import com.idega.block.school.data.SchoolType; import com.idega.block.school.data.SchoolYear; /** * A class to compare a collection of <code>SchoolYear</code> objects. * @author Laddi */ public class SchoolYearComparator implements Comparator { /** * @see java.util.Comparator#compare(Object, Object) */ public int compare(Object o1, Object o2) { int returner = 0; SchoolYear schoolYear1 = (SchoolYear) o1; SchoolYear schoolYear2 = (SchoolYear) o2; if (schoolYear1.getSchoolTypeId() != schoolYear2.getSchoolTypeId()) { SchoolType type1 = null; try { type1 = schoolYear1.getSchoolType(); } catch (Exception e) { type1 = null; } SchoolType type2 = null; try { type2 = schoolYear2.getSchoolType(); } catch (Exception e) { type2 = null; } returner = compareTypes(type1, type2); } if (returner == 0) { returner = compareAge(schoolYear1.getSchoolYearAge(), schoolYear2.getSchoolYearAge()); } if (returner == 0) { returner = Collator.getInstance().compare(schoolYear1.getSchoolYearName(), schoolYear2.getSchoolYearName()); } return returner; } public int compareOrder(int order1, int order2) { if (order1 < order2) { return -1; } else if (order1 > order2) { return 1; } else { return 0; } } public int compareTypes(SchoolType schoolType1, SchoolType schoolType2) { int returner = 0; if (schoolType1 == null || schoolType2 == null) { if (schoolType1 == null && schoolType2 != null) { returner = 1; } else if (schoolType1 != null && schoolType2 == null) { returner = -1; } else { returner = 0; } } else { returner = compareOrder(schoolType1.getOrder(), schoolType2.getOrder()); if (returner == 0) { int typeID1 = ((Integer) schoolType1.getPrimaryKey()).intValue(); int typeID2 = ((Integer) schoolType2.getPrimaryKey()).intValue(); if (typeID1 < typeID2) { returner = -1; } else if (typeID1 > typeID2) { returner = 1; } else { returner = 0; } } } return returner; } public int compareAge(int age1, int age2) { if (age1 < age2) { return -1; } else if (age1 > age2) { return 1; } else { return 0; } } }