9621382c3f6a7b0fc218140710797d5273865e2c
[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 <T> readValueFromFile(fileName: String, valueType: Class<T>): T? {\r
54         val content: String = FileUtils.readFileToString(File(fileName), Charset.defaultCharset())\r
55                 ?: throw BluePrintException(format("Failed to read json file : {}", fileName))\r
56         return readValue(content, valueType)\r
57     }\r
58 \r
59     @JvmStatic\r
60     fun jsonNodeFromObject(from: kotlin.Any): JsonNode = jacksonObjectMapper().convertValue(from, JsonNode::class.java)\r
61 \r
62     @JvmStatic\r
63     fun jsonNodeFromClassPathFile(fileName: String): JsonNode {\r
64         val content: String = IOUtils.toString(JacksonUtils::class.java.classLoader.getResourceAsStream(fileName), Charset.defaultCharset())\r
65                 ?: throw BluePrintException(String.format("Failed to read json file : %s", fileName))\r
66         return jsonNode(content)\r
67     }\r
68 \r
69     @JvmStatic\r
70     fun jsonNodeFromFile(fileName: String): JsonNode {\r
71         val content: String = FileUtils.readFileToString(File(fileName), Charset.defaultCharset())\r
72                 ?: throw BluePrintException(format("Failed to read json file : {}", fileName))\r
73         return jsonNode(content)\r
74     }\r
75 \r
76     @JvmStatic\r
77     fun jsonNode(content: String): JsonNode {\r
78         return jacksonObjectMapper().readTree(content)\r
79     }\r
80 \r
81     @JvmStatic\r
82     fun getJson(any: kotlin.Any): String {\r
83         return getJson(any, false)\r
84     }\r
85 \r
86     @JvmStatic\r
87     fun getJson(any: kotlin.Any, pretty: Boolean = false): String {\r
88         val objectMapper = jacksonObjectMapper()\r
89         objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)\r
90         if (pretty) {\r
91             objectMapper.enable(SerializationFeature.INDENT_OUTPUT)\r
92         }\r
93         return objectMapper.writeValueAsString(any)\r
94     }\r
95 \r
96     @JvmStatic\r
97     fun <T> getListFromJson(content: String, valueType: Class<T>): List<T>? {\r
98         val objectMapper = jacksonObjectMapper()\r
99         val javaType = objectMapper.typeFactory.constructCollectionType(List::class.java, valueType)\r
100         return objectMapper.readValue<List<T>>(content, javaType)\r
101     }\r
102 \r
103     @JvmStatic\r
104     fun <T> getMapFromJson(content: String, valueType: Class<T>): MutableMap<String, T>? {\r
105         val objectMapper = jacksonObjectMapper()\r
106         val typeRef = object : TypeReference<MutableMap<String, T>>() {}\r
107         return objectMapper.readValue(content, typeRef)\r
108     }\r
109 \r
110     @JvmStatic\r
111     fun populatePrimitiveValues(key: String, value: Any, primitiveType: String, objectNode: ObjectNode) {\r
112         if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
113             objectNode.put(key, value as Boolean)\r
114         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
115             objectNode.put(key, value as Int)\r
116         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
117             objectNode.put(key, value as Float)\r
118         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {\r
119             objectNode.put(key, value as String)\r
120         } else {\r
121             objectNode.put(key, value as String)\r
122         }\r
123     }\r
124 \r
125     @JvmStatic\r
126     fun populatePrimitiveValues(value: Any, primitiveType: String, objectNode: ArrayNode) {\r
127         if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
128             objectNode.add(value as Boolean)\r
129         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
130             objectNode.add(value as Int)\r
131         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
132             objectNode.add(value as Float)\r
133         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {\r
134             objectNode.add(value as String)\r
135         } else {\r
136             objectNode.add(value as String)\r
137         }\r
138     }\r
139 \r
140     @JvmStatic\r
141     fun populatePrimitiveDefaultValues(key: String, primitiveType: String, objectNode: ObjectNode) {\r
142         if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
143             objectNode.put(key, false)\r
144         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
145             objectNode.put(key, 0)\r
146         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
147             objectNode.put(key, 0.0)\r
148         } else {\r
149             objectNode.put(key, "")\r
150         }\r
151     }\r
152 \r
153     @JvmStatic\r
154     fun populatePrimitiveDefaultValuesForArrayNode(primitiveType: String, arrayNode: ArrayNode) {\r
155         if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
156             arrayNode.add(false)\r
157         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
158             arrayNode.add(0)\r
159         } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
160             arrayNode.add(0.0)\r
161         } else {\r
162             arrayNode.add("")\r
163         }\r
164     }\r
165 \r
166     @JvmStatic\r
167     fun populateJsonNodeValues(key: String, nodeValue: JsonNode?, type: String, objectNode: ObjectNode) {\r
168         if (nodeValue == null || nodeValue is NullNode) {\r
169             objectNode.set(key, nodeValue)\r
170         } else if (BluePrintTypes.validPrimitiveTypes().contains(type)) {\r
171             if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == type) {\r
172                 objectNode.put(key, nodeValue.asBoolean())\r
173             } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == type) {\r
174                 objectNode.put(key, nodeValue.asInt())\r
175             } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == type) {\r
176                 objectNode.put(key, nodeValue.floatValue())\r
177             } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_TIMESTAMP == type) {\r
178                 objectNode.put(key, nodeValue.asText())\r
179             } else {\r
180                 objectNode.put(key, nodeValue.asText())\r
181             }\r
182         } else {\r
183             objectNode.set(key, nodeValue)\r
184         }\r
185     }\r
186 }