/** * 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.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; import model.DaoDBHelper; import model.UWDatabaseModel; import model.daoModels.StoriesChapter; import model.daoModels.StoryPage; import model.daoModels.StoryPageDao; import model.parsers.MediaType; import services.UWUpdaterService; import tasks.ModelCreator; /** * Created by PJ Fechner on 6/17/15. * Runnable for updating OBS Pages */ public class UpdateStoryPagesRunnable implements Runnable{ private static final String TAG = "UpdateStoryPgsRunnable"; private JSONArray jsonModels; private UWUpdaterService updater; private StoriesChapter parent; public UpdateStoryPagesRunnable(JSONArray jsonModels, UWUpdaterService updater, StoriesChapter parent) { this.jsonModels = jsonModels; this.updater = updater; this.parent = parent; } @Override public void run() { parseModels(jsonModels); } private void parseModels(JSONArray models){ List<StoryPage> pages = new ArrayList<>(); for(int i = 0; i < models.length(); i++){ try { pages.add(updateModel(models.getJSONObject(i))); } catch (JSONException e){ e.printStackTrace(); } } updatePages(pages); parent.getBook().getVersion().update(); updater.runnableFinished(parent.getBook().getVersion(), MediaType.MEDIA_TYPE_TEXT); } private StoryPage updateModel(final JSONObject jsonObject){ UWDatabaseModel model = new ModelCreator(new StoryPage(), parent, null).run(jsonObject); if(model instanceof StoryPage) { return (StoryPage) model; } else{ return null; } } private void updatePages(List<StoryPage> pages){ StoryPageDao dao = DaoDBHelper.getDaoSession(updater.getApplicationContext()).getStoryPageDao(); dao.queryBuilder() .where(StoryPageDao.Properties.StoryChapterId.eq(parent.getId())) .buildDelete().executeDeleteWithoutDetachingEntities(); dao.insertOrReplaceInTx(pages); } }