package org.intermine.app.net.request.post; /* * 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 com.google.gson.Gson; import org.intermine.app.R; import org.intermine.app.core.ListItems; import org.intermine.app.net.NoRetryPolicy; import org.intermine.app.net.request.PostAuthRequest; import org.intermine.app.util.Strs; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import java.util.List; import java.util.Map; /** * @author Daria Komkova <Daria_Komkova @ hotmail.com> */ public class FetchListResultsRequest extends PostAuthRequest<ListItems> { public static final String FORMAT_PARAM = "format"; public static final String JSON = "json"; public static final String QUERY_PARAM = "query"; public static final String START_PARAM = "start"; public static final String SIZE_PARAM = "size"; private int mStart; private int mSize; private String mListName; private String mQuery; public FetchListResultsRequest(Context ctx, String mineName, String listType, String listName, int start, int size) { super(ListItems.class, ctx, null, null, null, mineName); mListName = listName; String template = ctx.getString(R.string.list_query); Map<String, List<String>> typeFieldsMap = getStorage().getTypeFields(mineName); List<String> typeFields = typeFieldsMap.get(listType); String columns = Strs.EMPTY_STRING; if (null != typeFields){ columns = Strs.join(typeFields, " "); } mQuery = String.format(template, columns, listType, mListName); mStart = start; mSize = size; setRetryPolicy(new NoRetryPolicy()); } @Override public String getUrl() { return getBaseUrl(mMineName) + getContext().getString(R.string.search_path); } @Override public MultiValueMap<String, String> getPost() { MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); params.add(FORMAT_PARAM, JSON); params.add(QUERY_PARAM, mQuery); if (mSize > 0) { params.add(START_PARAM, Integer.toString(mStart)); params.add(SIZE_PARAM, Integer.toString(mSize)); } return params; } @Override public ListItems loadDataFromNetwork() throws Exception { String json = post(); Gson mapper = getMapper(); return mapper.fromJson(json, ListItems.class); } protected Gson getMapper() { return new Gson(); } }