All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.geode.management.internal.cli.json.GfJsonObject Maven / Gradle / Ivy

Go to download

Apache Geode provides a database-like consistency model, reliable transaction processing and a shared-nothing architecture to maintain very low latency performance with high concurrency processing

There is a newer version: 1.15.1
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
 * agreements. See the NOTICE file distributed with this work for additional information regarding
 * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance with the License. You may obtain a
 * copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package org.apache.geode.management.internal.cli.json;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * Wrapper over JSONObject.
 * 
 * 
 * @since GemFire 7.0
 */
public class GfJsonObject {
  public static final Object NULL = JSONObject.NULL;

  private JSONObject jsonObject;

  public GfJsonObject() {
    this.jsonObject = new JSONObject();
  }

  @SuppressWarnings("rawtypes")
  public GfJsonObject(Object bean, boolean checkCyclicDep) {
    if (checkCyclicDep) {
      JSONObject.cyclicDepChkEnabled.set(true);
      JSONObject.cyclicDependencySet.set(new HashSet());
    }
    if (bean instanceof JSONObject) {
      this.jsonObject = (JSONObject) bean;
    } else {
      this.jsonObject = new JSONObject(bean);
      // If we want to print out the values of the primitive arrays and report back
      // Class klass = bean.getClass();
      // if(klass.isArray() && klass.getComponentType().isPrimitive()){
      // String str = "";
      // int length = Array.getLength(bean);
      // for (int i = 0; i < length; i++) {
      // if(i==0)
      // str += (Array.get(bean, i));
      // else
      // str +=(","+Array.get(bean, i));
      // }
      // try {
      // this.jsonObject.put("Value", str);
      // } catch (JSONException ignore) {
      // }
      // }
    }
    if (checkCyclicDep) {
      JSONObject.cyclicDepChkEnabled.set(false);
      JSONObject.cyclicDependencySet.set(null);
    }
  }

  public GfJsonObject(GfJsonObject gfJsonObject) {
    this.jsonObject = gfJsonObject.jsonObject;
  }

  public GfJsonObject(Map map) {
    this.jsonObject = new JSONObject(map);
  }

  public GfJsonObject(Object bean) {
    if (bean instanceof JSONObject) {
      this.jsonObject = (JSONObject) bean;
    } else {
      this.jsonObject = new JSONObject(bean);
    }
  }

  public GfJsonObject(Object bean, String[] paramNames) {
    this.jsonObject = new JSONObject(bean, paramNames);
  }

  /**
   * 
   * @param source A string beginning with { (left brace) and ending with } (right brace).
   * @throws GfJsonException - If there is a syntax error in the source string or a duplicated key.
   */
  public GfJsonObject(String source) throws GfJsonException {
    try {
      this.jsonObject = new JSONObject(source);
    } catch (JSONException e) {
      throw new GfJsonException(e.getMessage());
    }
  }

  /**
   * 
   * @param key
   * @param value
   * @return this GfJsonObject
   * @throws GfJsonException If the key is null OR if the value is non-finite number
   */
  public GfJsonObject accumulate(String key, Object value) throws GfJsonException {
    try {
      if (jsonObject.has(key)) {
        jsonObject.append(key, value);
      } else {
        // first time always add JSONArray for accumulate - for convenience
        jsonObject.put(key, new JSONArray().put(value));
      }
    } catch (JSONException e) {
      throw new GfJsonException(e.getMessage());
    }
    return this;
  }

  public GfJsonObject accumulateAsJSONObject(String key, Object value) throws GfJsonException {
    JSONObject val = new JSONObject(value);
    try {
      if (jsonObject.has(key)) {
        jsonObject.append(key, val);
      } else {
        // first time always add JSONArray for accumulate - for convenience
        jsonObject.put(key, new JSONArray().put(val));
      }
    } catch (JSONException e) {
      throw new GfJsonException(e.getMessage());
    }
    return this;
  }

  /**
   * 
   * @param key
   * @param value
   * @return this GfJsonObject
   * @throws GfJsonException - If the key is null or if the current value associated with the key is
   *         not a JSONArray.
   */
  public GfJsonObject append(String key, Object value) throws GfJsonException {
    try {
      jsonObject.append(key, value);
    } catch (JSONException e) {
      throw new GfJsonException(e.getMessage());
    }
    return this;
  }

  public Object get(String key) {
    return jsonObject.opt(key);
  }

  public String getString(String key) {
    return jsonObject.optString(key);
  }

  public int getInt(String key) {
    return jsonObject.optInt(key);
  }

  public long getLong(String key) {
    return jsonObject.optLong(key);
  }

  public double getDouble(String key) {
    return jsonObject.optDouble(key);
  }

  public boolean getBoolean(String key) {
    return jsonObject.optBoolean(key);
  }

  public GfJsonObject getJSONObject(String key) {
    Object opt = jsonObject.opt(key);
    if (opt instanceof GfJsonObject) {
      return (GfJsonObject) opt;
    }
    return new GfJsonObject(opt);
  }

  public JSONObject getInternalJsonObject() {
    return jsonObject;
  }

