/* * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. 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.wso2.carbon.bpmn.core.types.datatypes.json.api; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import org.wso2.carbon.bpmn.core.types.datatypes.json.BPMNJsonException; import java.util.List; import java.util.Map; /** * This class contains API to create Json objects from different sources */ public class JsonBuilder { private ObjectMapper objectMapper; public JsonBuilder(ObjectMapper mapper) { this.objectMapper = mapper; } /** * Function to create JsonNode from Map<String, Object> * @param jsonMap Map that represent json object. Must be Map<String, Object> * @return created JsonNode * @throws BPMNJsonException */ public JsonNode createJsonNodeFromMap (Map<String, Object> jsonMap) throws BPMNJsonException { return createJsonNode(jsonMap, objectMapper); } /** * Function to create JsonArray from List<Object> * @param jsonList List that represent json array. Must be List<Object> * @return returns created JsonArray * @throws BPMNJsonException */ public ArrayNode createJsonArrayFromMap (List<Object> jsonList) throws BPMNJsonException { return createJsonNode(jsonList,objectMapper); } private JsonNode createJsonNode (Object object, ObjectMapper mapper) throws BPMNJsonException { if (object == null) { return mapper.getNodeFactory().nullNode(); } else if (object instanceof Map) { Map<String, Object> map = (Map<String, Object>) object; return createJsonNode(map, mapper); } else if (object instanceof List) { return createJsonNode((List<Object>)object, mapper); } else if (object instanceof String) { return createJsonNode((String) object, mapper); } else if (object instanceof Integer) { return createJsonNode((Integer) object, mapper); } else if (object instanceof Boolean) { return createJsonNode((Boolean)object, mapper); } else if (object instanceof Float) { return createJsonNode((Float)object, mapper); } else if (object instanceof Long) { return createJsonNode((Long)object, mapper); } else if (object instanceof Number) { return createJsonNode(((Number)object).floatValue(), mapper); } else { throw new BPMNJsonException("The object of type : "+ object.getClass().getName() +" cannot convert to JSON"); } } private JsonNode createJsonNode (String str, ObjectMapper mapper) { return mapper.getNodeFactory().textNode(str); } private JsonNode createJsonNode (Map<String, Object> map, ObjectMapper mapper) throws BPMNJsonException { if (map != null) { ObjectNode objNode = mapper.getNodeFactory().objectNode(); for (Map.Entry<String, Object> entry : map.entrySet()) { objNode.put(entry.getKey(), createJsonNode(entry.getValue(), mapper)); } return objNode; } else { //Create null node return mapper.getNodeFactory().nullNode(); } } private JsonNode createJsonNode (Integer integer, ObjectMapper mapper) { return mapper.getNodeFactory().numberNode(integer); } private JsonNode createJsonNode (Boolean bool, ObjectMapper mapper) { return mapper.getNodeFactory().booleanNode(bool); } private JsonNode createJsonNode (Float floatValue, ObjectMapper mapper) { return mapper.getNodeFactory().numberNode(floatValue); } private JsonNode createJsonNode (Long longValue, ObjectMapper mapper) { return mapper.getNodeFactory().numberNode(longValue); } private ArrayNode createJsonNode (List<Object> list, ObjectMapper mapper) throws BPMNJsonException { if (list != null) { ArrayNode arrNode = mapper.getNodeFactory().arrayNode(); for (Object obj : list) { arrNode.add(createJsonNode(obj,mapper)); } return arrNode; } else { return null; } } }