package net.flibusta.converter.impl; import net.flibusta.converter.ConversionException; import net.flibusta.converter.ConversionService; import net.flibusta.converter.Converter; import net.flibusta.persistence.dao.BookDao; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.apache.log4j.Logger; import java.io.File; import java.io.IOException; public class ToEpubConversionService implements ConversionService{ private Logger logger = Logger.getLogger(ToEpubConversionService.class); private BookDao bookDao; private Converter fb2epub; private Converter rtfepub; private Converter docxepub; public void setBookDao(BookDao bookDao) { this.bookDao = bookDao; } public void setFb2epub(Converter fb2epub) { this.fb2epub = fb2epub; } public void setRtfepub(Converter rtfepub) { this.rtfepub = rtfepub; } public void setDocxepub(Converter docxepub) { this.docxepub = docxepub; } @Override public File convert(String bookId) throws ConversionException { File epub; File sourceFile = bookDao.findBook(bookId, "fb2"); if (sourceFile != null) { epub = fb2epub.convert(sourceFile); } else { sourceFile = bookDao.findBook(bookId, "rtf"); if (sourceFile != null) { epub = rtfepub.convert(sourceFile); } else { sourceFile = bookDao.findBook(bookId, "docx"); if (sourceFile != null) { epub = docxepub.convert(sourceFile); } else { throw new ConversionException("Compatible source format not found for book " + bookId); } } } if (epub == null || !epub.exists()) { throw new ConversionException("Conversion to epub failed for bookId = " + bookId); } File epubStorageFile = new File(epub.getParentFile(), FilenameUtils.getBaseName(sourceFile.getName()) + ".epub"); if (!epubStorageFile.exists()) { try { FileUtils.moveFile(epub, epubStorageFile); } catch (IOException e) { throw new ConversionException("Can't move file " + epub.getName() + " to " + epubStorageFile.getName(), e); } } else { logger.warn("ToEubConvertService: file already exists: bookId=" + bookId + " file=" + epubStorageFile); } return bookDao.addBook(bookId, "epub", epubStorageFile); } }