blob: 7e12ffb12365c4db02ee817ad2c5893324f8a05b [file] [log] [blame]
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.googlecode.android_scripting.jsonrpc;
import com.googlecode.android_scripting.Sl4aErrors;
import com.googlecode.android_scripting.Sl4aException;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Represents a JSON RPC result.
*
* @see http://json-rpc.org/wiki/specification
*/
public class JsonRpcResult {
private JsonRpcResult() {
// Utility class.
}
/**
* Returns a JSON-RPC 1.0 formatted request response.
*
* @param id the id given by the request
* @param data the data to pass into the result field
* @return a JSON-RPC 1.0 formatted request response
* @throws JSONException if JsonBuilder.build() cannot correctly convert the object into JSON
*/
public static JSONObject result(Object id, Object data) throws JSONException {
JSONObject response = new JSONObject();
response.put("id", id);
response.put("result", JsonBuilder.build(data));
response.put("error", JSONObject.NULL);
return response;
}
/**
* Returns a JSON-RPC 2.0 formatted error response.
*
* @param id the id given by the request
* @param message the error message to send
* @return a JSON-RPC 2.0 formatted request response
* @throws JSONException if the world is ending
*/
public static JSONObject error(Object id, Object message) throws JSONException {
JSONObject response = new JSONObject();
if (id == null) {
id = JSONObject.NULL;
}
response.put("id", id);
response.put("result", JSONObject.NULL);
response.put("error", message.toString());
return response;
}
/**
* Returns a JSON-RPC 2.0 formatted error response.
*
* @param id the id given by the request
* @param sl4aException the Sl4aException to send over JSON-RPC
* @return a JSON-RPC 2.0 formatted error response
* @throws JSONException if the world is ending
*/
public static JSONObject error(Object id, Sl4aException sl4aException) throws JSONException {
JSONObject response = new JSONObject();
if (id == null) {
id = JSONObject.NULL;
}
response.put("id", id);
response.put("result", JSONObject.NULL);
JSONObject error = new JSONObject();
error.put("code", sl4aException.getErrorCode());
error.put("message", sl4aException.getErrorMessage());
response.put("error", error);
return response;
}
/**
* Returns a JSON-RPC 2.0 formatted error response.
*
* @param id the id given by the request
* @param sl4aError the Sl4aErrors object to send over JSON-RPC
* @param details additional data associated with the error
* @return a JSON-RPC 1.0 formatted error response
* @throws JSONException if details cannot be converted to JSON
*/
public static JSONObject error(Object id, Sl4aErrors sl4aError, Object details)
throws JSONException {
return error(id, sl4aError.getError(), details);
}
/**
* Returns a JSON-RPC 2.0 formatted error response.
*
* @param id the id given by the request
* @param sl4aException the Sl4aException to send over JSON-RPC
* @param details additional data associated with the error
* @return a JSON-RPC 2.0 formatted error response
* @throws JSONException if the world is ending
*/
public static JSONObject error(Object id, Sl4aException sl4aException, Object details)
throws JSONException {
JSONObject returnValue = error(id, sl4aException);
returnValue.getJSONObject("error").put("data", details);
return returnValue;
}
/**
* A function that returns a valid JSON-RPC error as a string when all else has failed.
*
* @return a String representation of {@see Sl4aErrors.JSON_RPC_UNKNOWN_EXCEPTION} in JSON
*/
public static String wtf() {
Sl4aException exception = Sl4aErrors.JSON_RPC_UNKNOWN_EXCEPTION.getError();
return "{\"id\":null,"
+ "\"error\":{"
+ "\"code\":" + exception.getErrorCode() + ","
+ "\"message\":\"" + exception.getErrorMessage() + "\"}}";
}
}