Renaming Files having BluePrint to have Blueprint
[ccsdk/cds.git] / ms / blueprintsprocessor / modules / services / workflow-service / src / main / kotlin / org / onap / ccsdk / cds / blueprintsprocessor / services / workflow / NodeTemplateExecutionService.kt
index af78463..1d179a1 100644 (file)
@@ -20,37 +20,52 @@ import com.fasterxml.jackson.databind.JsonNode
 import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInput
 import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceOutput
 import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.StepData
+import org.onap.ccsdk.cds.blueprintsprocessor.core.service.BlueprintClusterService
 import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.AbstractComponentFunction
-import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants
-import org.onap.ccsdk.cds.controllerblueprints.core.putJsonElement
-import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintRuntimeService
+import org.onap.ccsdk.cds.controllerblueprints.core.BlueprintConstants
+import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive
+import org.onap.ccsdk.cds.controllerblueprints.core.data.Implementation
+import org.onap.ccsdk.cds.controllerblueprints.core.service.BlueprintDependencyService
+import org.onap.ccsdk.cds.controllerblueprints.core.service.BlueprintRuntimeService
 import org.slf4j.LoggerFactory
-import org.springframework.context.ApplicationContext
 import org.springframework.stereotype.Service
 
 @Service
-open class NodeTemplateExecutionService(private val applicationContext: ApplicationContext) {
+open class NodeTemplateExecutionService(private val bluePrintClusterService: BlueprintClusterService) {
 
     private val log = LoggerFactory.getLogger(NodeTemplateExecutionService::class.java)!!
 
-    suspend fun executeNodeTemplate(bluePrintRuntimeService: BluePrintRuntimeService<*>, nodeTemplateName: String,
-                                    executionServiceInput: ExecutionServiceInput): ExecutionServiceOutput {
+    suspend fun executeNodeTemplate(
+        bluePrintRuntimeService: BlueprintRuntimeService<*>,
+        nodeTemplateName: String,
+        executionServiceInput: ExecutionServiceInput
+    ): ExecutionServiceOutput {
         // Get the Blueprint Context
         val blueprintContext = bluePrintRuntimeService.bluePrintContext()
+
+        val nodeTemplate = blueprintContext.nodeTemplateByName(nodeTemplateName)
         // Get the Component Name, NodeTemplate type is mapped to Component Name
-        val componentName = blueprintContext.nodeTemplateByName(nodeTemplateName).type
+        val componentName = nodeTemplate.type
 
         val interfaceName = blueprintContext.nodeTemplateFirstInterfaceName(nodeTemplateName)
 
         val operationName = blueprintContext.nodeTemplateFirstInterfaceFirstOperationName(nodeTemplateName)
 
-        log.info("executing node template($nodeTemplateName) component($componentName) " +
-                "interface($interfaceName) operation($operationName)")
+        val nodeTemplateImplementation = blueprintContext
+            .nodeTemplateOperationImplementation(nodeTemplateName, interfaceName, operationName)
+            ?: Implementation()
+
+        log.info(
+            "executing node template($nodeTemplateName) component($componentName) " +
+                "interface($interfaceName) operation($operationName) on host (${nodeTemplateImplementation.operationHost}) " +
+                "with timeout(${nodeTemplateImplementation.timeout}) sec."
+        )
 
         // Get the Component Instance
-        val plugin = applicationContext.getBean(componentName, AbstractComponentFunction::class.java)
-        // Set the Blueprint Service
+        val plugin = BlueprintDependencyService.instance<AbstractComponentFunction>(componentName)
+        // Set the Blueprint Services
         plugin.bluePrintRuntimeService = bluePrintRuntimeService
+        plugin.bluePrintClusterService = bluePrintClusterService
         plugin.stepName = nodeTemplateName
 
         // Parent request shouldn't tamper, so need to clone the request and send to the actual component.
@@ -62,9 +77,9 @@ open class NodeTemplateExecutionService(private val applicationContext: Applicat
 
         // Populate Step Meta Data
         val stepInputs: MutableMap<String, JsonNode> = hashMapOf()
-        stepInputs.putJsonElement(BluePrintConstants.PROPERTY_CURRENT_NODE_TEMPLATE, nodeTemplateName)
-        stepInputs.putJsonElement(BluePrintConstants.PROPERTY_CURRENT_INTERFACE, interfaceName)
-        stepInputs.putJsonElement(BluePrintConstants.PROPERTY_CURRENT_OPERATION, operationName)
+        stepInputs[BlueprintConstants.PROPERTY_CURRENT_NODE_TEMPLATE] = nodeTemplateName.asJsonPrimitive()
+        stepInputs[BlueprintConstants.PROPERTY_CURRENT_INTERFACE] = interfaceName.asJsonPrimitive()
+        stepInputs[BlueprintConstants.PROPERTY_CURRENT_OPERATION] = operationName.asJsonPrimitive()
         val stepInputData = StepData().apply {
             name = nodeTemplateName
             properties = stepInputs
@@ -74,5 +89,4 @@ open class NodeTemplateExecutionService(private val applicationContext: Applicat
         // Get the Request from the Context and Set to the Function Input and Invoke the function
         return plugin.applyNB(clonedExecutionServiceInput)
     }
-
-}
\ No newline at end of file
+}