/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.json;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.json.client.JSONValue;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author <a href="mailto:vparfonov@codenvy.com">Vitaly Parfonov</a>
*/
public class JsonHelper {
public static String toJson(Map<String, String> map) {
String json = "";
if (map != null && !map.isEmpty()) {
JSONObject jsonObj = new JSONObject();
for (Map.Entry<String, String> entry: map.entrySet()) {
jsonObj.put(entry.getKey(), new JSONString(entry.getValue()));
}
json = jsonObj.toString();
}
return json;
}
public static Map<String, String> toMap(String jsonStr) {
Map<String, String> map = new HashMap<String, String>();
JSONValue parsed = JSONParser.parseStrict(jsonStr);
JSONObject jsonObj = parsed.isObject();
if (jsonObj != null) {
for (String key : jsonObj.keySet()) {
JSONValue jsonValue = jsonObj.get(key);
JSONString jsonString = jsonValue.isString();
// if the json value is a string, set the unescaped value, else set the json representation of the value
String stringValue = (jsonString == null) ? jsonValue.toString() : jsonString.stringValue();
map.put(key, stringValue);
}
}
return map;
}
public static Map<String, List<String>> toMapOfLists(String jsonStr) {
Map<String, List<String>> map = new HashMap<>();
JSONValue parsed = JSONParser.parseStrict(jsonStr);
JSONObject jsonObj = parsed.isObject();
if (jsonObj != null) {
for (String key : jsonObj.keySet()) {
JSONValue jsonValue = jsonObj.get(key);
JSONArray jsonArray = jsonValue.isArray();
List<String> values = new ArrayList<>();
for (int i = 0; i < jsonArray.size(); i++) {
values.add(jsonArray.get(i).isString().stringValue());
}
map.put(key, values);
}
}
return map;
}
//TODO: find a way to avoid those util methods here.
/** Returns message or result of it parse if the message is json. */
public static String parseJsonMessage(String parsedMessage) {
try {
//parsed message
JSONValue message = JSONParser.parseStrict(parsedMessage).isObject().get("message");
return message.isString().stringValue();
} catch (Exception e) {
//not found json in message
return parsedMessage;
}
}
/** Returns message or result of it parse if the message is json. */
public static Map<String, String> parseErrorAttributes(String parsedMessage) {
try {
//parsed message
JSONValue message = JSONParser.parseStrict(parsedMessage).isObject().get("attributes");
return toMap(message.isObject().toString());
} catch (Exception e) {
//not found json in message
return Collections.emptyMap();
}
}
/** Returns message or result of it parse if the message is json. */
public static int parseErrorCode(String parsedMessage) {
try {
//parsed message
JSONValue message = JSONParser.parseStrict(parsedMessage).isObject().get("errorCode");
return new Double(message.isNumber().doubleValue()).intValue();
} catch (Exception e) {
//not found json in message
return -1;
}
}
}