Add blueprint runtime validator
authorMuthuramalingam, Brinda Santh <brindasanth@in.ibm.com>
Thu, 28 Feb 2019 01:16:47 +0000 (20:16 -0500)
committerMuthuramalingam, Brinda Santh <brindasanth@in.ibm.com>
Mon, 11 Mar 2019 13:13:22 +0000 (09:13 -0400)
Change-Id: I9e2aa1aec392fc4191d547115fa90e8811f0f9e9
Issue-ID: CCSDK-1110
Signed-off-by: Muthuramalingam, Brinda Santh <brindasanth@in.ibm.com>
16 files changed:
ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintTypes.kt
ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeService.kt
ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtils.kt
ms/controllerblueprints/modules/blueprint-validation/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/validation/BluePrintArtifactDefinitionValidatorImpl.kt
ms/controllerblueprints/modules/blueprint-validation/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/validation/BluePrintDesignTimeValidatorService.kt
ms/controllerblueprints/modules/blueprint-validation/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/validation/BluePrintValidationConfiguration.kt [new file with mode: 0644]
ms/controllerblueprints/modules/blueprint-validation/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/validation/extension/ArtifactMappingResourceValidator.kt
ms/controllerblueprints/modules/blueprint-validation/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/validation/extension/ResourceDefinitionValidation.kt [new file with mode: 0644]
ms/controllerblueprints/modules/blueprint-validation/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/validation/BluePrintDesignTimeValidatorServiceTest.kt
ms/controllerblueprints/modules/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/service/ResourceAssignmentValidationService.kt
ms/controllerblueprints/modules/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/service/ResourceDefinitionValidationService.kt [deleted file]
ms/controllerblueprints/modules/resource-dict/src/test/java/org/onap/ccsdk/apps/controllerblueprints/resource/dict/service/ResourceDefinitionValidationServiceTest.java [deleted file]
ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/validator/ResourceDictionaryValidator.java [deleted file]
ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/validator/ServiceTemplateValidator.java [deleted file]
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/BluePrintRepoServiceImpl.kt
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/handler/ResourceDictionaryHandler.kt

