
com.github.jobs.loader.JobListLoader Maven / Gradle / Ivy
package com.github.jobs.loader;
import android.content.Context;
import android.util.Log;
import com.codeslap.groundy.ListLoader;
import com.codeslap.persistence.Persistence;
import com.codeslap.persistence.SqlAdapter;
import com.github.bean.Job;
import com.github.jobs.adapter.JobsAdapter;
import com.github.jobs.bean.SearchPack;
import com.github.jobs.bean.SearchesAndJobs;
import org.joda.time.DateTime;
import java.util.*;
/**
* @author cristian
*/
public class JobListLoader extends ListLoader {
private final SearchPack mCurrentSearch;
public JobListLoader(Context context, SearchPack currentSearch) {
super(context);
mCurrentSearch = currentSearch;
}
@Override
protected List getData() {
SqlAdapter sqlAdapter = Persistence.getAdapter(getContext());
if (mCurrentSearch.isDefault()) {
return sort(sqlAdapter.findAll(Job.class));
}
SearchesAndJobs sample = new SearchesAndJobs();
sample.setSearchHashCode(mCurrentSearch.hashCode());
List searchesAndJobs = sqlAdapter.findAll(sample);
if (searchesAndJobs.size() == 0) {
return new ArrayList();
}
// create IN statement with all the jobs that should be retrieved
StringBuilder in = new StringBuilder();
String glue = "";
for (SearchesAndJobs searchesAndJob : searchesAndJobs) {
in.append(glue).append('\'').append(searchesAndJob.getJobId()).append('\'');
glue = ", ";
}
String inStatement = in.toString();
return sort(sqlAdapter.findAll(Job.class, "_id IN (" + inStatement + ")", null));
}
private List sort(List jobs) {
if (jobs == null) {
return null;
}
try {
Collections.sort(jobs, JOB_COMPARATOR);
} catch (Exception e) {
Log.wtf("jobs:listLoader", "General contract should not be wrong :-/", e);
}
return jobs;
}
private static final Comparator JOB_COMPARATOR = new Comparator() {
@Override
public int compare(Job jobA, Job jobB) {
if (jobA == null) {
return -1;
}
if (jobB == null) {
return 1;
}
DateTime dateA;
try {
dateA = JobsAdapter.DATE_PARSER.withZoneUTC().parseDateTime(jobA.getCreatedAt());
} catch (Exception e) {
return 1;
}
DateTime dateB;
try {
dateB = JobsAdapter.DATE_PARSER.withZoneUTC().parseDateTime(jobB.getCreatedAt());
} catch (Exception e) {
return -1;
}
return dateB.compareTo(dateA);
}
};
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy