JacksonUtils.kt primitives bugfix 81/93481/6
authorOleg Mitsura <oleg.mitsura@amdocs.com>
Tue, 13 Aug 2019 19:48:29 +0000 (15:48 -0400)
committerOleg Mitsura <oleg.mitsura@amdocs.com>
Fri, 16 Aug 2019 20:29:57 +0000 (16:29 -0400)
Issue-Id: CCSDK-1614

Signed-off-by: Oleg Mitsura <oleg.mitsura@amdocs.com>
Change-Id: I4b0f6390a1c635203cbf44332495a8c15cc52821

ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/CustomFunctions.kt
ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/JacksonUtils.kt

index c77427b..93ba15e 100644 (file)
@@ -24,7 +24,6 @@ import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
 import org.onap.ccsdk.cds.controllerblueprints.core.utils.JsonParserUtils
 import org.slf4j.LoggerFactory
 import org.slf4j.helpers.MessageFormatter
-import java.lang.Float
 import kotlin.reflect.KClass
 
 /**
@@ -98,10 +97,10 @@ fun <T : Any?> T.asJsonPrimitive(): JsonNode {
 fun String.asJsonType(bpDataType: String): JsonNode {
     return when (bpDataType.toLowerCase()) {
         BluePrintConstants.DATA_TYPE_STRING -> this.asJsonPrimitive()
-        BluePrintConstants.DATA_TYPE_BOOLEAN -> java.lang.Boolean.valueOf(this).asJsonPrimitive()
-        BluePrintConstants.DATA_TYPE_INTEGER -> Integer.valueOf(this).asJsonPrimitive()
-        BluePrintConstants.DATA_TYPE_FLOAT -> Float.valueOf(this).asJsonPrimitive()
-        BluePrintConstants.DATA_TYPE_DOUBLE -> java.lang.Double.valueOf(this).asJsonPrimitive()
+        BluePrintConstants.DATA_TYPE_BOOLEAN -> this.toBoolean().asJsonPrimitive()
+        BluePrintConstants.DATA_TYPE_INTEGER -> this.toInt().asJsonPrimitive()
+        BluePrintConstants.DATA_TYPE_FLOAT -> this.toFloat().asJsonPrimitive()
+        BluePrintConstants.DATA_TYPE_DOUBLE -> this.toDouble().asJsonPrimitive()
         // For List, Map and Complex Types.
         else -> this.jsonAsJsonType()
     }
index 768f875..7c2466f 100644 (file)
@@ -238,49 +238,53 @@ class JacksonUtils {
 
         fun populatePrimitiveValues(key: String, value: Any, primitiveType: String, objectNode: ObjectNode) {
             when (primitiveType.toLowerCase()) {
-                BluePrintConstants.DATA_TYPE_STRING,
                 BluePrintConstants.DATA_TYPE_BOOLEAN,
                 BluePrintConstants.DATA_TYPE_INTEGER,
                 BluePrintConstants.DATA_TYPE_FLOAT,
                 BluePrintConstants.DATA_TYPE_DOUBLE,
-                BluePrintConstants.DATA_TYPE_TIMESTAMP ->
+                BluePrintConstants.DATA_TYPE_TIMESTAMP,
+                BluePrintConstants.DATA_TYPE_STRING->
                     objectNode.set(key, value.asJsonPrimitive())
-                else -> objectNode.set(key, value.asJsonType())
+                else -> throw BluePrintException("populatePrimitiveValues expected only primitive values! Received: ($value)")
             }
         }
 
         fun populatePrimitiveValues(value: Any, primitiveType: String, arrayNode: ArrayNode) {
             when (primitiveType.toLowerCase()) {
-                BluePrintConstants.DATA_TYPE_BOOLEAN -> arrayNode.add(value as Boolean)
-                BluePrintConstants.DATA_TYPE_INTEGER -> arrayNode.add(value as Int)
-                BluePrintConstants.DATA_TYPE_FLOAT -> arrayNode.add(value as Float)
-                BluePrintConstants.DATA_TYPE_DOUBLE -> arrayNode.add(value as Double)
-                BluePrintConstants.DATA_TYPE_TIMESTAMP -> arrayNode.add(value as String)
-                else -> arrayNode.add(value as String)
+                BluePrintConstants.DATA_TYPE_BOOLEAN,
+                BluePrintConstants.DATA_TYPE_INTEGER,
+                BluePrintConstants.DATA_TYPE_FLOAT,
+                BluePrintConstants.DATA_TYPE_DOUBLE,
+                BluePrintConstants.DATA_TYPE_TIMESTAMP,
+                BluePrintConstants.DATA_TYPE_STRING -> arrayNode.add(value.asJsonPrimitive())
+                else -> throw BluePrintException("populatePrimitiveValues expected only primitive values! Received: ($value)")
             }
         }
 
         fun populatePrimitiveDefaultValues(key: String, primitiveType: String, objectNode: ObjectNode) {
-            when (primitiveType.toLowerCase()) {
-                BluePrintConstants.DATA_TYPE_BOOLEAN -> objectNode.put(key, false)
-                BluePrintConstants.DATA_TYPE_INTEGER -> objectNode.put(key, 0)
-                BluePrintConstants.DATA_TYPE_FLOAT -> objectNode.put(key, 0.0)
-                BluePrintConstants.DATA_TYPE_DOUBLE -> objectNode.put(key, 0.0)
-                else -> objectNode.put(key, "")
-            }
+            val defaultValue = getDefaultValueOfPrimitiveAsJsonNode(primitiveType) ?:
+                throw BluePrintException("populatePrimitiveDefaultValues expected only primitive values! Received type ($primitiveType)")
+            objectNode.set(key, defaultValue)
         }
 
         fun populatePrimitiveDefaultValuesForArrayNode(primitiveType: String, arrayNode: ArrayNode) {
-            when (primitiveType.toLowerCase()) {
-                BluePrintConstants.DATA_TYPE_BOOLEAN -> arrayNode.add(false)
-                BluePrintConstants.DATA_TYPE_INTEGER -> arrayNode.add(0)
-                BluePrintConstants.DATA_TYPE_FLOAT -> arrayNode.add(0.0)
-                BluePrintConstants.DATA_TYPE_DOUBLE -> arrayNode.add(0.0)
-                else -> arrayNode.add("")
+            val defaultValue = getDefaultValueOfPrimitiveAsJsonNode(primitiveType) ?:
+                throw BluePrintException("populatePrimitiveDefaultValuesForArrayNode expected only primitive values! Received type ($primitiveType)")
+            arrayNode.add(defaultValue)
+        }
+
+        private fun getDefaultValueOfPrimitiveAsJsonNode(primitiveType: String): JsonNode? {
+            return when (primitiveType.toLowerCase()) {
+                BluePrintConstants.DATA_TYPE_BOOLEAN -> BooleanNode.valueOf(false)
+                BluePrintConstants.DATA_TYPE_INTEGER -> IntNode.valueOf(0)
+                BluePrintConstants.DATA_TYPE_FLOAT -> FloatNode.valueOf(0.0f)
+                BluePrintConstants.DATA_TYPE_DOUBLE -> DoubleNode.valueOf(0.0)
+                BluePrintConstants.DATA_TYPE_STRING -> MissingNode.getInstance()
+                else -> null
             }
         }
 
-        fun populateJsonNodeValues(key: String, nodeValue: JsonNode?, type: String, objectNode: ObjectNode) {
+        fun populateJsonNodeValues(key: String, nodeValue: JsonNode, type: String, objectNode: ObjectNode) {
             if (nodeValue == null || nodeValue is NullNode) {
                 objectNode.set(key, nodeValue)
             } else if (BluePrintTypes.validPrimitiveTypes().contains(type)) {
@@ -292,12 +296,14 @@ class JacksonUtils {
 
         fun convertPrimitiveResourceValue(type: String, value: String): JsonNode {
             return when (type.toLowerCase()) {
-                BluePrintConstants.DATA_TYPE_BOOLEAN -> jsonNodeFromObject(java.lang.Boolean.valueOf(value))
-                BluePrintConstants.DATA_TYPE_INTEGER -> jsonNodeFromObject(Integer.valueOf(value))
-                BluePrintConstants.DATA_TYPE_FLOAT -> jsonNodeFromObject(java.lang.Float.valueOf(value))
-                BluePrintConstants.DATA_TYPE_DOUBLE -> jsonNodeFromObject(java.lang.Double.valueOf(value))
+                BluePrintConstants.DATA_TYPE_BOOLEAN -> jsonNodeFromObject(value.toBoolean())
+                BluePrintConstants.DATA_TYPE_INTEGER -> jsonNodeFromObject(value.toInt())
+                BluePrintConstants.DATA_TYPE_FLOAT -> jsonNodeFromObject(value.toFloat())
+                BluePrintConstants.DATA_TYPE_DOUBLE -> jsonNodeFromObject(value.toDouble())
+                //TODO: Verify.. I assume string type should be here..
+                BluePrintConstants.DATA_TYPE_STRING -> jsonNodeFromObject(value)
                 else -> getJsonNode(value)
             }
         }
     }
-}
\ No newline at end of file
+}