Migrate "ms/controllerblueprints" from ccsdk/apps
[ccsdk/cds.git] / ms / controllerblueprints / modules / blueprint-validation / src / main / kotlin / org / onap / ccsdk / cds / controllerblueprints / validation / BluePrintTopologyTemplateValidatorImpl.kt
1 /*
2  * Copyright © 2017-2018 AT&T Intellectual Property.
3  * Modifications Copyright © 2018 IBM.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 package org.onap.ccsdk.cds.controllerblueprints.validation
19
20 import com.att.eelf.configuration.EELFLogger
21 import com.att.eelf.configuration.EELFManager
22 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintException
23 import org.onap.ccsdk.cds.controllerblueprints.core.data.NodeTemplate
24 import org.onap.ccsdk.cds.controllerblueprints.core.data.PropertyDefinition
25 import org.onap.ccsdk.cds.controllerblueprints.core.data.TopologyTemplate
26 import org.onap.ccsdk.cds.controllerblueprints.core.data.Workflow
27 import org.onap.ccsdk.cds.controllerblueprints.core.interfaces.BluePrintTopologyTemplateValidator
28 import org.onap.ccsdk.cds.controllerblueprints.core.interfaces.BluePrintTypeValidatorService
29 import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintRuntimeService
30 import org.springframework.beans.factory.config.ConfigurableBeanFactory
31 import org.springframework.context.annotation.Scope
32 import org.springframework.stereotype.Service
33
34 @Service("default-topology-template-validator")
35 @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
36 open class BluePrintTopologyTemplateValidatorImpl(private val bluePrintTypeValidatorService: BluePrintTypeValidatorService) : BluePrintTopologyTemplateValidator {
37
38     private val log: EELFLogger = EELFManager.getInstance().getLogger(BluePrintServiceTemplateValidatorImpl::class.toString())
39
40     lateinit var bluePrintRuntimeService: BluePrintRuntimeService<*>
41
42     override fun validate(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, topologyTemplate: TopologyTemplate) {
43         log.trace("Validating Topology Template..")
44         this.bluePrintRuntimeService = bluePrintRuntimeService
45
46         // Validate Inputs
47         topologyTemplate.inputs?.let { validateInputs(topologyTemplate.inputs!!) }
48         // Validate Node Templates
49         topologyTemplate.nodeTemplates?.let { validateNodeTemplates(topologyTemplate.nodeTemplates!!) }
50         // Validate Workflow
51         topologyTemplate.workflows?.let { validateWorkflows(topologyTemplate.workflows!!) }
52     }
53
54     @Throws(BluePrintException::class)
55     fun validateInputs(inputs: MutableMap<String, PropertyDefinition>) {
56         bluePrintTypeValidatorService.validatePropertyDefinitions(bluePrintRuntimeService, inputs)
57     }
58
59
60     @Throws(BluePrintException::class)
61     fun validateNodeTemplates(nodeTemplates: MutableMap<String, NodeTemplate>) {
62
63         nodeTemplates.forEach { nodeTemplateName, nodeTemplate ->
64             // Validate Single Node Template
65             bluePrintTypeValidatorService.validateNodeTemplate(bluePrintRuntimeService, nodeTemplateName, nodeTemplate)
66         }
67     }
68
69     @Throws(BluePrintException::class)
70     open fun validateWorkflows(workflows: MutableMap<String, Workflow>) {
71
72         workflows.forEach { workflowName, workflow ->
73             // Validate Single workflow
74             bluePrintTypeValidatorService.validateWorkflow(bluePrintRuntimeService, workflowName, workflow)
75         }
76     }
77
78 }