adc94c4c2836fbf5a243245cc3f9a42803d80101
[ccsdk/cds.git] / components / core / src / main / kotlin / org / onap / ccsdk / apps / controllerblueprints / core / interfaces / BlueprintValidator.kt
1 package org.onap.ccsdk.apps.controllerblueprints.core.interfaces
2
3 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintError
4 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
5 import org.onap.ccsdk.apps.controllerblueprints.core.data.*
6 import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
7
8
9 interface BluePrintValidator<T> {
10
11     fun validate(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, type: T)
12
13 }
14
15
16 interface BluePrintServiceTemplateValidator : BluePrintValidator<ServiceTemplate>
17
18 interface BluePrintTopologyTemplateValidator : BluePrintValidator<TopologyTemplate>
19
20 interface BluePrintArtifactTypeValidator : BluePrintValidator<ArtifactType>
21
22 interface BluePrintDataTypeValidator : BluePrintValidator<DataType>
23
24 interface BluePrintNodeTypeValidator : BluePrintValidator<NodeType>
25
26 interface BluePrintNodeTemplateValidator : BluePrintValidator<NodeTemplate>
27
28 interface BluePrintWorkflowValidator : BluePrintValidator<Workflow>
29
30 interface BluePrintPropertyDefinitionValidator : BluePrintValidator<PropertyDefinition>
31
32 interface BluePrintAttributeDefinitionValidator : BluePrintValidator<AttributeDefinition>
33
34 /**
35  * Blueprint Validation Interface.
36  */
37 interface BluePrintValidatorService {
38
39     @Throws(BluePrintException::class)
40     fun validateBluePrints(bluePrintContext: BluePrintContext, properties: MutableMap<String, Any>) : Boolean
41 }
42
43
44 interface BluePrintTypeValidatorService {
45
46     fun getServiceTemplateValidators(): List<BluePrintServiceTemplateValidator>
47
48     fun getDataTypeValidators(): List<BluePrintDataTypeValidator>
49
50     fun getArtifactTypeValidators(): List<BluePrintArtifactTypeValidator>
51
52     fun getNodeTypeValidators(): List<BluePrintNodeTypeValidator>
53
54     fun getTopologyTemplateValidators(): List<BluePrintTopologyTemplateValidator>
55
56     fun getNodeTemplateValidators(): List<BluePrintNodeTemplateValidator>
57
58     fun getWorkflowValidators(): List<BluePrintWorkflowValidator>
59
60     fun getPropertyDefinitionValidators(): List<BluePrintPropertyDefinitionValidator>
61
62     fun getAttributeDefinitionValidators(): List<BluePrintAttributeDefinitionValidator>
63
64     fun validateServiceTemplate(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, serviceTemplate: ServiceTemplate) {
65         val validators = getServiceTemplateValidators()
66         doValidation(bluePrintContext, error, name, serviceTemplate, validators)
67     }
68
69     fun validateArtifactType(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, artifactType: ArtifactType) {
70         val validators = getArtifactTypeValidators()
71         doValidation(bluePrintContext, error, name, artifactType, validators)
72     }
73
74     fun validateDataType(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, dataType: DataType) {
75         val validators = getDataTypeValidators()
76         doValidation(bluePrintContext, error, name, dataType, validators)
77     }
78
79     fun validateNodeType(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, nodeType: NodeType) {
80         val validators = getNodeTypeValidators()
81         doValidation(bluePrintContext, error, name, nodeType, validators)
82     }
83
84     fun validateTopologyTemplate(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, topologyTemplate: TopologyTemplate) {
85         val validators = getTopologyTemplateValidators()
86         doValidation(bluePrintContext, error, name, topologyTemplate, validators)
87     }
88
89     fun validateNodeTemplate(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, nodeTemplate: NodeTemplate) {
90         val validators = getNodeTemplateValidators()
91         doValidation(bluePrintContext, error, name, nodeTemplate, validators)
92     }
93
94     fun validateWorkflow(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, workflow: Workflow) {
95         val validators = getWorkflowValidators()
96         doValidation(bluePrintContext, error, name, workflow, validators)
97     }
98
99     fun validatePropertyDefinitions(bluePrintContext: BluePrintContext, error: BluePrintError, properties: MutableMap<String, PropertyDefinition>) {
100         properties.forEach { propertyName, propertyDefinition ->
101             validatePropertyDefinition(bluePrintContext, error, propertyName, propertyDefinition)
102         }
103     }
104
105     fun validatePropertyDefinition(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, propertyDefinition: PropertyDefinition) {
106         val validators = getPropertyDefinitionValidators()
107         doValidation(bluePrintContext, error, name, propertyDefinition, validators)
108     }
109
110     fun validateAttributeDefinitions(bluePrintContext: BluePrintContext, error: BluePrintError, attributes: MutableMap<String, AttributeDefinition>) {
111         attributes.forEach { attributeName, attributeDefinition ->
112             validateAttributeDefinition(bluePrintContext, error, attributeName, attributeDefinition)
113         }
114     }
115
116     fun validateAttributeDefinition(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, attributeDefinition: AttributeDefinition) {
117         val validators = getAttributeDefinitionValidators()
118         doValidation(bluePrintContext, error, name, attributeDefinition, validators)
119     }
120
121     private fun <T> doValidation(bluePrintContext: BluePrintContext, error: BluePrintError, name: String, definition: Any, validators: List<BluePrintValidator<T>>) {
122         validators.forEach {
123             it.validate(bluePrintContext, error, name, definition as T)
124         }
125     }
126 }
127
128
129