/** * Copyright (c) 2008-2011 Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://www.sonatype.com/products/nexus/attributions. * * This program is free software: you can redistribute it and/or modify it only under the terms of the GNU Affero General * Public License Version 3 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License Version 3 * for more details. * * You should have received a copy of the GNU Affero General Public License Version 3 along with this program. If not, see * http://www.gnu.org/licenses. * * Sonatype Nexus (TM) Open Source Version is available from Sonatype, Inc. Sonatype and Sonatype Nexus are trademarks of * Sonatype, Inc. Apache Maven is a trademark of the Apache Foundation. M2Eclipse is a trademark of the Eclipse Foundation. * All other trademarks are the property of their respective owners. */ package org.sonatype.nexus.gwt.ui.client; import java.util.ArrayList; import java.util.List; import com.google.gwt.json.client.JSONArray; import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONValue; /** * Utility methods to work with JSON objects. * * @author barath */ public class JSONUtil { private JSONUtil() { } public static List jsonArrayToList(JSONArray jsonArray) { List list = new ArrayList(); if (jsonArray != null) { for (int i = 0; i < jsonArray.size(); i++) { list.add(jsonArray.get(i)); } } return list; } public static JSONValue getValue(JSONObject obj, String path) { String[] propChain = path.split("\\."); obj = lookupObject(obj, propChain, false); return obj == null ? null : obj.get(propChain[propChain.length - 1]); } public static void setValue(JSONObject obj, String path, JSONValue value) { setValue(obj, path, value, true); } public static void setValue(JSONObject obj, String path, JSONValue value, boolean createAllowed) { String[] propChain = path.split("\\."); obj = lookupObject(obj, propChain, createAllowed); if (obj != null) { obj.put(propChain[propChain.length - 1], value); } else { throw new IllegalArgumentException(); } } private static JSONObject lookupObject(JSONObject obj, String[] path, boolean createAllowed) { JSONObject node = obj; if (path.length > 1) { for (int i = 0; i < path.length - 1; i++) { JSONValue v = node.get(path[i]); if (v != null) { node = v.isObject(); } else if (createAllowed) { JSONObject childNode = new JSONObject(); node.put(path[i], childNode); node = childNode; } if (node == null) { break; } } } return node; } }