package macbury.pod.db.scopes; import com.j256.ormlite.dao.Dao; import com.j256.ormlite.stmt.QueryBuilder; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import macbury.pod.api.APIEpisode; import macbury.pod.db.models.Episode; import macbury.pod.db.models.Program; /** * Created by macbury on 10.09.14. */ public class EpisodesScope extends AbstractScope<Episode> { public EpisodesScope(Dao<Episode, Integer> dao) { super(dao); } public Episode buildFromApi(APIEpisode apiObject) { Episode episode = new Episode(); episode.name = apiObject.name; episode.duration = apiObject.duration; episode.image = apiObject.image; episode.link = apiObject.link; episode.mp3 = apiObject.mp3; episode.pubDate = apiObject.pub_date; episode.id = apiObject.id; episode.description = apiObject.description; return episode; } public Episode find(APIEpisode apiObject) { return find(apiObject.id); } public List<Episode> latest(long limit) { QueryBuilder<Episode, Integer> builder = dao.queryBuilder(); builder.limit(limit); builder.orderBy("pub_date", false); try { return builder.query(); } catch (SQLException e) { e.printStackTrace(); } return null; } public List<Episode> allForProgram(Program program) { QueryBuilder<Episode, Integer> builder = dao.queryBuilder(); try { return builder.orderBy("id", false).where().in("program_id", program.id).query(); } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public void afterCreate(Episode model) { } @Override public void afterDestroy(Episode object) { } @Override public void afterSave(Episode object) { } public ArrayList<Episode> findEpisodesByApiProgramAndReturnNew(Program program, ArrayList<APIEpisode> rawEpisodes) { ArrayList<Integer> nids = new ArrayList<Integer>(); nids.add(-1); for (APIEpisode episode : rawEpisodes) { nids.add(episode.id); } ArrayList<Episode> output = new ArrayList<Episode>(); QueryBuilder<Episode, Integer> builder = dao.queryBuilder(); try { ArrayList<Integer> existingEpisodesIds = new ArrayList<Integer>(); for (Episode episode : builder.where().eq("program_id", program.id).and().in("id", nids).query()) { existingEpisodesIds.add(episode.id); } for (APIEpisode rawEpisode : rawEpisodes) { if (existingEpisodesIds.indexOf(rawEpisode.id) == -1) { output.add(buildFromApi(rawEpisode)); } } } catch (SQLException e) { e.printStackTrace(); } return output; } }