aboutsummaryrefslogtreecommitdiffstats
path: root/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/interfaces/BluePrintEnhancer.kt
diff options
context:
space:
mode:
Diffstat (limited to 'ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/interfaces/BluePrintEnhancer.kt')
-rw-r--r--ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/interfaces/BluePrintEnhancer.kt242
1 files changed, 242 insertions, 0 deletions
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
new file mode 100644
index 000000000..2080cd161
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/interfaces/BluePrintEnhancer.kt
@@ -0,0 +1,242 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2019 IBM.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.ccsdk.cds.controllerblueprints.core.interfaces
+
+import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintException
+import org.onap.ccsdk.cds.controllerblueprints.core.data.ArtifactDefinition
+import org.onap.ccsdk.cds.controllerblueprints.core.data.AttributeDefinition
+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
+import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintContext
+import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintRuntimeService
+
+interface BluePrintEnhancer<T> {
+
+ fun enhance(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, type: T)
+}
+
+interface BluePrintServiceTemplateEnhancer : BluePrintEnhancer<ServiceTemplate>
+
+interface BluePrintTopologyTemplateEnhancer : BluePrintEnhancer<TopologyTemplate>
+
+interface BluePrintWorkflowEnhancer : BluePrintEnhancer<Workflow>
+
+interface BluePrintNodeTemplateEnhancer : BluePrintEnhancer<NodeTemplate>
+
+interface BluePrintNodeTypeEnhancer : BluePrintEnhancer<NodeType>
+
+interface BluePrintRelationshipTemplateEnhancer : BluePrintEnhancer<RelationshipTemplate>
+
+interface BluePrintRelationshipTypeEnhancer : BluePrintEnhancer<RelationshipType>
+
+interface BluePrintArtifactDefinitionEnhancer : BluePrintEnhancer<ArtifactDefinition>
+
+interface BluePrintPolicyTypeEnhancer : BluePrintEnhancer<PolicyType>
+
+interface BluePrintPropertyDefinitionEnhancer : BluePrintEnhancer<PropertyDefinition>
+
+interface BluePrintAttributeDefinitionEnhancer : BluePrintEnhancer<AttributeDefinition>
+
+interface BluePrintEnhancerService {
+
+ @Throws(BluePrintException::class)
+ suspend fun enhance(basePath: String, enrichedBasePath: String): BluePrintContext
+
+ @Throws(BluePrintException::class)
+ suspend fun enhance(basePath: String): BluePrintContext
+}
+
+interface BluePrintTypeEnhancerService {
+
+ fun getServiceTemplateEnhancers(): List<BluePrintServiceTemplateEnhancer>
+
+ fun getTopologyTemplateEnhancers(): List<BluePrintTopologyTemplateEnhancer>
+
+ fun getWorkflowEnhancers(): List<BluePrintWorkflowEnhancer>
+
+ fun getNodeTemplateEnhancers(): List<BluePrintNodeTemplateEnhancer>
+
+ fun getNodeTypeEnhancers(): List<BluePrintNodeTypeEnhancer>
+
+ fun getRelationshipTemplateEnhancers(): List<BluePrintRelationshipTemplateEnhancer>
+
+ fun getRelationshipTypeEnhancers(): List<BluePrintRelationshipTypeEnhancer>
+
+ fun getArtifactDefinitionEnhancers(): List<BluePrintArtifactDefinitionEnhancer>
+
+ fun getPolicyTypeEnhancers(): List<BluePrintPolicyTypeEnhancer>
+
+ fun getPropertyDefinitionEnhancers(): List<BluePrintPropertyDefinitionEnhancer>
+
+ fun getAttributeDefinitionEnhancers(): List<BluePrintAttributeDefinitionEnhancer>
+
+ fun enhanceServiceTemplate(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ name: String,
+ serviceTemplate: ServiceTemplate
+ ) {
+ val enhancers = getServiceTemplateEnhancers()
+ doEnhancement(bluePrintRuntimeService, name, serviceTemplate, enhancers)
+ }
+
+ fun enhanceTopologyTemplate(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ name: String,
+ topologyTemplate: TopologyTemplate
+ ) {
+ val enhancers = getTopologyTemplateEnhancers()
+ doEnhancement(bluePrintRuntimeService, name, topologyTemplate, enhancers)
+ }
+
+ fun enhanceWorkflow(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, workflow: Workflow) {
+ val enhancers = getWorkflowEnhancers()
+ doEnhancement(bluePrintRuntimeService, name, workflow, enhancers)
+ }
+
+ fun enhanceNodeTemplate(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ name: String,
+ nodeTemplate: NodeTemplate
+ ) {
+ val enhancers = getNodeTemplateEnhancers()
+ doEnhancement(bluePrintRuntimeService, name, nodeTemplate, enhancers)
+ }
+
+ fun enhanceNodeType(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, nodeType: NodeType) {
+ val enhancers = getNodeTypeEnhancers()
+ doEnhancement(bluePrintRuntimeService, name, nodeType, enhancers)
+ }
+
+ 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)
+ }
+
+ fun enhancePolicyType(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, policyType: PolicyType) {
+ val enhancers = getPolicyTypeEnhancers()
+ doEnhancement(bluePrintRuntimeService, name, policyType, enhancers)
+ }
+
+ fun enhancePropertyDefinitions(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ properties: MutableMap<String, PropertyDefinition>
+ ) {
+ val errorMap = linkedMapOf<String, BluePrintException>()
+ properties.forEach { propertyName, propertyDefinition ->
+ try {
+ enhancePropertyDefinition(bluePrintRuntimeService, propertyName, propertyDefinition)
+ } catch (e: BluePrintException) {
+ errorMap[propertyName] = e
+ }
+ }
+ if (errorMap.isNotEmpty()) {
+ val nestedErrors = errorMap.keys.map { "[ property: ${errorMap[it]?.message} ]" }.joinToString(";")
+ throw BluePrintException("Failed to enhance properties $nestedErrors")
+ }
+ }
+
+ fun enhancePropertyDefinition(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ name: String,
+ propertyDefinition: PropertyDefinition
+ ) {
+ val enhancers = getPropertyDefinitionEnhancers()
+ doEnhancement(bluePrintRuntimeService, name, propertyDefinition, enhancers)
+ }
+
+ fun enhanceAttributeDefinitions(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ attributes: MutableMap<String, AttributeDefinition>
+ ) {
+ val errorMap = linkedMapOf<String, BluePrintException>()
+ attributes.forEach { attributeName, attributeDefinition ->
+ try {
+ enhanceAttributeDefinition(bluePrintRuntimeService, attributeName, attributeDefinition)
+ } catch (e: BluePrintException) {
+ errorMap[attributeName] = e
+ }
+ }
+ if (errorMap.isNotEmpty()) {
+ val nestedErrors = errorMap.keys.map { "[ attribute: ${errorMap[it]?.message} ]" }.joinToString(";")
+ throw BluePrintException("Failed to enhance attributes $nestedErrors")
+ }
+ }
+
+ fun enhanceAttributeDefinition(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ name: String,
+ attributeDefinition: AttributeDefinition
+ ) {
+ val enhancers = getAttributeDefinitionEnhancers()
+ doEnhancement(bluePrintRuntimeService, name, attributeDefinition, enhancers)
+ }
+
+ @Suppress("UNCHECKED_CAST")
+ private fun <T> doEnhancement(
+ bluePrintRuntimeService: BluePrintRuntimeService<*>,
+ name: String,
+ definition: Any,
+ enhancers: List<BluePrintEnhancer<T>>
+ ) {
+ if (enhancers.isNotEmpty()) {
+ val errorMap = linkedMapOf<String, BluePrintException>()
+ enhancers.forEach {
+ try {
+ it.enhance(bluePrintRuntimeService, name, definition as T)
+ } catch (e: BluePrintException) {
+ errorMap[name] = e
+ }
+ }
+ if (errorMap.isNotEmpty()) {
+ val nestedErrors = errorMap.keys.map {
+ "${errorMap[it]?.message ?: errorMap[it].toString()}"
+ }.joinToString(";")
+ throw BluePrintException("$name-->$nestedErrors")
+ }
+ }
+ }
+}