95b2af7b794643c6a4a0d5e16bc4bb79a63bc31a
[ccsdk/cds.git] /
1 /*\r
2  * Copyright © 2017-2018 AT&T Intellectual Property.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 package org.onap.ccsdk.apps.controllerblueprints.core.utils\r
18 \r
19 import com.fasterxml.jackson.annotation.JsonInclude\r
20 import com.fasterxml.jackson.core.type.TypeReference\r
21 import com.fasterxml.jackson.databind.JsonNode\r
22 import com.fasterxml.jackson.databind.SerializationFeature\r
23 import com.fasterxml.jackson.databind.node.ArrayNode\r
24 import com.fasterxml.jackson.databind.node.NullNode\r
25 import com.fasterxml.jackson.databind.node.ObjectNode\r
26 import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper\r
27 import org.apache.commons.io.FileUtils\r
28 import org.apache.commons.io.IOUtils\r
29 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException\r
30 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintTypes\r
31 import org.onap.ccsdk.apps.controllerblueprints.core.format\r
32 import org.slf4j.LoggerFactory\r
33 import java.io.File\r
34 import java.nio.charset.Charset\r
35 \r
36 /**\r
37  *\r
38  *\r
39  * @author Brinda Santh\r
40  */\r
41 object JacksonUtils {\r
42     private val log = LoggerFactory.getLogger(JacksonUtils::class.java)\r
43 \r
44     inline fun <reified T : Any> readValue(content: String): T =\r
45             jacksonObjectMapper().readValue(content, T::class.java)\r
46 \r
47     @JvmStatic\r
48     fun <T> readValue(content: String, valueType: Class<T>): T? {\r
49         return jacksonObjectMapper().readValue(content, valueType)\r
50     }\r
51 \r
52     @JvmStatic\r
53     fun jsonNodeFromObject(from: kotlin.Any): JsonNode = jacksonObjectMapper().convertValue(from, JsonNode::class.java)\r
54 \r
55     @JvmStatic\r
56     fun jsonNodeFromClassPathFile(fileName: String): JsonNode {\r
57         val content: String = IOUtils.toString(JacksonUtils::class.java.classLoader.getResourceAsStream(fileName), Charset.defaultCharset())\r
58                 ?: throw BluePrintException(String.format("Failed to read json file : %s", fileName))\r
59         return jsonNode(content)\r
60     }\r
61 \r
62     @JvmStatic\r
63     fun jsonNodeFromFile(fileName: String): JsonNode {\r
64         val content: String = FileUtils.readFileToString(File(fileName), Charset.defaultCharset())\r
65                 ?: throw BluePrintException(format("Failed to read json file : {}", fileName))\r
66         return jsonNode(content)\r
67     }\r
68 \r
69     @JvmStatic\r
70     fun jsonNode(content: String): JsonNode {\r
71         return jacksonObjectMapper().readTree(content)\r
72     }\r
73 \r
74     @JvmStatic\r
75     fun getJson(any: kotlin.Any): String {\r
76         return getJson(any, false)\r
77     }\r
78 \r
79     @JvmStatic\r
80     fun getJson(any: kotlin.Any, pretty: Boolean = false): String {\r
81         val objectMapper = jacksonObjectMapper()\r
82         objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)\r
83         if (pretty) {\r
84             objectMapper.enable(SerializationFeature.INDENT_OUTPUT)\r
85         }\r
86         return objectMapper.writeValueAsString(any)\r
87     }\r
88 \r
89     @JvmStatic\r
90     fun <T> getListFromJson(content: String, valueType: Class<T>): List<T>? {\r
91         val objectMapper = jacksonObjectMapper()\r
92         val javaType = objectMapper.typeFactory.constructCollectionType(List::class.java, valueType)\r
93         return objectMapper.readValue<List<T>>(content, javaType)\r
94     }\r
95 \r
96     @JvmStatic\r
97     fun <T> getMapFromJson(content: String, valueType: Class<T>): MutableMap<String, T>? {\r
98         val objectMapper = jacksonObjectMapper()\r
99         val typeRef = object : TypeReference<MutableMap<String, T>>() {}\r
100         return objectMapper.readValue(content, typeRef)\r
101     }\r
102 \r
103     @JvmStatic\r
104     fun populatePrimitiveValues(key: String, value: Any, primitiveType: String, objectNode: ObjectNode) {\r
105         if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
106             objectNode.put(key, value as Boolean)\r
107         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
108             objectNode.put(key, value as Int)\r
109         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
110             objectNode.put(key, value as Float)\r
111         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {\r
112             objectNode.put(key, value as String)\r
113         } else {\r
114             objectNode.put(key, value as String)\r
115         }\r
116     }\r
117 \r
118     @JvmStatic\r
119     fun populatePrimitiveValues(value: Any, primitiveType: String, objectNode: ArrayNode) {\r
120         if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
121             objectNode.add(value as Boolean)\r
122         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
123             objectNode.add(value as Int)\r
124         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
125             objectNode.add(value as Float)\r
126         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {\r
127             objectNode.add(value as String)\r
128         } else {\r
129             objectNode.add(value as String)\r
130         }\r
131     }\r
132 \r
133     @JvmStatic\r
134     fun populatePrimitiveDefaultValues(key: String, primitiveType: String, objectNode: ObjectNode) {\r
135         if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
136             objectNode.put(key, false)\r
137         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
138             objectNode.put(key, 0)\r
139         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
140             objectNode.put(key, 0.0)\r
141         } else {\r
142             objectNode.put(key, "")\r
143         }\r
144     }\r
145 \r
146     @JvmStatic\r
147     fun populatePrimitiveDefaultValuesForArrayNode(primitiveType: String, arrayNode: ArrayNode) {\r
148         if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
149             arrayNode.add(false)\r
150         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
151             arrayNode.add(0)\r
152         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
153             arrayNode.add(0.0)\r
154         } else {\r
155             arrayNode.add("")\r
156         }\r
157     }\r
158 \r
159     @JvmStatic\r
160     fun populateJsonNodeValues(key: String, nodeValue: JsonNode?, type: String, objectNode: ObjectNode) {\r
161         if (nodeValue == null || nodeValue is NullNode) {\r
162             objectNode.set(key, nodeValue)\r
163         } else if (BluePrintTypes.validPrimitiveTypes().contains(type)) {\r
164             if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == type) {\r
165                 objectNode.put(key, nodeValue.asBoolean())\r
166             } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == type) {\r
167                 objectNode.put(key, nodeValue.asInt())\r
168             } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == type) {\r
169                 objectNode.put(key, nodeValue.floatValue())\r
170             } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_TIMESTAMP == type) {\r
171                 objectNode.put(key, nodeValue.asText())\r
172             } else {\r
173                 objectNode.put(key, nodeValue.asText())\r
174             }\r
175         } else {\r
176             objectNode.set(key, nodeValue)\r
177         }\r
178     }\r
179 }