package io.lumify.web.clientapi.model.util; import com.fasterxml.jackson.core.JsonProcessingException; import io.lumify.web.clientapi.model.VisibilityJson; import org.json.JSONArray; import org.json.JSONObject; import java.io.IOException; import java.util.*; public class ClientApiConverter { public static Object toClientApiValue(Object value) { if (value instanceof JSONArray) { JSONArray json = (JSONArray) value; List<Object> result = new ArrayList<Object>(); for (int i = 0; i < json.length(); i++) { Object obj = json.get(i); result.add(toClientApiValue(obj)); } return result; } else if (value instanceof JSONObject) { JSONObject json = (JSONObject) value; if (json.length() == 2 && json.has("source") && json.has("workspaces")) { VisibilityJson visibilityJson = new VisibilityJson(); visibilityJson.setSource(json.getString("source")); JSONArray workspacesJson = json.getJSONArray("workspaces"); for (int i = 0; i < workspacesJson.length(); i++) { visibilityJson.addWorkspace(workspacesJson.getString(i)); } return visibilityJson; } Map<String, Object> result = new HashMap<String, Object>(); for (Object key : json.keySet()) { String keyStr = (String) key; result.put(keyStr, toClientApiValue(json.get(keyStr))); } return result; } else if (value instanceof String) { try { String valueString = (String) value; valueString = valueString.trim(); if (valueString.startsWith("{") && valueString.endsWith("}")) { return toClientApiValue(new JSONObject(valueString)); } } catch (Exception ex) { // ignore this exception it just mean the string wasn't really json } } else if (value instanceof Date) { return toClientApiValue(((Date) value).getTime()); } return value; } public static Object fromClientApiValue(Object obj) { if (obj instanceof Map) { Map map = (Map) obj; if (map.size() == 2 && map.containsKey("source") && map.containsKey("workspaces")) { VisibilityJson visibilityJson = new VisibilityJson(); visibilityJson.setSource((String) map.get("source")); List<String> workspaces = (List<String>) map.get("workspaces"); for (String workspace : workspaces) { visibilityJson.addWorkspace(workspace); } return visibilityJson; } } return obj; } public static String clientApiToString(Object o) { if (o == null) { throw new RuntimeException("o cannot be null."); } try { return ObjectMapperFactory.getInstance().writeValueAsString(o); } catch (JsonProcessingException e) { throw new RuntimeException("Could not convert object '" + o.getClass().getName() + "' to string", e); } } public static <T> T toClientApi(String str, Class<T> clazz) { try { return ObjectMapperFactory.getInstance().readValue(str, clazz); } catch (IOException e) { throw new RuntimeException("Could not parse '" + str + "' to class '" + clazz.getName() + "'", e); } } }