package com.csound.wizard.layout;
import java.util.AbstractMap;
import java.util.Map.Entry;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
public class Json {
// JSON utils
//
// string java.lang.String
// number java.lang.Number
// true|false java.lang.Boolean
// null null
// array java.util.List
// object java.util.Map
public static Boolean isString(Object obj) {
return (obj instanceof String);
}
public static Boolean isNumber(Object obj) {
return (obj instanceof Long) || (obj instanceof Double);
}
public static Boolean isBoolean(Object obj) {
return (obj instanceof Boolean);
}
public static Boolean isArray(Object obj) {
return (obj instanceof JSONArray);
}
public static Boolean isObject(Object obj) {
return (obj instanceof JSONObject);
}
public static Boolean isNull(Object obj) {
return obj == null;
}
public static int getInt(Object obj) {
return ((Number) obj).intValue();
}
public static float getFloat(Object obj) {
return ((Number) obj).floatValue();
}
public static Boolean getBoolean(Object obj) {
return (Boolean) obj;
}
public static Float getFloat(String key, Object obj) {
if (Json.isObject(obj)) {
JSONObject x = (JSONObject) obj;
if (x.containsKey(key)) {
Object maybeVal = x.get(key);
if (Json.isNumber(maybeVal)) {
return getFloat(maybeVal);
}
}
}
return null;
}
public static String getString(String key, Object obj) {
if (Json.isObject(obj)) {
JSONObject x = (JSONObject) obj;
if (x.containsKey(key)) {
Object maybeVal = x.get(key);
if (Json.isString(maybeVal)) {
return (String) maybeVal;
}
}
}
return null;
}
public static JSONObject getObject(String key, Object obj) {
if (Json.isObject(obj)) {
JSONObject x = (JSONObject) obj;
if (x.containsKey(key)) {
Object maybeVal = x.get(key);
if (Json.isObject(maybeVal)) {
return (JSONObject) maybeVal;
}
}
}
return null;
}
public static JSONArray getArray(String key, Object obj) {
if (Json.isObject(obj)) {
JSONObject x = (JSONObject) obj;
if (x.containsKey(key)) {
Object maybeVal = x.get(key);
if (Json.isArray(maybeVal)) {
return (JSONArray) maybeVal;
}
}
}
return null;
}
public static Object getJson(String key, Object obj) {
if (Json.isObject(obj)) {
JSONObject x = (JSONObject) obj;
if (x.containsKey(key)) {
return x.get(key);
}
}
return null;
}
public static Integer getInteger(String key, Object obj) {
if (Json.isObject(obj)) {
JSONObject x = (JSONObject) obj;
if (x.containsKey(key)) {
Object maybeVal = x.get(key);
if (Json.isNumber(maybeVal)) {
return getInt(maybeVal);
}
}
}
return null;
}
public static Boolean getBoolean(String key, Object obj) {
if (Json.isObject(obj)) {
JSONObject x = (JSONObject) obj;
if (x.containsKey(key)) {
Object maybeVal = x.get(key);
if (Json.isBoolean(maybeVal)) {
return getBoolean(maybeVal);
}
}
}
return null;
}
public static Entry<Float,Float> getFloatPair(String key, Object obj) {
JSONArray arr = getArray(key, obj);
if (arr != null) {
if (arr.size() == 2 && isNumber(arr.get(0)) && isNumber(arr.get(1))) {
return new AbstractMap.SimpleEntry<Float,Float>(getFloat(arr.get(0)), getFloat(arr.get(1)));
}
}
return null;
}
public static Entry<Integer,Float> getIntegerFloatPair(String key, Object obj) {
JSONArray arr = getArray(key, obj);
if (arr != null) {
if (arr.size() == 2 && isNumber(arr.get(0)) && isNumber(arr.get(1))) {
return new AbstractMap.SimpleEntry<Integer,Float>(getInt(arr.get(0)), getFloat(arr.get(1)));
}
}
return null;
}
public static Entry<Integer,Integer> getIntegerPair(String key, Object obj) {
JSONArray arr = getArray(key, obj);
if (arr != null) {
if (arr.size() == 2 && isNumber(arr.get(0)) && isNumber(arr.get(1))) {
return new AbstractMap.SimpleEntry<Integer,Integer>(getInt(arr.get(0)), getInt(arr.get(1)));
}
}
return null;
}
public static Object getFromArray(int i, Object obj) {
try {
return ((JSONArray) obj).get(i);
} catch (Exception e) {
return null;
}
}
}