package nl.siegmann.epublib.bookprocessor;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.io.Charsets;
import nl.siegmann.epublib.Constants;
import nl.siegmann.epublib.domain.Book;
import nl.siegmann.epublib.domain.Resource;
import nl.siegmann.epublib.epub.BookProcessor;
import nl.siegmann.epublib.service.MediatypeService;
/**
* Helper class for BookProcessors that only manipulate html type resources.
*
* @author paul
*
*/
public abstract class HtmlBookProcessor implements BookProcessor {
private final static Logger log = Logger.getLogger(HtmlBookProcessor.class.getName());
public static final String OUTPUT_ENCODING = Charsets.UTF_8.name();
public HtmlBookProcessor() {
}
@Override
public Book processBook(Book book) {
for(Resource resource: book.getResources().getAll()) {
try {
cleanupResource(resource, book);
} catch (IOException e) {
log.log(Level.WARNING, e.getMessage(), e);
}
}
return book;
}
private void cleanupResource(Resource resource, Book book) throws IOException {
if(resource.getMediaType() == MediatypeService.XHTML) {
byte[] cleanedHtml = processHtml(resource, book, Constants.ENCODING);
resource.setData(cleanedHtml);
resource.setInputEncoding(Constants.ENCODING);
}
}
protected abstract byte[] processHtml(Resource resource, Book book, String encoding) throws IOException;
}