blob: ee62b0fc6ac5622ecd92bb48ec7058337094ee68 [file] [log] [blame]
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// This program and the accompanying materials are made available
// under the terms of the Eclipse Public License v2.0 which accompanies
// this distribution, and is available at
// https://www.eclipse.org/legal/epl-2.0/
package org.eclipse.wst.jsdt.chromium.tests.internal;
import java.util.Arrays;
import org.eclipse.wst.jsdt.chromium.internal.JsonUtil;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.ParseException;
/**
* Helper class for creating JSON object in functional style. Introduces
* "pseudo-json" notation, which is normal JSON with single quotes instead of
* double quotes -- such notation is easier to be used from Java.
*/
public class JsonBuilderUtil {
public static JsonPropertyTemp jsonProperty(String name, String value) {
return new JsonPropertyTemp(name, value);
}
public static JsonPropertyTemp jsonProperty(String name, Number value) {
return new JsonPropertyTemp(name, value);
}
public static JsonPropertyTemp jsonProperty(String name, Boolean value) {
return new JsonPropertyTemp(name, value);
}
public static JsonPropertyTemp jsonProperty(String name, JSONObject value) {
return new JsonPropertyTemp(name, value);
}
public static JsonPropertyTemp jsonProperty(String name, JSONArray value) {
return new JsonPropertyTemp(name, value);
}
public static JSONObject jsonObject(JsonPropertyTemp ... properties) {
JSONObject object = new JSONObject();
for (JsonPropertyTemp pr1 : properties) {
object.put(pr1.getName(), pr1.getValue());
}
return object;
}
/**
* Constructs json object from pseudo-json text
*/
public static JSONObject jsonObject(String pseudoJsonText) {
String jsonText = "{" + convertToRealJson(pseudoJsonText) + "}";
try {
return JsonUtil.jsonObjectFromJson(jsonText);
} catch (ParseException e) {
throw new RuntimeException("Failed to parse json", e);
}
}
public static JSONArray jsonArray(JSONObject ... objects) {
JSONArray array = new JSONArray();
array.addAll(Arrays.asList(objects));
return array;
}
/**
* Converts pseudo-json notation to normal json notation.
* @param pseudoJson json notation with single quotes in place of double quotes
* @return regular json notation
*/
public static String convertToRealJson(String pseudoJson) {
return pseudoJson.replace('\'', '"');
}
/**
* Temporary class that represents JavaScript property. User is not supposed
* to use it in any way, but simply to pass it back to {@link JsonBuilderUtil}.
*/
public static class JsonPropertyTemp {
JsonPropertyTemp(String name, Object value) {
this.name = name;
this.value = value;
}
String getName() {
return name;
}
Object getValue() {
return value;
}
private final String name;
private final Object value;
}
}