/*\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
nodeTemplate.properties?.let { validatePropertyAssignments(nodeType.properties!!, nodeTemplate.properties!!) }\r
nodeTemplate.capabilities?.let { validateCapabilityAssignments(nodeTemplate.capabilities!!) }\r
nodeTemplate.requirements?.let { validateRequirementAssignments(nodeTemplate.requirements!!) }\r
- nodeTemplate.interfaces?.let { validateInterfaceAssignments(nodeTemplate.interfaces!!) }\r
+ nodeTemplate.interfaces?.let { validateInterfaceAssignments(nodeType, nodeTemplateName, nodeTemplate) }\r
paths.removeAt(paths.lastIndex)\r
}\r
\r
}\r
\r
@Throws(BluePrintException::class)\r
- open fun validateInterfaceAssignments(interfaces: MutableMap<String, InterfaceAssignment>) {\r
+ open fun validateInterfaceAssignments(nodeType: NodeType, nodeTemplateName: String, nodeTemplate: NodeTemplate) {\r
+\r
+ val interfaces = nodeTemplate.interfaces\r
+ paths.add("interfaces")\r
+ interfaces?.forEach { interfaceAssignmentName, interfaceAssignment ->\r
+ paths.add(interfaceAssignmentName)\r
+ val interfaceDefinition = nodeType.interfaces?.get(interfaceAssignmentName)\r
+ ?: throw BluePrintException(format("Failed to get nodeTemplate({}) interface definition ({}) from" +\r
+ " node type ({}) ", nodeTemplateName, interfaceAssignmentName, nodeTemplate.type))\r
+\r
+ validateInterfaceAssignment(nodeTemplateName, interfaceAssignmentName, interfaceDefinition,\r
+ interfaceAssignment)\r
+ paths.removeAt(paths.lastIndex)\r
+ }\r
+ paths.removeAt(paths.lastIndex)\r
+\r
\r
}\r
\r
+ @Throws(BluePrintException::class)\r
+ open fun validateInterfaceAssignment(nodeTemplateName: String, interfaceAssignmentName: String,\r
+ interfaceDefinition: InterfaceDefinition,\r
+ interfaceAssignment: InterfaceAssignment) {\r
+\r
+ val operations = interfaceAssignment.operations\r
+ operations?.let {\r
+ validateInterfaceOperationsAssignment(nodeTemplateName, interfaceAssignmentName, interfaceDefinition,\r
+ interfaceAssignment)\r
+ }\r
+\r
+ }\r
+\r
+ @Throws(BluePrintException::class)\r
+ open fun validateInterfaceOperationsAssignment(nodeTemplateName: String, interfaceAssignmentName: String,\r
+ interfaceDefinition: InterfaceDefinition,\r
+ interfaceAssignment: InterfaceAssignment) {\r
+\r
+ val operations = interfaceAssignment.operations\r
+ operations?.let {\r
+ it.forEach { operationAssignmentName, operationAssignments ->\r
+\r
+ val operationDefinition = interfaceDefinition.operations?.get(operationAssignmentName)\r
+ ?: throw BluePrintException(format("Failed to get nodeTemplate({}) operation definition ({}) ",\r
+ nodeTemplateName, operationAssignmentName))\r
+\r
+ log.info("Validation Node Template({}) Interface({}) Operation ({})", nodeTemplateName,\r
+ interfaceAssignmentName, operationAssignmentName)\r
+\r
+ val inputs = operationAssignments.inputs\r
+ val outputs = operationAssignments.outputs\r
+\r
+ inputs?.forEach { propertyName, propertyAssignment ->\r
+ val propertyDefinition = operationDefinition.inputs?.get(propertyName)\r
+ ?: throw BluePrintException(format("Failed to get nodeTemplate({}) operation definition ({}) " +\r
+ "property definition({})", nodeTemplateName, operationAssignmentName, propertyName))\r
+ // Check the property values with property definition\r
+ validatePropertyAssignment(propertyName, propertyDefinition, propertyAssignment)\r
+ }\r
+\r
+ }\r
+ }\r
+\r
+ }\r
+\r
+\r
@Throws(BluePrintException::class)\r
open fun validateInterfaceDefinitions(interfaces: MutableMap<String, InterfaceDefinition>) {\r
paths.add("interfaces")\r
\r
} else if (BluePrintTypes.validCollectionTypes().contains(propertyType)) {\r
\r
- isValid = JacksonUtils.checkJsonNodeValueOfCollectionType(propertyType, propertyAssignment)\r
val entrySchemaType = propertyDefinition.entrySchema?.type\r
?: throw BluePrintException(format("Failed to get Entry Schema type for the collection property ({})", propertyName))\r
\r
if (!BluePrintTypes.validPropertyTypes().contains(entrySchemaType)) {\r
checkPropertyDataType(entrySchemaType, propertyName)\r
}\r
-\r
+ isValid = JacksonUtils.checkJsonNodeValueOfCollectionType(propertyType, propertyAssignment)\r
} else {\r
checkPropertyDataType(propertyType, propertyName)\r
isValid = true\r