package com.gmail.dpierron.calibre.datamodel.filter;
import com.gmail.dpierron.calibre.datamodel.Book;
import com.gmail.dpierron.calibre.datamodel.EBookFile;
import com.gmail.dpierron.calibre.datamodel.EBookFormat;
import com.gmail.dpierron.tools.Helper;
import java.util.*;
public class SelectedEbookFormatsFilter implements BookFilter {
private List<EBookFormat> includedFormats;
private final boolean includeBooksWithNoFile;
public SelectedEbookFormatsFilter(String includedFormatsList, boolean includeBooksWithNoFile) {
includedFormats = new LinkedList<EBookFormat>();
if (Helper.isNullOrEmpty(includedFormatsList) || "ALL".equalsIgnoreCase(includedFormatsList))
includedFormats = EBookFormat.getSupportedFormats();
else {
List<String> list = Helper.tokenize(includedFormatsList, ",", true);
int priority = list.size();
for (String string : list) {
EBookFormat format = EBookFormat.fromFormat(string.trim());
if (format != null) {
format.setPriority(priority--);
includedFormats.add(format);
}
}
}
this.includeBooksWithNoFile = includeBooksWithNoFile;
}
private List<EBookFormat> getIncludedFormats() {
return includedFormats;
}
public boolean didBookPassThroughFilter(Book book) {
if (book == null)
return false;
List<EBookFile> files = new LinkedList<EBookFile>(book.getFiles());
for (EBookFile eBookFile : files) {
if (!getIncludedFormats().contains(eBookFile.getFormat()))
book.removeFile(eBookFile);
}
if (book.getFiles().size() == 0)
return includeBooksWithNoFile;
else {
Collections.sort(book.getFiles(), new Comparator<EBookFile>() {
public int compare(EBookFile o1, EBookFile o2) {
if (o1 == null && o2 == null)
return 0;
if (o1 == null)
return 1;
if (o2 == null)
return -1;
return new Integer(o2.getFormat().getPriority()).compareTo(o1.getFormat().getPriority());
}
});
return true;
}
}
}