From 1118d15dad97ee855e504e036e292f2395171d4d Mon Sep 17 00:00:00 2001 From: imamSidero Date: Mon, 26 Sep 2022 15:04:33 +0100 Subject: Constraint validation for instance properties in a service Validating the properties of instance in a service against it's constraints Issue-ID: SDC-4190 Signed-off-by: Imam hussain Change-Id: I04bb907f52229c3d214e15434595e5429ef5101c --- .../impl/ComponentInstanceBusinessLogic.java | 22 +++++++++++++++++++++- .../PropertyValueConstraintValidationUtil.java | 9 +++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) (limited to 'catalog-be/src/main/java') diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogic.java index 1d10c92313..0b3610a611 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogic.java @@ -63,6 +63,7 @@ import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus; import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum; import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary; +import org.openecomp.sdc.be.datamodel.utils.PropertyValueConstraintValidationUtil; import org.openecomp.sdc.be.datatypes.elements.CINodeFilterDataDefinition; import org.openecomp.sdc.be.datatypes.elements.CapabilityDataDefinition; import org.openecomp.sdc.be.datatypes.elements.ForwardingPathDataDefinition; @@ -187,6 +188,7 @@ public class ComponentInstanceBusinessLogic extends BaseBusinessLogic { @Autowired private ContainerInstanceTypesData containerInstanceTypesData; private final ToscaFunctionValidator toscaFunctionValidator; + private final PropertyBusinessLogic propertyBusinessLogic; @Autowired public ComponentInstanceBusinessLogic(IElementOperation elementDao, IGroupOperation groupOperation, @@ -196,7 +198,8 @@ public class ComponentInstanceBusinessLogic extends BaseBusinessLogic { ComponentInstanceMergeDataBusinessLogic compInstMergeDataBL, ComponentInstanceChangeOperationOrchestrator onChangeInstanceOperationOrchestrator, ForwardingPathOperation forwardingPathOperation, NodeFilterOperation nodeFilterOperation, - ArtifactsOperations artifactToscaOperation, final ToscaFunctionValidator toscaFunctionValidator) { + ArtifactsOperations artifactToscaOperation, final ToscaFunctionValidator toscaFunctionValidator, + PropertyBusinessLogic propertyBusinessLogic) { super(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation, interfaceOperation, interfaceLifecycleTypeOperation, artifactToscaOperation); this.componentInstanceOperation = componentInstanceOperation; @@ -206,6 +209,7 @@ public class ComponentInstanceBusinessLogic extends BaseBusinessLogic { this.forwardingPathOperation = forwardingPathOperation; this.nodeFilterOperation = nodeFilterOperation; this.toscaFunctionValidator = toscaFunctionValidator; + this.propertyBusinessLogic = propertyBusinessLogic; } public ComponentInstance createComponentInstance(String containerComponentParam, String containerComponentId, String userId, @@ -1953,6 +1957,12 @@ public class ComponentInstanceBusinessLogic extends BaseBusinessLogic { } ComponentInstance foundResourceInstance = resourceInstanceStatus.left().value(); + // Validate instance property against it's constrains + Either constraintValidatorResponse = validatePropertyValueConstraint(properties,componentId); + if (constraintValidatorResponse.isRight()) { + log.error("Failed validation value and constraint of property: {}", constraintValidatorResponse.right().value()); + return Either.right(constraintValidatorResponse.right().value()); + } // lock resource StorageOperationStatus lockStatus = graphLockOperation.lockComponent(componentId, componentTypeEnum.getNodeType()); if (lockStatus != StorageOperationStatus.OK) { @@ -3908,6 +3918,16 @@ public class ComponentInstanceBusinessLogic extends BaseBusinessLogic { } } + private Either validatePropertyValueConstraint(List properties, final String componentId) { + try { + String propertyModel = propertyBusinessLogic.getComponentModelByComponentId(componentId); + PropertyValueConstraintValidationUtil propertyValueConstraintValidationUtil = new PropertyValueConstraintValidationUtil(); + return propertyValueConstraintValidationUtil.validatePropertyConstraints(properties, applicationDataTypeCache, propertyModel); + } catch (BusinessLogicException e) { + return Either.right(e.getResponseFormat()); + } + } + public void validateUser(final String userId) { final User user = userValidations.validateUserExists(userId); userValidations.validateUserRole(user, Arrays.asList(Role.DESIGNER, Role.ADMIN)); diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/datamodel/utils/PropertyValueConstraintValidationUtil.java b/catalog-be/src/main/java/org/openecomp/sdc/be/datamodel/utils/PropertyValueConstraintValidationUtil.java index 442c3da16c..2d3ef85488 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/datamodel/utils/PropertyValueConstraintValidationUtil.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/datamodel/utils/PropertyValueConstraintValidationUtil.java @@ -34,6 +34,7 @@ import org.apache.commons.lang3.StringUtils; import org.openecomp.sdc.be.components.impl.ResponseFormatManager; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition; +import org.openecomp.sdc.be.model.ComponentInstanceInput; import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.be.model.InputDefinition; import org.openecomp.sdc.be.model.PropertyConstraint; @@ -77,6 +78,9 @@ public class PropertyValueConstraintValidationUtil { } private boolean isValuePresent(PropertyDefinition propertyDefinition) { + if (propertyDefinition instanceof ComponentInstanceInput) { + return StringUtils.isNotEmpty(propertyDefinition.getValue()); + } if (propertyDefinition instanceof InputDefinition) { return StringUtils.isNotEmpty(propertyDefinition.getDefaultValue()); } @@ -90,6 +94,11 @@ public class PropertyValueConstraintValidationUtil { } completeInputName = ""; completePropertyName = new StringBuilder(); + if (propertyDefinition instanceof ComponentInstanceInput) { + setCompletePropertyName(propertyDefinition); + evaluateComplexTypeProperties(propertyDefinition); + return; + } if (propertyDefinition instanceof InputDefinition) { completeInputName = propertyDefinition.getName(); propertyDefinition = getPropertyDefinitionObjectFromInputs(propertyDefinition); -- cgit 1.2.3-korg