Fixes: manual integration test of CDS 15/78215/12
authorAlexis de Talhouët <adetalhouet89@gmail.com>
Mon, 11 Feb 2019 22:23:48 +0000 (17:23 -0500)
committerAlexis de Talhouët <adetalhouet89@gmail.com>
Tue, 12 Feb 2019 19:12:44 +0000 (14:12 -0500)
- support to overwrite cba
- fix map to json
- finish meshing
- fix python context not having the bluePrintRuntimeService injected
- load all properties in the properties store

Issue-ID: CCSDK-414
Change-Id: I6b65201529d0ffd9c3e18023a33e0081236b01de
Signed-off-by: Alexis de Talhouët <adetalhouet89@gmail.com>
22 files changed:
components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Definitions/activation-blueprint.json
components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Definitions/node_types.json
components/model-catalog/definition-type/starter-type/node_type/component-jython-executor.json
components/model-catalog/definition-type/starter-type/node_type/component-resource-resolution.json [moved from components/model-catalog/definition-type/starter-type/node_type/component-resource-assignment.json with 90% similarity]
ms/blueprintsprocessor/application/pom.xml
ms/blueprintsprocessor/application/src/main/resources/application.properties
ms/blueprintsprocessor/application/src/test/resources/application.properties
ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/BlueprintPythonService.kt
ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/ComponentJythonExecutor.kt
ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/plugin/BlueprintPythonHost.kt
ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/plugin/BlueprintPythonInterpreterProxy.kt
ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/ComponentJythonExecutorTest.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/utils/ResourceAssignmentUtils.kt
ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionComponentTest.kt
ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/BlueprintProcessorCatalogServiceImpl.kt
ms/blueprintsprocessor/modules/services/workflow-service/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/services/workflow/mock/MockComponentFunction.kt
ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtils.kt
ms/controllerblueprints/modules/blueprint-core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintContextTest.kt
ms/controllerblueprints/modules/blueprint-core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeServiceTest.kt
ms/controllerblueprints/modules/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/ResourceDictionaryConstants.kt
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/load/ControllerBlueprintCatalogServiceImpl.kt

