package apps.makarov.com.whereismycurrency.net.requests; import com.squareup.okhttp.Request; import org.json.JSONException; import java.util.List; import java.util.Map; import rx.Observable; import rx.Subscriber; /** * Created by makarov on 28/06/15. */ public abstract class WimcRequest<T> { enum TYPE { GET, POST } public abstract String getPath(); public Observable<List<T>> observableStringToObjectsList(final String jsonObject) { return Observable.create(new Observable.OnSubscribe<List<T>>() { @Override public void call(Subscriber<? super List<T>> subscriber) { try { List<T> list = parseStringToList(jsonObject); subscriber.onNext(list); subscriber.onCompleted(); } catch (Throwable e) { subscriber.onError(e); } } }); } public Request getRequest() { Request.Builder builder = new Request.Builder(); TYPE typeRequest = getType(); switch (typeRequest) { case GET: builder = builder.url(getPath() + getStringUrlParams(getParams())); break; case POST: builder = builder.url(getPath()); break; } return builder.build(); } protected abstract List<T> parseStringToList(String jsonObj) throws JSONException; protected abstract TYPE getType(); protected Map<String, String> getParams() { return null; } public static String getStringUrlParams(Map<String, String> params) { StringBuilder paramsStr = new StringBuilder(""); if (params == null || params.size() == 0) { return paramsStr.toString(); } paramsStr.append("?"); for (Map.Entry<String, String> entry : params.entrySet()) { paramsStr.append(entry.getKey() + "=" + entry.getValue()); paramsStr.append("&"); } return paramsStr.substring(0, paramsStr.length() - 1); } }