package com.koushikdutta.async.http;
import com.koushikdutta.async.DataEmitter;
import com.koushikdutta.async.DataSink;
import com.koushikdutta.async.Util;
import com.koushikdutta.async.callback.CompletedCallback;
import com.koushikdutta.async.future.FutureCallback;
import com.koushikdutta.async.parser.JSONObjectParser;
import org.json.JSONObject;
public class JSONObjectBody implements AsyncHttpRequestBody<JSONObject> {
public JSONObjectBody() {
}
byte[] mBodyBytes;
JSONObject json;
public JSONObjectBody(JSONObject json) {
this();
this.json = json;
}
@Override
public void parse(DataEmitter emitter, final CompletedCallback completed) {
new JSONObjectParser().parse(emitter).setCallback(new FutureCallback<JSONObject>() {
@Override
public void onCompleted(Exception e, JSONObject result) {
json = result;
completed.onCompleted(e);
}
});
}
@Override
public void write(AsyncHttpRequest request, DataSink sink, final CompletedCallback completed) {
Util.writeAll(sink, mBodyBytes, completed);
}
@Override
public String getContentType() {
return CONTENT_TYPE;
}
@Override
public boolean readFullyOnRequest() {
return true;
}
@Override
public int length() {
mBodyBytes = json.toString().getBytes();
return mBodyBytes.length;
}
public static final String CONTENT_TYPE = "application/json";
@Override
public JSONObject get() {
return json;
}
}