/** * Copyright 2009 Joe LaPenna */ package com.joelapenna.foursquared.util; import com.joelapenna.foursquare.types.Checkin; import com.joelapenna.foursquare.types.Tip; import com.joelapenna.foursquare.types.User; import com.joelapenna.foursquare.types.Venue; import java.text.ParseException; import java.util.Comparator; /** * @author Joe LaPenna (joe@joelapenna.com) * @author Mark Wyszomierski (markww@gmail.com) * -Updated getVenueDistanceComparator() to do numeric comparison. (2010-03-23) */ public class Comparators { private static Comparator<Venue> sVenueDistanceComparator = null; private static Comparator<User> sUserRecencyComparator = null; private static Comparator<Checkin> sCheckinRecencyComparator = null; private static Comparator<Checkin> sCheckinDistanceComparator = null; private static Comparator<Tip> sTipRecencyComparator = null; public static Comparator<Venue> getVenueDistanceComparator() { if (sVenueDistanceComparator == null) { sVenueDistanceComparator = new Comparator<Venue>() { /* * (non-Javadoc) * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ @Override public int compare(Venue object1, Venue object2) { // TODO: In practice we're pretty much guaranteed to get valid locations // from foursquare, but.. what if we don't, what's a good fail behavior // here? try { int d1 = Integer.parseInt(object1.getDistance()); int d2 = Integer.parseInt(object2.getDistance()); if (d1 < d2) { return -1; } else if (d1 > d2) { return 1; } else { return 0; } } catch (NumberFormatException ex) { return object1.getDistance().compareTo(object2.getDistance()); } } }; } return sVenueDistanceComparator; } public static Comparator<Venue> getVenueNameComparator() { if (sVenueDistanceComparator == null) { sVenueDistanceComparator = new Comparator<Venue>() { /* * (non-Javadoc) * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ @Override public int compare(Venue object1, Venue object2) { return object1.getName().toLowerCase().compareTo( object2.getName().toLowerCase()); } }; } return sVenueDistanceComparator; } public static Comparator<User> getUserRecencyComparator() { if (sUserRecencyComparator == null) { sUserRecencyComparator = new Comparator<User>() { /* * (non-Javadoc) * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ @Override public int compare(User object1, User object2) { try { return StringFormatters.DATE_FORMAT.parse(object2.getCreated()).compareTo( StringFormatters.DATE_FORMAT.parse(object1.getCreated())); } catch (ParseException e) { return 0; } } }; } return sUserRecencyComparator; } public static Comparator<Checkin> getCheckinRecencyComparator() { if (sCheckinRecencyComparator == null) { sCheckinRecencyComparator = new Comparator<Checkin>() { /* * (non-Javadoc) * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ @Override public int compare(Checkin object1, Checkin object2) { try { return StringFormatters.DATE_FORMAT.parse(object2.getCreated()).compareTo( StringFormatters.DATE_FORMAT.parse(object1.getCreated())); } catch (ParseException e) { return 0; } } }; } return sCheckinRecencyComparator; } public static Comparator<Checkin> getCheckinDistanceComparator() { if (sCheckinDistanceComparator == null) { sCheckinDistanceComparator = new Comparator<Checkin>() { /* * (non-Javadoc) * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ @Override public int compare(Checkin object1, Checkin object2) { try { int d1 = Integer.parseInt(object1.getDistance()); int d2 = Integer.parseInt(object2.getDistance()); if (d1 > d2) { return 1; } else if (d2 > d1) { return -1; } else { return 0; } } catch (NumberFormatException ex) { return 0; } } }; } return sCheckinDistanceComparator; } public static Comparator<Tip> getTipRecencyComparator() { if (sTipRecencyComparator == null) { sTipRecencyComparator = new Comparator<Tip>() { /* * (non-Javadoc) * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ @Override public int compare(Tip object1, Tip object2) { try { return StringFormatters.DATE_FORMAT.parse(object2.getCreated()).compareTo( StringFormatters.DATE_FORMAT.parse(object1.getCreated())); } catch (ParseException e) { return 0; } } }; } return sTipRecencyComparator; } }