/*
* Copyright 2016 Huawei Technologies Co., Ltd.
*
* Licensed 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.onap.vfc.nfvo.multivimproxy.common.util;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.onap.vfc.nfvo.multivimproxy.common.constant.ParamConstant;
import net.sf.json.JSONArray;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
/**
*
* Json Utility Class.
*
*
*
* @author
* @version VFC 1.0 Sep 10, 2016
*/
public final class JsonUtil {
private static final Logger LOG = LogManager.getLogger(StringUtil.class);
private static final int TYPE_STRING = 0;
private static final int TYPE_INT = 1;
private static final int TYPE_JSONA = 2;
private static final int TYPE_JSONO = 3;
private static final int TYPE_LONG = 4;
private JsonUtil() {
}
/**
*
* Get Json Field String.
*
* @param jsonObj
* @param fieldName
* @return
* @since VFC 1.0
*/
public static String getJsonFieldStr(JSONObject jsonObj, String fieldName) {
return (String)getJsonFieldObject(jsonObj, fieldName, TYPE_STRING);
}
/**
*
* Get Json Field Integer.
*
* @param jsonObj
* @param fieldName
* @return
* @since VFC 1.0
*/
public static Integer getJsonFieldInt(JSONObject jsonObj, String fieldName) {
return (Integer)getJsonFieldObject(jsonObj, fieldName, TYPE_INT);
}
/**
*
* Get Json Field array.
*
* @param jsonObj
* @param fieldName
* @return
* @since VFC 1.0
*/
public static JSONArray getJsonFieldArr(JSONObject jsonObj, String fieldName) {
return (JSONArray)getJsonFieldObject(jsonObj, fieldName, TYPE_JSONA);
}
/**
*
* Get Json Field Json.
*
* @param jsonObj
* @param fieldName
* @return
* @since VFC 1.0
*/
public static JSONObject getJsonFieldJson(JSONObject jsonObj, String fieldName) {
return (JSONObject)getJsonFieldObject(jsonObj, fieldName, TYPE_JSONO);
}
/**
*
* Get Json Field Long.
*
* @param jsonObj
* @param fieldName
* @return
* @since VFC 1.0
*/
public static Long getJsonFieldLong(JSONObject jsonObj, String fieldName) {
return (Long)getJsonFieldObject(jsonObj, fieldName, TYPE_LONG);
}
/**
*
* Get Json Field Object.
*
* @param jsonObj
* @param fieldName
* @param classType
* @return
* @since VFC 1.0
*/
private static Object getJsonFieldObject(JSONObject jsonObj, String fieldName, int classType) {
try {
if(null != jsonObj && jsonObj.has(fieldName)) {
Object result;
switch(classType) {
case TYPE_STRING:
result = "null".equals(jsonObj.getString(fieldName)) ? "" : jsonObj.getString(fieldName);
break;
case TYPE_INT:
result = jsonObj.getInt(fieldName);
break;
case TYPE_JSONA:
result = jsonObj.getJSONArray(fieldName);
break;
case TYPE_JSONO:
result = jsonObj.getJSONObject(fieldName);
break;
case TYPE_LONG:
result = jsonObj.getLong(fieldName);
break;
default:
result = null;
break;
}
return result;
}
} catch(JSONException e) {
LOG.error("function=getJsonFieldLong, exception: {} ", e);
return null;
}
return null;
}
/**
*
* Check whether the Json Object is empty.
*
* @param jsonObject
* @return
* @since VFC 1.0
*/
public static boolean isNullJson(JSONObject jsonObject) {
if(null == jsonObject || jsonObject.isEmpty()) {
return true;
}
return false;
}
/**
*
* Get String value by Json.
*
* @param json
* @param key
* @return
* @since VFC 1.0
*/
public static String getStrValueByjson(JSONObject json, String key) {
JSONArray names = json.names();
String result = null;
for(int i = 0; i < names.size(); i++) {
String nodeName = names.getString(i);
if(json.optJSONObject(nodeName) != null) {
result = getStrValueByjson(json.getJSONObject(nodeName), key);
}
if(json.optJSONArray(nodeName) != null) {
result = getStrValueByJArray(json.getJSONArray(nodeName), key);
}
if(nodeName.equals(key)) {
result = json.getString(nodeName);
break;
}
}
return result;
}
private static String getStrValueByJArray(JSONArray json, String key) {
String result = null;
for(int i = 0; i < json.size(); i++) {
if(json.optJSONObject(i) != null) {
result = getStrValueByjson(json.getJSONObject(i), key);
}
if(json.optJSONArray(i) != null) {
result = getStrValueByJArray(json.getJSONArray(i), key);
}
}
return result;
}
/**
*
* Get Json Value by Json object.
*
* @param json
* @param key
* @return
* @since VFC 1.0
*/
public static JSONObject getJsonValueByjson(JSONObject json, String key) {
JSONObject resultJson = new JSONObject();
String result = getStrValueByjson(json, key);
if(null == result) {
return null;
}
resultJson.element(key, result);
return resultJson;
}
/**
*
* Get String Value by Json object.
*
* @param json
* @param parentKey
* @param key
* @return
* @since VFC 1.0
*/
public static String getStrValueByParentJson(JSONObject json, String parentKey, String key) {
if(parentKey.isEmpty()) {
return getStrValueByjson(json, key);
}
JSONObject parentJson = getJsonValueByjson(json, parentKey);
if(isNullJson(parentJson)) {
return null;
}
return getStrValueByjson(parentJson, key);
}
/**
*
* Get response Data.
*
* @param obj
* @return
* @since VFC 1.0
*/
public static JSONObject getResponseData(JSONObject obj) {
JSONObject result = new JSONObject();
Integer retCode = getJsonFieldInt(obj, ParamConstant.PARAM_RETCODE);
if(null == retCode || retCode == -1) {
return null;
}
if(obj.optJSONObject(ParamConstant.PARAM_DATA) != null) {
result = obj.getJSONObject(ParamConstant.PARAM_DATA);
} else if(obj.optJSONArray(ParamConstant.PARAM_DATA) != null) {
result = obj.getJSONArray(ParamConstant.PARAM_DATA).getJSONObject(0);
}
if(result.isEmpty()) {
return null;
}
if(result.containsKey(ParamConstant.PARAM_RETCODE)) {
result = getResponseData(result);
}
return result;
}
}