summaryrefslogtreecommitdiffstats
path: root/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap
diff options
context:
space:
mode:
authorBrinda Santh <bs2796@att.com>2019-12-26 16:26:25 -0500
committerKAPIL SINGAL <ks220y@att.com>2019-12-30 18:18:38 +0000
commit41712e142c8d2b2bff9bc9e094f45306a60d7cb9 (patch)
tree1a6578a40b45235c8486a179b84b2e5932d164cf /ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap
parent730c940a84b9056fed993ccef08dc5ec4053db21 (diff)
Relationship Type and Templates models
Enrichment Support for Relationship Types and Templates. Relationship DSL support for ConnectTo connections ( RestClient, SshClient, MessageProducer, MessageConsume, Nats) Moved datatype map from collection to complex type Issue-ID: CCSDK-1054 Signed-off-by: Brinda Santh <bs2796@att.com> Change-Id: I0f18db2cb52e1e93dfab04498b8298587cba2540
Diffstat (limited to 'ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap')
-rw-r--r--ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BluePrintConstants.kt10
-rw-r--r--ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BluePrintTypes.kt9
-rw-r--r--ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/data/BluePrintModel.kt6
-rw-r--r--ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/dsl/BluePrintDSL.kt16
-rw-r--r--ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/dsl/BluePrintServiceDSLBuilder.kt62
-rw-r--r--ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/dsl/BluePrintTemplateDSLBuilder.kt166
-rw-r--r--ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/interfaces/BluePrintEnhancer.kt74
-rw-r--r--ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintContext.kt59
-rw-r--r--ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintRuntimeService.kt68
-rw-r--r--ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/JacksonUtils.kt1
10 files changed, 355 insertions, 116 deletions
diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BluePrintConstants.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BluePrintConstants.kt
index 5aaf6ccd9..f0e2c5b03 100644
--- a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BluePrintConstants.kt
+++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BluePrintConstants.kt
@@ -111,6 +111,15 @@ object BluePrintConstants {
const val MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO = "tosca.relationships.ConnectsTo"
const val MODEL_TYPE_RELATIONSHIPS_ATTACH_TO = "tosca.relationships.AttachesTo"
const val MODEL_TYPE_RELATIONSHIPS_ROUTES_TO = "tosca.relationships.RoutesTo"
+ // CDS Defined Relationship Types
+ const val MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_DB = "tosca.relationships.ConnectsTo.Db"
+ const val MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_REST_CLIENT = "tosca.relationships.ConnectsTo.RestClient"
+ const val MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_SSH_CLIENT = "tosca.relationships.ConnectsTo.SshClient"
+ const val MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_MESSAGE_PRODUCER = "tosca.relationships.ConnectsTo.MessageProducer"
+ const val MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_MESSAGE_CONSUMER = "tosca.relationships.ConnectsTo.MessageConsumer"
+ const val MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_GRPC_SERVER = "tosca.relationships.ConnectsTo.GrpcServer"
+ const val MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_GRPC_CLIENT = "tosca.relationships.ConnectsTo.GrpcClient"
+ const val MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_NATS = "tosca.relationships.ConnectsTo.Nats"
const val MODEL_TYPE_NODE_WORKFLOW = "tosca.nodes.Workflow"
const val MODEL_TYPE_NODE_COMPONENT = "tosca.nodes.Component"
@@ -200,6 +209,7 @@ object BluePrintConstants {
const val PROPERTY_CURRENT_TIMEOUT = "current-timeout"
const val PROPERTY_CURRENT_IMPLEMENTATION = "current-implementation"
const val PROPERTY_EXECUTION_REQUEST = "execution-request"
+ const val PROPERTY_CONNECTION_CONFIG = "connection-config"
const val DEFAULT_VERSION_NUMBER = "1.0.0"
const val DEFAULT_STEP_OPERATION = "process"
diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BluePrintTypes.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BluePrintTypes.kt
index 0e4279a3a..6deb6bc87 100644
--- a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BluePrintTypes.kt
+++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BluePrintTypes.kt
@@ -121,6 +121,7 @@ object BluePrintTypes {
fun validComplexTypes(): List<String> {
val validTypes: MutableList<String> = arrayListOf()
validTypes.add(BluePrintConstants.DATA_TYPE_JSON)
+ validTypes.add(BluePrintConstants.DATA_TYPE_MAP)
return validTypes
}
@@ -128,7 +129,6 @@ object BluePrintTypes {
fun validCollectionTypes(): List<String> {
val validTypes: MutableList<String> = arrayListOf()
validTypes.add(BluePrintConstants.DATA_TYPE_LIST)
- validTypes.add(BluePrintConstants.DATA_TYPE_MAP)
return validTypes
}
@@ -136,7 +136,7 @@ object BluePrintTypes {
fun validPrimitiveOrCollectionPrimitive(propertyDefinition: PropertyDefinition): Boolean {
val entrySchema = propertyDefinition.entrySchema?.type ?: BluePrintConstants.DATA_TYPE_NULL
return BluePrintTypes.validPropertyTypes().contains(propertyDefinition.type) &&
- BluePrintTypes.validPrimitiveTypes().contains(entrySchema)
+ BluePrintTypes.validPrimitiveTypes().contains(entrySchema)
}
@JvmStatic
@@ -158,6 +158,11 @@ object BluePrintTypes {
}
@JvmStatic
+ fun rootRelationshipTypes(): List<String> {
+ return listOf(BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_ROOT)
+ }
+
+ @JvmStatic
fun rootDataTypes(): List<String> {
return listOf(BluePrintConstants.MODEL_TYPE_DATATYPES_ROOT)
}
diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/data/BluePrintModel.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/data/BluePrintModel.kt
index 67a062347..e0333997d 100644
--- a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/data/BluePrintModel.kt
+++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/data/BluePrintModel.kt
@@ -562,10 +562,12 @@ A Relationship Template specifies the occurrence of a manageable relationship be
*/
class RelationshipTemplate {
- var type: String? = null
+ @get:JsonIgnore
+ var id: String? = null
+ lateinit var type: String
var description: String? = null
var metadata: MutableMap<String, String>? = null
- var properties: MutableMap<String, PropertyDefinition>? = null
+ var properties: MutableMap<String, JsonNode>? = null
var attributes: MutableMap<String, JsonNode>? = null
var interfaces: MutableMap<String, InterfaceDefinition>? = null
var copy: String? = null
diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/dsl/BluePrintDSL.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/dsl/BluePrintDSL.kt
index 9964687a6..c23e495fb 100644
--- a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/dsl/BluePrintDSL.kt
+++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/dsl/BluePrintDSL.kt
@@ -166,7 +166,8 @@ fun getNodeTemplateOperationOutput(
propertyId: String,
jsonPath: String? = null
): JsonNode {
- return """{"get_operation_output": ["$nodeTemplateName", "$interfaceName", "process","$propertyId","$jsonPath" ]}""".trimMargin().jsonAsJsonType()
+ return """{"get_operation_output": ["$nodeTemplateName", "$interfaceName", "process","$propertyId","$jsonPath" ]}""".trimMargin()
+ .jsonAsJsonType()
}
/** Blueprint Type Extensions */
@@ -246,6 +247,7 @@ fun BluePrintTypes.artifactTypeMappingResource(): ArtifactType {
}
}
+@Deprecated("CDS won't support", replaceWith = ReplaceWith("artifactTypeScriptKotlin"))
fun BluePrintTypes.artifactTypeScriptJython(): ArtifactType {
return artifactType(
id = BluePrintConstants.MODEL_TYPE_ARTIFACT_SCRIPT_JYTHON,
@@ -268,6 +270,7 @@ fun BluePrintTypes.artifactTypeScriptKotlin(): ArtifactType {
}
}
+@Deprecated("CDS won't support, use implerative workflow definitions.")
fun BluePrintTypes.artifactTypeDirectedGraph(): ArtifactType {
return artifactType(
id = BluePrintConstants.MODEL_TYPE_ARTIFACT_DIRECTED_GRAPH,
@@ -299,6 +302,7 @@ fun BluePrintTypes.relationshipTypeConnectsTo(): RelationshipType {
derivedFrom = BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_ROOT,
description = "Relationship connects to"
) {
+ validTargetTypes(arrayListOf(BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT))
}
}
@@ -311,3 +315,13 @@ fun BluePrintTypes.relationshipTypeDependsOn(): RelationshipType {
) {
}
}
+
+fun BluePrintTypes.relationshipTypeHostedOn(): RelationshipType {
+ return relationshipType(
+ id = BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_HOSTED_ON,
+ version = BluePrintConstants.DEFAULT_VERSION_NUMBER,
+ derivedFrom = BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_ROOT,
+ description = "Relationship hosted on"
+ ) {
+ }
+}
diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/dsl/BluePrintServiceDSLBuilder.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/dsl/BluePrintServiceDSLBuilder.kt
index ca4d56338..a3db88b6a 100644
--- a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/dsl/BluePrintServiceDSLBuilder.kt
+++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/dsl/BluePrintServiceDSLBuilder.kt
@@ -81,77 +81,80 @@ class BluePrintServiceDSLBuilder(
}
fun dsl(id: String, json: JsonNode) {
- if (dslDefinitions == null)
- dslDefinitions = hashMapOf()
+ if (dslDefinitions == null) dslDefinitions = hashMapOf()
dslDefinitions!![id] = json
}
fun dataTypes(dataTypes: MutableMap<String, DataType>) {
- if (this.dataTypes == null)
- this.dataTypes = hashMapOf()
+ if (this.dataTypes == null) this.dataTypes = hashMapOf()
this.dataTypes!!.putAll(dataTypes)
}
fun artifactTypes(artifactTypes: MutableMap<String, ArtifactType>) {
- if (this.artifactTypes == null)
- this.artifactTypes = hashMapOf()
+ if (this.artifactTypes == null) this.artifactTypes = hashMapOf()
this.artifactTypes!!.putAll(artifactTypes)
}
fun relationshipTypes(relationshipTypes: MutableMap<String, RelationshipType>) {
- if (this.relationshipTypes == null)
- this.relationshipTypes = hashMapOf()
+ if (this.relationshipTypes == null) this.relationshipTypes = hashMapOf()
this.relationshipTypes!!.putAll(relationshipTypes)
}
fun policyTypes(policyTypes: MutableMap<String, PolicyType>) {
- if (this.policyTypes == null)
- this.policyTypes = hashMapOf()
+ if (this.policyTypes == null) this.policyTypes = hashMapOf()
this.policyTypes!!.putAll(policyTypes)
}
fun nodeType(nodeTypes: MutableMap<String, NodeType>) {
- if (this.nodeTypes == null)
- this.nodeTypes = hashMapOf()
+ if (this.nodeTypes == null) this.nodeTypes = hashMapOf()
this.nodeTypes!!.putAll(nodeTypes)
}
fun dataType(dataType: DataType) {
- if (dataTypes == null)
- dataTypes = hashMapOf()
+ if (dataTypes == null) dataTypes = hashMapOf()
dataTypes!![dataType.id!!] = dataType
}
fun artifactType(artifactType: ArtifactType) {
- if (artifactTypes == null)
- artifactTypes = hashMapOf()
+ if (artifactTypes == null) artifactTypes = hashMapOf()
artifactTypes!![artifactType.id!!] = artifactType
}
fun relationshipType(relationshipType: RelationshipType) {
- if (relationshipTypes == null)
- relationshipTypes = hashMapOf()
+ if (relationshipTypes == null) relationshipTypes = hashMapOf()
relationshipTypes!![relationshipType.id!!] = relationshipType
}
+ fun relationshipTypes(relationshipTypes: List<RelationshipType>) {
+ if (this.relationshipTypes == null) this.relationshipTypes = hashMapOf()
+ relationshipTypes.forEach { relationshipType ->
+ this.relationshipTypes!![relationshipType.id!!] = relationshipType
+ }
+ }
+
fun policyType(policyType: PolicyType) {
- if (policyTypes == null)
- policyTypes = hashMapOf()
+ if (policyTypes == null) policyTypes = hashMapOf()
policyTypes!![policyType.id!!] = policyType
}
fun nodeType(nodeType: NodeType) {
- if (nodeTypes == null)
- nodeTypes = hashMapOf()
+ if (nodeTypes == null) nodeTypes = hashMapOf()
nodeTypes!![nodeType.id!!] = nodeType
}
+ fun nodeTypes(nodeTypes: List<NodeType>) {
+ if (this.nodeTypes == null) this.nodeTypes = hashMapOf()
+ nodeTypes.forEach { nodeType ->
+ this.nodeTypes!![nodeType.id!!] = nodeType
+ }
+ }
+
fun dataType(
id: String,
version: String,
@@ -159,8 +162,7 @@ class BluePrintServiceDSLBuilder(
description: String,
block: DataTypeBuilder.() -> Unit
) {
- if (dataTypes == null)
- dataTypes = hashMapOf()
+ if (dataTypes == null) dataTypes = hashMapOf()
dataTypes!![id] = DataTypeBuilder(id, version, derivedFrom, description).apply(block).build()
}
@@ -171,8 +173,7 @@ class BluePrintServiceDSLBuilder(
description: String,
block: ArtifactTypeBuilder.() -> Unit
) {
- if (artifactTypes == null)
- artifactTypes = hashMapOf()
+ if (artifactTypes == null) artifactTypes = hashMapOf()
artifactTypes!![id] = ArtifactTypeBuilder(id, version, derivedFrom, description).apply(block).build()
}
@@ -183,8 +184,7 @@ class BluePrintServiceDSLBuilder(
description: String,
block: RelationshipTypeBuilder.() -> Unit
) {
- if (relationshipTypes == null)
- relationshipTypes = hashMapOf()
+ if (relationshipTypes == null) relationshipTypes = hashMapOf()
relationshipTypes!![id] = RelationshipTypeBuilder(id, version, derivedFrom, description).apply(block).build()
}
@@ -195,8 +195,7 @@ class BluePrintServiceDSLBuilder(
description: String,
block: PolicyTypeBuilder.() -> Unit
) {
- if (policyTypes == null)
- policyTypes = hashMapOf()
+ if (policyTypes == null) policyTypes = hashMapOf()
policyTypes!![id] = PolicyTypeBuilder(id, version, derivedFrom, description).apply(block).build()
}
@@ -207,8 +206,7 @@ class BluePrintServiceDSLBuilder(
description: String,
block: NodeTypeBuilder.() -> Unit
) {
- if (nodeTypes == null)
- nodeTypes = hashMapOf()
+ if (nodeTypes == null) nodeTypes = hashMapOf()
nodeTypes!![id] = NodeTypeBuilder(id, version, derivedFrom, description).apply(block).build()
}
diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/dsl/BluePrintTemplateDSLBuilder.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/dsl/BluePrintTemplateDSLBuilder.kt
index df4d2d849..216a0d16f 100644
--- a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/dsl/BluePrintTemplateDSLBuilder.kt
+++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/dsl/BluePrintTemplateDSLBuilder.kt
@@ -25,40 +25,55 @@ import org.onap.ccsdk.cds.controllerblueprints.core.data.Implementation
import org.onap.ccsdk.cds.controllerblueprints.core.data.InterfaceAssignment
import org.onap.ccsdk.cds.controllerblueprints.core.data.NodeTemplate
import org.onap.ccsdk.cds.controllerblueprints.core.data.OperationAssignment
+import org.onap.ccsdk.cds.controllerblueprints.core.data.RelationshipTemplate
import org.onap.ccsdk.cds.controllerblueprints.core.data.RequirementAssignment
import org.onap.ccsdk.cds.controllerblueprints.core.data.TopologyTemplate
import org.onap.ccsdk.cds.controllerblueprints.core.data.Workflow
import kotlin.reflect.KClass
+import kotlin.reflect.KMutableProperty1
import kotlin.reflect.full.createInstance
import kotlin.reflect.jvm.reflect
-class TopologyTemplateBuilder {
+open class TopologyTemplateBuilder {
private var topologyTemplate = TopologyTemplate()
private var nodeTemplates: MutableMap<String, NodeTemplate>? = null
+ var relationshipTemplates: MutableMap<String, RelationshipTemplate>? = null
private var workflows: MutableMap<String, Workflow>? = null
fun nodeTemplate(id: String, type: String, description: String, block: NodeTemplateBuilder.() -> Unit) {
- if (nodeTemplates == null)
- nodeTemplates = hashMapOf()
+ if (nodeTemplates == null) nodeTemplates = hashMapOf()
nodeTemplates!![id] = NodeTemplateBuilder(id, type, description).apply(block).build()
}
fun nodeTemplate(nodeTemplate: NodeTemplate) {
- if (nodeTemplates == null)
- nodeTemplates = hashMapOf()
+ if (nodeTemplates == null) nodeTemplates = hashMapOf()
nodeTemplates!![nodeTemplate.id!!] = nodeTemplate
}
+ fun relationshipTemplate(
+ id: String,
+ type: String,
+ description: String,
+ block: RelationshipTemplateBuilder.() -> Unit
+ ) {
+ if (relationshipTemplates == null) relationshipTemplates = hashMapOf()
+ relationshipTemplates!![id] = RelationshipTemplateBuilder(id, type, description).apply(block).build()
+ }
+
+ fun relationshipTemplate(relationshipTemplate: RelationshipTemplate) {
+ if (relationshipTemplates == null) relationshipTemplates = hashMapOf()
+ relationshipTemplates!![relationshipTemplate.id!!] = relationshipTemplate
+ }
+
fun nodeTemplateOperation(
nodeTemplateName: String,
type: String,
interfaceName: String,
description: String,
operationBlock: OperationAssignmentBuilder<PropertiesAssignmentBuilder,
- PropertiesAssignmentBuilder>.() -> Unit
+ PropertiesAssignmentBuilder>.() -> Unit
) {
- if (nodeTemplates == null)
- nodeTemplates = hashMapOf()
+ if (nodeTemplates == null) nodeTemplates = hashMapOf()
val nodeTemplateBuilder = NodeTemplateBuilder(nodeTemplateName, type, description)
nodeTemplateBuilder.operation(interfaceName, "$description operation", operationBlock)
@@ -66,14 +81,12 @@ class TopologyTemplateBuilder {
}
fun workflow(id: String, description: String, block: WorkflowBuilder.() -> Unit) {
- if (workflows == null)
- workflows = hashMapOf()
+ if (workflows == null) workflows = hashMapOf()
workflows!![id] = WorkflowBuilder(id, description).apply(block).build()
}
fun workflow(workflow: Workflow) {
- if (workflows == null)
- workflows = hashMapOf()
+ if (workflows == null) workflows = hashMapOf()
workflows!![workflow.id!!] = workflow
}
@@ -84,22 +97,22 @@ class TopologyTemplateBuilder {
description: String,
block: NodeTemplateBuilder.() -> Unit
) {
- if (nodeTemplates == null)
- nodeTemplates = hashMapOf()
+ if (nodeTemplates == null) nodeTemplates = hashMapOf()
- if (workflows == null)
- workflows = hashMapOf()
+ if (workflows == null) workflows = hashMapOf()
val workflowBuilder = WorkflowBuilder(actionName, description)
workflowBuilder.nodeTemplateStep(actionName, description)
// Workflow name is NodeTemplate name
workflows!![actionName] = workflowBuilder.build()
- nodeTemplates!![actionName] = NodeTemplateBuilder(actionName, nodeTemplateType, description).apply(block).build()
+ nodeTemplates!![actionName] =
+ NodeTemplateBuilder(actionName, nodeTemplateType, description).apply(block).build()
}
fun build(): TopologyTemplate {
topologyTemplate.nodeTemplates = nodeTemplates
+ topologyTemplate.relationshipTemplates = relationshipTemplates
topologyTemplate.workflows = workflows
return topologyTemplate
}
@@ -111,26 +124,25 @@ open class NodeTemplateBuilder(
private val description: String? = ""
) {
- private var nodeTemplate: NodeTemplate = NodeTemplate()
- private var properties: MutableMap<String, JsonNode>? = null
- private var interfaces: MutableMap<String, InterfaceAssignment>? = null
- private var artifacts: MutableMap<String, ArtifactDefinition>? = null
- private var capabilities: MutableMap<String, CapabilityAssignment>? = null
- private var requirements: MutableMap<String, RequirementAssignment>? = null
+ var nodeTemplate: NodeTemplate = NodeTemplate()
+ var properties: MutableMap<String, JsonNode>? = null
+ var interfaces: MutableMap<String, InterfaceAssignment>? = null
+ var artifacts: MutableMap<String, ArtifactDefinition>? = null
+ var capabilities: MutableMap<String, CapabilityAssignment>? = null
+ var requirements: MutableMap<String, RequirementAssignment>? = null
- fun properties(properties: MutableMap<String, JsonNode>?) {
- this.properties = properties
+ fun properties(properties: Map<String, JsonNode>) {
+ if (this.properties == null) this.properties = hashMapOf()
+ this.properties!!.putAll(properties)
}
fun properties(block: PropertiesAssignmentBuilder.() -> Unit) {
- if (properties == null)
- properties = hashMapOf()
+ if (properties == null) properties = hashMapOf()
properties = PropertiesAssignmentBuilder().apply(block).build()
}
open fun <Prop : PropertiesAssignmentBuilder> typedProperties(block: Prop.() -> Unit) {
- if (properties == null)
- properties = hashMapOf()
+ if (properties == null) properties = hashMapOf()
val instance: Prop = (block.reflect()?.parameters?.get(0)?.type?.classifier as KClass<Prop>).createInstance()
properties = instance.apply(block).build()
}
@@ -140,8 +152,7 @@ open class NodeTemplateBuilder(
description: String = "",
block: OperationAssignmentBuilder<In, Out>.() -> Unit
) {
- if (interfaces == null)
- interfaces = hashMapOf()
+ if (interfaces == null) interfaces = hashMapOf()
val interfaceAssignment = InterfaceAssignment()
val defaultOperationName = BluePrintConstants.DEFAULT_STEP_OPERATION
@@ -160,14 +171,12 @@ open class NodeTemplateBuilder(
}
fun artifact(id: String, type: String, file: String) {
- if (artifacts == null)
- artifacts = hashMapOf()
+ if (artifacts == null) artifacts = hashMapOf()
artifacts!![id] = ArtifactDefinitionBuilder(id, type, file).build()
}
fun artifact(id: String, type: String, file: String, block: ArtifactDefinitionBuilder.() -> Unit) {
- if (artifacts == null)
- artifacts = hashMapOf()
+ if (artifacts == null) artifacts = hashMapOf()
artifacts!![id] = ArtifactDefinitionBuilder(id, type, file).apply(block).build()
}
@@ -176,26 +185,26 @@ open class NodeTemplateBuilder(
}
fun capability(id: String, block: CapabilityAssignmentBuilder.() -> Unit) {
- if (capabilities == null)
- capabilities = hashMapOf()
+ if (capabilities == null) capabilities = hashMapOf()
capabilities!![id] = CapabilityAssignmentBuilder(id).apply(block).build()
}
- fun capabilities(capabilities: MutableMap<String, CapabilityAssignment>?) {
- this.capabilities = capabilities
+ fun capabilities(capabilities: MutableMap<String, CapabilityAssignment>) {
+ if (this.capabilities == null) this.capabilities = hashMapOf()
+ this.capabilities!!.putAll(capabilities)
}
fun requirement(id: String, capability: String, node: String, relationship: String) {
- if (requirements == null)
- requirements = hashMapOf()
+ if (requirements == null) requirements = hashMapOf()
requirements!![id] = RequirementAssignmentBuilder(id, capability, node, relationship).build()
}
- fun requirements(requirements: MutableMap<String, RequirementAssignment>?) {
- this.requirements = requirements
+ fun requirements(requirements: MutableMap<String, RequirementAssignment>) {
+ if (this.requirements == null) this.requirements = hashMapOf()
+ this.requirements!!.putAll(requirements)
}
- fun build(): NodeTemplate {
+ open fun build(): NodeTemplate {
nodeTemplate.id = id
nodeTemplate.type = type
nodeTemplate.description = description
@@ -208,6 +217,53 @@ open class NodeTemplateBuilder(
}
}
+open class RelationshipTemplateBuilder(
+ private val id: String,
+ private val type: String,
+ private val description: String? = ""
+) {
+ var relationshipTemplate: RelationshipTemplate = RelationshipTemplate()
+ var properties: MutableMap<String, JsonNode>? = null
+
+ fun properties(properties: Map<String, JsonNode>) {
+ if (this.properties == null) this.properties = hashMapOf()
+ this.properties!!.putAll(properties)
+ }
+
+ fun properties(block: PropertiesAssignmentBuilder.() -> Unit) {
+ if (properties == null) properties = hashMapOf()
+ properties = PropertiesAssignmentBuilder().apply(block).build()
+ }
+
+ fun property(id: String, value: Any) {
+ if (properties == null) properties = hashMapOf()
+ properties!![id] = value.asJsonType()
+ }
+
+ fun property(id: String, value: JsonNode) {
+ if (properties == null) properties = hashMapOf()
+ properties!![id] = value
+ }
+
+ fun copy(copy: String) {
+ relationshipTemplate.copy = copy
+ }
+
+ open fun <Prop : PropertiesAssignmentBuilder> typedProperties(block: Prop.() -> Unit) {
+ if (properties == null) properties = hashMapOf()
+ val instance: Prop = (block.reflect()?.parameters?.get(0)?.type?.classifier as KClass<Prop>).createInstance()
+ properties = instance.apply(block).build()
+ }
+
+ open fun build(): RelationshipTemplate {
+ relationshipTemplate.id = id
+ relationshipTemplate.type = type
+ relationshipTemplate.description = description
+ relationshipTemplate.properties = properties
+ return relationshipTemplate
+ }
+}
+
class ArtifactDefinitionBuilder(private val id: String, private val type: String, private val file: String) {
private var artifactDefinition: ArtifactDefinition = ArtifactDefinition()
@@ -242,18 +298,26 @@ open class CapabilityAssignmentBuilder(private val id: String) {
var properties: MutableMap<String, JsonNode>? = null
fun attributes(block: AttributesAssignmentBuilder.() -> Unit) {
- if (attributes == null)
- attributes = hashMapOf()
+ if (attributes == null) attributes = hashMapOf()
attributes = AttributesAssignmentBuilder().apply(block).build()
}
fun properties(block: PropertiesAssignmentBuilder.() -> Unit) {
- if (properties == null)
- properties = hashMapOf()
+ if (properties == null) properties = hashMapOf()
properties = PropertiesAssignmentBuilder().apply(block).build()
}
- fun build(): CapabilityAssignment {
+ fun property(id: String, value: Any) {
+ if (properties == null) properties = hashMapOf()
+ properties!![id] = value.asJsonType()
+ }
+
+ fun property(id: String, value: JsonNode) {
+ if (properties == null) properties = hashMapOf()
+ properties!![id] = value
+ }
+
+ open fun build(): CapabilityAssignment {
capabilityAssignment.properties = properties
capabilityAssignment.attributes = attributes
return capabilityAssignment
@@ -386,6 +450,10 @@ open class PropertiesAssignmentBuilder {
properties[id] = value
}
+ fun property(kProperty: KMutableProperty1<*, *>, value: JsonNode) {
+ properties[kProperty.name] = value
+ }
+
open fun build(): MutableMap<String, JsonNode> {
return properties
}
diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/interfaces/BluePrintEnhancer.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/interfaces/BluePrintEnhancer.kt
index 80c91ca28..535021b34 100644
--- a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/interfaces/BluePrintEnhancer.kt
+++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/interfaces/BluePrintEnhancer.kt
@@ -24,6 +24,8 @@ import org.onap.ccsdk.cds.controllerblueprints.core.data.NodeTemplate
import org.onap.ccsdk.cds.controllerblueprints.core.data.NodeType
import org.onap.ccsdk.cds.controllerblueprints.core.data.PolicyType
import org.onap.ccsdk.cds.controllerblueprints.core.data.PropertyDefinition
+import org.onap.ccsdk.cds.controllerblueprints.core.data.RelationshipTemplate
+import org.onap.ccsdk.cds.controllerblueprints.core.data.RelationshipType
import org.onap.ccsdk.cds.controllerblueprints.core.data.ServiceTemplate
import org.onap.ccsdk.cds.controllerblueprints.core.data.TopologyTemplate
import org.onap.ccsdk.cds.controllerblueprints.core.data.Workflow
@@ -44,6 +46,10 @@ interface BluePrintNodeTemplateEnhancer : BluePrintEnhancer<NodeTemplate>
interface BluePrintNodeTypeEnhancer : BluePrintEnhancer<NodeType>
+interface BluePrintRelationshipTemplateEnhancer : BluePrintEnhancer<RelationshipTemplate>
+
+interface BluePrintRelationshipTypeEnhancer : BluePrintEnhancer<RelationshipType>
+
interface BluePrintArtifactDefinitionEnhancer : BluePrintEnhancer<ArtifactDefinition>
interface BluePrintPolicyTypeEnhancer : BluePrintEnhancer<PolicyType>
@@ -73,6 +79,10 @@ interface BluePrintTypeEnhancerService {
fun getNodeTypeEnhancers(): List<BluePrintNodeTypeEnhancer>
+ fun getRelationshipTemplateEnhancers(): List<BluePrintRelationshipTemplateEnhancer>
+
+ fun getRelationshipTypeEnhancers(): List<BluePrintRelationshipTypeEnhancer>
+
fun getArtifactDefinitionEnhancers(): List<BluePrintArtifactDefinitionEnhancer>
fun getPolicyTypeEnhancers(): List<BluePrintPolicyTypeEnhancer>
@@ -81,12 +91,20 @@ interface BluePrintTypeEnhancerService {
fun getAttributeDefinitionEnhancers(): List<BluePrintAttributeDefinitionEnhancer>
- fun enhanceServiceTemplate(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, serviceTemplate: ServiceTemplate) {
+ fun enhanceServiceTemplate(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ name: String,
+ serviceTemplate: ServiceTemplate
+ ) {
val enhancers = getServiceTemplateEnhancers()
doEnhancement(bluePrintRuntimeService, name, serviceTemplate, enhancers)
}
- fun enhanceTopologyTemplate(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, topologyTemplate: TopologyTemplate) {
+ fun enhanceTopologyTemplate(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ name: String,
+ topologyTemplate: TopologyTemplate
+ ) {
val enhancers = getTopologyTemplateEnhancers()
doEnhancement(bluePrintRuntimeService, name, topologyTemplate, enhancers)
}
@@ -96,7 +114,11 @@ interface BluePrintTypeEnhancerService {
doEnhancement(bluePrintRuntimeService, name, workflow, enhancers)
}
- fun enhanceNodeTemplate(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, nodeTemplate: NodeTemplate) {
+ fun enhanceNodeTemplate(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ name: String,
+ nodeTemplate: NodeTemplate
+ ) {
val enhancers = getNodeTemplateEnhancers()
doEnhancement(bluePrintRuntimeService, name, nodeTemplate, enhancers)
}
@@ -106,7 +128,29 @@ interface BluePrintTypeEnhancerService {
doEnhancement(bluePrintRuntimeService, name, nodeType, enhancers)
}
- fun enhanceArtifactDefinition(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, artifactDefinition: ArtifactDefinition) {
+ fun enhanceRelationshipTemplate(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ name: String,
+ relationshipTemplate: RelationshipTemplate
+ ) {
+ val enhancers = getRelationshipTemplateEnhancers()
+ doEnhancement(bluePrintRuntimeService, name, relationshipTemplate, enhancers)
+ }
+
+ fun enhanceRelationshipType(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ name: String,
+ relationshipType: RelationshipType
+ ) {
+ val enhancers = getRelationshipTypeEnhancers()
+ doEnhancement(bluePrintRuntimeService, name, relationshipType, enhancers)
+ }
+
+ fun enhanceArtifactDefinition(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ name: String,
+ artifactDefinition: ArtifactDefinition
+ ) {
val enhancers = getArtifactDefinitionEnhancers()
doEnhancement(bluePrintRuntimeService, name, artifactDefinition, enhancers)
}
@@ -116,24 +160,38 @@ interface BluePrintTypeEnhancerService {
doEnhancement(bluePrintRuntimeService, name, policyType, enhancers)
}
- fun enhancePropertyDefinitions(bluePrintRuntimeService: BluePrintRuntimeService<*>, properties: MutableMap<String, PropertyDefinition>) {
+ fun enhancePropertyDefinitions(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ properties: MutableMap<String, PropertyDefinition>
+ ) {
properties.forEach { propertyName, propertyDefinition ->
enhancePropertyDefinition(bluePrintRuntimeService, propertyName, propertyDefinition)
}
}
- fun enhancePropertyDefinition(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, propertyDefinition: PropertyDefinition) {
+ fun enhancePropertyDefinition(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ name: String,
+ propertyDefinition: PropertyDefinition
+ ) {
val enhancers = getPropertyDefinitionEnhancers()
doEnhancement(bluePrintRuntimeService, name, propertyDefinition, enhancers)
}
- fun enhanceAttributeDefinitions(bluePrintRuntimeService: BluePrintRuntimeService<*>, attributes: MutableMap<String, AttributeDefinition>) {
+ fun enhanceAttributeDefinitions(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ attributes: MutableMap<String, AttributeDefinition>
+ ) {
attributes.forEach { attributeName, attributeDefinition ->
enhanceAttributeDefinition(bluePrintRuntimeService, attributeName, attributeDefinition)
}
}
- fun enhanceAttributeDefinition(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, attributeDefinition: AttributeDefinition) {
+ fun enhanceAttributeDefinition(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ name: String,
+ attributeDefinition: AttributeDefinition
+ ) {
val enhancers = getAttributeDefinitionEnhancers()
doEnhancement(bluePrintRuntimeService, name, attributeDefinition, enhancers)
}
diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintContext.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintContext.kt
index 47cd62ea1..52fdbb588 100644
--- a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintContext.kt
+++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintContext.kt
@@ -35,6 +35,8 @@ import org.onap.ccsdk.cds.controllerblueprints.core.data.OperationAssignment
import org.onap.ccsdk.cds.controllerblueprints.core.data.OperationDefinition
import org.onap.ccsdk.cds.controllerblueprints.core.data.PolicyType
import org.onap.ccsdk.cds.controllerblueprints.core.data.PropertyDefinition
+import org.onap.ccsdk.cds.controllerblueprints.core.data.RelationshipTemplate
+import org.onap.ccsdk.cds.controllerblueprints.core.data.RelationshipType
import org.onap.ccsdk.cds.controllerblueprints.core.data.RequirementAssignment
import org.onap.ccsdk.cds.controllerblueprints.core.data.ServiceTemplate
import org.onap.ccsdk.cds.controllerblueprints.core.data.Step
@@ -117,7 +119,10 @@ class BluePrintContext(val serviceTemplate: ServiceTemplate) {
}
fun workflowStepFirstCallOperation(workFlowName: String, stepName: String): String {
- return workflowStepByName(workFlowName, stepName).activities?.filter { it.callOperation != null }?.single()?.callOperation
+ return workflowStepByName(
+ workFlowName,
+ stepName
+ ).activities?.filter { it.callOperation != null }?.single()?.callOperation
?: throw BluePrintException("couldn't get first callOperation for WorkFlow($workFlowName) ")
}
@@ -167,7 +172,11 @@ class BluePrintContext(val serviceTemplate: ServiceTemplate) {
?: throw BluePrintException("could't get node type($nodeTypeName)'s interface definition($interfaceName)")
}
- fun nodeTypeInterfaceOperation(nodeTypeName: String, interfaceName: String, operationName: String): OperationDefinition {
+ fun nodeTypeInterfaceOperation(
+ nodeTypeName: String,
+ interfaceName: String,
+ operationName: String
+ ): OperationDefinition {
return nodeTypeInterface(nodeTypeName, interfaceName).operations?.get(operationName)
?: throw BluePrintException("could't get node type($nodeTypeName)'s interface definition($interfaceName) operation definition($operationName)")
}
@@ -193,6 +202,12 @@ class BluePrintContext(val serviceTemplate: ServiceTemplate) {
return nodeTypeInterfaceOperation(nodeTypeName, interfaceName, operationName).outputs
}
+ // Relationship Type Methods
+ fun relationshipTypes(): MutableMap<String, RelationshipType>? = serviceTemplate.relationshipTypes
+
+ fun relationshipTypeByName(name: String): RelationshipType = relationshipTypes()?.get(name)
+ ?: throw BluePrintException("could't get relationship type for the name($name)")
+
// Node Template Methods
fun nodeTemplates(): MutableMap<String, NodeTemplate>? = serviceTemplate.topologyTemplate?.nodeTemplates
@@ -222,7 +237,9 @@ class BluePrintContext(val serviceTemplate: ServiceTemplate) {
}
fun nodeTemplateArtifactForArtifactType(nodeTemplateName: String, artifactType: String): ArtifactDefinition {
- return nodeTemplateArtifacts(nodeTemplateName)?.filter { it.value.type == artifactType }?.map { it.value }?.get(0)
+ return nodeTemplateArtifacts(nodeTemplateName)?.filter { it.value.type == artifactType }?.map { it.value }?.get(
+ 0
+ )
?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s Artifact Type($artifactType)")
}
@@ -242,15 +259,23 @@ class BluePrintContext(val serviceTemplate: ServiceTemplate) {
}
fun nodeTemplateOperationImplementation(nodeTemplateName: String, interfaceName: String, operationName: String):
- Implementation? {
+ Implementation? {
return nodeTemplateInterfaceOperation(nodeTemplateName, interfaceName, operationName).implementation
}
- fun nodeTemplateInterfaceOperationInputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>? {
+ fun nodeTemplateInterfaceOperationInputs(
+ nodeTemplateName: String,
+ interfaceName: String,
+ operationName: String
+ ): MutableMap<String, JsonNode>? {
return nodeTemplateInterfaceOperation(nodeTemplateName, interfaceName, operationName).inputs
}
- fun nodeTemplateInterfaceOperationOutputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>? {
+ fun nodeTemplateInterfaceOperationOutputs(
+ nodeTemplateName: String,
+ interfaceName: String,
+ operationName: String
+ ): MutableMap<String, JsonNode>? {
return nodeTemplateInterfaceOperation(nodeTemplateName, interfaceName, operationName).outputs
}
@@ -259,7 +284,11 @@ class BluePrintContext(val serviceTemplate: ServiceTemplate) {
?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s InterfaceAssignment($interfaceName)")
}
- fun nodeTemplateInterfaceOperation(nodeTemplateName: String, interfaceName: String, operationName: String): OperationAssignment {
+ fun nodeTemplateInterfaceOperation(
+ nodeTemplateName: String,
+ interfaceName: String,
+ operationName: String
+ ): OperationAssignment {
return nodeTemplateInterface(nodeTemplateName, interfaceName).operations?.get(operationName)
?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s InterfaceAssignment($interfaceName) OperationAssignment($operationName)")
}
@@ -275,8 +304,9 @@ class BluePrintContext(val serviceTemplate: ServiceTemplate) {
}
fun nodeTemplateRequirementNode(nodeTemplateName: String, requirementName: String): NodeTemplate {
- val filteredNodeTemplateName: String = nodeTemplateByName(nodeTemplateName).requirements?.get(requirementName)?.node
- ?: throw BluePrintException("could't NodeTemplate for NodeTemplate's($nodeTemplateName) requirement's ($requirementName) ")
+ val filteredNodeTemplateName: String =
+ nodeTemplateByName(nodeTemplateName).requirements?.get(requirementName)?.node
+ ?: throw BluePrintException("could't NodeTemplate for NodeTemplate's($nodeTemplateName) requirement's ($requirementName) ")
return nodeTemplateByName(filteredNodeTemplateName)
}
@@ -284,6 +314,17 @@ class BluePrintContext(val serviceTemplate: ServiceTemplate) {
return nodeTemplateCapability(nodeTemplateName, capabilityName).properties?.get(propertyName)
}
+ // Relationship Template Methods
+ fun relationshipTemplates(): MutableMap<String, RelationshipTemplate>? =
+ serviceTemplate.topologyTemplate?.relationshipTemplates
+
+ fun relationshipTemplateByName(name: String): RelationshipTemplate = relationshipTemplates()?.get(name)
+ ?: throw BluePrintException("could't get relationship template for the name($name)")
+
+ fun relationshipTemplateProperty(relationshipTemplateName: String, propertyName: String): Any? {
+ return nodeTemplateByName(relationshipTemplateName).properties?.get(propertyName)
+ }
+
// Chained Functions
fun nodeTypeChained(nodeTypeName: String): NodeType {
diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintRuntimeService.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintRuntimeService.kt
index a7ed577dd..841cc5242 100644
--- a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintRuntimeService.kt
+++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintRuntimeService.kt
@@ -76,15 +76,15 @@ interface BluePrintRuntimeService<T> {
): MutableMap<String, JsonNode>
fun resolvePropertyDefinitions(name: String, propertyDefinitions: MutableMap<String, PropertyDefinition>):
- MutableMap<String, JsonNode>
+ MutableMap<String, JsonNode>
fun resolvePropertyAssignments(name: String, propertyAssignments: MutableMap<String, JsonNode>):
- MutableMap<String, JsonNode>
+ MutableMap<String, JsonNode>
fun resolveNodeTemplateProperties(nodeTemplateName: String): MutableMap<String, JsonNode>
fun resolveNodeTemplateCapabilityProperties(nodeTemplateName: String, capabilityName: String): MutableMap<String,
- JsonNode>
+ JsonNode>
fun resolveNodeTemplateInterfaceOperationInputs(
nodeTemplateName: String,
@@ -102,6 +102,8 @@ interface BluePrintRuntimeService<T> {
fun resolveNodeTemplateArtifactDefinition(nodeTemplateName: String, artifactName: String): ArtifactDefinition
+ fun resolveRelationshipTemplateProperties(relationshipTemplateName: String): MutableMap<String, JsonNode>
+
fun resolveDSLExpression(dslPropertyName: String): JsonNode
fun setInputValue(propertyName: String, value: JsonNode)
@@ -262,7 +264,7 @@ open class DefaultBluePrintRuntimeService(private var id: String, private var bl
propertyDefinitions: MutableMap<String, PropertyDefinition>,
propertyAssignments: MutableMap<String, JsonNode>
):
- MutableMap<String, JsonNode> {
+ MutableMap<String, JsonNode> {
val propertyAssignmentValue: MutableMap<String, JsonNode> = hashMapOf()
@@ -284,6 +286,14 @@ open class DefaultBluePrintRuntimeService(private var id: String, private var bl
nodeTypeProperty.defaultValue?.let { resolvedValue = nodeTypeProperty.defaultValue!! }
}
+ /** If property is Map type, then resolve the property value, It may have expressiong */
+ if (nodeTypeProperty.type == BluePrintConstants.DATA_TYPE_MAP &&
+ resolvedValue.returnNullIfMissing() != null
+ ) {
+ val mapResolvedValue = resolvePropertyAssignments(nodeTemplateName, resolvedValue.rootFieldsToMap())
+ resolvedValue = mapResolvedValue.asJsonNode()
+ }
+
// Set for Return of method
propertyAssignmentValue[nodeTypePropertyName] = resolvedValue
}
@@ -291,7 +301,7 @@ open class DefaultBluePrintRuntimeService(private var id: String, private var bl
}
override fun resolvePropertyDefinitions(name: String, propertyDefinitions: MutableMap<String, PropertyDefinition>):
- MutableMap<String, JsonNode> {
+ MutableMap<String, JsonNode> {
val propertyAssignmentValue: MutableMap<String, JsonNode> = hashMapOf()
propertyDefinitions.forEach { propertyName, propertyDefinition ->
@@ -306,7 +316,7 @@ open class DefaultBluePrintRuntimeService(private var id: String, private var bl
}
override fun resolvePropertyAssignments(name: String, propertyAssignments: MutableMap<String, JsonNode>):
- MutableMap<String, JsonNode> {
+ MutableMap<String, JsonNode> {
val propertyAssignmentValue: MutableMap<String, JsonNode> = hashMapOf()
propertyAssignments.forEach { (propertyName, propertyExpression) ->
@@ -331,11 +341,15 @@ open class DefaultBluePrintRuntimeService(private var id: String, private var bl
/**
* Resolve the NodeTemplate Property Assignment Values.
*/
- return resolveNodeTemplatePropertyAssignments(nodeTemplateName, nodeTypePropertiesDefinitions, propertyAssignments)
+ return resolveNodeTemplatePropertyAssignments(
+ nodeTemplateName,
+ nodeTypePropertiesDefinitions,
+ propertyAssignments
+ )
}
override fun resolveNodeTemplateCapabilityProperties(nodeTemplateName: String, capabilityName: String):
- MutableMap<String, JsonNode> {
+ MutableMap<String, JsonNode> {
log.info("resolveNodeTemplateCapabilityProperties for node template($nodeTemplateName) capability($capabilityName)")
val nodeTemplate: NodeTemplate = bluePrintContext.nodeTemplateByName(nodeTemplateName)
@@ -357,7 +371,7 @@ open class DefaultBluePrintRuntimeService(private var id: String, private var bl
): MutableMap<String, JsonNode> {
log.info(
"resolveNodeTemplateInterfaceOperationInputs for node template ($nodeTemplateName), " +
- "interface name($interfaceName), operationName($operationName)"
+ "interface name($interfaceName), operationName($operationName)"
)
val propertyAssignments: MutableMap<String, JsonNode> =
@@ -375,7 +389,11 @@ open class DefaultBluePrintRuntimeService(private var id: String, private var bl
/**
* Resolve the Property Input Assignment Values.
*/
- return resolveNodeTemplatePropertyAssignments(nodeTemplateName, nodeTypeInterfaceOperationInputs, propertyAssignments)
+ return resolveNodeTemplatePropertyAssignments(
+ nodeTemplateName,
+ nodeTypeInterfaceOperationInputs,
+ propertyAssignments
+ )
}
override fun resolveNodeTemplateInterfaceOperationOutputs(
@@ -385,7 +403,7 @@ open class DefaultBluePrintRuntimeService(private var id: String, private var bl
): MutableMap<String, JsonNode> {
log.info(
"resolveNodeTemplateInterfaceOperationOutputs for node template ($nodeTemplateName),interface name " +
- "($interfaceName), operationName($operationName)"
+ "($interfaceName), operationName($operationName)"
)
val propertyAssignments: MutableMap<String, JsonNode> =
@@ -401,7 +419,11 @@ open class DefaultBluePrintRuntimeService(private var id: String, private var bl
* Resolve the Property Output Assignment Values.
*/
val propertyAssignmentValue =
- resolveNodeTemplatePropertyAssignments(nodeTemplateName, nodeTypeInterfaceOperationOutputs, propertyAssignments)
+ resolveNodeTemplatePropertyAssignments(
+ nodeTemplateName,
+ nodeTypeInterfaceOperationOutputs,
+ propertyAssignments
+ )
// Store operation output values into context
propertyAssignmentValue.forEach { (key, value) ->
@@ -429,6 +451,28 @@ open class DefaultBluePrintRuntimeService(private var id: String, private var bl
)
}
+ override fun resolveRelationshipTemplateProperties(relationshipTemplateName: String): MutableMap<String, JsonNode> {
+ log.info("resolveRelationshipTemplateProperties for relationship template ({})", relationshipTemplateName)
+
+ val relationshipTemplate = bluePrintContext.relationshipTemplateByName(relationshipTemplateName)
+
+ val propertyAssignments = relationshipTemplate.properties!!
+
+ // Get the Relationship Type Definitions
+ val propertiesDefinitions = bluePrintContext.relationshipTypeByName(relationshipTemplate.type).properties
+ ?: throw BluePrintProcessorException("failed to get ${relationshipTemplate.type} properties.")
+
+ /**
+ * Resolve the RelationshipTemplate Property Assignment Values.
+ * TODO("Now it supports only input, node not SELF(propert, attribute, artifact) expressions, later it will support SELF expressions")
+ */
+ return resolveNodeTemplatePropertyAssignments(
+ "DSL",
+ propertiesDefinitions,
+ propertyAssignments
+ )
+ }
+
/**
* Read the DSL Property reference, If there is any expression, then resolve those expression and return as Json
* Type
diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/JacksonUtils.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/JacksonUtils.kt
index 945f300af..089a610c9 100644
--- a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/JacksonUtils.kt
+++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/JacksonUtils.kt
@@ -225,7 +225,6 @@ class JacksonUtils {
fun checkJsonNodeValueOfCollectionType(type: String, jsonNode: JsonNode): Boolean {
return when (type.toLowerCase()) {
BluePrintConstants.DATA_TYPE_LIST -> jsonNode.isArray
- BluePrintConstants.DATA_TYPE_MAP -> jsonNode.isContainerNode
else -> false
}
}