/**
* Copyright (c) 2015 unfoldingWord
* http://creativecommons.org/licenses/MIT/
* See LICENSE file for details.
* Contributors:
* PJ Fechner <pj@actsmedia.com>
*/
package runnables;
import org.json.JSONException;
import java.nio.charset.CharacterCodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import model.DaoDBHelper;
import model.daoModels.BibleChapter;
import model.daoModels.BibleChapterDao;
import model.daoModels.Book;
import model.parsers.BibleChapterParser;
import model.parsers.MediaType;
import model.parsers.USFMParser;
import services.UWUpdaterService;
/**
* Created by PJ Fechner on 6/17/15.
* Runnable which updates a BibleChapter
*/
public class UpdateBibleChaptersRunnable implements Runnable{
private static final String TAG = "UpdateBblChaptsRunnable";
private byte[] usfm;
private UWUpdaterService updater;
private Book parent;
public UpdateBibleChaptersRunnable(byte[] usfm, UWUpdaterService updater, Book parent) {
this.usfm = usfm;
this.updater = updater;
this.parent = parent;
}
@Override
public void run() {
parse(usfm);
}
private void parse(byte[] textBytes){
try {
Map<String, String> parsedUsfm = new USFMParser().getChaptersFromUsfm(textBytes);
String optionalSingleChapterBookName = USFMParser.getSingleChapterBookName(USFMParser.getStringFromBytes(textBytes));
createModels(parsedUsfm, optionalSingleChapterBookName);
}
catch (CharacterCodingException e){
e.printStackTrace();
}
}
private void createModels(Map<String, String> models, String singleChapterBookName){
List<BibleChapter> chapters = new ArrayList<BibleChapter>();
int i = 0;
for(Map.Entry<String, String> entry : models.entrySet()){
try {
chapters.add(BibleChapterParser.parseBibleChapter(parent, entry.getKey(), entry.getValue(), singleChapterBookName));
}
catch (JSONException e){
e.printStackTrace();
}
i++;
}
updateModels(chapters);
parent.getVersion().update();
updater.runnableFinished(parent.getVersion(), MediaType.MEDIA_TYPE_TEXT);
}
private List<BibleChapter> updateModels(List<BibleChapter> chapters){
BibleChapterDao dao = DaoDBHelper.getDaoSession(updater.getApplicationContext()).getBibleChapterDao();
dao.queryBuilder()
.where(BibleChapterDao.Properties.BookId.eq(parent.getId()))
.buildDelete().executeDeleteWithoutDetachingEntities();
dao.insertOrReplaceInTx(chapters);
return chapters;
}
}