package net.bible.android.control.comparetranslations;
import android.util.Log;
import net.bible.android.BibleApplication;
import net.bible.android.activity.R;
import net.bible.android.control.ApplicationScope;
import net.bible.android.control.page.CurrentPageManager;
import net.bible.android.control.page.window.ActiveWindowPageManagerProvider;
import net.bible.android.control.versification.BibleTraverser;
import net.bible.android.control.versification.ConvertibleVerseRange;
import net.bible.service.common.CommonUtils;
import net.bible.service.font.FontControl;
import net.bible.service.sword.SwordContentFacade;
import net.bible.service.sword.SwordDocumentFacade;
import org.apache.commons.lang3.StringUtils;
import org.crosswire.jsword.book.Book;
import org.crosswire.jsword.book.basic.AbstractPassageBook;
import org.crosswire.jsword.passage.Verse;
import org.crosswire.jsword.passage.VerseRange;
import org.crosswire.jsword.versification.BookName;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
/** Support the Compare Translations screen
*
* @author Martin Denham [mjdenham at gmail dot com]
* @see gnu.lgpl.License for license details.<br>
* The copyright to this program is held by it's author.
*/
@ApplicationScope
public class CompareTranslationsControl {
private final BibleTraverser bibleTraverser;
private final SwordDocumentFacade swordDocumentFacade;
private final SwordContentFacade swordContentFacade;
private final ActiveWindowPageManagerProvider activeWindowPageManagerProvider;
private static final String TAG = "CompareTranslationsCtrl";
@Inject
public CompareTranslationsControl(BibleTraverser bibleTraverser, SwordDocumentFacade swordDocumentFacade, SwordContentFacade swordContentFacade, ActiveWindowPageManagerProvider activeWindowPageManagerProvider) {
this.bibleTraverser = bibleTraverser;
this.swordDocumentFacade = swordDocumentFacade;
this.swordContentFacade = swordContentFacade;
this.activeWindowPageManagerProvider = activeWindowPageManagerProvider;
}
public String getTitle(VerseRange verseRange) {
StringBuilder stringBuilder = new StringBuilder();
boolean wasFullBookname = BookName.isFullBookName();
BookName.setFullBookName(false);
stringBuilder.append(BibleApplication.getApplication().getString(R.string.compare_translations))
.append(": ")
.append(CommonUtils.getKeyDescription(verseRange));
BookName.setFullBookName(wasFullBookname);
return stringBuilder.toString();
}
public void setVerse(Verse verse) {
getCurrentPageManager().getCurrentBible().doSetKey(verse);
}
/** Calculate next verse
*/
public VerseRange getNextVerseRange(VerseRange verseRange) {
return bibleTraverser.getNextVerseRange(getCurrentPageManager().getCurrentPassageDocument(), verseRange);
}
/** Calculate next verse
*/
public VerseRange getPreviousVerseRange(VerseRange verseRange) {
return bibleTraverser.getPreviousVerseRange(getCurrentPageManager().getCurrentPassageDocument(), verseRange);
}
/** return the list of verses to be displayed
*/
public List<TranslationDto> getAllTranslations(VerseRange verseRange) {
List<TranslationDto> retval = new ArrayList<>();
List<Book> books = swordDocumentFacade.getBibles();
FontControl fontControl = FontControl.getInstance();
ConvertibleVerseRange convertibleVerseRange = new ConvertibleVerseRange(verseRange);
for (Book book : books) {
try {
String text = swordContentFacade.getPlainText(book, convertibleVerseRange.getVerseRange(((AbstractPassageBook)book).getVersification()), 1);
if (text.length()>0) {
// does this book require a custom font to display it
File fontFile = null;
String fontForBook = fontControl.getFontForBook(book);
if (StringUtils.isNotEmpty(fontForBook)) {
fontFile = fontControl.getFontFile(fontForBook);
}
// create DTO with all required info to display this Translation text
retval.add(new TranslationDto(book, text, fontFile));
}
} catch (Exception nske) {
Log.d(TAG, verseRange+" not in "+book);
}
}
return retval;
}
public void showTranslationForVerseRange(TranslationDto translationDto, VerseRange verseRange) {
getCurrentPageManager().setCurrentDocumentAndKey(translationDto.getBook(), verseRange.getStart());
}
public CurrentPageManager getCurrentPageManager() {
return activeWindowPageManagerProvider.getActiveWindowPageManager();
}
}