package de.guerda.matekarte.common.request; import android.util.Log; import com.google.api.client.http.GenericUrl; import com.google.api.client.http.HttpContent; import com.google.api.client.http.HttpRequest; import com.google.api.client.http.UrlEncodedContent; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import de.guerda.matekarte.dealers.Dealer; import de.guerda.matekarte.dealers.DealerDetailsDeserializer; import de.guerda.matekarte.dealers.DrinkStatus; import de.guerda.matekarte.dealers.DrinkStatusEnum; /** * Created by philip on 03/02/15. */ public class DrinkStatusUpdateRequest extends MatekarteRequest<DrinkStatus> { private static final String LOGTAG = DrinkStatusUpdateRequest.class.getName(); private static final String URL_STATUS_UPDATE = "api/v2/statuses"; private String dealerId; private String drinkId; private DrinkStatusEnum drinkStatus; public DrinkStatusUpdateRequest(String aDealerId, DrinkStatusEnum aDrinkStatus) { super(DrinkStatus.class); dealerId = aDealerId; drinkStatus = aDrinkStatus; } /** * <pre> * status[drink_id]=50fb3d16ce007c40fc00080d&status[dealer_id]=52cd8b5e7a58b40eae004e40&status[status]=1 * </pre> */ @Override public DrinkStatus loadDataFromNetwork() throws Exception { Map<String, String> tempParameters = new HashMap<>(); tempParameters.put("status[drink_id]", drinkId); tempParameters.put("status[dealer_id]",dealerId); tempParameters.put("status[status]",drinkStatus.getStatusId()); HttpContent tempContent = new UrlEncodedContent(tempParameters); HttpRequest request = getHttpRequestFactory().buildPostRequest(new GenericUrl(URL_BASE + URL_STATUS_UPDATE), tempContent); GsonBuilder tmpBuilder = new GsonBuilder(); tmpBuilder.registerTypeAdapter(Dealer.class, new DealerDetailsDeserializer()); Gson tempGson = tmpBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create(); DrinkStatus tmpDealer; try (InputStream in = request.execute().getContent()) { tmpDealer = tempGson.fromJson(new InputStreamReader(in), DrinkStatus.class); if (tmpDealer == null) { Log.e(LOGTAG, "No dealer details downloaded"); } else { Log.i(LOGTAG, "Downloaded dealer details: " + tmpDealer); } } return tmpDealer; } }