/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library 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 Lesser General Public License for more * details. */ package com.liferay.portal.json; import com.liferay.portal.kernel.json.JSONArray; import com.liferay.portal.kernel.json.JSONException; import com.liferay.portal.kernel.json.JSONObject; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.Validator; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.io.Writer; import java.util.Date; import java.util.Iterator; import java.util.Map; /** * @author Brian Wing Shun Chan */ public class JSONObjectImpl implements JSONObject { public JSONObjectImpl() { _jsonObject = new org.json.JSONObject(); } public JSONObjectImpl(JSONObject jsonObject, String[] names) throws JSONException { try { JSONObjectImpl jsonObjectImpl = (JSONObjectImpl)jsonObject; _jsonObject = new org.json.JSONObject( jsonObjectImpl.getJSONObject(), names); } catch (Exception e) { throw new JSONException(e); } } public JSONObjectImpl(Map<?, ?> map) { _jsonObject = new org.json.JSONObject(map); } public JSONObjectImpl(Object bean) { _jsonObject = new org.json.JSONObject(bean); } public JSONObjectImpl(Object obj, String[] names) { _jsonObject = new org.json.JSONObject(obj, names); } public JSONObjectImpl(org.json.JSONObject jsonObject) { _jsonObject = jsonObject; } public JSONObjectImpl(String json) throws JSONException { try { if (Validator.isNull(json)) { json = _NULL_JSON; } _jsonObject = new org.json.JSONObject(json); } catch (Exception e) { throw new JSONException(e); } } @Override public Object get(String key) { return _jsonObject.opt(key); } @Override public boolean getBoolean(String key) { return _jsonObject.optBoolean(key); } @Override public boolean getBoolean(String key, boolean defaultValue) { return _jsonObject.optBoolean(key, defaultValue); } @Override public double getDouble(String key) { return _jsonObject.optDouble(key); } @Override public double getDouble(String key, double defaultValue) { return _jsonObject.optDouble(key, defaultValue); } @Override public int getInt(String key) { return _jsonObject.optInt(key); } @Override public int getInt(String key, int defaultValue) { return _jsonObject.optInt(key, defaultValue); } @Override public JSONArray getJSONArray(String key) { org.json.JSONArray jsonArray = _jsonObject.optJSONArray(key); if (jsonArray == null) { return null; } return new JSONArrayImpl(jsonArray); } public org.json.JSONObject getJSONObject() { return _jsonObject; } @Override public JSONObject getJSONObject(String key) { org.json.JSONObject jsonObject = _jsonObject.optJSONObject(key); if (jsonObject == null) { return null; } return new JSONObjectImpl(jsonObject); } @Override public long getLong(String key) { return _jsonObject.optLong(key); } @Override public long getLong(String key, long defaultValue) { return _jsonObject.optLong(key, defaultValue); } @Override public String getString(String key) { return _jsonObject.optString(key); } @Override public String getString(String key, String defaultValue) { return _jsonObject.optString(key, defaultValue); } @Override public boolean has(String key) { return _jsonObject.has(key); } @Override public boolean isNull(String key) { return _jsonObject.isNull(key); } @Override public Iterator<String> keys() { return _jsonObject.keys(); } @Override public int length() { return _jsonObject.length(); } @Override public JSONArray names() { return new JSONArrayImpl(_jsonObject.names()); } @Override public JSONObject put(String key, boolean value) { try { _jsonObject.put(key, value); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn(e, e); } } return this; } @Override public JSONObject put(String key, Date value) { try { _jsonObject.put(key, value); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn(e, e); } } return this; } @Override public JSONObject put(String key, double value) { try { _jsonObject.put(key, value); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn(e, e); } } return this; } @Override public JSONObject put(String key, int value) { try { _jsonObject.put(key, value); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn(e, e); } } return this; } @Override public JSONObject put(String key, JSONArray value) { try { _jsonObject.put(key, ((JSONArrayImpl)value).getJSONArray()); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn(e, e); } } return this; } @Override public JSONObject put(String key, JSONObject value) { try { _jsonObject.put(key, ((JSONObjectImpl)value).getJSONObject()); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn(e, e); } } return this; } @Override public JSONObject put(String key, long value) { try { _jsonObject.put(key, String.valueOf(value)); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn(e, e); } } return this; } @Override public JSONObject put(String key, Object value) { try { if (value instanceof JSONArray) { put(key, (JSONArray)value); } else if (value instanceof JSONObject) { put(key, (JSONObject)value); } else { _jsonObject.put(key, value); } } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn(e, e); } } return this; } @Override public JSONObject put(String key, String value) { try { _jsonObject.put(key, value); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn(e, e); } } return this; } @Override public JSONObject putException(Exception exception) { try { _jsonObject.put( "exception", exception.getClass() + StringPool.COLON + exception.getMessage()); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn(e, e); } } return this; } @Override public void readExternal(ObjectInput objectInput) throws IOException { try { _jsonObject = new org.json.JSONObject( (String)objectInput.readObject()); } catch (Exception e) { throw new IOException(e); } } @Override public Object remove(String key) { return _jsonObject.remove(key); } @Override public String toJSONString() { return toString(); } @Override public String toString() { return _jsonObject.toString(); } @Override public String toString(int indentFactor) throws JSONException { try { return _jsonObject.toString(indentFactor); } catch (Exception e) { throw new JSONException(e); } } @Override public Writer write(Writer writer) throws JSONException { try { return _jsonObject.write(writer); } catch (Exception e) { throw new JSONException(e); } } @Override public void writeExternal(ObjectOutput objectOutput) throws IOException { objectOutput.writeObject(toString()); } private static final String _NULL_JSON = "{}"; private static final Log _log = LogFactoryUtil.getLog(JSONObjectImpl.class); private org.json.JSONObject _jsonObject; }