Implement Blueprint Workflow Enhancement
authorMuthuramalingam, Brinda Santh(bs2796) <bs2796@att.com>
Thu, 13 Dec 2018 16:34:49 +0000 (11:34 -0500)
committerMuthuramalingam, Brinda Santh(bs2796) <bs2796@att.com>
Thu, 13 Dec 2018 16:34:49 +0000 (11:34 -0500)
Change-Id: I64d6e949e9a4bc2100b49fedb3781b04c1c03f43
Issue-ID: CCSDK-722
Signed-off-by: Muthuramalingam, Brinda Santh(bs2796) <bs2796@att.com>
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintAttributeDefinitionEnhancerImpl.kt
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintEnhancerServiceImpl.kt
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintNodeTemplateEnhancerImpl.kt
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintNodeTypeEnhancerImpl.kt
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintPolicyTypeEnhancerImpl.kt
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintPropertyDefinitionEnhancerImpl.kt
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintServiceTemplateEnhancerImpl.kt
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintTopologyTemplateEnhancerImpl.kt
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintWorkflowEnhancerImpl.kt
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/ResourceAssignmentEnhancerService.kt
ms/controllerblueprints/modules/service/src/test/java/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintEnhancerServiceImplTest.java

index 68a00eb..9f579bc 100644 (file)
 
 package org.onap.ccsdk.apps.controllerblueprints.service.enhancer
 
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintError
 import org.onap.ccsdk.apps.controllerblueprints.core.data.AttributeDefinition
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintAttributeDefinitionEnhancer
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintRepoService
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeEnhancerService
-import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
 
 class BluePrintAttributeDefinitionEnhancerImpl(private val bluePrintRepoService: BluePrintRepoService,
                                                private val bluePrintTypeEnhancerService: BluePrintTypeEnhancerService)
     : BluePrintAttributeDefinitionEnhancer {
 
-    override fun enhance(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, type: AttributeDefinition) {
+    override fun enhance(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, type: AttributeDefinition) {
         TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
     }
 }
\ No newline at end of file
index 17dfb1b..0b42a26 100644 (file)
@@ -19,9 +19,7 @@ package org.onap.ccsdk.apps.controllerblueprints.service.enhancer
 \r
 import com.att.eelf.configuration.EELFLogger\r
 import com.att.eelf.configuration.EELFManager\r
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintError\r
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException\r
-import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate\r
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintEnhancerService\r
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintRepoService\r
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeEnhancerService\r
@@ -29,6 +27,7 @@ import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintFileUtils\r
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils\r
 import org.springframework.stereotype.Service\r
+import java.util.*\r
 \r
 @Service\r
 open class BluePrintEnhancerServiceImpl(private val bluePrintRepoService: BluePrintRepoService,\r
@@ -37,9 +36,16 @@ open class BluePrintEnhancerServiceImpl(private val bluePrintRepoService: BluePr
     private val log: EELFLogger = EELFManager.getInstance().getLogger(BluePrintEnhancerServiceImpl::class.toString())\r
 \r
     override fun enhance(basePath: String, enrichedBasePath: String): BluePrintContext {\r
+        // Copy the Blueprint Content to Target Location\r
         BluePrintFileUtils.copyBluePrint(basePath, enrichedBasePath)\r
-        BluePrintFileUtils.deleteBluePrintTypes(enrichedBasePath)\r
+\r
+        // Enhance the Blueprint\r
         val enhancedBluePrintContext = enhance(enrichedBasePath)\r
+\r
+        // Delete the Old Type files\r
+        BluePrintFileUtils.deleteBluePrintTypes(enrichedBasePath)\r
+\r
+        // Write the Type File Definitions\r
         BluePrintFileUtils.writeBluePrintTypes(enhancedBluePrintContext)\r
         return enhancedBluePrintContext\r
     }\r
@@ -47,20 +53,21 @@ open class BluePrintEnhancerServiceImpl(private val bluePrintRepoService: BluePr
     @Throws(BluePrintException::class)\r
     override fun enhance(basePath: String): BluePrintContext {\r
         log.info("Enhancing blueprint($basePath)")\r
-        val bluePrintContext = BluePrintMetadataUtils.getBluePrintContext(basePath)\r
-        val error = BluePrintError()\r
-        bluePrintTypeEnhancerService.enhanceServiceTemplate(bluePrintContext, error, "service_template",\r
-                bluePrintContext.serviceTemplate)\r
-        return bluePrintContext\r
-    }\r
+        val blueprintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime(UUID.randomUUID().toString(), basePath)\r
+        try {\r
 \r
-    @Throws(BluePrintException::class)\r
-    override fun enhance(serviceTemplate: ServiceTemplate): ServiceTemplate {\r
-        val bluePrintContext = BluePrintContext(serviceTemplate)\r
-        val error = BluePrintError()\r
-        bluePrintTypeEnhancerService.enhanceServiceTemplate(bluePrintContext, error, "service_template",\r
-                bluePrintContext.serviceTemplate)\r
-        return bluePrintContext.serviceTemplate\r
+            bluePrintTypeEnhancerService.enhanceServiceTemplate(blueprintRuntimeService, "service_template",\r
+                    blueprintRuntimeService.bluePrintContext().serviceTemplate)\r
+\r
+            if (blueprintRuntimeService.getBluePrintError().errors.isNotEmpty()) {\r
+                throw BluePrintException(blueprintRuntimeService.getBluePrintError().errors.toString())\r
+            }\r
+        } catch (e: Exception) {\r
+            log.error("failed in blueprint enhancement", e)\r
+        }\r
+\r
+        return blueprintRuntimeService.bluePrintContext()\r
     }\r
+\r
 }\r
 \r
index f87721f..cfbfab7 100644 (file)
@@ -28,6 +28,7 @@ import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintNodeTem
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintRepoService
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeEnhancerService
 import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
 import org.springframework.beans.factory.config.ConfigurableBeanFactory
 import org.springframework.context.annotation.Scope
 import org.springframework.stereotype.Service
@@ -40,20 +41,22 @@ open class BluePrintNodeTemplateEnhancerImpl(private val bluePrintRepoService: B
 
     private val log: EELFLogger = EELFManager.getInstance().getLogger(BluePrintNodeTemplateEnhancerImpl::class.toString())
 
+    lateinit var bluePrintRuntimeService: BluePrintRuntimeService<*>
     lateinit var bluePrintContext: BluePrintContext
-    lateinit var error: BluePrintError
 
-    override fun enhance(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, nodeTemplate: NodeTemplate) {
+
+    override fun enhance(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, nodeTemplate: NodeTemplate) {
         log.info("Enhancing NodeTemplate($name)")
-        this.bluePrintContext = bluePrintContext
-        this.error = error
+        this.bluePrintRuntimeService = bluePrintRuntimeService
+        this.bluePrintContext = bluePrintRuntimeService.bluePrintContext()
+
 
         val nodeTypeName = nodeTemplate.type
         // Get NodeType from Repo and Update Service Template
         val nodeType = populateNodeType(nodeTypeName)
 
         // Enrich NodeType
-        bluePrintTypeEnhancerService.enhanceNodeType(bluePrintContext, error, nodeTypeName, nodeType)
+        bluePrintTypeEnhancerService.enhanceNodeType(bluePrintRuntimeService, nodeTypeName, nodeType)
 
         //Enrich Node Template Artifacts
         enhanceNodeTemplateArtifactDefinition(name, nodeTemplate)
index f9ed0e6..941be07 100644 (file)
@@ -18,7 +18,6 @@ package org.onap.ccsdk.apps.controllerblueprints.service.enhancer
 
 import com.att.eelf.configuration.EELFLogger
 import com.att.eelf.configuration.EELFManager
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintError
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintTypes
 import org.onap.ccsdk.apps.controllerblueprints.core.data.InterfaceDefinition
@@ -26,9 +25,10 @@ import org.onap.ccsdk.apps.controllerblueprints.core.data.NodeType
 import org.onap.ccsdk.apps.controllerblueprints.core.data.OperationDefinition
 import org.onap.ccsdk.apps.controllerblueprints.core.format
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintNodeTypeEnhancer
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintRepoService
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeEnhancerService
 import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
-import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintRepoService
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
 import org.springframework.beans.factory.config.ConfigurableBeanFactory
 import org.springframework.context.annotation.Scope
 import org.springframework.stereotype.Service
@@ -40,19 +40,21 @@ open class BluePrintNodeTypeEnhancerImpl(private val bluePrintRepoService: BlueP
 
     private val log: EELFLogger = EELFManager.getInstance().getLogger(BluePrintNodeTypeEnhancerImpl::class.toString())
 
+    lateinit var bluePrintRuntimeService: BluePrintRuntimeService<*>
     lateinit var bluePrintContext: BluePrintContext
-    lateinit var error: BluePrintError
 
-    override fun enhance(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, nodeType: NodeType) {
-        this.bluePrintContext = bluePrintContext
-        this.error = error
+
+    override fun enhance(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, nodeType: NodeType) {
+        this.bluePrintRuntimeService = bluePrintRuntimeService
+        this.bluePrintContext = bluePrintRuntimeService.bluePrintContext()
+
 
         val derivedFrom = nodeType.derivedFrom
 
         if (!BluePrintTypes.rootNodeTypes().contains(derivedFrom)) {
             val derivedFromNodeType = populateNodeType(name)
             // Enrich NodeType
-            enhance(bluePrintContext, error, derivedFrom, derivedFromNodeType)
+            enhance(bluePrintRuntimeService, derivedFrom, derivedFromNodeType)
         }
 
         // NodeType Property Definitions
@@ -71,7 +73,7 @@ open class BluePrintNodeTypeEnhancerImpl(private val bluePrintRepoService: BlueP
 
     open fun enrichNodeTypeProperties(nodeTypeName: String, nodeType: NodeType) {
         nodeType.properties?.let {
-            bluePrintTypeEnhancerService.enhancePropertyDefinitions(bluePrintContext, error, nodeType.properties!!)
+            bluePrintTypeEnhancerService.enhancePropertyDefinitions(bluePrintRuntimeService, nodeType.properties!!)
         }
     }
 
@@ -83,7 +85,7 @@ open class BluePrintNodeTypeEnhancerImpl(private val bluePrintRepoService: BlueP
                 // Get Requirement NodeType from Repo and Update Service Template
                 val requirementNodeType = populateNodeType(requirementNodeTypeName)
                 // Enhanypece Node T
-                enhance(bluePrintContext, error, requirementNodeTypeName, requirementNodeType)
+                enhance(bluePrintRuntimeService, requirementNodeTypeName, requirementNodeType)
             }
         }
     }
@@ -91,7 +93,7 @@ open class BluePrintNodeTypeEnhancerImpl(private val bluePrintRepoService: BlueP
     open fun enrichNodeTypeCapabilityProperties(nodeTypeName: String, nodeType: NodeType) {
         nodeType.capabilities?.forEach { _, capabilityDefinition ->
             capabilityDefinition.properties?.let { properties ->
-                bluePrintTypeEnhancerService.enhancePropertyDefinitions(bluePrintContext, error, properties)
+                bluePrintTypeEnhancerService.enhancePropertyDefinitions(bluePrintRuntimeService, properties)
             }
         }
     }
@@ -115,13 +117,13 @@ open class BluePrintNodeTypeEnhancerImpl(private val bluePrintRepoService: BlueP
 
     open fun enrichNodeTypeInterfaceOperationInputs(nodeTypeName: String, operationName: String, operation: OperationDefinition) {
         operation.inputs?.let { inputs ->
-            bluePrintTypeEnhancerService.enhancePropertyDefinitions(bluePrintContext, error, inputs)
+            bluePrintTypeEnhancerService.enhancePropertyDefinitions(bluePrintRuntimeService, inputs)
         }
     }
 
     open fun enrichNodeTypeInterfaceOperationOputputs(nodeTypeName: String, operationName: String, operation: OperationDefinition) {
         operation.outputs?.let { inputs ->
-            bluePrintTypeEnhancerService.enhancePropertyDefinitions(bluePrintContext, error, inputs)
+            bluePrintTypeEnhancerService.enhancePropertyDefinitions(bluePrintRuntimeService, inputs)
         }
     }
 
index 13cbc48..7a9fbb6 100644 (file)
@@ -19,9 +19,9 @@ package org.onap.ccsdk.apps.controllerblueprints.service.enhancer
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintError
 import org.onap.ccsdk.apps.controllerblueprints.core.data.PolicyType
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintPolicyTypeEnhancer
-import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeEnhancerService
-import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintRepoService
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeEnhancerService
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
 import org.springframework.beans.factory.config.ConfigurableBeanFactory
 import org.springframework.context.annotation.Scope
 import org.springframework.stereotype.Service
@@ -32,13 +32,12 @@ class BluePrintPolicyTypeEnhancerImpl(private val bluePrintRepoService: BluePrin
                                       private val bluePrintTypeEnhancerService: BluePrintTypeEnhancerService)
     : BluePrintPolicyTypeEnhancer {
 
-    lateinit var bluePrintContext: BluePrintContext
-    lateinit var error: BluePrintError
+    lateinit var bluePrintRuntimeService: BluePrintRuntimeService<*>
+
 
-    override fun enhance(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, type: PolicyType) {
+    override fun enhance(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, type: PolicyType) {
 
-        this.bluePrintContext = bluePrintContext
-        this.error = error
+       this.bluePrintRuntimeService = bluePrintRuntimeService
 
         // TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
     }
index aea3623..ee3e6c3 100644 (file)
@@ -16,7 +16,6 @@
 
 package org.onap.ccsdk.apps.controllerblueprints.service.enhancer
 
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintError
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintTypes
 import org.onap.ccsdk.apps.controllerblueprints.core.data.DataType
@@ -26,6 +25,7 @@ import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintPropert
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintRepoService
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeEnhancerService
 import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
 import org.springframework.beans.factory.config.ConfigurableBeanFactory
 import org.springframework.context.annotation.Scope
 import org.springframework.stereotype.Service
@@ -37,12 +37,13 @@ open class BluePrintPropertyDefinitionEnhancerImpl(private val bluePrintRepoServ
     : BluePrintPropertyDefinitionEnhancer {
 
 
+    lateinit var bluePrintRuntimeService: BluePrintRuntimeService<*>
     lateinit var bluePrintContext: BluePrintContext
-    lateinit var error: BluePrintError
 
-    override fun enhance(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, propertyDefinition: PropertyDefinition) {
-        this.bluePrintContext = bluePrintContext
-        this.error = error
+
+    override fun enhance(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, propertyDefinition: PropertyDefinition) {
+        this.bluePrintRuntimeService = bluePrintRuntimeService
+        this.bluePrintContext = bluePrintRuntimeService.bluePrintContext()
 
         val propertyType = propertyDefinition.type
         if (BluePrintTypes.validPrimitiveTypes().contains(propertyType)) {
index 2cd9e32..6a4f623 100644 (file)
 
 package org.onap.ccsdk.apps.controllerblueprints.service.enhancer
 
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintError
+import com.att.eelf.configuration.EELFLogger
+import com.att.eelf.configuration.EELFManager
 import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintRepoService
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintServiceTemplateEnhancer
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeEnhancerService
 import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
 import org.springframework.beans.factory.config.ConfigurableBeanFactory
 import org.springframework.context.annotation.Scope
 import org.springframework.stereotype.Service
@@ -31,13 +33,16 @@ import org.springframework.stereotype.Service
 open class BluePrintServiceTemplateEnhancerImpl(private val bluePrintRepoService: BluePrintRepoService,
                                                 private val bluePrintTypeEnhancerService: BluePrintTypeEnhancerService)
     : BluePrintServiceTemplateEnhancer {
+    private val log: EELFLogger = EELFManager.getInstance().getLogger(BluePrintEnhancerServiceImpl::class.toString())
 
+
+    lateinit var bluePrintRuntimeService: BluePrintRuntimeService<*>
     lateinit var bluePrintContext: BluePrintContext
-    lateinit var error: BluePrintError
 
-    override fun enhance(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, type: ServiceTemplate) {
-        this.bluePrintContext = bluePrintContext
-        this.error = error
+    override fun enhance(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, type: ServiceTemplate) {
+        this.bluePrintRuntimeService = bluePrintRuntimeService
+        this.bluePrintContext = bluePrintRuntimeService.bluePrintContext()
+
         initialCleanUp()
         enhanceTopologyTemplate()
     }
@@ -57,7 +62,7 @@ open class BluePrintServiceTemplateEnhancerImpl(private val bluePrintRepoService
 
     open fun enhanceTopologyTemplate() {
         bluePrintContext.serviceTemplate.topologyTemplate?.let { topologyTemplate ->
-            bluePrintTypeEnhancerService.enhanceTopologyTemplate(bluePrintContext, error, "default", topologyTemplate)
+            bluePrintTypeEnhancerService.enhanceTopologyTemplate(bluePrintRuntimeService, "default", topologyTemplate)
         }
     }
 }
\ No newline at end of file
index 58d8f87..6b72d42 100644 (file)
 
 package org.onap.ccsdk.apps.controllerblueprints.service.enhancer
 
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintError
 import org.onap.ccsdk.apps.controllerblueprints.core.data.TopologyTemplate
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintRepoService
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTopologyTemplateEnhancer
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeEnhancerService
-import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
 import org.springframework.beans.factory.config.ConfigurableBeanFactory
 import org.springframework.context.annotation.Scope
 import org.springframework.stereotype.Service
@@ -31,12 +30,10 @@ import org.springframework.stereotype.Service
 open class BluePrintTopologyTemplateEnhancerImpl(private val bluePrintRepoService: BluePrintRepoService,
                                                  private val bluePrintTypeEnhancerService: BluePrintTypeEnhancerService) : BluePrintTopologyTemplateEnhancer {
 
-    lateinit var bluePrintContext: BluePrintContext
-    lateinit var error: BluePrintError
+    lateinit var bluePrintRuntimeService: BluePrintRuntimeService<*>
 
-    override fun enhance(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, type: TopologyTemplate) {
-        this.bluePrintContext = bluePrintContext
-        this.error = error
+    override fun enhance(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, type: TopologyTemplate) {
+        this.bluePrintRuntimeService = bluePrintRuntimeService
 
         enhanceTopologyTemplateInputs(type)
         enhanceTopologyTemplateNodeTemplates(type)
@@ -45,19 +42,19 @@ open class BluePrintTopologyTemplateEnhancerImpl(private val bluePrintRepoServic
 
     open fun enhanceTopologyTemplateInputs(topologyTemplate: TopologyTemplate) {
         topologyTemplate.inputs?.let { inputs ->
-            bluePrintTypeEnhancerService.enhancePropertyDefinitions(bluePrintContext, error, inputs)
+            bluePrintTypeEnhancerService.enhancePropertyDefinitions(bluePrintRuntimeService, inputs)
         }
     }
 
     open fun enhanceTopologyTemplateNodeTemplates(topologyTemplate: TopologyTemplate) {
         topologyTemplate.nodeTemplates?.forEach { nodeTemplateName, nodeTemplate ->
-            bluePrintTypeEnhancerService.enhanceNodeTemplate(bluePrintContext, error, nodeTemplateName, nodeTemplate)
+            bluePrintTypeEnhancerService.enhanceNodeTemplate(bluePrintRuntimeService, nodeTemplateName, nodeTemplate)
         }
     }
 
     open fun enhanceTopologyTemplateWorkflowss(topologyTemplate: TopologyTemplate) {
         topologyTemplate.workflows?.forEach { workflowName, workflow ->
-            bluePrintTypeEnhancerService.enhanceWorkflow(bluePrintContext, error, workflowName, workflow)
+            bluePrintTypeEnhancerService.enhanceWorkflow(bluePrintRuntimeService, workflowName, workflow)
         }
     }
 
index 80967f2..e3a8f22 100644 (file)
@@ -18,14 +18,17 @@ package org.onap.ccsdk.apps.controllerblueprints.service.enhancer
 
 import com.att.eelf.configuration.EELFLogger
 import com.att.eelf.configuration.EELFManager
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintError
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
+import org.onap.ccsdk.apps.controllerblueprints.core.ConfigModelConstant
 import org.onap.ccsdk.apps.controllerblueprints.core.data.DataType
+import org.onap.ccsdk.apps.controllerblueprints.core.data.PropertyDefinition
 import org.onap.ccsdk.apps.controllerblueprints.core.data.Workflow
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintRepoService
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeEnhancerService
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintWorkflowEnhancer
 import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
+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 org.springframework.beans.factory.config.ConfigurableBeanFactory
@@ -40,61 +43,140 @@ open class BluePrintWorkflowEnhancerImpl(private val bluePrintRepoService: BlueP
     : BluePrintWorkflowEnhancer {
     private val log: EELFLogger = EELFManager.getInstance().getLogger(BluePrintNodeTemplateEnhancerImpl::class.toString())
 
+    lateinit var bluePrintRuntimeService: BluePrintRuntimeService<*>
     lateinit var bluePrintContext: BluePrintContext
-    lateinit var error: BluePrintError
+
+    val PROPERTY_DEPENDENCY_NODE_TEMPLATES = "dependency-node-templates"
+
 
     private val workflowDataTypes: MutableMap<String, DataType> = hashMapOf()
 
-    override fun enhance(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, workflow: Workflow) {
+    override fun enhance(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, workflow: Workflow) {
         log.info("Enhancing Workflow($name)")
-        this.bluePrintContext = bluePrintContext
-        this.error = error
+       this.bluePrintRuntimeService = bluePrintRuntimeService
+        this.bluePrintContext = bluePrintRuntimeService.bluePrintContext()
+
+        val dynamicPropertyName = "$name-properties"
+        if (workflow.inputs == null) {
+            workflow.inputs = hashMapOf()
+        }
+        // Clean Dynamic Property Field, If present
+        workflow.inputs?.remove(dynamicPropertyName)
 
         // Enrich Only for Resource Assignment and Dynamic Input Properties if any
-        //enhanceStepTargets(workflow)
+        enhanceStepTargets(name, workflow)
 
         // Enrich Workflow Inputs
-        //enhanceWorkflowInputs(name, workflow)
+        enhanceWorkflowInputs(name, workflow)
     }
 
     open fun enhanceWorkflowInputs(name: String, workflow: Workflow) {
-        val dynamicPropertyName = "$name-properties"
+
         workflow.inputs?.let { inputs ->
-            // TODO("Filter Dynamic Properties")
-            bluePrintTypeEnhancerService.enhancePropertyDefinitions(bluePrintContext, error, inputs)
+            bluePrintTypeEnhancerService.enhancePropertyDefinitions(bluePrintRuntimeService, inputs)
         }
     }
 
-    private fun enhanceStepTargets(workflow: Workflow) {
+    private fun enhanceStepTargets(name: String, workflow: Workflow) {
+
+        // Get the first Step Target NodeTemplate name( Since that is the DG Node Template)
+        val dgNodeTemplateName = bluePrintContext.workflowFirstStepNodeTemplate(name)
+
+        val dgNodeTemplate = bluePrintContext.nodeTemplateByName(dgNodeTemplateName)
 
-        val workflowNodeTemplates = workflowTargets(workflow)
+        // Get the Dependent Component Node Template Names
+        val dependencyNodeTemplateNodes = dgNodeTemplate.properties?.get(PROPERTY_DEPENDENCY_NODE_TEMPLATES)
+                ?: throw BluePrintException("couldn't get property($PROPERTY_DEPENDENCY_NODE_TEMPLATES) ")
 
-        workflowNodeTemplates.forEach { nodeTemplate ->
-            val artifactFiles = bluePrintContext.nodeTemplateByName(nodeTemplate).artifacts?.filter {
+        val dependencyNodeTemplates = JacksonUtils.getListFromJsonNode(dependencyNodeTemplateNodes, String::class.java)
+
+        log.info("workflow($name) dependent component NodeTemplates($dependencyNodeTemplates)")
+
+        // Check and Get Resource Assignment File
+        val resourceAssignmentArtifacts = dependencyNodeTemplates?.mapNotNull { componentNodeTemplateName ->
+            log.info("Identified workflow($name) targets($componentNodeTemplateName")
+            val resourceAssignmentArtifacts = bluePrintContext.nodeTemplateByName(componentNodeTemplateName)
+                    .artifacts?.filter {
                 it.value.type == "artifact-mapping-resource"
             }?.map {
+                log.info("resource assignment artifacts(${it.key}) for NodeType(${componentNodeTemplateName})")
                 it.value.file
             }
+            resourceAssignmentArtifacts
+        }?.flatten()
+
+        log.info("Workflow($name) resource assignment files($resourceAssignmentArtifacts")
+
+        if (resourceAssignmentArtifacts != null && resourceAssignmentArtifacts.isNotEmpty()) {
+
+            // Add Workflow Dynamic Property
+            addWorkFlowDynamicPropertyDefinitions(name, workflow)
+
+            resourceAssignmentArtifacts.forEach { fileName ->
 
-            artifactFiles?.let { fileName ->
                 val absoluteFilePath = "${bluePrintContext.rootPath}/$fileName"
-                // Enhance Resource Assignment File
-                enhanceResourceAssignmentFile(absoluteFilePath)
 
+                log.info("enriching workflow($name) artifacts file(${absoluteFilePath}")
+                // Enhance Resource Assignment File
+                val resourceAssignmentProperties = enhanceResourceAssignmentFile(absoluteFilePath)
+                // Add Workflow Dynamic DataType
+                addWorkFlowDynamicDataType(name, resourceAssignmentProperties)
             }
         }
     }
 
-    private fun workflowTargets(workflow: Workflow): List<String> {
-        return workflow.steps?.map {
-            it.value.target
-        }?.filterNotNull() ?: arrayListOf()
-    }
+    private fun enhanceResourceAssignmentFile(filePath: String): MutableMap<String, PropertyDefinition> {
+
+        val resourceAssignmentProperties: MutableMap<String, PropertyDefinition> = hashMapOf()
 
-    open fun enhanceResourceAssignmentFile(filePath: String) {
         val resourceAssignments: MutableList<ResourceAssignment> = JacksonUtils.getListFromFile(filePath, ResourceAssignment::class.java)
                 as? MutableList<ResourceAssignment>
                 ?: throw BluePrintProcessorException("couldn't get ResourceAssignment definitions for the file($filePath)")
-        resourceAssignmentEnhancerService.enhanceBluePrint(bluePrintTypeEnhancerService, bluePrintContext, error, resourceAssignments)
+
+        // Call Resource Assignment Enhancer
+        resourceAssignmentEnhancerService.enhanceBluePrint(bluePrintTypeEnhancerService, bluePrintRuntimeService, resourceAssignments)
+
+        resourceAssignments.forEach { resourceAssignment ->
+            resourceAssignmentProperties[resourceAssignment.name] = resourceAssignment.property!!
+        }
+        return resourceAssignmentProperties
+    }
+
+    private fun addWorkFlowDynamicPropertyDefinitions(name: String, workflow: Workflow) {
+        val dynamicPropertyName = "$name-properties"
+        val propertyDefinition = PropertyDefinition()
+        propertyDefinition.description = "Dynamic PropertyDefinition for workflow($name)."
+        propertyDefinition.type = "dt-$dynamicPropertyName"
+        propertyDefinition.required = true
+        // Add to Workflow Inputs
+        workflow.inputs?.put(dynamicPropertyName, propertyDefinition)
+    }
+
+    private fun addWorkFlowDynamicDataType(workflowName: String, mappingProperties: MutableMap<String, PropertyDefinition>) {
+
+        val dataTypeName = "dt-$workflowName-properties"
+
+        var recipeDataType: DataType? = bluePrintContext.serviceTemplate.dataTypes?.get(dataTypeName)
+
+        if (recipeDataType == null) {
+            log.info("DataType not present for the recipe({})", dataTypeName)
+            recipeDataType = DataType()
+            recipeDataType.version = "1.0.0"
+            recipeDataType.description = "Dynamic DataType definition for workflow($workflowName)."
+            recipeDataType.derivedFrom = ConfigModelConstant.MODEL_TYPE_DATA_TYPE_DYNAMIC
+
+            val dataTypeProperties: MutableMap<String, PropertyDefinition> = hashMapOf()
+            recipeDataType.properties = dataTypeProperties
+
+            // Overwrite WorkFlow DataType
+            bluePrintContext.serviceTemplate.dataTypes?.put(dataTypeName, recipeDataType)
+
+        } else {
+            log.info("Dynamic dataType($dataTypeName) already present for workflow($workflowName).")
+        }
+        // Merge all the Recipe Properties
+        mappingProperties.forEach { propertyName, propertyDefinition ->
+            recipeDataType.properties?.put(propertyName, propertyDefinition)
+        }
     }
 }
\ No newline at end of file
index d6f346e..d6a00ae 100644 (file)
@@ -18,12 +18,11 @@ package org.onap.ccsdk.apps.controllerblueprints.service.enhancer
 \r
 import com.att.eelf.configuration.EELFLogger\r
 import com.att.eelf.configuration.EELFManager\r
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintError\r
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException\r
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintTypes\r
 import org.onap.ccsdk.apps.controllerblueprints.core.format\r
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeEnhancerService\r
-import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext\r
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService\r
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment\r
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition\r
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDictionaryConstants\r
@@ -42,7 +41,7 @@ interface ResourceAssignmentEnhancerService {
 \r
     @Throws(BluePrintException::class)\r
     fun enhanceBluePrint(bluePrintTypeEnhancerService: BluePrintTypeEnhancerService,\r
-                         bluePrintContext: BluePrintContext, error: BluePrintError,\r
+                         bluePrintRuntimeService: BluePrintRuntimeService<*>,\r
                          resourceAssignments: List<ResourceAssignment>)\r
 }\r
 \r
@@ -62,7 +61,7 @@ open class ResourceAssignmentEnhancerServiceImpl(private val resourceDefinitionR
      * then get the NodeType of the Sources assigned\r
      */\r
     override fun enhanceBluePrint(bluePrintTypeEnhancerService: BluePrintTypeEnhancerService,\r
-                                  bluePrintContext: BluePrintContext, error: BluePrintError,\r
+                                  bluePrintRuntimeService: BluePrintRuntimeService<*>,\r
                                   resourceAssignments: List<ResourceAssignment>) {\r
 \r
         val uniqueSourceNodeTypeNames = hashSetOf<String>()\r
@@ -81,7 +80,7 @@ open class ResourceAssignmentEnhancerServiceImpl(private val resourceDefinitionR
             // TODO("Candidate for Optimisation")\r
             if (checkResourceDefinitionNeeded(resourceAssignment)) {\r
 \r
-                bluePrintTypeEnhancerService.enhancePropertyDefinition(bluePrintContext, error, resourceAssignment.name,\r
+                bluePrintTypeEnhancerService.enhancePropertyDefinition(bluePrintRuntimeService, resourceAssignment.name,\r
                         resourceAssignment.property!!);\r
 \r
                 // Get the Resource Definition from Repo\r
@@ -91,13 +90,13 @@ open class ResourceAssignmentEnhancerServiceImpl(private val resourceDefinitionR
                         ?: throw BluePrintException(format("failed to get assigned dictionarySource({}) from resourceDefinition({})", dictionarySource, dictionaryName))\r
 \r
                 // Enrich as NodeTemplate\r
-                bluePrintTypeEnhancerService.enhanceNodeTemplate(bluePrintContext, error, dictionarySource, sourceNodeTemplate)\r
+                bluePrintTypeEnhancerService.enhanceNodeTemplate(bluePrintRuntimeService, dictionarySource, sourceNodeTemplate)\r
             }\r
         }\r
         // Enrich the ResourceSource NodeTypes\r
         uniqueSourceNodeTypeNames.map { nodeTypeName ->\r
             val nodeType = resourceDefinitionRepoService.getNodeType(nodeTypeName)\r
-            bluePrintTypeEnhancerService.enhanceNodeType(bluePrintContext, error, nodeTypeName, nodeType)\r
+            bluePrintTypeEnhancerService.enhanceNodeType(bluePrintRuntimeService, nodeTypeName, nodeType)\r
         }\r
 \r
     }\r
index 01b5176..abc3d56 100644 (file)
@@ -29,6 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.junit4.SpringRunner;
+import java.nio.file.Paths;
 
 @RunWith(SpringRunner.class)
 @ContextConfiguration(classes = {TestApplication.class})
@@ -55,8 +56,11 @@ public class BluePrintEnhancerServiceImplTest {
 
         String basePath = "./../../../../components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration";
 
-        BluePrintContext bluePrintContext = bluePrintEnhancerService.enhance(basePath);
+        String targetPath = Paths.get("target", "bp-enhance").toUri().getPath();
+
+        BluePrintContext bluePrintContext = bluePrintEnhancerService.enhance(basePath, targetPath);
         Assert.assertNotNull("failed to get blueprintContext ", bluePrintContext);
 
+
     }
 }
\ No newline at end of file