Resource Resolution Service
authorSingal, Kapil (ks220y) <ks220y@att.com>
Wed, 16 Jan 2019 21:51:17 +0000 (16:51 -0500)
committerSingal, Kapil (ks220y) <ks220y@att.com>
Thu, 17 Jan 2019 14:38:44 +0000 (09:38 -0500)
Enhancement to the Resource Resolution Service to add ResourceResolutionRunTimeService

Change-Id: Ia0799447e8a71e7455c5a18abc08dce503db6d35
Issue-ID: CCSDK-958
Signed-off-by: Singal, Kapil (ks220y) <ks220y@att.com>
ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/ComponentJythonExecutor.kt
ms/blueprintsprocessor/functions/resource-resolution/pom.xml
ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceAssignmentRuntimeService.kt
ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt
ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/CapabilityResourceAssignmentProcessor.kt
ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/InputResourceAssignmentProcessor.kt
ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/ResourceAssignmentProcessor.kt
ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtils.kt [new file with mode: 0644]

index 5eb4022..9e2ba0b 100644 (file)
@@ -22,7 +22,7 @@ import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ExecutionServiceInp
 import org.onap.ccsdk.apps.blueprintsprocessor.functions.python.executor.utils.PythonExecutorUtils
 import org.onap.ccsdk.apps.blueprintsprocessor.services.execution.AbstractComponentFunction
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
-import org.onap.ccsdk.apps.controllerblueprints.core.checkNotEmptyNThrow
+import org.onap.ccsdk.apps.controllerblueprints.core.checkNotEmptyOrThrow
 import org.onap.ccsdk.apps.controllerblueprints.core.data.OperationAssignment
 import org.slf4j.LoggerFactory
 import org.springframework.beans.factory.annotation.Autowired
