From 88c3ca25f1f06fae414be5c0fd2e3d1d09aab15a Mon Sep 17 00:00:00 2001 From: "Muthuramalingam, Brinda Santh(bs2796)" Date: Tue, 4 Dec 2018 20:53:22 -0500 Subject: Add Netconf Executor Function module Change-Id: If264e63d4fc4305bc26dc6b249a462afefcbfe1e Issue-ID: CCSDK-790 Signed-off-by: Muthuramalingam, Brinda Santh(bs2796) --- .../python/executor/ComponentJythonExecutor.kt | 44 ++++++++++++++++------ .../python/executor/JythonExecutionService.kt | 7 ++-- .../python/executor/PythonExecutorConfiguration.kt | 6 +++ 3 files changed, 42 insertions(+), 15 deletions(-) (limited to 'ms/blueprintsprocessor/functions/python-executor/src/main') diff --git a/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/ComponentJythonExecutor.kt b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/ComponentJythonExecutor.kt index 2965cb5d1..166af0f71 100644 --- a/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/ComponentJythonExecutor.kt +++ b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/ComponentJythonExecutor.kt @@ -16,37 +16,39 @@ package org.onap.ccsdk.apps.blueprintsprocessor.functions.python.executor +import com.fasterxml.jackson.databind.node.ArrayNode import org.apache.commons.io.FilenameUtils import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ExecutionServiceInput 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.BluePrintConstants import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException import org.onap.ccsdk.apps.controllerblueprints.core.checkNotEmptyNThrow import org.onap.ccsdk.apps.controllerblueprints.core.data.OperationAssignment import org.slf4j.LoggerFactory +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.beans.factory.config.ConfigurableBeanFactory +import org.springframework.context.ApplicationContext +import org.springframework.context.annotation.Scope import org.springframework.stereotype.Component @Component("component-jython-executor") -class ComponentJythonExecutor(private val pythonExecutorProperty: PythonExecutorProperty) : AbstractComponentFunction() { +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +open class ComponentJythonExecutor(private val pythonExecutorProperty: PythonExecutorProperty) : AbstractComponentFunction() { private val log = LoggerFactory.getLogger(ComponentJythonExecutor::class.java) private var componentFunction: AbstractComponentFunction? = null + @Autowired + lateinit var applicationContext: ApplicationContext - override fun process(executionServiceInput: ExecutionServiceInput) { - - log.info("Processing : ${executionServiceInput.metadata}") - checkNotNull(bluePrintRuntimeService) { "failed to get bluePrintRuntimeService" } - + fun populateJythonComponentInstance(executionServiceInput: ExecutionServiceInput) { val bluePrintContext = bluePrintRuntimeService!!.bluePrintContext() val operationAssignment: OperationAssignment = bluePrintContext .nodeTemplateInterfaceOperation(nodeTemplateName, interfaceName, operationName) - val blueprintBasePath: String = bluePrintRuntimeService!!.get(BluePrintConstants.PROPERTY_BLUEPRINT_BASE_PATH)?.asText() - ?: throw BluePrintProcessorException("python execute path is missing for node template ($nodeTemplateName)") + val blueprintBasePath: String = bluePrintContext.rootPath val artifactName: String = operationAssignment.implementation?.primary ?: throw BluePrintProcessorException("missing primary field to get artifact name for node template ($nodeTemplateName)") @@ -66,12 +68,30 @@ class ComponentJythonExecutor(private val pythonExecutorProperty: PythonExecutor pythonPath.add(blueprintBasePath) pythonPath.addAll(pythonExecutorProperty.modulePaths) - val properties: MutableMap = hashMapOf() - properties["log"] = log + val jythonInstances: MutableMap = hashMapOf() + jythonInstances["log"] = LoggerFactory.getLogger(nodeTemplateName) + + val instanceDependenciesNode: ArrayNode = operationInputs[PythonExecutorConstants.INPUT_INSTANCE_DEPENDENCIES] as? ArrayNode + ?: throw BluePrintProcessorException("Failed to get property(${PythonExecutorConstants.INPUT_INSTANCE_DEPENDENCIES})") + + instanceDependenciesNode.forEach { instanceName -> + jythonInstances[instanceName.textValue()] = applicationContext.getBean(instanceName.textValue()) + } componentFunction = PythonExecutorUtils.getPythonComponent(pythonExecutorProperty.executionPath, - pythonPath, content, pythonClassName, properties) + pythonPath, content, pythonClassName, jythonInstances) + } + + + override fun process(executionServiceInput: ExecutionServiceInput) { + + log.info("Processing : ${operationInputs}") + checkNotNull(bluePrintRuntimeService) { "failed to get bluePrintRuntimeService" } + + // Populate Component Instance + populateJythonComponentInstance(executionServiceInput) + // Invoke Jython Component Script componentFunction!!.process(executionServiceInput) } diff --git a/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/JythonExecutionService.kt b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/JythonExecutionService.kt index dc372af4c..6618d13c3 100644 --- a/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/JythonExecutionService.kt +++ b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/JythonExecutionService.kt @@ -33,10 +33,11 @@ class JythonExecutionService(private val pythonExecutorProperty: PythonExecutorP lateinit var applicationContext: ApplicationContext - fun processJythonNodeTemplate(pythonClassName: String, content: String, pythonPath: MutableList, - jythonContextInstance: MutableMap, - dependencyInstanceNames: List): AbstractComponentFunction { + fun getJythonComponentFunction(pythonClassName: String, content: String, pythonPath: MutableList, + jythonContextInstance: MutableMap, + dependencyInstanceNames: List): AbstractComponentFunction { + pythonPath.addAll(pythonExecutorProperty.modulePaths) dependencyInstanceNames.forEach { instanceName -> jythonContextInstance[instanceName] = applicationContext.getBean(instanceName) diff --git a/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/PythonExecutorConfiguration.kt b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/PythonExecutorConfiguration.kt index dd80fb0ae..be7374c5a 100644 --- a/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/PythonExecutorConfiguration.kt +++ b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/PythonExecutorConfiguration.kt @@ -33,4 +33,10 @@ open class PythonExecutorProperty { @Value("#{'\${blueprints.processor.functions.python.executor.modulePaths}'.split(',')}") lateinit var modulePaths: List +} + +class PythonExecutorConstants { + companion object { + const val INPUT_INSTANCE_DEPENDENCIES = "instance-dependencies" + } } \ No newline at end of file -- cgit 1.2.3-korg