blob: d5ef0d5e821e0d18e6bb1476c523ed1aeea6562f [file] [log] [blame] [raw]
package protocolsupport.utils;
import org.apache.commons.lang3.StringUtils;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSyntaxException;
public class JsonUtils {
public static void setIfNotNull(JsonObject jsonElement, String name, Boolean value) {
if (value != null) {
jsonElement.addProperty(name, value);
}
}
public static boolean hasObject(JsonObject jsonObject, String name) {
return (jsonObject != null) && (jsonObject.get(name) != null);
}
public static boolean isJsonArray(JsonObject jsonObject, String name) {
return hasObject(jsonObject, name) && jsonObject.get(name).isJsonArray();
}
public static JsonArray getAsJsonArray(JsonElement jsonElement, String name) {
if (jsonElement.isJsonArray()) {
return jsonElement.getAsJsonArray();
}
throw new JsonSyntaxException("Expected " + name + " to be a JsonArray, was " + toString(jsonElement));
}
public static JsonArray getJsonArray(JsonObject jsonObject, String name) {
if (jsonObject.has(name)) {
return getAsJsonArray(jsonObject.get(name), name);
}
throw new JsonSyntaxException("Missing " + name + ", expected to find a JsonArray");
}
public static String getAsString(JsonElement jsonElement, String name) {
if (jsonElement.isJsonPrimitive()) {
return jsonElement.getAsString();
}
throw new JsonSyntaxException("Expected " + name + " to be a string, was " + toString(jsonElement));
}
public static String getString(JsonObject jsonObject, String name) {
if (jsonObject.has(name)) {
return getAsString(jsonObject.get(name), name);
}
throw new JsonSyntaxException("Missing " + name + ", expected to find a string");
}
public static int getAsInt(JsonElement jsonElement, String s) {
if (jsonElement.isJsonPrimitive() && jsonElement.getAsJsonPrimitive().isNumber()) {
return jsonElement.getAsInt();
}
throw new JsonSyntaxException("Expected " + s + " to be a Int, was " + toString(jsonElement));
}
public static int getInt(JsonObject jsonObject, String s) {
if (jsonObject.has(s)) {
return getAsInt(jsonObject.get(s), s);
}
throw new JsonSyntaxException("Missing " + s + ", expected to find a Int");
}
public static JsonObject getObject(JsonElement jsonElement, String name) {
if (jsonElement.isJsonObject()) {
return jsonElement.getAsJsonObject();
}
throw new JsonSyntaxException("Expected " + name + " to be a JsonObject, was " + toString(jsonElement));
}
private static String toString(JsonElement jsonElement) {
String abbreviateMiddle = StringUtils.abbreviateMiddle(String.valueOf(jsonElement), "...", 10);
if (jsonElement == null) {
return "null (missing)";
}
if (jsonElement.isJsonNull()) {
return "null (json)";
}
if (jsonElement.isJsonArray()) {
return "an array (" + abbreviateMiddle + ")";
}
if (jsonElement.isJsonObject()) {
return "an object (" + abbreviateMiddle + ")";
}
if (jsonElement.isJsonPrimitive()) {
JsonPrimitive asJsonPrimitive = jsonElement.getAsJsonPrimitive();
if (asJsonPrimitive.isNumber()) {
return "a number (" + abbreviateMiddle + ")";
}
if (asJsonPrimitive.isBoolean()) {
return "a boolean (" + abbreviateMiddle + ")";
}
}
return abbreviateMiddle;
}
}