/** * Copyright 2017 ZTE Corporation. * * 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.workflow.activitiext.restservicetask; import java.util.Map.Entry; import org.activiti.engine.delegate.DelegateExecution; import org.onap.workflow.activitiext.common.ConstString; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; public class GsonUtil { private static final Logger logger = LoggerFactory.getLogger(GsonUtil.class); public static JsonObject formatJsonObject(String key, JsonObject obj, DelegateExecution execution) { JsonObject res = new JsonObject(); for (Entry entry : obj.entrySet()) { if (entry.getValue() instanceof JsonObject) { JsonObject tempObj = (JsonObject) entry.getValue(); JsonElement valueSource = tempObj.get(ConstString.PARAMETER_VALUESOURCE); if(valueSource == null || valueSource.getAsString().equals(ConstString.PARAMETER_VALUE_SOURCE_DEFINITION)) { res.add(entry.getKey(), formatJsonObject(entry.getKey(), entry.getValue().getAsJsonObject(), execution)); }else{ res.addProperty(entry.getKey(), getValue(tempObj, execution)); } } else if (entry.getValue() instanceof JsonArray) { JsonArray objArray = entry.getValue().getAsJsonArray(); JsonArray resArray = formatJsonArray(objArray, execution); res.add(entry.getKey(), resArray); } } return res; } public static JsonArray formatJsonArray(JsonArray objArray, DelegateExecution execution) { JsonArray array = new JsonArray(); for (JsonElement element : objArray) { if (element.isJsonObject()) { JsonObject tempObj = (JsonObject) element; JsonElement valueSource = tempObj.get(ConstString.PARAMETER_VALUESOURCE); if(valueSource == null || valueSource.getAsString().equals(ConstString.PARAMETER_VALUE_SOURCE_DEFINITION)) { array.add(formatJsonObject(null, element.getAsJsonObject(), execution)); }else{ array.add(new JsonPrimitive(getValue(tempObj, execution))); } } else if (element.isJsonArray()) { array = formatJsonArray(element.getAsJsonArray(), execution); } } return array; } /** * obtain jsonObject value * @param obj * @param execution * @return */ public static String getValue(JsonObject obj, DelegateExecution execution) { String result = new String(); try { String valueSource = obj.get(ConstString.PARAMETER_VALUESOURCE).getAsString(); String value = obj.get(ConstString.PARAMETER_VALUE).getAsString(); if(ConstString.PARAMETER_VALUE_SOURCE_STRING.equals(valueSource)) { result = value; }else if(ConstString.PARAMETER_VALUE_SOURCE_PLAN.equals(valueSource)) { result = HttpUtil.parsePlanExpression(value, execution); }else if(ConstString.PARAMETER_VALUE_SOURCE_TOPOLOGY.equals(valueSource)) { result = HttpUtil.parseTopologyExpression(value, execution); } } catch (Exception e) { logger.error("jsonObject {} is illegal!", obj.toString(), e); throw e; } return result; } }