  /**
   * 
   * @param key
   * @return this GfJsonObject
   * @throws GfJsonException If there is a syntax error while preparing GfJsonArray.
   */
  public GfJsonArray getJSONArray(String key) throws GfJsonException {
    JSONArray jsonArray = jsonObject.optJSONArray(key);
    if (jsonArray == null) {
      return null;
    }
    return new GfJsonArray(jsonArray);
  }

  /**
   * 
   * @return A GfJsonArray containing the key strings, or null if the internal JSONObject is empty.
   * @throws GfJsonException If there is a syntax error while preparing GfJsonArray.
   */
  public GfJsonArray names() throws GfJsonException {
    GfJsonArray gfJsonArray = new GfJsonArray();
    JSONArray names = jsonObject.names();
    if (names != null) {
      gfJsonArray = new GfJsonArray(names);
    }

    return gfJsonArray;
  }

  /**
   * 
   * @param key
   * @param value
   * @return this GfJsonObject object
   * @throws GfJsonException If the value is non-finite number or if the key is null.
   */
  public GfJsonObject put(String key, Object value) throws GfJsonException {
    try {
      jsonObject.put(key, extractInternalForGfJsonOrReturnSame(value));
    } catch (JSONException e) {
      throw new GfJsonException(e.getMessage());
    }
    return this;
  }

  public GfJsonObject putAsJSONObject(String key, Object value) throws GfJsonException {
    try {
      Object internalJsonObj = extractInternalForGfJsonOrReturnSame(value);
      if (internalJsonObj == value) {
        GfJsonObject jsonObj = new GfJsonObject(value);
        internalJsonObj = jsonObj.getInternalJsonObject();
      }
      jsonObject.put(key, internalJsonObj);
    } catch (JSONException e) {
      throw new GfJsonException(e.getMessage());
    }
    return this;
  }

  /**
   * 
   * @param key
   * @param value
   * @return this GfJsonObject
   * @throws GfJsonException if the key is a duplicate
   */
  public GfJsonObject putOnce(String key, Object value) throws GfJsonException {
    try {
      jsonObject.putOnce(key, value);
    } catch (JSONException e) {
      throw new GfJsonException(e.getMessage());
    }
    return this;
  }

  /**
   * 
   * @param key
   * @param value
   * @return this GfJsonObject
   * @throws GfJsonException If the value is a non-finite number.
   */
  public GfJsonObject putOpt(String key, Object value) throws GfJsonException {
    try {
      jsonObject.putOpt(key, extractInternalForGfJsonOrReturnSame(value));
    } catch (JSONException e) {
      throw new GfJsonException(e.getMessage());
    }
    return this;
  }

  /**
   * 
   * @param key
   * @param value
   * @return this GfJsonObject
   * @throws GfJsonException If the value is a non-finite number.
   */
  public GfJsonObject put(String key, Collection value) throws GfJsonException {
    try {
      jsonObject.putOpt(key, value);
    } catch (JSONException e) {
      throw new GfJsonException(e.getMessage());
    }
    return this;
  }

  public GfJsonObject putJSONArray(String key, GfJsonArray value) throws GfJsonException {
    try {
      jsonObject.putOpt(key, value.getInternalJsonArray());
    } catch (JSONException e) {
      throw new GfJsonException(e.getMessage());
    }
    return this;
  }

  public GfJsonObject put(String key, Map value) throws GfJsonException {
    try {
      jsonObject.put(key, value);
    } catch (JSONException e) {
      throw new GfJsonException(e.getMessage());
    }
    return this;
  }

  public static String quote(String string) {
    return JSONObject.quote(string);
  }

  public Object remove(String key) {
    return jsonObject.remove(key);
  }

  public boolean has(String key) {
    return jsonObject.has(key);
  }

  @SuppressWarnings("unchecked")
  public Iterator keys() {
    return jsonObject.keys();
  }

  public int size() {
    return jsonObject.length();
  }

  public String toString() {
    return jsonObject.toString();
  }

  public String getType() {
    return jsonObject.optString("type-class");
  }

  /**
   * 
   * @param indentFactor
   * @return this GfJsonObject
   * @throws GfJsonException If the object contains an invalid number.
   */
  public String toIndentedString(int indentFactor) throws GfJsonException {
    try {
      return jsonObject.toString(indentFactor);
    } catch (JSONException e) {
      throw new GfJsonException(e.getMessage());
    }
  }

  private static Object extractInternalForGfJsonOrReturnSame(Object value) {
    Object returnedValue = value;
    if (value instanceof GfJsonObject) {
      returnedValue = ((GfJsonObject) value).getInternalJsonObject();
    } else if (value instanceof GfJsonArray) {
      returnedValue = ((GfJsonArray) value).getInternalJsonArray();
    } else if (value == null) {
      returnedValue = NULL;
    }

    return returnedValue;
  }

  public static GfJsonObject getGfJsonErrorObject(String errorMessage) {
    Map errorMap = new HashMap();
    errorMap.put("error", errorMessage);
    return new GfJsonObject(errorMap);
  }

  public static boolean isJSONKind(Object object) {
    return object instanceof JSONObject;
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy