/** * Iterate all books checking if document contains a verse from the book */ private Set<BibleBook> calculateBibleBookList() { final BookMetaData bookMetaData = this.getBookMetaData(); final VerseKey scope = (VerseKey) getScope(); if (scope == null) { return new HashSet<BibleBook>(); } final Set<BibleBook> bookList = new LinkedHashSet<BibleBook>(); // iterate over all book possible in this document final Versification v11n = Versifications.instance().getVersification(bookMetaData.getProperty(BookMetaData.KEY_VERSIFICATION)); final Iterator<BibleBook> v11nBookIterator = v11n.getBookIterator(); while (v11nBookIterator.hasNext()) { BibleBook bibleBook = v11nBookIterator.next(); // test some random verses - normally ch1 v 1 is sufficient - but we don't want to miss any if (scope.contains(new Verse(v11n, bibleBook, 1, 1)) || scope.contains(new Verse(v11n, bibleBook, 1, 2))) { bookList.add(bibleBook); } } return bookList; }