package org.intermine.app.net.request;
/*
* Copyright (C) 2015 InterMine
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. See the LICENSE file for more
* information or http://www.gnu.org/copyleft/lesser.html.
*
*/
import android.content.Context;
import android.util.Log;
import com.google.gson.Gson;
import org.apache.commons.lang3.ArrayUtils;
import org.intermine.app.util.Strs;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import java.util.Map;
public class JsonGetRequest<T> extends GetRequest<T> {
public static final String TAG = JsonGetRequest.class.getSimpleName();
public final static String CONTENT_TYPE = "application";
public final static String CONTENT_SUBTYPE = "json";
public final static String DEFAULT_ROOT = "params";
private String mOutWrapper;
public JsonGetRequest(Class<T> clazz, Context ctx, String url, Map<String, ?> params) {
super(clazz, ctx, url, params);
}
public Gson getMapper() {
return new Gson();
}
@Override
public HttpHeaders getHeaders() {
HttpHeaders headers = super.getHeaders();
headers.setContentType(new MediaType(CONTENT_TYPE, CONTENT_SUBTYPE));
return headers;
}
@Override
public T loadDataFromNetwork() throws Exception {
Map<String, ?> params = getUrlParams();
String uri = getUrl();
Gson mapper = getMapper();
Log.i(TAG, "GET: " + expandQuery(uri, params));
Log.i(TAG, "H: " + getHeaders());
byte[] bytes = loadBytes(uri, params);
T result = null;
if (!ArrayUtils.isEmpty(bytes)) {
String res = new String(bytes);
Log.i(TAG, "RES: " + res);
if (!Strs.isNullOrEmpty(mOutWrapper)) {
Map<String, Object> rooted = mapper.fromJson(res, Map.class);
String inner = mapper.toJson(rooted.get(mOutWrapper));
result = mapper.fromJson(inner, getResultType());
} else {
result = mapper.fromJson(res, getResultType());
}
}
Log.i(TAG, "RES: " + result);
return result;
}
public String getOutWrapper() {
return mOutWrapper;
}
public void setOutWrapper(String wrapper) {
mOutWrapper = wrapper;
}
}