//
// Copyright (c) 2014 VK.com
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
// the Software, and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
package com.vk.sdk.api.httpClient;
import com.vk.sdk.api.VKError;
import org.apache.http.client.methods.HttpUriRequest;
import org.json.JSONObject;
/**
* Operation for loading HTTP-requests that may return json response
*/
public class VKJsonOperation extends VKHttpOperation {
private JSONObject mResponseJson;
/**
* Create new operation with request
* @param uriRequest Request prepared manually or with VKHttpClient
*/
public VKJsonOperation(HttpUriRequest uriRequest) {
super(uriRequest);
}
/**
* Generate JSON-response for current operation
* @return Parsed JSON object from response string
*/
public JSONObject getResponseJson() {
if (mResponseJson == null) {
String response = getResponseString();
if (response == null)
return null;
try {
mResponseJson = new JSONObject(response);
} catch (Exception e) {
mLastException = e;
}
}
return mResponseJson;
}
@Override
protected boolean postExecution() {
if (!super.postExecution())
return false;
mResponseJson = getResponseJson();
return true;
}
/**
* Not available for JSONOperation
* @deprecated This method is deprecated for this class
* @param listener Listener subclasses VKHTTPOperationCompleteListener
*/
@Override
public void setHttpOperationListener(VKHTTPOperationCompleteListener listener) {
throw new UnsupportedOperationException("This operation is now available for this class");
}
/**
* Sets that json operation listener
* @param listener Listener object for that operation
*/
public void setJsonOperationListener(final VKJSONOperationCompleteListener listener) {
if (listener == null) {
super.setCompleteListener(null);
return;
}
this.setCompleteListener(new VKOperationCompleteListener() {
@Override
public void onComplete() {
if (VKJsonOperation.this.state() != VKOperationState.Finished || mLastException != null) {
listener.onError(VKJsonOperation.this, generateError(mLastException));
} else {
listener.onComplete(VKJsonOperation.this, mResponseJson);
}
}
});
}
/**
* Class representing operation listener for VKJsonOperation
*/
public static abstract class VKJSONOperationCompleteListener extends VKAbstractCompleteListener<VKJsonOperation, JSONObject> {
public void onComplete(VKJsonOperation operation, JSONObject response) {
}
public void onError(VKJsonOperation operation, VKError error) {
}
}
}