Controller Blueprints Microservice
[ccsdk/apps.git] / ms / controllerblueprints / modules / core / src / main / kotlin / org / onap / ccsdk / apps / controllerblueprints / core / utils / JacksonUtils.kt
index 95b2af7..9eef1ca 100644 (file)
@@ -1,5 +1,6 @@
 /*\r
  * Copyright © 2017-2018 AT&T Intellectual Property.\r
+ * Modifications Copyright © 2018 IBM.\r
  *\r
  * Licensed under the Apache License, Version 2.0 (the "License");\r
  * you may not use this file except in compliance with the License.\r
@@ -26,6 +27,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode
 import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper\r
 import org.apache.commons.io.FileUtils\r
 import org.apache.commons.io.IOUtils\r
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants\r
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException\r
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintTypes\r
 import org.onap.ccsdk.apps.controllerblueprints.core.format\r
@@ -49,6 +51,20 @@ object JacksonUtils {
         return jacksonObjectMapper().readValue(content, valueType)\r
     }\r
 \r
+    @JvmStatic\r
+    fun <T> readValueFromFile(fileName: String, valueType: Class<T>): T? {\r
+        val content: String = FileUtils.readFileToString(File(fileName), Charset.defaultCharset())\r
+                ?: throw BluePrintException(format("Failed to read json file : {}", fileName))\r
+        return readValue(content, valueType)\r
+    }\r
+\r
+    @JvmStatic\r
+    fun <T> readValueFromClassPathFile(fileName: String, valueType: Class<T>): T? {\r
+        val content: String = IOUtils.toString(JacksonUtils::class.java.classLoader.getResourceAsStream(fileName), Charset.defaultCharset())\r
+                ?: throw BluePrintException(String.format("Failed to read json file : %s", fileName))\r
+        return readValue(content, valueType)\r
+    }\r
+\r
     @JvmStatic\r
     fun jsonNodeFromObject(from: kotlin.Any): JsonNode = jacksonObjectMapper().convertValue(from, JsonNode::class.java)\r
 \r
@@ -93,6 +109,20 @@ object JacksonUtils {
         return objectMapper.readValue<List<T>>(content, javaType)\r
     }\r
 \r
+    @JvmStatic\r
+    fun <T> getListFromFile(fileName: String, valueType: Class<T>): List<T>? {\r
+        val content: String = FileUtils.readFileToString(File(fileName), Charset.defaultCharset())\r
+                ?: throw BluePrintException(format("Failed to read json file : {}", fileName))\r
+        return getListFromJson(content, valueType)\r
+    }\r
+\r
+    @JvmStatic\r
+    fun <T> getListFromClassPathFile(fileName: String, valueType: Class<T>): List<T>? {\r
+        val content: String = IOUtils.toString(JacksonUtils::class.java.classLoader.getResourceAsStream(fileName), Charset.defaultCharset())\r
+                ?: throw BluePrintException(String.format("Failed to read json file : %s", fileName))\r
+        return getListFromJson(content, valueType)\r
+    }\r
+\r
     @JvmStatic\r
     fun <T> getMapFromJson(content: String, valueType: Class<T>): MutableMap<String, T>? {\r
         val objectMapper = jacksonObjectMapper()\r
@@ -100,15 +130,61 @@ object JacksonUtils {
         return objectMapper.readValue(content, typeRef)\r
     }\r
 \r
+    @JvmStatic\r
+    fun checkJsonNodeValueOfType(type: String, jsonNode: JsonNode): Boolean {\r
+        if (BluePrintTypes.validPrimitiveTypes().contains(type)) {\r
+            return checkJsonNodeValueOfPrimitiveType(type, jsonNode)\r
+        } else if (BluePrintTypes.validCollectionTypes().contains(type)) {\r
+            return checkJsonNodeValueOfCollectionType(type, jsonNode)\r
+        }\r
+        return false\r
+    }\r
+\r
+    @JvmStatic\r
+    fun checkJsonNodeValueOfPrimitiveType(primitiveType: String, jsonNode: JsonNode): Boolean {\r
+        when (primitiveType) {\r
+            BluePrintConstants.DATA_TYPE_STRING -> {\r
+                return jsonNode.isTextual\r
+            }\r
+            BluePrintConstants.DATA_TYPE_BOOLEAN -> {\r
+                return jsonNode.isBoolean\r
+            }\r
+            BluePrintConstants.DATA_TYPE_INTEGER -> {\r
+                return jsonNode.isInt\r
+            }\r
+            BluePrintConstants.DATA_TYPE_FLOAT -> {\r
+                return jsonNode.isDouble\r
+            }\r
+            BluePrintConstants.DATA_TYPE_TIMESTAMP -> {\r
+                return jsonNode.isTextual\r
+            }\r
+            else ->\r
+                return false\r
+        }\r
+    }\r
+\r
+    @JvmStatic\r
+    fun checkJsonNodeValueOfCollectionType(type: String, jsonNode: JsonNode): Boolean {\r
+        when (type) {\r
+            BluePrintConstants.DATA_TYPE_LIST ->\r
+                return jsonNode.isArray\r
+            BluePrintConstants.DATA_TYPE_MAP ->\r
+                return jsonNode.isContainerNode\r
+            else ->\r
+                return false\r
+        }\r
+\r
+    }\r
+\r
     @JvmStatic\r
     fun populatePrimitiveValues(key: String, value: Any, primitiveType: String, objectNode: ObjectNode) {\r
-        if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
+        if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
             objectNode.put(key, value as Boolean)\r
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
+        } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
             objectNode.put(key, value as Int)\r
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
+        } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
             objectNode.put(key, value as Float)\r
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {\r
+        } else if (BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {\r
             objectNode.put(key, value as String)\r
         } else {\r
             objectNode.put(key, value as String)\r
@@ -117,13 +193,13 @@ object JacksonUtils {
 \r
     @JvmStatic\r
     fun populatePrimitiveValues(value: Any, primitiveType: String, objectNode: ArrayNode) {\r
-        if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
+        if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
             objectNode.add(value as Boolean)\r
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
+        } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
             objectNode.add(value as Int)\r
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
+        } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
             objectNode.add(value as Float)\r
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {\r
+        } else if (BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {\r
             objectNode.add(value as String)\r
         } else {\r
             objectNode.add(value as String)\r
@@ -132,11 +208,11 @@ object JacksonUtils {
 \r
     @JvmStatic\r
     fun populatePrimitiveDefaultValues(key: String, primitiveType: String, objectNode: ObjectNode) {\r
-        if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
+        if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
             objectNode.put(key, false)\r
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
+        } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
             objectNode.put(key, 0)\r
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
+        } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
             objectNode.put(key, 0.0)\r
         } else {\r
             objectNode.put(key, "")\r
@@ -145,11 +221,11 @@ object JacksonUtils {
 \r
     @JvmStatic\r
     fun populatePrimitiveDefaultValuesForArrayNode(primitiveType: String, arrayNode: ArrayNode) {\r
-        if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
+        if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
             arrayNode.add(false)\r
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
+        } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
             arrayNode.add(0)\r
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
+        } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
             arrayNode.add(0.0)\r
         } else {\r
             arrayNode.add("")\r
@@ -161,13 +237,13 @@ object JacksonUtils {
         if (nodeValue == null || nodeValue is NullNode) {\r
             objectNode.set(key, nodeValue)\r
         } else if (BluePrintTypes.validPrimitiveTypes().contains(type)) {\r
-            if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == type) {\r
+            if (BluePrintConstants.DATA_TYPE_BOOLEAN == type) {\r
                 objectNode.put(key, nodeValue.asBoolean())\r
-            } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == type) {\r
+            } else if (BluePrintConstants.DATA_TYPE_INTEGER == type) {\r
                 objectNode.put(key, nodeValue.asInt())\r
-            } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == type) {\r
+            } else if (BluePrintConstants.DATA_TYPE_FLOAT == type) {\r
                 objectNode.put(key, nodeValue.floatValue())\r
-            } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_TIMESTAMP == type) {\r
+            } else if (BluePrintConstants.DATA_TYPE_TIMESTAMP == type) {\r
                 objectNode.put(key, nodeValue.asText())\r
             } else {\r
                 objectNode.put(key, nodeValue.asText())\r