package fi.bitrite.android.ws.host.impl; import com.google.android.gms.maps.model.LatLng; import fi.bitrite.android.ws.api.RestClient; import fi.bitrite.android.ws.host.Search; import fi.bitrite.android.ws.model.HostBriefInfo; import fi.bitrite.android.ws.util.GlobalInfo; import fi.bitrite.android.ws.util.http.HttpException; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class RestMapSearch extends RestClient implements Search { private static final String WARMSHOWERS_MAP_SEARCH_URL = GlobalInfo.warmshowersBaseUrl + "/services/rest/hosts/by_location"; private int numHostsCutoff = 800; private final MapSearchArea searchArea; public RestMapSearch(LatLng northEast, LatLng southWest) { this.searchArea = MapSearchArea.fromLatLngs(northEast, southWest); } public List<HostBriefInfo> doSearch() throws JSONException, HttpException, IOException { JSONObject json = getHostsJson(); return new MapSearchJsonParser(json).getHosts(); } private JSONObject getHostsJson() throws JSONException, HttpException, IOException { return post(WARMSHOWERS_MAP_SEARCH_URL, getSearchParameters()); } private List<NameValuePair> getSearchParameters() { List<NameValuePair> args = new ArrayList<NameValuePair>(); args.add(new BasicNameValuePair("minlat", String.valueOf(searchArea.minLat))); args.add(new BasicNameValuePair("maxlat", String.valueOf(searchArea.maxLat))); args.add(new BasicNameValuePair("minlon", String.valueOf(searchArea.minLon))); args.add(new BasicNameValuePair("maxlon", String.valueOf(searchArea.maxLon))); args.add(new BasicNameValuePair("centerlat", String.valueOf(searchArea.centerLat))); args.add(new BasicNameValuePair("centerlon", String.valueOf(searchArea.centerLon))); args.add(new BasicNameValuePair("limit", String.valueOf(this.numHostsCutoff))); return args; } }