Formatting Code base with ktlint
[ccsdk/cds.git] / ms / controllerblueprints / modules / blueprint-core / src / main / kotlin / org / onap / ccsdk / cds / controllerblueprints / core / service / BluePrintVelocityTemplateService.kt
index 4b6905b..43e27d0 100644 (file)
@@ -23,47 +23,77 @@ import com.fasterxml.jackson.databind.ObjectMapper
 import org.apache.commons.lang3.BooleanUtils
 import org.apache.commons.lang3.StringUtils
 import org.apache.velocity.VelocityContext
-import org.apache.velocity.app.Velocity
+import org.apache.velocity.app.VelocityEngine
 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException
 import org.onap.ccsdk.cds.controllerblueprints.core.interfaces.BluePrintJsonNodeFactory
-import org.onap.ccsdk.cds.controllerblueprints.core.interfaces.BlueprintTemplateService
-import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
+import org.onap.ccsdk.cds.controllerblueprints.core.removeNullNode
 import java.io.StringWriter
 
-object BluePrintVelocityTemplateService: BlueprintTemplateService {
+object BluePrintVelocityTemplateService {
 
     /**
-     * Generate Content from Velocity Template and JSON Content or property map.
+     * Generate Content from Velocity Template and JSON Content with injected API
      */
-    override suspend fun generateContent(template: String, json: String, ignoreJsonNull: Boolean, additionalContext:
-    MutableMap<String, Any>): String {
-        Velocity.init()
+    fun generateContent(
+        template: String,
+        json: String,
+        ignoreJsonNull: Boolean = false,
+        additionalContext: MutableMap<String, Any> = mutableMapOf()
+    ): String {
+
+        // Customized Object Mapper to remove String double quotes
         val mapper = ObjectMapper()
         val nodeFactory = BluePrintJsonNodeFactory()
         mapper.nodeFactory = nodeFactory
 
+        val jsonNode: JsonNode? = if (json.isNotEmpty()) {
+            mapper.readValue(json, JsonNode::class.java)
+                ?: throw BluePrintProcessorException("couldn't get json node from json")
+        } else {
+            null
+        }
+        return generateContent(template, jsonNode, ignoreJsonNull, additionalContext)
+    }
+
+    /**
+     * Generate Content from Velocity Template and JSON Node with injected API
+     */
+    fun generateContent(
+        template: String,
+        jsonNode: JsonNode?,
+        ignoreJsonNull: Boolean = false,
+        additionalContext: MutableMap<String, Any> = mutableMapOf()
+    ): String {
+
+        /*
+         *  create a new instance of the velocity engine
+         */
+        val velocity = VelocityEngine()
+
+        /*
+         *  initialize the engine
+         */
+        velocity.init()
+
         val velocityContext = VelocityContext()
         velocityContext.put("StringUtils", StringUtils::class.java)
         velocityContext.put("BooleanUtils", BooleanUtils::class.java)
 
         // Add the Custom Velocity Context API
-        additionalContext.forEach { name, value -> velocityContext.put(name, value) }
+        additionalContext.forEach { (name, value) -> velocityContext.put(name, value) }
 
         // Add the JSON Data to the context
-        if (json.isNotEmpty()) {
-            val jsonNode = mapper.readValue<JsonNode>(json, JsonNode::class.java)
-                    ?: throw BluePrintProcessorException("couldn't get json node from json")
+        if (jsonNode != null) {
             if (ignoreJsonNull)
-                JacksonUtils.removeJsonNullNode(jsonNode)
+                jsonNode.removeNullNode()
             jsonNode.fields().forEach { entry ->
                 velocityContext.put(entry.key, entry.value)
             }
         }
 
         val stringWriter = StringWriter()
-        Velocity.evaluate(velocityContext, stringWriter, "TemplateData", template)
+        velocity.evaluate(velocityContext, stringWriter, "TemplateData", template)
         stringWriter.flush()
         return stringWriter.toString()
     }
 }
-