package nl.siegmann.epublib.epub;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import nl.siegmann.epublib.domain.Book;
/**
* A book processor that combines several other bookprocessors
*
* Fixes coverpage/coverimage.
* Cleans up the XHTML.
*
* @author paul.siegmann
*
*/
public class BookProcessorPipeline implements BookProcessor {
private Logger log = Logger.getLogger(BookProcessorPipeline.class.getName());
private List<BookProcessor> bookProcessors;
public BookProcessorPipeline() {
this(null);
}
public BookProcessorPipeline(List<BookProcessor> bookProcessingPipeline) {
this.bookProcessors = bookProcessingPipeline;
}
@Override
public Book processBook(Book book) {
if (bookProcessors == null) {
return book;
}
for(BookProcessor bookProcessor: bookProcessors) {
try {
book = bookProcessor.processBook(book);
} catch(Exception e) {
log.log(Level.WARNING, e.getMessage(), e);
}
}
return book;
}
public void addBookProcessor(BookProcessor bookProcessor) {
if (this.bookProcessors == null) {
bookProcessors = new ArrayList<>();
}
this.bookProcessors.add(bookProcessor);
}
public void addBookProcessors(Collection<BookProcessor> bookProcessors) {
if (this.bookProcessors == null) {
this.bookProcessors = new ArrayList<>();
}
this.bookProcessors.addAll(bookProcessors);
}
public List<BookProcessor> getBookProcessors() {
return bookProcessors;
}
public void setBookProcessingPipeline(List<BookProcessor> bookProcessingPipeline) {
this.bookProcessors = bookProcessingPipeline;
}
}