@@ -62,7 +62,7 @@ open class ComponentJythonExecutor(private val pythonExecutorProperty: PythonExe
 
         val content: String? = bluePrintRuntimeService.resolveNodeTemplateArtifact(nodeTemplateName, artifactName)
 
-        checkNotEmptyNThrow(content, "artifact ($artifactName) content is empty")
+        checkNotEmptyOrThrow(content, "artifact ($artifactName) content is empty")
 
         val pythonPath: MutableList<String> = operationAssignment.implementation?.dependencies ?: arrayListOf()
         pythonPath.add(blueprintBasePath)
index 2f08c58..925f9e3 100644 (file)
@@ -14,7 +14,8 @@
   ~  See the License for the specific language governing permissions and
   ~  limitations under the License.
   -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
     <name>Blueprints Processor Function - Resource Resolution</name>
     <description>Blueprints Processor Function - Resource Resolution</description>
 
+    <dependencies>
+        <!--<dependency>
+            <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
+            <artifactId>db-resources</artifactId>
+            <version>${project.version}</version>
+        </dependency>-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.mariadb.jdbc</groupId>
+            <artifactId>mariadb-java-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-testing</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
 </project>
index 9d6f4a6..c4ae139 100644 (file)
@@ -6,53 +6,83 @@ import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
 import org.onap.ccsdk.apps.controllerblueprints.core.service.DefaultBluePrintRuntimeService\r
 \r
 class ResourceAssignmentRuntimeService(private var id: String, private var bluePrintContext: BluePrintContext)\r
-    : DefaultBluePrintRuntimeService(id, bluePrintContext){\r
+    : DefaultBluePrintRuntimeService(id, bluePrintContext) {\r
 \r
-    private var resourceResolutionStore: MutableMap<String, JsonNode> = hashMapOf()\r
+    private lateinit var resolutionId: String\r
+    private var resourceStore: MutableMap<String, JsonNode> = hashMapOf()\r
 \r
-    override fun getExecutionContext(): MutableMap<String, JsonNode> {\r
-        return resourceResolutionStore\r
+    fun createUniqueId(key: String) {\r
+        resolutionId = "$id-$key"\r
     }\r
 \r
-    @Suppress("UNCHECKED_CAST")\r
-    override fun setExecutionContext(executionContext: MutableMap<String, JsonNode>) {\r
-        this.resourceResolutionStore = executionContext\r
+    fun cleanResourceStore() {\r
+        resourceStore.clear()\r
     }\r
 \r
-    override fun put(key: String, value: JsonNode) {\r
-        resourceResolutionStore[key] = value\r
+    fun putResolutionStore(key: String, value: JsonNode) {\r
+        resourceStore[key] = value\r
     }\r
 \r
-    override fun get(key: String): JsonNode {\r
-        return resourceResolutionStore[key] ?: throw BluePrintProcessorException("failed to get execution property($key)")\r
+    fun getResolutionStore(key: String): JsonNode {\r
+        return resourceStore[key]\r
+                ?: throw BluePrintProcessorException("failed to get execution property ($key)")\r
     }\r
 \r
-    override fun check(key: String): Boolean {\r
-        return resourceResolutionStore.containsKey(key)\r
+    fun checkResolutionStore(key: String): Boolean {\r
+        return resourceStore.containsKey(key)\r
     }\r
 \r
-    override fun cleanRuntime() {\r
-        resourceResolutionStore.clear()\r
+    fun getJsonNodeFromResolutionStore(key: String): JsonNode {\r
+        return getResolutionStore(key)\r
     }\r
 \r
-    private fun getJsonNode(key: String): JsonNode {\r
-        return get(key)\r
+    fun getStringFromResolutionStore(key: String): String? {\r
+        return getResolutionStore(key).asText()\r
     }\r
 \r
-    override fun getAsString(key: String): String? {\r
-        return get(key).asText()\r
+    fun getBooleanFromResolutionStore(key: String): Boolean? {\r
+        return getResolutionStore(key).asBoolean()\r
     }\r
 \r
-    override fun getAsBoolean(key: String): Boolean? {\r
-        return get(key).asBoolean()\r
+    fun getIntFromResolutionStore(key: String): Int? {\r
+        return getResolutionStore(key).asInt()\r
     }\r
 \r
-    override fun getAsInt(key: String): Int? {\r
-        return get(key).asInt()\r
+    fun getDoubleFromResolutionStore(key: String): Double? {\r
+        return getResolutionStore(key).asDouble()\r
     }\r
 \r
-    override fun getAsDouble(key: String): Double? {\r
-        return get(key).asDouble()\r
+    fun putDictionaryStore(key: String, value: JsonNode) {\r
+        resourceStore["dictionary-$key"] = value\r
+    }\r
+\r
+    fun getDictionaryStore(key: String): JsonNode {\r
+        return resourceStore["dictionary-$key"]\r
+                ?: throw BluePrintProcessorException("failed to get execution property (dictionary-$key)")\r
+    }\r
+\r
+    fun checkDictionaryStore(key: String): Boolean {\r
+        return resourceStore.containsKey("dictionary-$key")\r
+    }\r
+\r
+    fun getJsonNodeFromDictionaryStore(key: String): JsonNode {\r
+        return getResolutionStore("dictionary-$key")\r
+    }\r
+\r
+    fun getStringFromDictionaryStore(key: String): String? {\r
+        return getResolutionStore("dictionary-$key").asText()\r
+    }\r
+\r
+    fun getBooleanFromDictionaryStore(key: String): Boolean? {\r
+        return getResolutionStore("dictionary-$key").asBoolean()\r
+    }\r
+\r
+    fun getIntFromDictionaryStore(key: String): Int? {\r
+        return getResolutionStore("dictionary-$key").asInt()\r
+    }\r
+\r
+    fun getDoubleFromDictionaryStore(key: String): Double? {\r
+        return getResolutionStore("dictionary-$key").asDouble()\r
     }\r
 \r
 }\r
index 5a7161d..38e5c95 100644 (file)
@@ -18,6 +18,7 @@
 package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution\r
 \r
 import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.processor.ResourceAssignmentProcessor\r
+import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.utils.ResourceAssignmentUtils\r
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants\r
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException\r
 import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService\r
@@ -88,7 +89,7 @@ class ResourceResolutionService {
         val resourceDictionaries: MutableMap<String, ResourceDefinition> = JacksonUtils.getMapFromFile(dictionaryFile, ResourceDefinition::class.java)\r
                 ?: throw BluePrintProcessorException("couldn't get Dictionary Definitions")\r
 \r
-        executeProcessors(bluePrintRuntimeService, resourceDictionaries, resourceAssignments)\r
+        executeProcessors(bluePrintRuntimeService, resourceDictionaries, resourceAssignments, templateArtifactName)\r
 \r
         // Check Template is there\r
         val templateContent = bluePrintRuntimeService.resolveNodeTemplateArtifact(nodeTemplateName, mappingArtifactName)\r
@@ -107,11 +108,13 @@ class ResourceResolutionService {
     }\r
 \r
 \r
-    fun executeProcessors(bluePrintRuntimeService: BluePrintRuntimeService<*>,\r
-                          resourceDictionaries: MutableMap<String, ResourceDefinition>,\r
-                          resourceAssignments: MutableList<ResourceAssignment>) {\r
+    private fun executeProcessors(blueprintRuntimeService: BluePrintRuntimeService<*>,\r
+                                  resourceDictionaries: MutableMap<String, ResourceDefinition>,\r
+                                  resourceAssignments: MutableList<ResourceAssignment>,\r
+                                  templateArtifactName: String) {\r
 \r
         val bulkSequenced = BulkResourceSequencingUtils.process(resourceAssignments)\r
+        val resourceAssignmentRuntimeService = ResourceAssignmentUtils.transformToRARuntimeService(blueprintRuntimeService, templateArtifactName)\r
 \r
         bulkSequenced.map { batchResourceAssignments ->\r
             batchResourceAssignments.filter { it.name != "*" && it.name != "start" }\r
@@ -124,7 +127,7 @@ class ResourceResolutionService {
                                         "for resource assignment(${resourceAssignment.name})")\r
                         try {\r
                             // Set BluePrint Runtime Service\r
-                            resourceAssignmentProcessor.bluePrintRuntimeService = bluePrintRuntimeService\r
+                            resourceAssignmentProcessor.raRuntimeService = resourceAssignmentRuntimeService\r
                             // Set Resource Dictionaries\r
                             resourceAssignmentProcessor.resourceDictionaries = resourceDictionaries\r
                             // Invoke Apply Method\r
index 9933849..6c23559 100644 (file)
@@ -18,8 +18,8 @@ package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.pr
 
 import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.CapabilityResourceSource
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
-import org.onap.ccsdk.apps.controllerblueprints.resource.dict.utils.ResourceAssignmentUtils
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.context.ApplicationContext
 import org.springframework.stereotype.Service
@@ -40,17 +40,16 @@ open class CapabilityResourceAssignmentProcessor : ResourceAssignmentProcessor()
         return "resource-assignment-processor-capability"
     }
 
-    override fun process(executionRequest: ResourceAssignment) {
+    override fun process(resourceAssignment: ResourceAssignment) {
 
-        val resourceDefinition = resourceDictionaries[executionRequest.dictionaryName]
-                ?: throw BluePrintProcessorException("couldn't get resource definition for ${executionRequest.dictionaryName}")
+        val resourceDefinition = resourceDictionaries[resourceAssignment.dictionaryName]
+                ?: throw BluePrintProcessorException("couldn't get resource definition for ${resourceAssignment.dictionaryName}")
 
-        val resourceSource = resourceDefinition.sources[executionRequest.dictionarySource]
-                ?: throw BluePrintProcessorException("couldn't get resource definition ${executionRequest.dictionaryName} source(${executionRequest.dictionarySource})")
+        val resourceSource = resourceDefinition.sources[resourceAssignment.dictionarySource]
+                ?: throw BluePrintProcessorException("couldn't get resource definition ${resourceAssignment.dictionaryName} source(${resourceAssignment.dictionarySource})")
 
-        checkNotNull(resourceSource.properties) { "failed to get ${executionRequest.dictionarySource} properties" }
-
-        val capabilityResourceSourceProperty = ResourceAssignmentUtils.transformResourceSource(resourceSource.properties!!, CapabilityResourceSource::class.java)
+        val resourceSourceProps = checkNotNull(resourceSource.properties) { "failed to get $resourceSource properties" }
+        val capabilityResourceSourceProperty = JacksonUtils.getInstanceFromMap(resourceSourceProps, CapabilityResourceSource::class.java)
 
         val instanceType = capabilityResourceSourceProperty.type
         val instanceName = capabilityResourceSourceProperty.instanceName
@@ -74,14 +73,14 @@ open class CapabilityResourceAssignmentProcessor : ResourceAssignmentProcessor()
         checkNotNull(componentResourceAssignmentProcessor) { "failed to get capability resource assignment processor($instanceName)" }
 
         // Assign Current Blueprint runtime and ResourceDictionaries
-        componentResourceAssignmentProcessor.bluePrintRuntimeService = bluePrintRuntimeService
+        componentResourceAssignmentProcessor.raRuntimeService = raRuntimeService
         componentResourceAssignmentProcessor.resourceDictionaries = resourceDictionaries
 
         // Invoke componentResourceAssignmentProcessor
-        componentResourceAssignmentProcessor.apply(executionRequest)
+        componentResourceAssignmentProcessor.apply(resourceAssignment)
     }
 
-    override fun recover(runtimeException: RuntimeException, executionRequest: ResourceAssignment) {
+    override fun recover(runtimeException: RuntimeException, resourceAssignment: ResourceAssignment) {
 
         TODO("To Implement")
     }
index bd9c188..f051833 100644 (file)
 
 package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.processor
 
-import org.onap.ccsdk.apps.controllerblueprints.core.*
+import com.fasterxml.jackson.databind.node.NullNode
+import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.utils.ResourceAssignmentUtils
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
+import org.onap.ccsdk.apps.controllerblueprints.core.checkNotEmpty
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
 import org.springframework.stereotype.Service
-import com.fasterxml.jackson.databind.node.NullNode
-import org.onap.ccsdk.apps.controllerblueprints.resource.dict.utils.ResourceAssignmentUtils
 
 /**
  * InputResourceAssignmentProcessor
@@ -35,23 +36,23 @@ open class InputResourceAssignmentProcessor : ResourceAssignmentProcessor() {
         return "resource-assignment-processor-input"
     }
 
-    override fun process(executionRequest: ResourceAssignment) {
+    override fun process(resourceAssignment: ResourceAssignment) {
         try {
-            if (checkNotEmpty(executionRequest.name)) {
-                val value = bluePrintRuntimeService!!.getInputValue(executionRequest.name)
+            if (checkNotEmpty(resourceAssignment.name)) {
+                val value = raRuntimeService.getInputValue(resourceAssignment.name)
                 // if value is null don't call setResourceDataValue to populate the value
                 if (value != null && value !is NullNode) {
-                    ResourceAssignmentUtils.setResourceDataValue(executionRequest, value)
+                    ResourceAssignmentUtils.setResourceDataValue(resourceAssignment, raRuntimeService, value)
                 }
             }
             // Check the value has populated for mandatory case
-            ResourceAssignmentUtils.assertTemplateKeyValueNotNull(executionRequest)
+            ResourceAssignmentUtils.assertTemplateKeyValueNotNull(resourceAssignment)
         } catch (e: Exception) {
-            ResourceAssignmentUtils.setFailedResourceDataValue(executionRequest, e.message)
-            throw BluePrintProcessorException("Failed in template key ($executionRequest) assignments with : (${e.message})", e)
+            ResourceAssignmentUtils.setFailedResourceDataValue(resourceAssignment, e.message)
+            throw BluePrintProcessorException("Failed in template key ($resourceAssignment) assignments with : (${e.message})", e)
         }
     }
 
-    override fun recover(runtimeException: RuntimeException, executionRequest: ResourceAssignment) {
+    override fun recover(runtimeException: RuntimeException, resourceAssignment: ResourceAssignment) {
     }
 }
\ No newline at end of file
index 11cd3fa..43238a5 100644 (file)
@@ -17,9 +17,9 @@
 
 package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.processor
 
+import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.ResourceAssignmentRuntimeService
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BlueprintFunctionNode
-import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition
 import org.slf4j.LoggerFactory
@@ -28,14 +28,12 @@ abstract class ResourceAssignmentProcessor : BlueprintFunctionNode<ResourceAssig
 
     private val log = LoggerFactory.getLogger(ResourceAssignmentProcessor::class.java)
 
-    lateinit var bluePrintRuntimeService: BluePrintRuntimeService<*>
-
+    lateinit var raRuntimeService: ResourceAssignmentRuntimeService
     lateinit var resourceDictionaries: Map<String, ResourceDefinition>
 
-
     open fun resourceDefinition(name: String): ResourceDefinition {
         return resourceDictionaries[name]
-                ?: throw BluePrintProcessorException("couldn't get resource definition($name)")
+                ?: throw BluePrintProcessorException("couldn't get resource definition for ($name)")
     }
 
     override fun prepareRequest(resourceAssignment: ResourceAssignment): ResourceAssignment {
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtils.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtils.kt
new file mode 100644 (file)
index 0000000..ee8911e
--- /dev/null
@@ -0,0 +1,178 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.utils
+
+import com.att.eelf.configuration.EELFLogger
+import com.att.eelf.configuration.EELFManager
+import com.fasterxml.jackson.databind.JsonNode
+import com.fasterxml.jackson.databind.ObjectMapper
+import com.fasterxml.jackson.databind.node.NullNode
+import com.fasterxml.jackson.databind.node.ObjectNode
+import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.ResourceAssignmentRuntimeService
+import org.onap.ccsdk.apps.controllerblueprints.core.*
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
+import java.util.*
+
+class ResourceAssignmentUtils {
+    companion object {
+
+        private val logger: EELFLogger = EELFManager.getInstance().getLogger(ResourceAssignmentUtils::class.toString())
+
+        @Synchronized
+        @Throws(BluePrintProcessorException::class)
+        fun setResourceDataValue(resourceAssignment: ResourceAssignment, raRuntimeService: ResourceAssignmentRuntimeService, value: Any?) {
+
+            val resourceProp = checkNotNull(resourceAssignment.property) { "Failed in setting resource value for resource mapping $resourceAssignment" }
+            checkNotEmptyOrThrow(resourceAssignment.name, "Failed in setting resource value for resource mapping $resourceAssignment")
+
+            if (checkNotEmpty(resourceAssignment.dictionaryName)) {
+                resourceAssignment.dictionaryName = resourceAssignment.name
+                logger.warn("Missing dictionary key, setting with template key (${resourceAssignment.name}) as dictionary key (${resourceAssignment.dictionaryName})")
+            }
+
+            try {
+                if (checkNotEmpty(resourceProp.type)) {
+                    val convertedValue = convertResourceValue(resourceProp.type, value)
+                    logger.info("Setting Resource Value ($convertedValue) for Resource Name (${resourceAssignment.dictionaryName}) of type (${resourceProp.type})")
+                    setResourceValue(resourceAssignment, raRuntimeService, convertedValue)
+                    resourceAssignment.updatedDate = Date()
+                    resourceAssignment.updatedBy = BluePrintConstants.USER_SYSTEM
+                    resourceAssignment.status = BluePrintConstants.STATUS_SUCCESS
+                }
+            } catch (e: Exception) {
+                throw BluePrintProcessorException("Failed in setting value for template key (${resourceAssignment.name}) and " +
+                        "dictionary key (${resourceAssignment.dictionaryName}) of type (${resourceProp.type}) with error message (${e.message})", e)
+            }
+        }
+
+        private fun setResourceValue(resourceAssignment: ResourceAssignment, raRuntimeService: ResourceAssignmentRuntimeService, value: JsonNode) {
+            raRuntimeService.putResolutionStore(resourceAssignment.name, value)
+            raRuntimeService.putDictionaryStore(resourceAssignment.dictionaryName!!, value)
+            resourceAssignment.property!!.value = value
+        }
+
+        private fun convertResourceValue(type: String, value: Any?): JsonNode {
+
+            return if (value == null || value is NullNode) {
+                logger.info("Returning {} value from convertResourceValue", value)
+                NullNode.instance
+            } else if (BluePrintTypes.validPrimitiveTypes().contains(type) && value is String) {
+                JacksonUtils.convertPrimitiveResourceValue(type, value)
+            } else if (value is String) {
+                JacksonUtils.jsonNode(value)
+            } else {
+                JacksonUtils.getJsonNode(value)
+            }
+
+        }
+
+        @Synchronized
+        fun setFailedResourceDataValue(resourceAssignment: ResourceAssignment, message: String?) {
+            if (checkNotEmpty(resourceAssignment.name)) {
+                resourceAssignment.updatedDate = Date()
+                resourceAssignment.updatedBy = BluePrintConstants.USER_SYSTEM
+                resourceAssignment.status = BluePrintConstants.STATUS_FAILURE
+                resourceAssignment.message = message
+            }
+        }
+
+        @Synchronized
+        @Throws(BluePrintProcessorException::class)
+        fun assertTemplateKeyValueNotNull(resourceAssignment: ResourceAssignment) {
+            val resourceProp = checkNotNull(resourceAssignment.property) { "Failed to populate mandatory resource resource mapping $resourceAssignment" }
+            if (resourceProp.required != null && resourceProp.required!! && (resourceProp.value == null || resourceProp.value !is NullNode)) {
+                logger.error("failed to populate mandatory resource mapping ($resourceAssignment)")
+                throw BluePrintProcessorException("failed to populate mandatory resource mapping ($resourceAssignment)")
+            }
+        }
+
+        @Synchronized
+        @Throws(BluePrintProcessorException::class)
+        fun generateResourceDataForAssignments(assignments: List<ResourceAssignment>): String {
+            var result = "{}"
+            try {
+                val mapper = ObjectMapper()
+                val root = mapper.readTree(result)
+
+                assignments.forEach {
+                    if (checkNotEmpty(it.name) && it.property != null) {
+                        val rName = it.name
+                        val type = nullToEmpty(it.property?.type).toLowerCase()
+                        val value = it.property?.value
+                        logger.info("Generating Resource name ($rName), type ($type), value ($value)")
+
+                        when (value) {
+                            null -> (root as ObjectNode).set(rName, null)
+                            is JsonNode -> (root as ObjectNode).set(rName, value)
+                            else -> {
+                                when (type) {
+                                    BluePrintConstants.DATA_TYPE_TIMESTAMP -> (root as ObjectNode).put(rName, value as String)
+                                    BluePrintConstants.DATA_TYPE_STRING -> (root as ObjectNode).put(rName, value as String)
+                                    BluePrintConstants.DATA_TYPE_BOOLEAN -> (root as ObjectNode).put(rName, value as Boolean)
+                                    BluePrintConstants.DATA_TYPE_INTEGER -> (root as ObjectNode).put(rName, value as Int)
+                                    BluePrintConstants.DATA_TYPE_FLOAT -> (root as ObjectNode).put(rName, value as Float)
+                                    else -> {
+                                        if (JacksonUtils.getJsonNode(value) != null) {
+                                            (root as ObjectNode).set(rName, JacksonUtils.getJsonNode(value))
+                                        } else {
+                                            (root as ObjectNode).set(rName, null)
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                result = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(root)
+                logger.info("Generated Resource Param Data ($result)")
+            } catch (e: Exception) {
+                throw BluePrintProcessorException("Resource Assignment is failed with $e.message", e)
+            }
+
+            return result
+        }
+
+        fun transformToRARuntimeService(blueprintRuntimeService: BluePrintRuntimeService<*>, templateArtifactName: String): ResourceAssignmentRuntimeService {
+            val resourceAssignmentRuntimeService = ResourceAssignmentRuntimeService(blueprintRuntimeService.id(), blueprintRuntimeService.bluePrintContext())
+            resourceAssignmentRuntimeService.createUniqueId(templateArtifactName)
+            resourceAssignmentRuntimeService.setExecutionContext(blueprintRuntimeService.getExecutionContext() as MutableMap<String, JsonNode>)
+
+            return resourceAssignmentRuntimeService
+        }
+
+        /*
+         * Populate the Field property type for the Data type
+         */
+        @Synchronized
+        @Throws(BluePrintProcessorException::class)
+        fun getPropertyType(raRuntimeService: ResourceAssignmentRuntimeService, dataTypeName: String, propertyName: String): String {
+            lateinit var type: String
+            try {
+                val dataTypeProps = checkNotNull(raRuntimeService.bluePrintContext().dataTypeByName(dataTypeName)?.properties)
+                val propertyDefinition = checkNotNull(dataTypeProps[propertyName])
+                type = returnNotEmptyOrThrow(propertyDefinition.type) { "Couldn't get data type ($dataTypeName)" }
+                logger.trace("Data type({})'s property ({}) is ({})", dataTypeName, propertyName, type)
+            } catch (e: Exception) {
+                logger.error("couldn't get data type($dataTypeName)'s property ($propertyName), error message $e")
+                throw BluePrintProcessorException("${e.message}", e)
+            }
+            return type
+        }
+    }
+}
\ No newline at end of file