package mil.nga.giat.mage.map; import android.content.Context; import android.os.AsyncTask; import com.j256.ormlite.dao.Dao; import com.j256.ormlite.stmt.QueryBuilder; import com.j256.ormlite.stmt.Where; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import mil.nga.giat.mage.filter.Filter; import mil.nga.giat.mage.map.marker.PointCollection; import mil.nga.giat.mage.sdk.Temporal; import mil.nga.giat.mage.sdk.datastore.DaoStore; import mil.nga.giat.mage.sdk.datastore.location.Location; import mil.nga.giat.mage.sdk.datastore.user.User; import mil.nga.giat.mage.sdk.datastore.user.UserHelper; import mil.nga.giat.mage.sdk.exceptions.UserException; public class HistoricLocationLoadTask extends AsyncTask<Void, Location, Void> { private Context context; private Filter<Temporal> filter; private final PointCollection<Location> historicLocationCollection; public HistoricLocationLoadTask(Context context, PointCollection<Location> historicLocationCollection) { this.context = context.getApplicationContext(); this.historicLocationCollection = historicLocationCollection; } public void setFilter(Filter<Temporal> filter) { this.filter = filter; } @Override protected Void doInBackground(Void... params) { try { List<Location> locations = getQuery().query(); publishProgress(locations.toArray(new Location[locations.size()])); } catch (SQLException e) { e.printStackTrace(); } return null; } @Override protected void onProgressUpdate(Location... locations) { synchronized (historicLocationCollection) { historicLocationCollection.addAll(new ArrayList<Location>(Arrays.asList(locations))); } } private QueryBuilder<Location, Long> getQuery() throws SQLException { Dao<Location, Long> dao = DaoStore.getInstance(context).getLocationDao(); QueryBuilder<Location, Long> query = dao.queryBuilder(); User currentUser = null; try { currentUser = UserHelper.getInstance(context.getApplicationContext()).readCurrentUser(); } catch (UserException e) { e.printStackTrace(); } Where<? extends Temporal, Long> where = query.where(); if (currentUser != null) { where.eq("user_id", currentUser.getId()).and().eq("event_id", currentUser.getUserLocal().getCurrentEvent().getId()); } if (filter != null) { filter.and(where); } query.orderBy("timestamp", false); return query; } }