diff options
author | Brinda Santh <brindasanth@in.ibm.com> | 2018-08-27 23:16:39 -0400 |
---|---|---|
committer | Brinda Santh <brindasanth@in.ibm.com> | 2018-08-27 23:16:39 -0400 |
commit | 2ae44709f7e3b04d2150e6c15182fae2a39adc45 (patch) | |
tree | 72544c81a4731bd55b8a8dda25ee98d4529fd251 /ms | |
parent | e2f01ca57072a4685c957ce9aec0ab3cf51c7a4e (diff) |
Controller Blueprints Microservice
Add resource dictionary node template property assignments validation for primitive and complex types.
Change-Id: Ic6f3a521310c8e15ebb5b5b5d6ad3edb0ede9ecb
Issue-ID: CCSDK-488
Signed-off-by: Brinda Santh <brindasanth@in.ibm.com>
Diffstat (limited to 'ms')
10 files changed, 166 insertions, 57 deletions
diff --git a/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/PropertyAssignmentService.kt b/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/PropertyAssignmentService.kt index 9389a6f3..ea8d4911 100644 --- a/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/PropertyAssignmentService.kt +++ b/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/PropertyAssignmentService.kt @@ -1,5 +1,6 @@ /*
* 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.
@@ -21,6 +22,7 @@ import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.node.NullNode
import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
import org.onap.ccsdk.apps.controllerblueprints.core.data.*
+import org.onap.ccsdk.apps.controllerblueprints.core.format
import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
import org.onap.ccsdk.apps.controllerblueprints.core.utils.ResourceResolverUtils
import org.slf4j.Logger
@@ -45,7 +47,7 @@ If Property Assignment is Expression. fun resolveAssignmentExpression(nodeTemplateName: String, assignmentName: String,
assignment: Any): JsonNode {
- var valueNode: JsonNode = NullNode.getInstance()
+ val valueNode: JsonNode
logger.trace("Assignment ({})", assignment)
val expressionData = BluePrintExpressionService.getExpressionData(assignment)
@@ -96,7 +98,7 @@ If Property Assignment is Expression. <nested_property_name_or_index_1>, ..., <nested_property_name_or_index_n> ]
*/
fun resolveAttributeExpression(nodeTemplateName: String, attributeExpression: AttributeExpression): JsonNode {
- var valueNode: JsonNode = NullNode.getInstance()
+ val valueNode: JsonNode
val attributeName = attributeExpression.attributeName
val subAttributeName: String? = attributeExpression.subAttributeName
@@ -106,15 +108,15 @@ If Property Assignment is Expression. attributeNodeTemplateName = attributeExpression.modelableEntityName
}
- val attributeExpression = bluePrintContext.nodeTemplateByName(attributeNodeTemplateName).attributes?.get(attributeName)
+ val nodeTemplateAttributeExpression = bluePrintContext.nodeTemplateByName(attributeNodeTemplateName).attributes?.get(attributeName)
?: throw BluePrintException(String.format("failed to get property definitions for node template ({})'s property name ({}) ", nodeTemplateName, attributeName))
var propertyDefinition: AttributeDefinition = bluePrintContext.nodeTemplateNodeType(attributeNodeTemplateName).attributes?.get(attributeName)!!
- logger.info("template name ({}), property Name ({}) resolved value ({})", attributeNodeTemplateName, attributeName, attributeExpression)
+ logger.info("node template name ({}), property Name ({}) resolved value ({})", attributeNodeTemplateName, attributeName, nodeTemplateAttributeExpression)
// Check it it is a nested expression
- valueNode = resolveAssignmentExpression(attributeNodeTemplateName, attributeName, attributeExpression)
+ valueNode = resolveAssignmentExpression(attributeNodeTemplateName, attributeName, nodeTemplateAttributeExpression)
// subPropertyName?.let {
// valueNode = valueNode.at(JsonPointer.valueOf(subPropertyName))
@@ -127,7 +129,7 @@ If Property Assignment is Expression. <nested_property_name_or_index_1>, ..., <nested_property_name_or_index_n> ]
*/
fun resolvePropertyExpression(nodeTemplateName: String, propertyExpression: PropertyExpression): JsonNode {
- var valueNode: JsonNode = NullNode.getInstance()
+ val valueNode: JsonNode
val propertyName = propertyExpression.propertyName
val subPropertyName: String? = propertyExpression.subPropertyName
@@ -137,15 +139,15 @@ If Property Assignment is Expression. propertyNodeTemplateName = propertyExpression.modelableEntityName
}
- val propertyExpression = bluePrintContext.nodeTemplateByName(propertyNodeTemplateName).properties?.get(propertyName)
- ?: throw BluePrintException(String.format("failed to get property definitions for node template ({})'s property name ({}) ", nodeTemplateName, propertyName))
+ val nodeTemplatePropertyExpression = bluePrintContext.nodeTemplateByName(propertyNodeTemplateName).properties?.get(propertyName)
+ ?: throw BluePrintException(format("failed to get property definitions for node template ({})'s property name ({}) ", nodeTemplateName, propertyName))
var propertyDefinition: PropertyDefinition = bluePrintContext.nodeTemplateNodeType(propertyNodeTemplateName).properties?.get(propertyName)!!
- logger.info("template name ({}), property Name ({}) resolved value ({})", propertyNodeTemplateName, propertyName, propertyExpression)
+ logger.info("node template name ({}), property Name ({}) resolved value ({})", propertyNodeTemplateName, propertyName, nodeTemplatePropertyExpression)
// Check it it is a nested expression
- valueNode = resolveAssignmentExpression(propertyNodeTemplateName, propertyName, propertyExpression)
+ valueNode = resolveAssignmentExpression(propertyNodeTemplateName, propertyName, nodeTemplatePropertyExpression)
// subPropertyName?.let {
// valueNode = valueNode.at(JsonPointer.valueOf(subPropertyName))
diff --git a/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtils.kt b/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtils.kt index 9621382c..697a7100 100644 --- a/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtils.kt +++ b/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtils.kt @@ -1,5 +1,6 @@ /*
* 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.
@@ -32,6 +33,7 @@ import org.onap.ccsdk.apps.controllerblueprints.core.format import org.slf4j.LoggerFactory
import java.io.File
import java.nio.charset.Charset
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
/**
*
@@ -108,14 +110,60 @@ object JacksonUtils { }
@JvmStatic
+ fun checkJsonNodeValueOfType(type: String, jsonNode: JsonNode) : Boolean {
+ if (BluePrintTypes.validPrimitiveTypes().contains(type)) {
+ return checkJsonNodeValueOfPrimitiveType(type, jsonNode)
+ } else if (BluePrintTypes.validCollectionTypes().contains(type)) {
+ return checkJsonNodeValueOfCollectionType(type, jsonNode)
+ }
+ return false;
+ }
+
+ @JvmStatic
+ fun checkJsonNodeValueOfPrimitiveType(primitiveType: String, jsonNode: JsonNode): Boolean {
+ when (primitiveType) {
+ BluePrintConstants.DATA_TYPE_STRING -> {
+ return jsonNode.isTextual
+ }
+ BluePrintConstants.DATA_TYPE_BOOLEAN -> {
+ return jsonNode.isBoolean
+ }
+ BluePrintConstants.DATA_TYPE_INTEGER -> {
+ return jsonNode.isInt
+ }
+ BluePrintConstants.DATA_TYPE_FLOAT -> {
+ return jsonNode.isDouble
+ }
+ BluePrintConstants.DATA_TYPE_TIMESTAMP -> {
+ return jsonNode.isTextual
+ }
+ else ->
+ return false
+ }
+ }
+
+ @JvmStatic
+ fun checkJsonNodeValueOfCollectionType(type: String, jsonNode: JsonNode): Boolean {
+ when (type) {
+ BluePrintConstants.DATA_TYPE_LIST ->
+ return jsonNode.isArray
+ BluePrintConstants.DATA_TYPE_MAP ->
+ return jsonNode.isContainerNode
+ else ->
+ return false
+ }
+
+ }
+
+ @JvmStatic
fun populatePrimitiveValues(key: String, value: Any, primitiveType: String, objectNode: ObjectNode) {
- if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
+ if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
objectNode.put(key, value as Boolean)
- } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
+ } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
objectNode.put(key, value as Int)
- } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
+ } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
objectNode.put(key, value as Float)
- } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {
+ } else if (BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {
objectNode.put(key, value as String)
} else {
objectNode.put(key, value as String)
@@ -124,13 +172,13 @@ object JacksonUtils { @JvmStatic
fun populatePrimitiveValues(value: Any, primitiveType: String, objectNode: ArrayNode) {
- if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
+ if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
objectNode.add(value as Boolean)
- } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
+ } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
objectNode.add(value as Int)
- } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
+ } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
objectNode.add(value as Float)
- } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {
+ } else if (BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {
objectNode.add(value as String)
} else {
objectNode.add(value as String)
@@ -139,11 +187,11 @@ object JacksonUtils { @JvmStatic
fun populatePrimitiveDefaultValues(key: String, primitiveType: String, objectNode: ObjectNode) {
- if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
+ if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
objectNode.put(key, false)
- } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
+ } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
objectNode.put(key, 0)
- } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
+ } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
objectNode.put(key, 0.0)
} else {
objectNode.put(key, "")
@@ -152,11 +200,11 @@ object JacksonUtils { @JvmStatic
fun populatePrimitiveDefaultValuesForArrayNode(primitiveType: String, arrayNode: ArrayNode) {
- if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
+ if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
arrayNode.add(false)
- } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
+ } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
arrayNode.add(0)
- } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
+ } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
arrayNode.add(0.0)
} else {
arrayNode.add("")
@@ -168,13 +216,13 @@ object JacksonUtils { if (nodeValue == null || nodeValue is NullNode) {
objectNode.set(key, nodeValue)
} else if (BluePrintTypes.validPrimitiveTypes().contains(type)) {
- if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == type) {
+ if (BluePrintConstants.DATA_TYPE_BOOLEAN == type) {
objectNode.put(key, nodeValue.asBoolean())
- } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == type) {
+ } else if (BluePrintConstants.DATA_TYPE_INTEGER == type) {
objectNode.put(key, nodeValue.asInt())
- } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == type) {
+ } else if (BluePrintConstants.DATA_TYPE_FLOAT == type) {
objectNode.put(key, nodeValue.floatValue())
- } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_TIMESTAMP == type) {
+ } else if (BluePrintConstants.DATA_TYPE_TIMESTAMP == type) {
objectNode.put(key, nodeValue.asText())
} else {
objectNode.put(key, nodeValue.asText())
diff --git a/ms/controllerblueprints/modules/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtilsTest.kt b/ms/controllerblueprints/modules/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtilsTest.kt index 28f3b397..8d0f968f 100644 --- a/ms/controllerblueprints/modules/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtilsTest.kt +++ b/ms/controllerblueprints/modules/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtilsTest.kt @@ -1,5 +1,6 @@ /*
* 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.
@@ -16,13 +17,14 @@ package org.onap.ccsdk.apps.controllerblueprints.core.utils
-import com.fasterxml.jackson.databind.JsonNode
import org.junit.Test
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import kotlin.test.assertEquals
import kotlin.test.assertNotNull
+import kotlin.test.assertTrue
/**
* JacksonUtilsTest
@@ -31,7 +33,7 @@ import kotlin.test.assertNotNull */
class JacksonUtilsTest {
- private val logger: Logger = LoggerFactory.getLogger(this::class.toString())
+ private val log: Logger = LoggerFactory.getLogger(this::class.toString())
val basePath = "load/blueprints"
@@ -49,17 +51,13 @@ class JacksonUtilsTest { @Test
fun testJsonNodeFromClassPathFile() {
val filePath = "data/default-context.json"
- val jsonNode = JacksonUtils.jsonNodeFromClassPathFile(filePath)
- assertNotNull(jsonNode, "Failed to get json node from file")
- assertEquals(true, jsonNode is JsonNode, "failed to get JSON node instance")
+ JacksonUtils.jsonNodeFromClassPathFile(filePath)
}
@Test
fun testJsonNodeFromFile() {
- val filePath = basePath + "/baseconfiguration/Definitions/activation-blueprint.json"
- val jsonNode = JacksonUtils.jsonNodeFromFile(filePath)
- assertNotNull(jsonNode, "Failed to get json node from file")
- assertEquals(true, jsonNode is JsonNode, "failed to get JSON node instance")
+ val filePath = basePath + "/baseconfiguration/Definitions/activation-blueprint.json"
+ JacksonUtils.jsonNodeFromFile(filePath)
}
@Test
@@ -68,4 +66,28 @@ class JacksonUtilsTest { val nodeType = JacksonUtils.getListFromJson(content, String::class.java)
assertNotNull(nodeType, "Failed to get String array from content")
}
+
+
+ @Test
+ fun testJsonValue() {
+ val filePath = "data/alltype-data.json"
+ val rootJson = JacksonUtils.jsonNodeFromClassPathFile(filePath);
+ assertNotNull(rootJson, "Failed to get all type data json node")
+ val intValue = rootJson.get("intValue")
+ assertTrue(JacksonUtils.checkJsonNodeValueOfType(BluePrintConstants.DATA_TYPE_INTEGER, intValue), "Failed to get as int value")
+ val floatValue = rootJson.get("floatValue")
+ assertTrue(JacksonUtils.checkJsonNodeValueOfType(BluePrintConstants.DATA_TYPE_FLOAT, floatValue), "Failed to get as float value")
+ val stringValue = rootJson.get("stringValue")
+ assertTrue(JacksonUtils.checkJsonNodeValueOfType(BluePrintConstants.DATA_TYPE_STRING, stringValue), "Failed to get as string value")
+ val booleanValue = rootJson.get("booleanValue")
+ assertTrue(JacksonUtils.checkJsonNodeValueOfType(BluePrintConstants.DATA_TYPE_BOOLEAN, booleanValue), "Failed to get as boolean value")
+ val arrayStringValue = rootJson.get("arrayStringValue")
+ assertTrue(JacksonUtils.checkJsonNodeValueOfType(BluePrintConstants.DATA_TYPE_LIST, arrayStringValue), "Failed to get as List value")
+ val mapValue = rootJson.get("mapValue")
+ assertTrue(JacksonUtils.checkJsonNodeValueOfType(BluePrintConstants.DATA_TYPE_MAP, mapValue), "Failed to get as Map value")
+
+ assertTrue(!JacksonUtils.checkJsonNodeValueOfType(BluePrintConstants.DATA_TYPE_LIST, stringValue), "Negative type failed")
+
+
+ }
}
\ No newline at end of file diff --git a/ms/controllerblueprints/modules/core/src/test/resources/data/alltype-data.json b/ms/controllerblueprints/modules/core/src/test/resources/data/alltype-data.json new file mode 100644 index 00000000..055b0965 --- /dev/null +++ b/ms/controllerblueprints/modules/core/src/test/resources/data/alltype-data.json @@ -0,0 +1,10 @@ +{ + "intValue" : 1, + "floatValue" : 1.34, + "booleanValue" : true, + "stringValue" : "sample-String", + "timeValue" : "2018-09-29", + "arrayStringValue" : ["one", "two"], + "mapValue" : {"profile_name1":"profile_name1", + "profile_name2":"profile_name2"} +}
\ No newline at end of file diff --git a/ms/controllerblueprints/modules/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/service/ResourceDictionaryValidationService.kt b/ms/controllerblueprints/modules/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/service/ResourceDictionaryValidationService.kt index 5a1e3812..81bb37d0 100644 --- a/ms/controllerblueprints/modules/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/service/ResourceDictionaryValidationService.kt +++ b/ms/controllerblueprints/modules/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/service/ResourceDictionaryValidationService.kt @@ -20,12 +20,14 @@ package org.onap.ccsdk.apps.controllerblueprints.resource.dict.service 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.service.BluePrintExpressionService import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRepoService +import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition import org.slf4j.LoggerFactory import java.io.Serializable @@ -43,12 +45,13 @@ open class ResourceDictionaryDefaultValidationService(val bluePrintRepoService: 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)?.block() - ?: throw BluePrintException(format("Failed to get node type definition for source({})", sourceType)) + ?: throw BluePrintException(format("Failed to get source({}) node type definition({})", name, sourceType)) // Validate Property Name, expression, values and Data Type validateNodeTemplateProperties(nodeTemplate, sourceNodeType) @@ -62,7 +65,7 @@ open class ResourceDictionaryDefaultValidationService(val bluePrintRepoService: open fun validatePropertyAssignments(nodeTypeProperties: MutableMap<String, PropertyDefinition>, - properties: MutableMap<String, JsonNode>) { + properties: MutableMap<String, JsonNode>) { properties.forEach { propertyName, propertyAssignment -> val propertyDefinition: PropertyDefinition = nodeTypeProperties[propertyName] ?: throw BluePrintException(format("failed to get definition for the property ({})", propertyName)) @@ -70,12 +73,34 @@ open class ResourceDictionaryDefaultValidationService(val bluePrintRepoService: 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, jsonNode: JsonNode) { - //log.info("validating Property {}, name ({}) value ({})", propertyDefinition, propertyName, jsonNode) - //TODO + open fun checkPropertyValue(propertyDefinition: PropertyDefinition, propertyName: String, propertyAssignment: JsonNode) { + val propertyType = propertyDefinition.type + var isValid = false + + 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) + ?: throw BluePrintException(format("property({}) defined of data type({}) is not in repository", + propertyName, 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/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/BluePrintRepoDBService.java b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/BluePrintRepoDBService.java index 4c11d8c6..ae4fed9f 100644 --- a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/BluePrintRepoDBService.java +++ b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/BluePrintRepoDBService.java @@ -82,7 +82,7 @@ public class BluePrintRepoDBService implements BluePrintRepoService { }
private Mono<String> getModelDefinitions(String modelName) throws BluePrintException {
- String modelDefinition = null;
+ String modelDefinition;
Optional<ModelType> modelTypeDb = modelTypeRepository.findByModelName(modelName);
if (modelTypeDb.isPresent()) {
modelDefinition = modelTypeDb.get().getDefinition();
diff --git a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelCreateService.java b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelCreateService.java index 7e96f2f8..e40c2cf4 100644 --- a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelCreateService.java +++ b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelCreateService.java @@ -1,5 +1,6 @@ /*
* 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.
@@ -138,7 +139,7 @@ public class ConfigModelCreateService { if (StringUtils.isBlank(artifactVersion)) {
throw new BluePrintException("Artifact Version is missing in the Service Template");
}
- ConfigModel updateConfigModel = null;
+ ConfigModel updateConfigModel;
Optional<ConfigModel> dbConfigModelOptional = Optional.empty();
diff --git a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelService.java b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelService.java index feee3a3e..b729e3e6 100644 --- a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelService.java +++ b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelService.java @@ -1,5 +1,6 @@ /*
* 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.
@@ -144,7 +145,7 @@ public class ConfigModelService { */
public ConfigModel getConfigModelByNameAndVersion(String name, String version) {
ConfigModel configModel = null;
- Optional<ConfigModel> dbConfigModel = null;
+ Optional<ConfigModel> dbConfigModel;
if (StringUtils.isNotBlank(version)) {
dbConfigModel = configModelRepository.findByArtifactNameAndArtifactVersion(name, version);
} else {
@@ -182,7 +183,7 @@ public class ConfigModelService { public ConfigModel getCloneConfigModel(Long id) {
- ConfigModel configModel = null;
+ ConfigModel configModel;
ConfigModel cloneConfigModel = null;
if (id != null) {
Optional<ConfigModel> dbConfigModel = configModelRepository.findById(id);
diff --git a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/DataBaseInitService.java b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/DataBaseInitService.java index 3a5c4fde..4b732cc3 100644 --- a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/DataBaseInitService.java +++ b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/DataBaseInitService.java @@ -115,31 +115,28 @@ public class DataBaseInitService { try {
Resource[] dataTypefiles = getPathResources(dataTypePath, ".json");
StrBuilder errorBuilder = new StrBuilder();
- if (dataTypefiles != null) {
for (Resource file : dataTypefiles) {
if (file != null) {
loadDataType(file, errorBuilder);
}
}
- }
Resource[] nodeTypefiles = getPathResources(nodeTypePath, ".json");
- if (nodeTypefiles != null) {
- for (Resource file : nodeTypefiles) {
+ for (Resource file : nodeTypefiles) {
if (file != null) {
loadNodeType(file, errorBuilder);
}
}
- }
+
Resource[] artifactTypefiles = getPathResources(artifactTypePath, ".json");
- if (artifactTypefiles != null) {
+
for (Resource file : artifactTypefiles) {
if (file != null) {
loadArtifactType(file, errorBuilder);
}
}
- }
+
if (!errorBuilder.isEmpty()) {
log.error(errorBuilder.toString());
@@ -154,9 +151,9 @@ public class DataBaseInitService { " *************************** loadResourceDictionary **********************");
try {
Resource[] dataTypefiles = getPathResources(resourceDictionaryPath, ".json");
- if (dataTypefiles != null) {
+
StrBuilder errorBuilder = new StrBuilder();
- String fileName = null;
+ String fileName;
for (Resource file : dataTypefiles) {
try {
fileName = file.getFilename();
@@ -201,7 +198,7 @@ public class DataBaseInitService { log.error(errorBuilder.toString());
}
- }
+
} catch (Exception e) {
log.error(
"Failed in Resource dictionary loading", e);
@@ -248,6 +245,7 @@ public class DataBaseInitService { String nodeKey = file.getFilename().replace(".json", "");
String definitionContent = getResourceContent(file);
NodeType nodeType = JacksonUtils.readValue(definitionContent, NodeType.class);
+ Preconditions.checkNotNull(nodeType, String.format("failed to get node type from file : %s", file.getFilename()));
ModelType modelType = new ModelType();
modelType.setDefinitionType(BluePrintConstants.MODEL_DEFINITION_TYPE_NODE_TYPE);
modelType.setDerivedFrom(nodeType.getDerivedFrom());
@@ -271,6 +269,7 @@ public class DataBaseInitService { String dataKey = file.getFilename().replace(".json", "");
String definitionContent = getResourceContent(file);
DataType dataType = JacksonUtils.readValue(definitionContent, DataType.class);
+ Preconditions.checkNotNull(dataType, String.format("failed to get data type from file : %s", file.getFilename()));
ModelType modelType = new ModelType();
modelType.setDefinitionType(BluePrintConstants.MODEL_DEFINITION_TYPE_DATA_TYPE);
modelType.setDerivedFrom(dataType.getDerivedFrom());
@@ -294,6 +293,7 @@ public class DataBaseInitService { String dataKey = file.getFilename().replace(".json", "");
String definitionContent = getResourceContent(file);
ArtifactType artifactType = JacksonUtils.readValue(definitionContent, ArtifactType.class);
+ Preconditions.checkNotNull(artifactType, String.format("failed to get artifact type from file : %s", file.getFilename()));
ModelType modelType = new ModelType();
modelType.setDefinitionType(BluePrintConstants.MODEL_DEFINITION_TYPE_ARTIFACT_TYPE);
modelType.setDerivedFrom(artifactType.getDerivedFrom());
diff --git a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ResourceDictionaryService.java b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ResourceDictionaryService.java index 629b94c0..85e701b4 100644 --- a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ResourceDictionaryService.java +++ b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ResourceDictionaryService.java @@ -20,7 +20,6 @@ package org.onap.ccsdk.apps.controllerblueprints.service; import com.google.common.base.Preconditions;
import org.apache.commons.lang3.StringUtils;
import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;
-import org.onap.ccsdk.apps.controllerblueprints.core.data.EntrySchema;
import org.onap.ccsdk.apps.controllerblueprints.core.data.PropertyDefinition;
import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils;
import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition;
@@ -119,6 +118,7 @@ public class ResourceDictionaryService { ResourceDefinition resourceDefinition =
JacksonUtils.readValue(resourceDictionary.getDefinition(), ResourceDefinition.class);
+ Preconditions.checkNotNull(resourceDefinition, "failed to get resource definition from content");
// Validate the Resource Definitions
resourceDictionaryValidationService.validate(resourceDefinition);
|