package com.tevinjeffrey.rmp.scraper;
import com.tevinjeffrey.rmp.common.Location;
import com.tevinjeffrey.rmp.common.Parameter;
import com.tevinjeffrey.rmp.common.Professor;
import com.tevinjeffrey.rmp.common.Rating;
import org.apache.commons.lang3.StringUtils;
import java.util.Comparator;
import java.util.Locale;
public class ScrapeProfessor extends Professor {
public int compareTo(Professor o) {
return 0;
}
public static class ProfessorComparator {
final private String mLocation;
final private String mSubject;
final private String mFirstName;
final private LocationComparator locationComparator;
final private NameComparator nameComparator;
final private DepartmentComparator departmentComparator;
public ProfessorComparator(Parameter params) {
this.mLocation = params.location;
this.mSubject = params.department;
this.mFirstName = params.firstName;
locationComparator = new LocationComparator(mLocation);
nameComparator = new NameComparator(mFirstName);
departmentComparator = new DepartmentComparator(mSubject);
}
public LocationComparator getLocationComparator() {
return locationComparator;
}
public NameComparator getNameComparator() {
return nameComparator;
}
public DepartmentComparator getDepartmentComparator() {
return departmentComparator;
}
public static class LocationComparator implements Comparator<ScrapeProfessor> {
final private String mLocation;
public LocationComparator(String location) {
this.mLocation = location;
}
@Override
public int compare(ScrapeProfessor prof1, ScrapeProfessor prof2) {
if (prof1.getLocation().equals(mLocation) && !prof2.getLocation().equals(mLocation)) {
return -1;
} else if (!prof1.getLocation().equals(mLocation) && prof2.getLocation().equals(mLocation)) {
return 1;
} else {
return prof1.getLocation().getCity().compareTo(prof2.getLocation().getCity());
}
}
}
public static class NameComparator implements Comparator<ScrapeProfessor> {
final private String firstName;
public NameComparator(String firstName) {
this.firstName = firstName;
}
@Override
public int compare(ScrapeProfessor prof1, ScrapeProfessor prof2) {
if (firstName.length() == 0) {
return prof1.compareTo(prof2);
} else {
if (prof1.getFirstName() != null && prof1.getFirstName().charAt(0) == firstName.charAt(0) &&
prof2.getFirstName() != null && prof2.getFirstName().charAt(0) != firstName.charAt(0)) {
return -1;
} else if (prof1.getFirstName() != null && prof1.getFirstName().charAt(0) != firstName.charAt(0) &&
prof2.getFirstName() != null && prof2.getFirstName().charAt(0) == firstName.charAt(0)) {
return 1;
} else {
return prof1.compareTo(prof2);
}
}
}
}
public static class DepartmentComparator implements Comparator<ScrapeProfessor> {
final private String mDepartment;
public DepartmentComparator(String department) {
this.mDepartment = department;
}
@Override
public int compare(ScrapeProfessor prof1, ScrapeProfessor prof2) {
if (StringUtils.getFuzzyDistance(prof1.getDepartment(), mDepartment, Locale.ENGLISH) >
StringUtils.getFuzzyDistance(prof2.getDepartment(), mDepartment, Locale.ENGLISH)) {
return -1;
} else if (StringUtils.getFuzzyDistance(prof1.getDepartment(), mDepartment, Locale.ENGLISH) <
StringUtils.getFuzzyDistance(prof2.getDepartment(), mDepartment, Locale.ENGLISH)) {
return 1;
} else {
return 0;
}
}
}
}
}