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; }