package edu.mit.mitmobile2.people;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import org.json.JSONArray;
import edu.mit.mitmobile2.FixedCache;
import edu.mit.mitmobile2.MobileWebApi;
import edu.mit.mitmobile2.objs.PersonItem;
import edu.mit.mitmobile2.objs.SearchResults;
import android.content.Context;
import android.os.Handler;
public class PeopleModel {
private static int MAX_RESULTS = 100;
private static HashMap<String, SearchResults<PersonItem>> searchCache = new FixedCache<SearchResults<PersonItem>>(10);
public static void executeSearch(final String searchTerm, Context context, final Handler uiHandler) {
if(searchCache.containsKey(searchTerm)) {
MobileWebApi.sendSuccessMessage(uiHandler, searchCache.get(searchTerm));
return;
}
HashMap<String, String> searchParameters = new HashMap<String, String>();
searchParameters.put("module", "people");
searchParameters.put("q", searchTerm);
MobileWebApi webApi = new MobileWebApi(false, true, "People", context, uiHandler);
webApi.setIsSearchQuery(true);
webApi.setLoadingDialogType(MobileWebApi.LoadingDialogType.Search);
webApi.requestJSONArray(searchParameters, new MobileWebApi.JSONArrayResponseListener(
new MobileWebApi.DefaultErrorListener(uiHandler), new MobileWebApi.DefaultCancelRequestListener(uiHandler) ) {
@Override
public void onResponse(JSONArray array) {
List<PersonItem> people = PeopleParser.parseJSONArray(array);
SearchResults<PersonItem> searchResults = new SearchResults<PersonItem>(searchTerm, people);
if(searchResults.getResultsList().size() >= MAX_RESULTS) {
searchResults.markAsPartialWithUnknownTotal();
}
searchCache.put(searchTerm, searchResults);
MobileWebApi.sendSuccessMessage(uiHandler, searchResults);
}
});
}
public static List<PersonItem>executeLocalSearch(String searchTerms) {
SearchResults<PersonItem> searchResults = searchCache.get(searchTerms);
if (searchResults != null) {
return searchResults.getResultsList();
}
return null;
}
public static int getPosition(List<PersonItem> people, String uid) {
for(int index = 0; index < people.size(); index++) {
if(people.get(index).uid.equals(uid)) {
return index;
}
}
return -1;
}
public static void markAsRecentlyViewed(PersonItem person, Context context) {
person.lastViewed = new Date();
PeopleDB.getInstance(context).addPerson(person);
}
public static List<PersonItem> getRecentlyViewed(Context context) {
List<PersonItem> people = PeopleDB.getInstance(context).getAllAsList();
return people;
}
}