package nl.siegmann.epublib.bookprocessor;
import java.util.ArrayList;
import java.util.List;
import nl.siegmann.epublib.domain.Book;
import nl.siegmann.epublib.domain.Resource;
import nl.siegmann.epublib.domain.Spine;
import nl.siegmann.epublib.domain.SpineReference;
import nl.siegmann.epublib.epub.BookProcessor;
import org.apache.commons.lang.StringUtils;
/**
* Removes Sections from the page flow that differ only from the previous section's href by the '#' in the url.
*
* @author paul
*
*/
public class SectionHrefSanityCheckBookProcessor implements BookProcessor {
@Override
public Book processBook(Book book) {
book.getSpine().setSpineReferences(checkSpineReferences(book.getSpine()));
return book;
}
private static List<SpineReference> checkSpineReferences(Spine spine) {
List<SpineReference> result = new ArrayList<>(spine.size());
Resource previousResource = null;
for(SpineReference spineReference: spine.getSpineReferences()) {
if(spineReference.getResource() == null
|| StringUtils.isBlank(spineReference.getResource().getHref())) {
continue;
}
if(previousResource == null
|| spineReference.getResource() == null
|| ( ! (spineReference.getResource().getHref().equals(previousResource.getHref())))) {
result.add(spineReference);
}
previousResource = spineReference.getResource();
}
return result;
}
}