All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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