index b2f1b72..cf400fa 100644 (file)
@@ -98,16 +98,9 @@ object BluePrintTypes {
     @JvmStatic
     fun validPropertyTypes(): List<String> {
         val validTypes: MutableList<String> = arrayListOf()
-        validTypes.add(BluePrintConstants.DATA_TYPE_STRING)
-        validTypes.add(BluePrintConstants.DATA_TYPE_INTEGER)
-        validTypes.add(BluePrintConstants.DATA_TYPE_FLOAT)
-        validTypes.add(BluePrintConstants.DATA_TYPE_DOUBLE)
-        validTypes.add(BluePrintConstants.DATA_TYPE_BOOLEAN)
-        validTypes.add(BluePrintConstants.DATA_TYPE_TIMESTAMP)
-        validTypes.add(BluePrintConstants.DATA_TYPE_NULL)
-        validTypes.add(BluePrintConstants.DATA_TYPE_LIST)
-        validTypes.add(BluePrintConstants.DATA_TYPE_MAP)
-        validTypes.add(BluePrintConstants.DATA_TYPE_JSON)
+        validTypes.addAll(validPrimitiveTypes())
+        validTypes.addAll(validComplexTypes())
+        validTypes.addAll(validCollectionTypes())
         return validTypes
     }
 
@@ -124,6 +117,13 @@ object BluePrintTypes {
         return validTypes
     }
 
+    @JvmStatic
+    fun validComplexTypes(): List<String> {
+        val validTypes: MutableList<String> = arrayListOf()
+        validTypes.add(BluePrintConstants.DATA_TYPE_JSON)
+        return validTypes
+    }
+
     @JvmStatic
     fun validCollectionTypes(): List<String> {
         val validTypes: MutableList<String> = arrayListOf()
index 80ad3f2..c582807 100644 (file)
@@ -29,7 +29,6 @@ import org.onap.ccsdk.apps.controllerblueprints.core.data.ArtifactDefinition
 import org.onap.ccsdk.apps.controllerblueprints.core.data.NodeTemplate
 import org.onap.ccsdk.apps.controllerblueprints.core.data.PropertyDefinition
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils
-import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
 import java.io.File
 
 interface BluePrintRuntimeService<T> {
@@ -234,7 +233,7 @@ open class DefaultBluePrintRuntimeService(private var id: String, private var bl
             } else {
                 // Assign default value to the Operation
                 nodeTypeProperty.defaultValue?.let {
-                    resolvedValue = JacksonUtils.jsonNodeFromObject(nodeTypeProperty.defaultValue!!)
+                    resolvedValue = nodeTypeProperty.defaultValue!!
                 }
             }
             // Set for Return of method
index 1bc2500..932f0ed 100644 (file)
@@ -68,12 +68,14 @@ class JacksonUtils {
             }
         }
 
-        fun getContent(fileName: String): String = runBlocking {
+        fun getContent(fileName: String): String = getContent(File(fileName))
+
+        fun getContent(file: File): String = runBlocking {
             async {
                 try {
-                    File(fileName).readText(Charsets.UTF_8)
+                    file.readText(Charsets.UTF_8)
                 } catch (e: Exception) {
-                    throw BluePrintException("couldn't get file ($fileName) content : ${e.message}")
+                    throw BluePrintException("couldn't get file (${file.absolutePath}) content : ${e.message}")
                 }
             }.await()
         }
@@ -167,17 +169,19 @@ class JacksonUtils {
             return getListFromJson(content, valueType)
         }
 
-        fun <T> getMapFromJson(content: String, valueType: Class<T>): MutableMap<String, T>? {
+        fun <T> getMapFromJson(content: String, valueType: Class<T>): MutableMap<String, T> {
             val objectMapper = jacksonObjectMapper()
             val mapType = objectMapper.typeFactory.constructMapType(Map::class.java, String::class.java, valueType)
             return objectMapper.readValue(content, mapType)
         }
 
-        fun <T> getMapFromFile(fileName: String, valueType: Class<T>): MutableMap<String, T>? {
-            val content: String = getContent(fileName)
+        fun <T> getMapFromFile(file: File, valueType: Class<T>): MutableMap<String, T> {
+            val content: String = getContent(file)
             return getMapFromJson(content, valueType)
         }
 
+        fun <T> getMapFromFile(fileName: String, valueType: Class<T>): MutableMap<String, T> = getMapFromFile(File(fileName), valueType)
+
         fun <T> getInstanceFromMap(properties: MutableMap<String, JsonNode>, classType: Class<T>): T {
             return readValue(getJson(properties), classType)
                     ?: throw BluePrintProcessorException("failed to transform content ($properties) to type ($classType)")
index 4ea5ab5..a43bf45 100644 (file)
@@ -49,7 +49,7 @@ open class BluePrintArtifactDefinitionValidatorImpl(
 
         paths.add(name)
         val type: String = artifactDefinition.type
-        log.info("Validation ArtifactDefinition of type {$type}")
+        log.trace("Validation ArtifactDefinition of type {$type}")
         // Check Artifact Type
         checkValidArtifactType(name, type)
 
index 84073ff..c898577 100644 (file)
@@ -19,17 +19,25 @@ package org.onap.ccsdk.apps.controllerblueprints.validation
 
 import com.att.eelf.configuration.EELFLogger
 import com.att.eelf.configuration.EELFManager
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeValidatorService
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintValidatorService
 import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDictionaryConstants
+import org.onap.ccsdk.apps.controllerblueprints.validation.extension.ResourceDefinitionValidator
 import org.springframework.stereotype.Service
+import java.io.File
 import java.util.*
 
 
 @Service
-open class BluePrintDesignTimeValidatorService(private val bluePrintTypeValidatorService: BluePrintTypeValidatorService) : BluePrintValidatorService {
+open class BluePrintDesignTimeValidatorService(private val bluePrintTypeValidatorService: BluePrintTypeValidatorService,
+                                               private val resourceDefinitionValidator: ResourceDefinitionValidator)
+    : BluePrintValidatorService {
 
     private val log: EELFLogger = EELFManager.getInstance().getLogger(BluePrintDesignTimeValidatorService::class.toString())
 
@@ -43,9 +51,32 @@ open class BluePrintDesignTimeValidatorService(private val bluePrintTypeValidato
 
         bluePrintTypeValidatorService.validateServiceTemplate(bluePrintRuntimeService, "service_template",
                 bluePrintRuntimeService.bluePrintContext().serviceTemplate)
+
+        // Validate Resource Definitions
+        validateResourceDefinitions(bluePrintRuntimeService)
+
         if (bluePrintRuntimeService.getBluePrintError().errors.size > 0) {
             throw BluePrintException("failed in blueprint validation : ${bluePrintRuntimeService.getBluePrintError().errors.joinToString("\n")}")
         }
         return true
     }
+
+    private fun validateResourceDefinitions(bluePrintRuntimeService: BluePrintRuntimeService<*>) {
+        // Validate Resource Dictionary
+        val blueprintBasePath = bluePrintRuntimeService.bluePrintContext().rootPath
+
+        val resourceDefinitionsPath = blueprintBasePath.plus(File.separator)
+                .plus(BluePrintConstants.TOSCA_DEFINITIONS_DIR).plus(File.separator)
+                .plus("${ResourceDictionaryConstants.PATH_RESOURCE_DEFINITION_TYPE}.json")
+
+        val resourceDefinitionFile = File(resourceDefinitionsPath)
+
+        if (resourceDefinitionFile.exists()) {
+            val resourceDefinitionMap = JacksonUtils.getMapFromFile(resourceDefinitionFile, ResourceDefinition::class.java)
+
+            resourceDefinitionMap?.forEach { resourceDefinitionName, resourceDefinition ->
+                resourceDefinitionValidator.validate(bluePrintRuntimeService, resourceDefinitionName, resourceDefinition)
+            }
+        }
+    }
 }
diff --git a/ms/controllerblueprints/modules/blueprint-validation/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/validation/BluePrintValidationConfiguration.kt b/ms/controllerblueprints/modules/blueprint-validation/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/validation/BluePrintValidationConfiguration.kt
new file mode 100644 (file)
index 0000000..bad1479
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ *  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.apps.controllerblueprints.validation
+
+import org.springframework.context.annotation.ComponentScan
+import org.springframework.context.annotation.Configuration
+
+@Configuration
+@ComponentScan
+open class BluePrintValidationConfiguration
\ No newline at end of file
index 6fe4fa3..002dd9f 100644 (file)
@@ -40,7 +40,7 @@ open class ArtifactMappingResourceValidator(private val bluePrintTypeValidatorSe
         val bluePrintContext = bluePrintRuntimeService.bluePrintContext()
         val file: String = artifactDefinition.file
         val completePath = bluePrintContext.rootPath.plus(File.separator).plus(file)
-        log.info("Validation artifact-mapping-resource($completePath)")
+        log.trace("Validation artifact-mapping-resource($completePath)")
         val resourceAssignment = JacksonUtils.getListFromFile(completePath, ResourceAssignment::class.java)
         val resourceAssignmentValidationService = ResourceAssignmentValidationServiceImpl()
         resourceAssignmentValidationService.validate(resourceAssignment)
diff --git a/ms/controllerblueprints/modules/blueprint-validation/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/validation/extension/ResourceDefinitionValidation.kt b/ms/controllerblueprints/modules/blueprint-validation/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/validation/extension/ResourceDefinitionValidation.kt
new file mode 100644 (file)
index 0000000..6975ec6
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ *  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.apps.controllerblueprints.validation.extension
+
+import com.att.eelf.configuration.EELFLogger
+import com.att.eelf.configuration.EELFManager
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeValidatorService
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintValidator
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition
+import org.springframework.beans.factory.config.ConfigurableBeanFactory
+import org.springframework.context.annotation.Scope
+import org.springframework.stereotype.Service
+
+interface ResourceDefinitionValidator : BluePrintValidator<ResourceDefinition>
+
+@Service
+@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+open class ResourceDefinitionValidatorImpl(private val bluePrintTypeValidatorService: BluePrintTypeValidatorService) : ResourceDefinitionValidator {
+
+    private val log: EELFLogger = EELFManager.getInstance().getLogger(ResourceDefinitionValidatorImpl::class.java)
+
+    override fun validate(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String,
+                          resourceDefinition: ResourceDefinition) {
+        log.trace("validating resource definition($name)")
+        resourceDefinition.sources.forEach { name, nodeTemplate ->
+            bluePrintTypeValidatorService.validateNodeTemplate(bluePrintRuntimeService, name, nodeTemplate)
+        }
+    }
+}
\ No newline at end of file
index 43c3e0e..3fc918e 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * 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.
@@ -27,6 +28,7 @@ import org.onap.ccsdk.apps.controllerblueprints.core.data.Workflow
 import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
 import org.onap.ccsdk.apps.controllerblueprints.core.service.DefaultBluePrintRuntimeService
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils
+import org.onap.ccsdk.apps.controllerblueprints.validation.extension.ResourceDefinitionValidator
 import kotlin.test.assertEquals
 import kotlin.test.assertTrue
 
@@ -35,11 +37,14 @@ class BluePrintDesignTimeValidatorServiceTest {
     private val blueprintBasePath: String = ("./../../../../components/model-catalog/blueprint-model/test-blueprint/baseconfiguration")
     private val bluePrintRuntime = BluePrintMetadataUtils.getBluePrintRuntime("1234", blueprintBasePath)
     private val mockBluePrintTypeValidatorService = MockBluePrintTypeValidatorService()
-    private val defaultBluePrintValidatorService = BluePrintDesignTimeValidatorService(mockBluePrintTypeValidatorService)
+    private val resourceDefinitionValidator = mockk<ResourceDefinitionValidator>()
+    private val defaultBluePrintValidatorService = BluePrintDesignTimeValidatorService(mockBluePrintTypeValidatorService, resourceDefinitionValidator)
     private val workflowValidator = BluePrintWorkflowValidatorImpl(mockBluePrintTypeValidatorService)
 
     @Test
     fun testValidateOfType() {
+        every { resourceDefinitionValidator.validate(bluePrintRuntime, any(), any()) } returns Unit
+
         val valid = defaultBluePrintValidatorService.validateBluePrints(bluePrintRuntime)
         assertTrue(valid, "failed in blueprint Validation")
     }
index d71fbbf..b35bca7 100644 (file)
@@ -23,10 +23,8 @@ import org.apache.commons.collections.CollectionUtils
 import org.apache.commons.lang3.StringUtils
 import org.apache.commons.lang3.text.StrBuilder
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
-import org.onap.ccsdk.apps.controllerblueprints.core.format
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.TopologicalSortingUtils
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
-import org.onap.ccsdk.apps.controllerblueprints.resource.dict.factory.ResourceSourceMappingFactory
 import java.io.Serializable
 
 /**
@@ -53,7 +51,6 @@ open class ResourceAssignmentValidationServiceImpl : ResourceAssignmentValidatio
 
     override fun validate(resourceAssignments: List<ResourceAssignment>): Boolean {
         try {
-            validateSources(resourceAssignments)
             validateTemplateNDictionaryKeys(resourceAssignments)
             validateCyclicDependency(resourceAssignments)
             if (StringUtils.isNotBlank(validationMessage)) {
@@ -65,17 +62,6 @@ open class ResourceAssignmentValidationServiceImpl : ResourceAssignmentValidatio
         return true
     }
 
-    open fun validateSources(resourceAssignments: List<ResourceAssignment>) {
-        log.info("validating resource assignment sources")
-        // Check the Resource Assignment Source(Dynamic Instance) is valid.
-        resourceAssignments.forEach { resourceAssignment ->
-            try {
-                ResourceSourceMappingFactory.getRegisterSourceMapping(resourceAssignment.dictionarySource!!)
-            } catch (e: BluePrintException) {
-                validationMessage.appendln(e.message + format(" for resource assignment({})", resourceAssignment.name))
-            }
-        }
-    }
 
     open fun validateTemplateNDictionaryKeys(resourceAssignments: List<ResourceAssignment>) {
 
@@ -121,7 +107,7 @@ open class ResourceAssignmentValidationServiceImpl : ResourceAssignmentValidatio
         resourceAssignmentMap.map { it.value }.map { resourceAssignment ->
             if (CollectionUtils.isNotEmpty(resourceAssignment.dependencies)) {
                 resourceAssignment.dependencies!!.map {
-                    log.info("Topological Graph link from {} to {}", it, resourceAssignment.name)
+                    log.trace("Topological Graph link from {} to {}", it, resourceAssignment.name)
                     topologySorting.add(resourceAssignmentMap[it]!!, resourceAssignment)
                 }
             } else {
diff --git a/ms/controllerblueprints/modules/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/service/ResourceDefinitionValidationService.kt b/ms/controllerblueprints/modules/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/service/ResourceDefinitionValidationService.kt
deleted file mode 100644 (file)
index 9541a7b..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- *  Copyright © 2018 IBM.
- *  Modifications Copyright © 2017-2018 AT&T Intellectual Property.
- *
- *  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.apps.controllerblueprints.resource.dict.service
-
-import com.att.eelf.configuration.EELFLogger
-import com.att.eelf.configuration.EELFManager
-import com.fasterxml.jackson.databind.JsonNode
-import com.google.common.base.Preconditions
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintTypes
-import org.onap.ccsdk.apps.controllerblueprints.core.data.NodeTemplate
-import org.onap.ccsdk.apps.controllerblueprints.core.data.NodeType
-import org.onap.ccsdk.apps.controllerblueprints.core.data.PropertyDefinition
-import org.onap.ccsdk.apps.controllerblueprints.core.format
-import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintRepoService
-import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintExpressionService
-import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
-import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition
-import java.io.Serializable
-
-/**
- * ResourceDefinitionValidationService.
- *
- * @author Brinda Santh
- */
-interface ResourceDefinitionValidationService : Serializable {
-
-    @Throws(BluePrintException::class)
-    fun validate(resourceDefinition: ResourceDefinition)
-
-}
-
-/**
- * ResourceDefinitionValidationService.
- *
- * @author Brinda Santh
- */
-open class ResourceDefinitionValidationServiceImpl(private val bluePrintRepoService: BluePrintRepoService) : ResourceDefinitionValidationService {
-
-    private val log: EELFLogger = EELFManager.getInstance().getLogger(ResourceDefinitionValidationService::class.java)
-
-    override fun validate(resourceDefinition: ResourceDefinition) {
-        Preconditions.checkNotNull(resourceDefinition, "Failed to get Resource Definition")
-        log.trace("Validating Resource Dictionary Definition {}", resourceDefinition.name)
-
-        resourceDefinition.sources.forEach { name, nodeTemplate ->
-            val sourceType = nodeTemplate.type
-
-            val sourceNodeType = bluePrintRepoService.getNodeType(sourceType)
-
-            // Validate Property Name, expression, values and Data Type
-            validateNodeTemplateProperties(nodeTemplate, sourceNodeType)
-        }
-    }
-
-
-    open fun validateNodeTemplateProperties(nodeTemplate: NodeTemplate, nodeType: NodeType) {
-        nodeTemplate.properties?.let { validatePropertyAssignments(nodeType.properties!!, nodeTemplate.properties!!) }
-    }
-
-
-    open fun validatePropertyAssignments(nodeTypeProperties: MutableMap<String, PropertyDefinition>,
-                                         properties: MutableMap<String, JsonNode>) {
-        properties.forEach { propertyName, propertyAssignment ->
-            val propertyDefinition: PropertyDefinition = nodeTypeProperties[propertyName]
-                    ?: throw BluePrintException(format("failed to get definition for the property ({})", propertyName))
-            // Check and Validate if Expression Node
-            val expressionData = BluePrintExpressionService.getExpressionData(propertyAssignment)
-            if (!expressionData.isExpression) {
-                checkPropertyValue(propertyDefinition, propertyName, propertyAssignment)
-            } else {
-                throw BluePrintException(format("property({}) of expression ({}) is not supported",
-                        propertyName, propertyAssignment))
-            }
-        }
-    }
-
-    open fun checkPropertyValue(propertyDefinition: PropertyDefinition, propertyName: String, propertyAssignment: JsonNode) {
-        val propertyType = propertyDefinition.type
-        val isValid: Boolean
-
-        if (BluePrintTypes.validPrimitiveTypes().contains(propertyType)) {
-            isValid = JacksonUtils.checkJsonNodeValueOfPrimitiveType(propertyType, propertyAssignment)
-
-        } else if (BluePrintTypes.validCollectionTypes().contains(propertyType)) {
-
-            isValid = JacksonUtils.checkJsonNodeValueOfCollectionType(propertyType, propertyAssignment)
-        } else {
-            bluePrintRepoService.getDataType(propertyType)
-            isValid = true
-        }
-
-        check(isValid) {
-            throw BluePrintException(format("property({}) defined of type({}) is not compatable with the value ({})",
-                    propertyName, propertyType, propertyAssignment))
-        }
-    }
-}
\ No newline at end of file
diff --git a/ms/controllerblueprints/modules/resource-dict/src/test/java/org/onap/ccsdk/apps/controllerblueprints/resource/dict/service/ResourceDefinitionValidationServiceTest.java b/ms/controllerblueprints/modules/resource-dict/src/test/java/org/onap/ccsdk/apps/controllerblueprints/resource/dict/service/ResourceDefinitionValidationServiceTest.java
deleted file mode 100644 (file)
index 7f040b2..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *  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.apps.controllerblueprints.resource.dict.service;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRepoFileService;
-import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils;
-import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition;
-
-public class ResourceDefinitionValidationServiceTest {
-    private String basePath = "load/model_type";
-    private String dictionaryPath = "load/resource_dictionary";
-    private BluePrintRepoFileService bluePrintRepoFileService = new BluePrintRepoFileService(basePath);
-
-    @Test
-    public void testValidateSource() throws Exception {
-
-        String inputFileName = dictionaryPath + "/input-source.json";
-        testValidate(inputFileName);
-
-        String dbFileName = dictionaryPath + "/primary-db-source.json";
-        testValidate(dbFileName);
-
-        String defaultFileName = dictionaryPath + "/default-source.json";
-        testValidate(defaultFileName);
-
-        String restFileName = dictionaryPath + "/mdsal-source.json";
-        testValidate(restFileName);
-    }
-
-    private void testValidate(String fileName) throws Exception {
-
-        ResourceDefinition resourceDefinition = JacksonUtils.Companion.readValueFromFile(fileName, ResourceDefinition.class);
-        Assert.assertNotNull("Failed to populate dictionaryDefinition for  type", resourceDefinition);
-
-        ResourceDefinitionValidationService resourceDictionaryValidationService =
-                new ResourceDefinitionValidationServiceImpl(bluePrintRepoFileService);
-        resourceDictionaryValidationService.validate(resourceDefinition);
-        Assert.assertNotNull(String.format("Failed to populate dictionaryDefinition for : %s", fileName), resourceDefinition);
-    }
-}
diff --git a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/validator/ResourceDictionaryValidator.java b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/validator/ResourceDictionaryValidator.java
deleted file mode 100644 (file)
index 57330d9..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*\r
- * Copyright © 2017-2018 AT&T Intellectual Property.\r
- * Modifications Copyright © 2018 IBM.\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- *     http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
-\r
-package org.onap.ccsdk.apps.controllerblueprints.service.validator;\r
-\r
-import com.google.common.base.Preconditions;\r
-import org.apache.commons.lang3.StringUtils;\r
-import org.onap.ccsdk.apps.controllerblueprints.service.domain.ResourceDictionary;\r
-\r
-/**\r
- * ResourceDictionaryValidator.java Purpose: Provide Validation Service for Model Type Resource\r
- * Dictionary Validator\r
- *\r
- * @author Brinda Santh\r
- * @version 1.0\r
- */\r
-public class ResourceDictionaryValidator {\r
-\r
-    private ResourceDictionaryValidator() {}\r
-\r
-    /**\r
-     * This is a validateResourceDictionary method\r
-     * \r
-     * @param resourceDictionary\r
-     * @return boolean\r
-     *\r
-     */\r
-    public static boolean validateResourceDictionary(ResourceDictionary resourceDictionary) {\r
-\r
-        Preconditions.checkNotNull(resourceDictionary,"ResourceDictionary Information is missing." );\r
-\r
-        Preconditions.checkArgument( StringUtils.isNotBlank(resourceDictionary.getName()),\r
-                "DataDictionary Alias Name Information is missing.");\r
-        Preconditions.checkNotNull( resourceDictionary.getDefinition(),\r
-                "DataDictionary Definition Information is missing.");\r
-        Preconditions.checkArgument( StringUtils.isNotBlank(resourceDictionary.getDescription()),\r
-                "DataDictionary Description Information is missing.");\r
-        Preconditions.checkArgument( StringUtils.isNotBlank(resourceDictionary.getTags()),\r
-                "DataDictionary Tags Information is missing.");\r
-        Preconditions.checkArgument( StringUtils.isNotBlank(resourceDictionary.getUpdatedBy()),\r
-                "DataDictionary Updated By Information is missing.");\r
-        return true;\r
-\r
-    }\r
-\r
-}\r
diff --git a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/validator/ServiceTemplateValidator.java b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/validator/ServiceTemplateValidator.java
deleted file mode 100644 (file)
index 5d15e08..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*\r
- * Copyright © 2017-2018 AT&T Intellectual Property.\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- *     http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
-\r
-package org.onap.ccsdk.apps.controllerblueprints.service.validator;\r
-\r
-import com.google.common.base.Preconditions;\r
-import org.apache.commons.collections.MapUtils;\r
-import org.apache.commons.lang3.StringUtils;\r
-import org.jetbrains.annotations.NotNull;\r
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants;\r
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;\r
-import org.onap.ccsdk.apps.controllerblueprints.core.ConfigModelConstant;\r
-import org.onap.ccsdk.apps.controllerblueprints.core.data.CapabilityAssignment;\r
-import org.onap.ccsdk.apps.controllerblueprints.core.data.NodeTemplate;\r
-import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate;\r
-import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintValidatorDefaultService;\r
-import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils;\r
-import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment;\r
-import org.onap.ccsdk.apps.controllerblueprints.resource.dict.service.ResourceAssignmentValidationService;\r
-import org.onap.ccsdk.apps.controllerblueprints.resource.dict.service.ResourceAssignmentValidationServiceImpl;\r
-\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-/**\r
- * ServiceTemplateValidator.java Purpose: Provide Configuration Generator ServiceTemplateValidator\r
- *\r
- * @author Brinda Santh\r
- * @version 1.0\r
- */\r
-\r
-public class ServiceTemplateValidator extends BluePrintValidatorDefaultService {\r
-\r
-    StringBuilder message = new StringBuilder();\r
-    private Map<String, String> metaData = new HashMap<>();\r
-\r
-    /**\r
-     * This is a validateServiceTemplate\r
-     *\r
-     * @param serviceTemplateContent serviceTemplateContent\r
-     * @return boolean\r
-     * @throws BluePrintException BluePrintException\r
-     */\r
-    public boolean validateServiceTemplate(String serviceTemplateContent) throws BluePrintException {\r
-        if (StringUtils.isNotBlank(serviceTemplateContent)) {\r
-            ServiceTemplate serviceTemplate =\r
-                    JacksonUtils.Companion.readValue(serviceTemplateContent, ServiceTemplate.class);\r
-            return validateServiceTemplate(serviceTemplate);\r
-        } else {\r
-            throw new BluePrintException(\r
-                    "Service Template Content is  (" + serviceTemplateContent + ") not Defined.");\r
-        }\r
-    }\r
-\r
-    /**\r
-     * This is a validateServiceTemplate\r
-     *\r
-     * @param serviceTemplate serviceTemplate\r
-     * @return boolean\r
-     * @throws BluePrintException BluePrintException\r
-     */\r
-    @SuppressWarnings("squid:S00112")\r
-    public boolean validateServiceTemplate(ServiceTemplate serviceTemplate) throws BluePrintException {\r
-        Map<String, Object> properties = new HashMap<>();\r
-        super.validateBlueprint(serviceTemplate, properties);\r
-        return true;\r
-    }\r
-\r
-    /**\r
-     * This is a getMetaData to get the key information during the\r
-     *\r
-     * @return Map<String                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               String>\r
-     */\r
-    public Map<String, String> getMetaData() {\r
-        return metaData;\r
-    }\r
-\r
-    @Override\r
-    public void validateMetadata(@NotNull Map<String, String> metaDataMap) throws BluePrintException {\r
-\r
-        Preconditions.checkNotNull(serviceTemplate.getMetadata(), "Service Template Metadata Information is missing.");\r
-        super.validateMetadata(metaDataMap);\r
-\r
-        this.metaData.putAll(serviceTemplate.getMetadata());\r
-    }\r
-\r
-\r
-    @Override\r
-    public void validateNodeTemplate(@NotNull String nodeTemplateName, @NotNull NodeTemplate nodeTemplate)\r
-            throws BluePrintException {\r
-        super.validateNodeTemplate(nodeTemplateName, nodeTemplate);\r
-        validateNodeTemplateCustom(nodeTemplateName, nodeTemplate);\r
-\r
-    }\r
-\r
-    @Deprecated()\r
-    private void validateNodeTemplateCustom(@NotNull String nodeTemplateName, @NotNull NodeTemplate nodeTemplate)\r
-            throws BluePrintException {\r
-        String derivedFrom = getBluePrintContext().nodeTemplateNodeType(nodeTemplateName).getDerivedFrom();\r
-\r
-        if (BluePrintConstants.MODEL_TYPE_NODE_ARTIFACT.equals(derivedFrom)) {\r
-            List<ResourceAssignment> resourceAssignment = getResourceAssignments(nodeTemplate);\r
-            ResourceAssignmentValidationService resourceAssignmentValidationService = new ResourceAssignmentValidationServiceImpl();\r
-            resourceAssignmentValidationService.validate(resourceAssignment);\r
-        }\r
-    }\r
-\r
-    private List<ResourceAssignment> getResourceAssignments(@NotNull NodeTemplate nodeTemplate) {\r
-\r
-        List<ResourceAssignment> resourceAssignment = null;\r
-\r
-        if (MapUtils.isNotEmpty(nodeTemplate.getCapabilities())) {\r
-\r
-            CapabilityAssignment capabilityAssignment =\r
-                    nodeTemplate.getCapabilities().get(ConfigModelConstant.CAPABILITY_PROPERTY_MAPPING);\r
-            if (capabilityAssignment != null && capabilityAssignment.getProperties() != null) {\r
-                Object mappingObject =\r
-                        capabilityAssignment.getProperties().get(ConfigModelConstant.CAPABILITY_PROPERTY_MAPPING);\r
-                if (mappingObject != null) {\r
-                    String mappingContent = JacksonUtils.Companion.getJson(mappingObject);\r
-                    Preconditions.checkArgument(StringUtils.isNotBlank(mappingContent),\r
-                            String.format("Failed to get capability mapping property (%s) ", ConfigModelConstant.CAPABILITY_PROPERTY_MAPPING));\r
-\r
-                    resourceAssignment = JacksonUtils.Companion.getListFromJson(mappingContent, ResourceAssignment.class);\r
-\r
-                    Preconditions.checkNotNull(resourceAssignment,\r
-                            String.format("Failed to get resource assignment info from the content (%s) ", mappingContent));\r
-                }\r
-            }\r
-        }\r
-        return resourceAssignment;\r
-    }\r
-}\r
index f856b9e..88589eb 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * 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.
@@ -24,21 +25,10 @@ import org.onap.ccsdk.apps.controllerblueprints.core.data.*
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintRepoService
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition
-import org.onap.ccsdk.apps.controllerblueprints.resource.dict.service.ResourceAssignmentValidationServiceImpl
-import org.onap.ccsdk.apps.controllerblueprints.resource.dict.service.ResourceDefinitionValidationServiceImpl
 import org.onap.ccsdk.apps.controllerblueprints.service.repository.ModelTypeRepository
 import org.onap.ccsdk.apps.controllerblueprints.service.repository.ResourceDictionaryRepository
 import org.springframework.stereotype.Service
 
-// Resource Dictionary Validation Services
-
-@Service
-class DefaultResourceAssignmentValidationService : ResourceAssignmentValidationServiceImpl()
-
-@Service
-class DefalutResourceDefinitionValidationService(bluePrintRepoService: BluePrintRepoService)
-    : ResourceDefinitionValidationServiceImpl(bluePrintRepoService)
-
 interface ResourceDefinitionRepoService : BluePrintRepoService {
 
     @Throws(BluePrintException::class)
index c249314..ec7d8ae 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * 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.
@@ -20,17 +21,15 @@ import com.google.common.base.Preconditions
 import org.apache.commons.collections.CollectionUtils
 import org.apache.commons.lang3.StringUtils
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
+import org.onap.ccsdk.apps.controllerblueprints.core.checkNotEmptyOrThrow
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceSourceMapping
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.factory.ResourceSourceMappingFactory
-import org.onap.ccsdk.apps.controllerblueprints.resource.dict.service.ResourceDefinitionValidationService
 import org.onap.ccsdk.apps.controllerblueprints.service.domain.ResourceDictionary
 import org.onap.ccsdk.apps.controllerblueprints.service.repository.ResourceDictionaryRepository
-import org.onap.ccsdk.apps.controllerblueprints.service.validator.ResourceDictionaryValidator
 import org.springframework.stereotype.Service
 
 @Service
-class ResourceDictionaryHandler(private val resourceDictionaryRepository: ResourceDictionaryRepository,
-                                private val resourceDictionaryValidationService: ResourceDefinitionValidationService) {
+class ResourceDictionaryHandler(private val resourceDictionaryRepository: ResourceDictionaryRepository) {
 
 
     /**
@@ -86,7 +85,8 @@ class ResourceDictionaryHandler(private val resourceDictionaryRepository: Resour
         val resourceDefinition = resourceDictionary.definition
         Preconditions.checkNotNull(resourceDefinition, "failed to get resource definition from content")
         // Validate the Resource Definitions
-        resourceDictionaryValidationService.validate(resourceDefinition)
+        //TODO( Save Validator)
+        //validate(resourceDefinition)
 
         resourceDictionary.tags = resourceDefinition.tags
         resourceDefinition.updatedBy = resourceDictionary.updatedBy
@@ -98,7 +98,7 @@ class ResourceDictionaryHandler(private val resourceDictionaryRepository: Resour
             resourceDictionary.entrySchema = propertyDefinition.entrySchema!!.type
         }
 
-        ResourceDictionaryValidator.validateResourceDictionary(resourceDictionary)
+        validateResourceDictionary(resourceDictionary)
 
         val dbResourceDictionaryData = resourceDictionaryRepository.findByName(resourceDictionary.name)
         if (dbResourceDictionaryData.isPresent) {
@@ -135,4 +135,14 @@ class ResourceDictionaryHandler(private val resourceDictionaryRepository: Resour
     fun getResourceSourceMapping(): ResourceSourceMapping {
         return ResourceSourceMappingFactory.getRegisterSourceMapping()
     }
+
+    private fun validateResourceDictionary(resourceDictionary: ResourceDictionary): Boolean {
+        checkNotEmptyOrThrow(resourceDictionary.name, "DataDictionary Definition name is missing.")
+        checkNotNull(resourceDictionary.definition) { "DataDictionary Definition Information is missing." }
+        checkNotEmptyOrThrow(resourceDictionary.description, "DataDictionary Definition Information is missing.")
+        checkNotEmptyOrThrow(resourceDictionary.tags, "DataDictionary Definition tags is missing.")
+        checkNotEmptyOrThrow(resourceDictionary.updatedBy, "DataDictionary Definition updatedBy is missing.")
+        return true
+
+    }
 }
\ No newline at end of file