index 822cc68..5af64ca 100644 (file)
         }
       },
       "resource-assignment": {
-        "type": "component-resource-assignment",
+        "type": "component-resource-resolution",
         "interfaces": {
-          "ResourceAssignmentComponent": {
+          "ResourceResolutionComponent": {
             "operations": {
               "process": {
                 "inputs": {
         }
       },
       "resource-assignment-py": {
-        "type": "component-resource-assignment",
+        "type": "component-resource-resolution",
         "interfaces": {
-          "ResourceAssignmentComponent": {
+          "ResourceResolutionComponent": {
             "operations": {
               "process": {
                 "implementation": {
       "activate-jython": {
         "type": "component-jython-executor",
         "interfaces": {
-          "JythonExecutorComponent": {
+          "ComponentJythonExecutor": {
             "operations": {
               "process": {
                 "implementation": {
index f7970bf..400db43 100644 (file)
@@ -91,7 +91,7 @@
       },
       "derived_from": "tosca.nodes.component.Jython"
     },
-    "component-resource-assignment": {
+    "component-resource-resolution": {
       "description": "This is Resource Assignment Component API",
       "version": "1.0.0",
       "attributes": {
         }
       },
       "interfaces": {
-        "ResourceAssignmentComponent": {
+        "ResourceResolutionComponent": {
           "operations": {
             "process": {
               "inputs": {
         }
       },
       "interfaces": {
-        "JythonExecutorComponent": {
+        "ComponentJythonExecutor": {
           "operations": {
             "process": {
               "inputs": {
index 4959a9d..af8aae1 100644 (file)
@@ -7,7 +7,7 @@
     }
   },
   "interfaces": {
-    "JythonExecutorComponent": {
+    "ComponentJythonExecutor": {
       "operations": {
         "process": {
           "inputs": {
@@ -1,82 +1,82 @@
-{\r
-  "description": "This is Resource Assignment Component API",\r
-  "version": "1.0.0",\r
-  "attributes": {\r
-    "assignment-params": {\r
-      "required": true,\r
-      "type": "string"\r
-    }\r
-  },\r
-  "capabilities": {\r
-    "component-node": {\r
-      "type": "tosca.capabilities.Node"\r
-    }\r
-  },\r
-  "interfaces": {\r
-    "ResourceAssignmentComponent": {\r
-      "operations": {\r
-        "process": {\r
-          "inputs": {\r
-            "template-name": {\r
-              "description": "Service Template Name.",\r
-              "required": true,\r
-              "type": "string"\r
-            },\r
-            "template-version": {\r
-              "description": "Service Template Version.",\r
-              "required": true,\r
-              "type": "string"\r
-            },\r
-            "resource-type": {\r
-              "description": "Request type.",\r
-              "required": true,\r
-              "type": "string"\r
-            },\r
-            "template-names": {\r
-              "description": "Name of the artifact Node Templates, to get the template Content.",\r
-              "required": true,\r
-              "type": "list",\r
-              "entry_schema": {\r
-                "type": "string"\r
-              }\r
-            },\r
-            "artifact-prefix-names": {\r
-              "required": false,\r
-              "description": "Template , Resource Assignment Artifact Prefix names",\r
-              "type": "list",\r
-              "entry_schema": {\r
-                "type": "string"\r
-              }\r
-            },\r
-            "request-id": {\r
-              "description": "Request Id, Unique Id for the request.",\r
-              "required": true,\r
-              "type": "string"\r
-            },\r
-            "resource-id": {\r
-              "description": "Resource Id.",\r
-              "required": true,\r
-              "type": "string"\r
-            },\r
-            "action-name": {\r
-              "description": "Action Name of the process",\r
-              "required": true,\r
-              "type": "string"\r
-            }\r
-          },\r
-          "outputs": {\r
-            "resource-assignment-params": {\r
-              "required": true,\r
-              "type": "string"\r
-            },\r
-            "status": {\r
-              "required": true,\r
-              "type": "string"\r
-            }\r
-          }\r
-        }\r
-      }\r
-    }\r
-  },\r
-  "derived_from": "tosca.nodes.Component"\r
+{
+  "description": "This is Resource Assignment Component API",
+  "version": "1.0.0",
+  "attributes": {
+    "assignment-params": {
+      "required": true,
+      "type": "string"
+    }
+  },
+  "capabilities": {
+    "component-node": {
+      "type": "tosca.capabilities.Node"
+    }
+  },
+  "interfaces": {
+    "ResourceResolutionComponent": {
+      "operations": {
+        "process": {
+          "inputs": {
+            "template-name": {
+              "description": "Service Template Name.",
+              "required": true,
+              "type": "string"
+            },
+            "template-version": {
+              "description": "Service Template Version.",
+              "required": true,
+              "type": "string"
+            },
+            "resource-type": {
+              "description": "Request type.",
+              "required": true,
+              "type": "string"
+            },
+            "template-names": {
+              "description": "Name of the artifact Node Templates, to get the template Content.",
+              "required": true,
+              "type": "list",
+              "entry_schema": {
+                "type": "string"
+              }
+            },
+            "artifact-prefix-names": {
+              "required": false,
+              "description": "Template , Resource Assignment Artifact Prefix names",
+              "type": "list",
+              "entry_schema": {
+                "type": "string"
+              }
+            },
+            "request-id": {
+              "description": "Request Id, Unique Id for the request.",
+              "required": false,
+              "type": "string"
+            },
+            "resource-id": {
+              "description": "Resource Id.",
+              "required": false,
+              "type": "string"
+            },
+            "action-name": {
+              "description": "Action Name of the process",
+              "required": false,
+              "type": "string"
+            }
+          },
+          "outputs": {
+            "resource-assignment-params": {
+              "required": true,
+              "type": "string"
+            },
+            "status": {
+              "required": true,
+              "type": "string"
+            }
+          }
+        }
+      }
+    }
+  },
+  "derived_from": "tosca.nodes.Component"
 }
\ No newline at end of file
index 9ad2ccb..b02e9e9 100755 (executable)
             <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
             <artifactId>resource-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.onap.ccsdk.apps.blueprintsprocessor.functions</groupId>
+            <artifactId>python-executor</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
             <artifactId>selfservice-api</artifactId>
index d48aba5..e5c928d 100755 (executable)
@@ -30,11 +30,10 @@ blueprintsprocessor.db.primary.url=jdbc:mysql://db:3306/sdnctl
 blueprintsprocessor.db.primary.username=sdnctl
 blueprintsprocessor.db.primary.password=sdnctl
 blueprintsprocessor.db.primary.driverClassName=org.mariadb.jdbc.Driver
-blueprintsprocessor.db.primary.hibernateHbm2ddlAuto=none
-blueprintsprocessor.db.primary.hibernateDDLAuto=none
+blueprintsprocessor.db.primary.hibernateHbm2ddlAuto=update
+blueprintsprocessor.db.primary.hibernateDDLAuto=update
 blueprintsprocessor.db.primary.hibernateNamingStrategy=org.hibernate.cfg.ImprovedNamingStrategy
 blueprintsprocessor.db.primary.hibernateDialect=org.hibernate.dialect.MySQL5InnoDBDialect
-
 # Python executor
 blueprints.processor.functions.python.executor.executionPath=/opt/app/onap/scripts/jython
 blueprints.processor.functions.python.executor.modulePaths=/opt/app/onap/scripts/jython
\ No newline at end of file
index bfbf458..2b5bea1 100644 (file)
@@ -29,7 +29,6 @@ blueprintsprocessor.db.primary.hibernateHbm2ddlAuto=create-drop
 blueprintsprocessor.db.primary.hibernateDDLAuto=update
 blueprintsprocessor.db.primary.hibernateNamingStrategy=org.hibernate.cfg.ImprovedNamingStrategy
 blueprintsprocessor.db.primary.hibernateDialect=org.hibernate.dialect.H2Dialect
-
 # Python executor
 blueprints.processor.functions.python.executor.executionPath=/opt/app/onap/scripts/jython
-blueprints.processor.functions.python.executor.modulePaths=/opt/app/onap/scripts/jython
\ No newline at end of file
+blueprints.processor.functions.python.executor.modulePaths=/opt/app/onap/scripts/jython
index cea02fb..21adcd5 100644 (file)
@@ -34,10 +34,10 @@ class BlueprintPythonService(val pythonExecutorProperty: PythonExecutorProperty)
         pythonPath.add(blueprintBasePath)
         pythonPath.addAll(pythonExecutorProperty.modulePaths)
 
-        var blueprintPythonConfigurations = BluePrintPython(pythonExecutorProperty.executionPath, pythonPath, arrayListOf())
+        val blueprintPythonConfigurations = BluePrintPython(pythonExecutorProperty.executionPath, pythonPath, arrayListOf())
 
         val blueprintPythonHost = BlueprintPythonHost(blueprintPythonConfigurations)
-        var pyObject = blueprintPythonHost.getPythonComponent(content, pythonClassName, dependencyInstanceNames)
+        val pyObject = blueprintPythonHost.getPythonComponent(content, pythonClassName, dependencyInstanceNames)
 
         log.info("Component Object {}", pyObject)
 
index 4a3ad6b..ba55638 100644 (file)
@@ -26,6 +26,7 @@ import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
 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
 import org.springframework.beans.factory.config.ConfigurableBeanFactory
 import org.springframework.context.ApplicationContext
 import org.springframework.context.annotation.Scope
@@ -40,7 +41,25 @@ open class ComponentJythonExecutor(private var applicationContext: ApplicationCo
 
     private var componentFunction: AbstractComponentFunction? = null
 
-    fun populateJythonComponentInstance(executionServiceInput: ExecutionServiceInput) {
+    override fun prepareRequest(executionRequest: ExecutionServiceInput): ExecutionServiceInput {
+        val request = super.prepareRequest(executionRequest)
+        // Populate Component Instance
+        populateJythonComponentInstance()
+        return request
+    }
+
+    override fun process(executionRequest: ExecutionServiceInput) {
+        log.info("Processing : $operationInputs")
+        // Invoke Jython Component Script
+        componentFunction!!.process(executionServiceInput)
+
+    }
+
+    override fun recover(runtimeException: RuntimeException, executionRequest: ExecutionServiceInput) {
+        componentFunction!!.recover(runtimeException, executionRequest)
+    }
+
+    private fun populateJythonComponentInstance() {
         val bluePrintContext = bluePrintRuntimeService.bluePrintContext()
 
         val operationAssignment: OperationAssignment = bluePrintContext
@@ -63,36 +82,23 @@ open class ComponentJythonExecutor(private var applicationContext: ApplicationCo
         val instanceDependenciesNode: ArrayNode = operationInputs[PythonExecutorConstants.INPUT_INSTANCE_DEPENDENCIES] as? ArrayNode
                 ?: throw BluePrintProcessorException("Failed to get property(${PythonExecutorConstants.INPUT_INSTANCE_DEPENDENCIES})")
 
-        val jythonContextInstance: MutableMap<String, Any> = hashMapOf()
-        jythonContextInstance["log"] = LoggerFactory.getLogger(pythonClassName)
-        jythonContextInstance["bluePrintRuntimeService"] = bluePrintRuntimeService
-        instanceDependenciesNode?.forEach { instanceName ->
-            val instance = instanceName.textValue()
-            val value = applicationContext.getBean(instance)
-                    ?: throw BluePrintProcessorException("couldn't get the dependency instance($instance)")
-            jythonContextInstance[instance] = value
+        val jythonInstance: MutableMap<String, Any> = hashMapOf()
+        jythonInstance["log"] = LoggerFactory.getLogger(pythonClassName)
+        jythonInstance["bluePrintRuntimeService"] = bluePrintRuntimeService
+
+        instanceDependenciesNode.forEach { instanceName ->
+            jythonInstance[instanceName.textValue()] = applicationContext.getBean(instanceName.textValue())
         }
 
+        // Setup componentFunction
         componentFunction = blueprintPythonService.jythonInstance(bluePrintContext, pythonClassName,
-                content!!, jythonContextInstance)
-    }
-
-
-    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)
-
+                content!!, jythonInstance)
+        componentFunction?.bluePrintRuntimeService = bluePrintRuntimeService
+        componentFunction?.executionServiceInput = executionServiceInput
+        componentFunction?.stepName = stepName
+        componentFunction?.interfaceName = interfaceName
+        componentFunction?.operationName = operationName
+        componentFunction?.processId = processId
+        componentFunction?.workflowName = workflowName
     }
-
-    override fun recover(runtimeException: RuntimeException, executionRequest: ExecutionServiceInput) {
-        componentFunction!!.recover(runtimeException, executionRequest)
-    }
-
 }
\ No newline at end of file
index ca0a715..7278ced 100644 (file)
@@ -38,7 +38,7 @@ open class BlueprintPythonHost(private val bluePrintPython: BluePrintPython){
     fun getPythonComponent(content: String?, interfaceName: String, properties: MutableMap<String, Any>?): PyObject {
         bluePrintPython.content = content!!
         bluePrintPython.pythonClassName = interfaceName
-        bluePrintPython.moduleName = "Blueprint Python Scripting [Class Name = $interfaceName]"
+        bluePrintPython.moduleName = "Blueprint Python Script [Class Name = $interfaceName]"
 
         return blueprintPythonInterpreterProxy.getPythonInstance(properties)
     }
index 34d5119..67a3d95 100644 (file)
@@ -42,7 +42,6 @@ class ComponentJythonExecutorTest {
 
     @Test
     fun testPythonComponentInjection() {
-
         val executionServiceInput = JacksonUtils.readValueFromClassPathFile("payload/requests/sample-activate-request.json",
                 ExecutionServiceInput::class.java)!!
 
@@ -51,7 +50,7 @@ class ComponentJythonExecutorTest {
 
         val stepMetaData: MutableMap<String, JsonNode> = hashMapOf()
         stepMetaData.putJsonElement(BluePrintConstants.PROPERTY_CURRENT_NODE_TEMPLATE, "activate-jython")
-        stepMetaData.putJsonElement(BluePrintConstants.PROPERTY_CURRENT_INTERFACE, "JythonExecutorComponent")
+        stepMetaData.putJsonElement(BluePrintConstants.PROPERTY_CURRENT_INTERFACE, "ComponentJythonExecutor")
         stepMetaData.putJsonElement(BluePrintConstants.PROPERTY_CURRENT_OPERATION, "process")
         bluePrintRuntimeService.put("activate-jython-step-inputs", stepMetaData.asJsonNode())
 
index 38e5c95..ce0f060 100644 (file)
 \r
 package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution\r
 \r
+import com.fasterxml.jackson.databind.node.JsonNodeFactory
 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
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintTemplateService
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils\r
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment\r
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition\r
@@ -89,25 +91,22 @@ class ResourceResolutionService {
         val resourceDictionaries: MutableMap<String, ResourceDefinition> = JacksonUtils.getMapFromFile(dictionaryFile, ResourceDefinition::class.java)\r
                 ?: throw BluePrintProcessorException("couldn't get Dictionary Definitions")\r
 \r
+        // Resolve resources
         executeProcessors(bluePrintRuntimeService, resourceDictionaries, resourceAssignments, templateArtifactName)\r
 \r
         // Check Template is there\r
-        val templateContent = bluePrintRuntimeService.resolveNodeTemplateArtifact(nodeTemplateName, mappingArtifactName)\r
+        val templateContent = bluePrintRuntimeService.resolveNodeTemplateArtifact(nodeTemplateName, templateArtifactName)
 \r
-        // TODO ("Generate Param JSON from Resource Assignment")\r
-        val resolvedParamJsonContent = "{}"\r
+        val resolvedParamJsonContent = ResourceAssignmentUtils.generateResourceDataForAssignments(resourceAssignments.toList())
 \r
         if (templateContent.isNotEmpty()) {\r
-            // TODO ( "Mash Data and Content")\r
-            resolvedContent = "Mashed Content"\r
-\r
+            resolvedContent = BluePrintTemplateService.generateContent(templateContent, resolvedParamJsonContent)
         } else {\r
             resolvedContent = resolvedParamJsonContent\r
         }\r
         return resolvedContent\r
     }\r
 \r
-\r
     private fun executeProcessors(blueprintRuntimeService: BluePrintRuntimeService<*>,\r
                                   resourceDictionaries: MutableMap<String, ResourceDefinition>,\r
                                   resourceAssignments: MutableList<ResourceAssignment>,\r
index ee8911e..93b93fe 100644 (file)
@@ -128,11 +128,7 @@ class ResourceAssignmentUtils {
                                     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)
-                                        }
+                                        (root as ObjectNode).set(rName, JacksonUtils.getJsonNode(value))
                                     }
                                 }
                             }
index 4cfa652..bb54fcb 100644 (file)
@@ -68,7 +68,7 @@ class ResourceResolutionComponentTest {
 
         val stepMetaData: MutableMap<String, JsonNode> = hashMapOf()
         stepMetaData.putJsonElement(BluePrintConstants.PROPERTY_CURRENT_NODE_TEMPLATE, "resource-assignment")
-        stepMetaData.putJsonElement(BluePrintConstants.PROPERTY_CURRENT_INTERFACE, "ResourceAssignmentComponent")
+        stepMetaData.putJsonElement(BluePrintConstants.PROPERTY_CURRENT_INTERFACE, "ResourceResolutionComponent")
         stepMetaData.putJsonElement(BluePrintConstants.PROPERTY_CURRENT_OPERATION, "process")
         bluePrintRuntimeService.put("resource-assignment-step-inputs", stepMetaData.asJsonNode())
 
index dee7ae8..33d0d96 100755 (executable)
@@ -79,10 +79,9 @@ class BlueprintProcessorCatalogServiceImpl(bluePrintValidatorService: BluePrintV
         val artifactName = metadata[BluePrintConstants.METADATA_TEMPLATE_NAME]
         val artifactVersion = metadata[BluePrintConstants.METADATA_TEMPLATE_VERSION]
 
-        log.isDebugEnabled.apply {
-            blueprintModelRepository.findByArtifactNameAndArtifactVersion(artifactName!!, artifactVersion!!)?.let {
-                log.debug("Overwriting blueprint model :$artifactName::$artifactVersion")
-            }
+        blueprintModelRepository.findByArtifactNameAndArtifactVersion(artifactName!!, artifactVersion!!)?.let {
+            log.info("Overwriting blueprint model :$artifactName::$artifactVersion")
+            blueprintModelRepository.deleteByArtifactNameAndArtifactVersion(artifactName, artifactVersion)
         }
 
         val blueprintModel = BlueprintProcessorModel()
index 7b9a35e..4c12456 100644 (file)
@@ -29,7 +29,7 @@ import org.springframework.stereotype.Component
 @Configuration
 open class MockComponentConfiguration {
 
-    @Bean(name = ["component-resource-assignment", "component-netconf-executor", "component-jython-executor"])
+    @Bean(name = ["component-resource-resolution", "component-netconf-executor", "component-jython-executor"])
     open fun createComponentFunction(): AbstractComponentFunction {
         return MockComponentFunction()
     }
index 75310ee..9bf9d13 100644 (file)
@@ -166,8 +166,8 @@ class JacksonUtils {
 
         fun <T> getMapFromJson(content: String, valueType: Class<T>): MutableMap<String, T>? {
             val objectMapper = jacksonObjectMapper()
-            val typeRef = object : TypeReference<MutableMap<String, T>>() {}
-            return objectMapper.readValue(content, typeRef)
+            val mapType = objectMapper.typeFactory.constructMapType(Map::class.java, String::class.java, valueType)
+            return objectMapper.readValue(content, mapType)
         }
 
         fun <T> getMapFromFile(fileName: String, valueType: Class<T>): MutableMap<String, T>? {
index d06ce23..1bd95f3 100644 (file)
@@ -45,7 +45,7 @@ class BluePrintContextTest {
     @Test
     fun testChainedProperty() {
         val bluePrintContext = BluePrintMetadataUtils.getBluePrintContext(blueprintBasePath)
-        val nodeType = bluePrintContext.nodeTypeChained("component-resource-assignment")
+        val nodeType = bluePrintContext.nodeTypeChained("component-resource-resolution")
         assertNotNull(nodeType, "Failed to get chained node type")
         log.trace("Properties {}", JacksonUtils.getJson(nodeType, true))
     }
index 03e233f..d0bd3cf 100644 (file)
@@ -85,7 +85,7 @@ class BluePrintRuntimeServiceTest {
 
         val inContext: MutableMap<String, JsonNode> = bluePrintRuntimeService
                 .resolveNodeTemplateInterfaceOperationInputs("resource-assignment",
-                        "ResourceAssignmentComponent", "process")
+                        "ResourceResolutionComponent", "process")
 
         assertNotNull(inContext, "Failed to populate interface input property values")
         assertEquals(inContext["action-name"], JacksonUtils.jsonNodeFromObject("sample-action"), "Failed to populate parameter action-name")
@@ -101,14 +101,14 @@ class BluePrintRuntimeServiceTest {
         bluePrintRuntimeService.setNodeTemplateAttributeValue("resource-assignment", "assignment-params", NullNode.getInstance())
 
         bluePrintRuntimeService.resolveNodeTemplateInterfaceOperationOutputs("resource-assignment",
-                "ResourceAssignmentComponent", "process")
+                "ResourceResolutionComponent", "process")
 
         val outputStatus = bluePrintRuntimeService.getNodeTemplateOperationOutputValue("resource-assignment",
-                "ResourceAssignmentComponent", "process", "status")
+                "ResourceResolutionComponent", "process", "status")
         assertEquals("success".asJsonPrimitive(), outputStatus, "Failed to get operation property status")
 
         val outputParams = bluePrintRuntimeService.getNodeTemplateOperationOutputValue("resource-assignment",
-                "ResourceAssignmentComponent", "process", "resource-assignment-params")
+                "ResourceResolutionComponent", "process", "resource-assignment-params")
         assertEquals(NullNode.getInstance(), outputParams, "Failed to get operation property resource-assignment-params")
 
     }
index aa06c9d..d33a2f0 100644 (file)
@@ -34,5 +34,5 @@ object ResourceDictionaryConstants {
     const val PROPERTY_OUTPUT_KEY_MAPPING = "output-key-mapping"
     const val PROPERTY_KEY_DEPENDENCIES = "key-dependencies"
 
-    const val PATH_RESOURCE_DEFINITION_TYPE = "resource_definition_types"
+    const val PATH_RESOURCE_DEFINITION_TYPE = "resources_definition_types"
 }
\ No newline at end of file
index 779be65..892cdbd 100755 (executable)
@@ -74,10 +74,10 @@ class ControllerBlueprintCatalogServiceImpl(bluePrintValidatorService: BluePrint
         val artifactName = metadata[BluePrintConstants.METADATA_TEMPLATE_NAME]
         val artifactVersion = metadata[BluePrintConstants.METADATA_TEMPLATE_VERSION]
 
-        log.isDebugEnabled.apply {
-            blueprintModelRepository.findByArtifactNameAndArtifactVersion(artifactName!!, artifactVersion!!)?.let {
-                log.debug("Overwriting blueprint model :$artifactName::$artifactVersion")
-            }
+
+        blueprintModelRepository.findByArtifactNameAndArtifactVersion(artifactName!!, artifactVersion!!)?.let {
+            log.info("Overwriting blueprint model :$artifactName::$artifactVersion")
+            blueprintModelRepository.deleteByArtifactNameAndArtifactVersion(artifactName, artifactVersion)
         }
 
         val blueprintModel = BlueprintModel()