filebot/source/net/sourceforge/filebot/web/EpisodeUtilities.java

89 lines
1.9 KiB
Java

package net.sourceforge.filebot.web;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public final class EpisodeUtilities {
public static List<Episode> filterBySeason(Iterable<Episode> episodes, int season) {
List<Episode> results = new ArrayList<Episode>(25);
// filter given season from all seasons
for (Episode episode : episodes) {
if (episode.getSeason() != null && season == episode.getSeason()) {
results.add(episode);
}
}
return results;
}
public static int getLastSeason(Iterable<Episode> episodes) {
int lastSeason = 0;
// filter given season from all seasons
for (Episode episode : episodes) {
if (episode.getSeason() != null && episode.getSeason() > lastSeason) {
lastSeason = episode.getSeason();
}
}
return lastSeason;
}
public static void sortEpisodes(List<Episode> episodes) {
Collections.sort(episodes, episodeComparator());
}
public static Comparator<Episode> episodeComparator() {
return new Comparator<Episode>() {
@Override
public int compare(Episode a, Episode b) {
int diff = compareValue(a.getSeriesName(), b.getSeriesName());
if (diff != 0)
return diff;
diff = compareValue(a.getSeason(), b.getSeason());
if (diff != 0)
return diff;
diff = compareValue(a.getEpisode(), b.getEpisode());
if (diff != 0)
return diff;
diff = compareValue(a.getSpecial(), b.getSpecial());
if (diff != 0)
return diff;
return compareValue(a.getTitle(), b.getTitle());
}
private <T> int compareValue(Comparable<T> o1, T o2) {
if (o1 == null && o2 == null)
return 0;
if (o1 == null && o2 != null)
return Integer.MAX_VALUE;
if (o1 != null && o2 == null)
return Integer.MIN_VALUE;
return o1.compareTo(o2);
}
};
}
private EpisodeUtilities() {
throw new UnsupportedOperationException();
}
}