package de.vanmar.android.yarrn.requests;
import android.app.Application;
import android.util.Log;
import com.google.gson.Gson;
import org.scribe.model.OAuthRequest;
import org.scribe.model.Verb;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Collection;
import de.vanmar.android.yarrn.R;
import de.vanmar.android.yarrn.YarrnPrefs_;
import de.vanmar.android.yarrn.components.SearchCriteria;
import de.vanmar.android.yarrn.ravelry.dts.PatternsResult;
/**
* Created by Kolja on 15.03.14.
*/
public class SearchPatternsRequest extends AbstractRavelryGetRequest<PatternsResult> {
private Collection<SearchCriteria> searchCriteriaList;
private int page;
private int pageSize;
public SearchPatternsRequest(Application application, YarrnPrefs_ prefs, Collection<SearchCriteria> searchCriteriaList, int page, int pageSize) {
super(PatternsResult.class, application, prefs);
this.searchCriteriaList = searchCriteriaList;
this.page = page;
this.pageSize = pageSize;
}
protected PatternsResult parseResult(String responseBody) {
return new Gson().fromJson(responseBody, PatternsResult.class);
}
@Override
public PatternsResult loadDataFromNetwork() throws Exception {
if (searchCriteriaList.isEmpty()) {
return PatternsResult.emptyResult();
}
return super.loadDataFromNetwork();
}
protected OAuthRequest getRequest() {
return new OAuthRequest(Verb.GET,
application.getString(R.string.ravelry_url) + String.format("/patterns/search.json?%spage=%s&page_size=%s",
getSearchCriteriaString(), page, pageSize)
);
}
private String getSearchCriteriaString() {
StringBuilder sb = new StringBuilder();
for (SearchCriteria searchCriteria : searchCriteriaList) {
try {
sb.append(searchCriteria.getName()).append("=").append(URLEncoder.encode(searchCriteria.getValue(), "utf-8")).append("&");
} catch (UnsupportedEncodingException e) {
Log.e("SeachPatternsRequest", e.getMessage(), e);
}
}
return sb.toString();
}
}