Refractor controller blueprint modules
[ccsdk/cds.git] / ms / blueprintsprocessor / modules / blueprints / blueprint-core / src / main / kotlin / org / onap / ccsdk / cds / controllerblueprints / core / interfaces / BlueprintValidator.kt
diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/interfaces/BlueprintValidator.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/interfaces/BlueprintValidator.kt
new file mode 100644 (file)
index 0000000..c6339f4
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2018 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.ArtifactType
+import org.onap.ccsdk.cds.controllerblueprints.core.data.AttributeDefinition
+import org.onap.ccsdk.cds.controllerblueprints.core.data.DataType
+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.PropertyDefinition
+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.BluePrintRuntimeService
+
+interface BluePrintValidator<T> {
+
+    fun validate(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, type: T)
+}
+
+interface BluePrintServiceTemplateValidator : BluePrintValidator<ServiceTemplate>
+
+interface BluePrintTopologyTemplateValidator : BluePrintValidator<TopologyTemplate>
+
+interface BluePrintArtifactTypeValidator : BluePrintValidator<ArtifactType>
+
+interface BluePrintArtifactDefinitionValidator : BluePrintValidator<ArtifactDefinition>
+
+interface BluePrintDataTypeValidator : BluePrintValidator<DataType>
+
+interface BluePrintNodeTypeValidator : BluePrintValidator<NodeType>
+
+interface BluePrintNodeTemplateValidator : BluePrintValidator<NodeTemplate>
+
+interface BluePrintWorkflowValidator : BluePrintValidator<Workflow>
+
+interface BluePrintPropertyDefinitionValidator : BluePrintValidator<PropertyDefinition>
+
+interface BluePrintAttributeDefinitionValidator : BluePrintValidator<AttributeDefinition>
+
+/**
+ * Blueprint Validation Interface.
+ */
+interface BluePrintValidatorService {
+
+    @Throws(BluePrintException::class)
+    fun validateBluePrints(basePath: String): Boolean
+
+    @Throws(BluePrintException::class)
+    fun validateBluePrints(bluePrintRuntimeService: BluePrintRuntimeService<*>): Boolean
+}
+
+interface BluePrintTypeValidatorService {
+
+    fun <T : BluePrintValidator<*>> bluePrintValidator(referenceName: String, classType: Class<T>): T?
+
+    fun <T : BluePrintValidator<*>> bluePrintValidators(referenceNamePrefix: String, classType: Class<T>): List<T>?
+
+    fun <T : BluePrintValidator<*>> bluePrintValidators(classType: Class<T>): List<T>?
+
+    fun getServiceTemplateValidators(): List<BluePrintServiceTemplateValidator>
+
+    fun getDataTypeValidators(): List<BluePrintDataTypeValidator>
+
+    fun getArtifactTypeValidators(): List<BluePrintArtifactTypeValidator>
+
+    fun getArtifactDefinitionsValidators(): List<BluePrintArtifactDefinitionValidator>
+
+    fun getNodeTypeValidators(): List<BluePrintNodeTypeValidator>
+
+    fun getTopologyTemplateValidators(): List<BluePrintTopologyTemplateValidator>
+
+    fun getNodeTemplateValidators(): List<BluePrintNodeTemplateValidator>
+
+    fun getWorkflowValidators(): List<BluePrintWorkflowValidator>
+
+    fun getPropertyDefinitionValidators(): List<BluePrintPropertyDefinitionValidator>
+
+    fun getAttributeDefinitionValidators(): List<BluePrintAttributeDefinitionValidator>
+
+    fun validateServiceTemplate(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, serviceTemplate: ServiceTemplate) {
+        val validators = getServiceTemplateValidators()
+        doValidation(bluePrintRuntimeService, name, serviceTemplate, validators)
+    }
+
+    fun validateArtifactType(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, artifactType: ArtifactType) {
+        val validators = getArtifactTypeValidators()
+        doValidation(bluePrintRuntimeService, name, artifactType, validators)
+    }
+
+    fun validateArtifactDefinition(
+        bluePrintRuntimeService: BluePrintRuntimeService<*>,
+        name: String,
+        artifactDefinition: ArtifactDefinition
+    ) {
+        val validators = getArtifactDefinitionsValidators()
+        doValidation(bluePrintRuntimeService, name, artifactDefinition, validators)
+    }
+
+    fun validateDataType(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, dataType: DataType) {
+        val validators = getDataTypeValidators()
+        doValidation(bluePrintRuntimeService, name, dataType, validators)
+    }
+
+    fun validateNodeType(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, nodeType: NodeType) {
+        val validators = getNodeTypeValidators()
+        doValidation(bluePrintRuntimeService, name, nodeType, validators)
+    }
+
+    fun validateTopologyTemplate(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, topologyTemplate: TopologyTemplate) {
+        val validators = getTopologyTemplateValidators()
+        doValidation(bluePrintRuntimeService, name, topologyTemplate, validators)
+    }
+
+    fun validateNodeTemplate(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, nodeTemplate: NodeTemplate) {
+        val validators = getNodeTemplateValidators()
+        doValidation(bluePrintRuntimeService, name, nodeTemplate, validators)
+    }
+
+    fun validateWorkflow(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, workflow: Workflow) {
+        val validators = getWorkflowValidators()
+        doValidation(bluePrintRuntimeService, name, workflow, validators)
+    }
+
+    fun validatePropertyDefinitions(bluePrintRuntimeService: BluePrintRuntimeService<*>, properties: MutableMap<String, PropertyDefinition>) {
+        properties.forEach { propertyName, propertyDefinition ->
+            validatePropertyDefinition(bluePrintRuntimeService, propertyName, propertyDefinition)
+        }
+    }
+
+    fun validatePropertyDefinition(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, propertyDefinition: PropertyDefinition) {
+        val validators = getPropertyDefinitionValidators()
+        doValidation(bluePrintRuntimeService, name, propertyDefinition, validators)
+    }
+
+    fun validateAttributeDefinitions(bluePrintRuntimeService: BluePrintRuntimeService<*>, attributes: MutableMap<String, AttributeDefinition>) {
+        attributes.forEach { attributeName, attributeDefinition ->
+            validateAttributeDefinition(bluePrintRuntimeService, attributeName, attributeDefinition)
+        }
+    }
+
+    fun validateAttributeDefinition(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, attributeDefinition: AttributeDefinition) {
+        val validators = getAttributeDefinitionValidators()
+        doValidation(bluePrintRuntimeService, name, attributeDefinition, validators)
+    }
+
+    @Suppress("UNCHECKED_CAST")
+    private fun <T> doValidation(
+        bluePrintRuntimeService: BluePrintRuntimeService<*>,
+        name: String,
+        definition: Any,
+        validators: List<BluePrintValidator<T>>
+    ) {
+        validators.forEach {
+            it.validate(bluePrintRuntimeService, name, definition as T)
+        }
+    }
+}