package com.openfeint.internal.request; import java.io.IOException; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonParser; import com.openfeint.api.R; import com.openfeint.internal.JsonResourceParser; import com.openfeint.internal.OpenFeintInternal; import com.openfeint.internal.resource.ServerException; public abstract class DownloadRequest extends BaseRequest { public DownloadRequest() { super(); } public DownloadRequest(OrderedArgList args) { super(args); } @Override public String method() { return "GET"; } public void onFailure(String exceptionMessage) { OpenFeintInternal.log("ServerException", exceptionMessage); } @Override public void onResponse(int responseCode, byte[] body) { String exceptionMessage = OpenFeintInternal.getRString(R.string.of_unknown_server_error); if (200 <= responseCode && responseCode < 300 && body != null) { onSuccess(body); return; } else if (404 == responseCode) { exceptionMessage = OpenFeintInternal.getRString(R.string.of_file_not_found); } else try { // try to parse response body JsonFactory jsonFactory = new JsonFactory(); // for thread safety, we make our own. JsonParser jp = jsonFactory.createJsonParser(body); JsonResourceParser jrp = new JsonResourceParser(jp); Object responseBody = jrp.parse(); if (responseBody != null && responseBody instanceof ServerException) { ServerException e = (ServerException)responseBody; exceptionMessage = e.exceptionClass + ": " + e.message; } } catch (IOException e) { exceptionMessage = OpenFeintInternal.getRString(R.string.of_error_parsing_error_message); } onFailure(exceptionMessage); } protected abstract void onSuccess(byte[] body); }