From e398bb0eac655ea80507825ff039c874dd7dee6d Mon Sep 17 00:00:00 2001 From: "andre.schmid" Date: Tue, 14 Jun 2022 12:01:07 +0100 Subject: [PATCH] Fix VFC map or list property update Fixes two problems in the update of VFC map or list properties. One was related to a schema validation in the backend. The other is related to setting the property value when the default value was being edited. Change-Id: Icd85346144c8763ced1b8fbcd750c9baf783f6a6 Issue-ID: SDC-4050 Signed-off-by: andre.schmid --- .../PropertyValueConstraintValidationUtil.java | 44 ++++++++++++++-------- .../PropertyValueConstraintValidationUtilTest.java | 4 -- .../openecomp/sdc/be/model/tosca/ToscaType.java | 14 +++---- .../property-form-view-model.ts | 3 +- .../tabs/properties/properties-view-model.ts | 6 +-- 5 files changed, 36 insertions(+), 35 deletions(-) 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 25ca7d650e..442c3da16c 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 @@ -33,6 +33,7 @@ import org.apache.commons.lang3.ArrayUtils; 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.DataTypeDefinition; import org.openecomp.sdc.be.model.InputDefinition; import org.openecomp.sdc.be.model.PropertyConstraint; @@ -197,20 +198,32 @@ public class PropertyValueConstraintValidationUtil { private void evaluateListType(PropertyDefinition propertyDefinition) { try { - String schemaType = propertyDefinition.getSchemaType(); + if (propertyDefinition.getSchemaType() == null) { + propertyDefinition.setSchema(createStringSchema()); + } List list = ConstraintUtil.parseToCollection(propertyDefinition.getValue(), new TypeReference<>() {}); - evaluateCollectionType(propertyDefinition, list, schemaType); + evaluateCollectionType(propertyDefinition, list); } catch (ConstraintValueDoNotMatchPropertyTypeException e) { logger.debug(e.getMessage(), e); errorMessages.add(String.format(VALUE_PROVIDED_IN_INVALID_FORMAT_FOR_PROPERTY, getCompletePropertyName(propertyDefinition))); } } - private void evaluateMapType(PropertyDefinition propertyDefinition) { + private SchemaDefinition createStringSchema() { + final SchemaDefinition schemaDefinition = new SchemaDefinition(); + final PropertyDefinition schemaStringProperty = new PropertyDefinition(); + schemaStringProperty.setType(ToscaType.STRING.getType()); + schemaDefinition.setProperty(schemaStringProperty); + return schemaDefinition; + } + + private void evaluateMapType(final PropertyDefinition propertyDefinition) { try { - String schemaType = propertyDefinition.getSchemaType(); - Map map = ConstraintUtil.parseToCollection(propertyDefinition.getValue(), new TypeReference<>() {}); - evaluateCollectionType(propertyDefinition, map.values(), schemaType); + if (propertyDefinition.getSchemaType() == null) { + propertyDefinition.setSchema(createStringSchema()); + } + final Map map = ConstraintUtil.parseToCollection(propertyDefinition.getValue(), new TypeReference<>() {}); + evaluateCollectionType(propertyDefinition, map.values()); } catch (ConstraintValueDoNotMatchPropertyTypeException e) { logger.debug(e.getMessage(), e); errorMessages.add(String.format(VALUE_PROVIDED_IN_INVALID_FORMAT_FOR_PROPERTY, getCompletePropertyName(propertyDefinition))); @@ -227,21 +240,22 @@ public class PropertyValueConstraintValidationUtil { } } - private void evaluateCollectionType(final PropertyDefinition propertyDefinition, final Collection valueList, final String schemaType) { + private void evaluateCollectionType(final PropertyDefinition propertyDefinition, final Collection valueList) { + final String schemaType = propertyDefinition.getSchemaType(); for (final Object value : valueList) { try { - final PropertyDefinition propertyDefinition1 = copyPropertyWithNewValue(propertyDefinition, objectMapper.writeValueAsString(value)); + final PropertyDefinition propertyCopyWithNewValue = copyPropertyWithNewValue(propertyDefinition, objectMapper.writeValueAsString(value)); if (ToscaType.isPrimitiveType(schemaType)) { - evaluateCollectionPrimitiveSchemaType(propertyDefinition1, schemaType); + evaluateCollectionPrimitiveSchemaType(propertyCopyWithNewValue, schemaType); } else if (ToscaType.isCollectionType(schemaType)) { - propertyDefinition1.setType(schemaType); - propertyDefinition1.setSchemaType(propertyDefinition.getSchemaProperty().getSchemaType()); - evaluateCollectionTypeProperties(propertyDefinition1); + propertyCopyWithNewValue.setType(schemaType); + propertyCopyWithNewValue.setSchemaType(propertyDefinition.getSchemaProperty().getSchemaType()); + evaluateCollectionTypeProperties(propertyCopyWithNewValue); } else { - propertyDefinition1.setType(schemaType); + propertyCopyWithNewValue.setType(schemaType); completePropertyName.append(UNDERSCORE); - completePropertyName.append(propertyDefinition1.getName()); - evaluateComplexTypeProperties(propertyDefinition1); + completePropertyName.append(propertyCopyWithNewValue.getName()); + evaluateComplexTypeProperties(propertyCopyWithNewValue); } } catch (final Exception e) { logger.debug(e.getMessage(), e); diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/datamodel/utils/PropertyValueConstraintValidationUtilTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/datamodel/utils/PropertyValueConstraintValidationUtilTest.java index c1e33a8474..a9350edc18 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/datamodel/utils/PropertyValueConstraintValidationUtilTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/datamodel/utils/PropertyValueConstraintValidationUtilTest.java @@ -53,7 +53,6 @@ import org.openecomp.sdc.be.model.InputDefinition; import org.openecomp.sdc.be.model.PropertyConstraint; import org.openecomp.sdc.be.model.PropertyDefinition; import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache; -import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade; import org.openecomp.sdc.be.model.operations.impl.PropertyOperation; import org.openecomp.sdc.exception.ResponseFormat; @@ -62,9 +61,6 @@ class PropertyValueConstraintValidationUtilTest { @Mock ApplicationDataTypeCache applicationDataTypeCache; - @Mock - ToscaOperationFacade toscaOperationFacade; - @Spy @InjectMocks PropertyValueConstraintValidationUtil propertyValueConstraintValidationUtil; diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/ToscaType.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/ToscaType.java index a880db0c14..98ca5d02ab 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/ToscaType.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/ToscaType.java @@ -27,6 +27,8 @@ import java.text.SimpleDateFormat; import java.util.List; import java.util.Locale; import java.util.Map; +import lombok.AllArgsConstructor; +import lombok.Getter; import org.openecomp.sdc.be.model.tosca.constraints.ConstraintUtil; import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintValueDoNotMatchPropertyTypeException; @@ -35,6 +37,7 @@ import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintValueDoN * * @author mkv */ +@AllArgsConstructor public enum ToscaType { // @formatter:off STRING("string"), @@ -51,11 +54,8 @@ public enum ToscaType { SCALAR_UNIT_FREQUENCY("scalar-unit.frequency"); // @formatter:on - private String type; - - ToscaType(String type) { - this.type = type; - } + @Getter + private final String type; public static ToscaType getToscaType(String typeName) { if (typeName == null) { @@ -92,10 +92,6 @@ public enum ToscaType { return ToscaPropertyType.MAP.getType().equals(type) || ToscaPropertyType.LIST.getType().equals(type); } - public String getType() { - return type; - } - public boolean isValidValue(String value) { switch (this) { case BOOLEAN: diff --git a/catalog-ui/src/app/view-models/forms/property-forms/component-property-form/property-form-view-model.ts b/catalog-ui/src/app/view-models/forms/property-forms/component-property-form/property-form-view-model.ts index 2741c464c8..13460f50bf 100644 --- a/catalog-ui/src/app/view-models/forms/property-forms/component-property-form/property-form-view-model.ts +++ b/catalog-ui/src/app/view-models/forms/property-forms/component-property-form/property-form-view-model.ts @@ -139,8 +139,7 @@ export class PropertyFormViewModel { private initResource = ():void => { this.$scope.editPropertyModel.property = new PropertyModel(this.property); this.$scope.editPropertyModel.property.type = this.property.type ? this.property.type : null; - this.$scope.editPropertyModel.property.value = this.$scope.editPropertyModel.property.value || this.$scope.editPropertyModel.property.defaultValue; - this.$scope.constraints = this.property.constraints && this.property.constraints[0] ? this.property.constraints[0]["validValues"] : null; + this.$scope.constraints = this.property.constraints && this.property.constraints[0] ? this.property.constraints[0]["validValues"] : null; this.initToscaGetFunction(); this.setMaxLength(); }; diff --git a/catalog-ui/src/app/view-models/workspace/tabs/properties/properties-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/properties/properties-view-model.ts index 9794209757..b15901461a 100644 --- a/catalog-ui/src/app/view-models/workspace/tabs/properties/properties-view-model.ts +++ b/catalog-ui/src/app/view-models/workspace/tabs/properties/properties-view-model.ts @@ -73,14 +73,10 @@ export class PropertiesViewModel { } private openEditPropertyModal = (property:PropertyModel):void => { - this.ModalsHandler.openEditPropertyModal(property, this.$scope.component, this.$scope.filteredProperties, false, 'component', this.$scope.component.uniqueId).then((updatedProperty:PropertyModel) => { - //property = updatedProperty; - }); + this.ModalsHandler.openEditPropertyModal(property, this.$scope.component, this.$scope.filteredProperties, false, 'component', this.$scope.component.uniqueId); }; private initScope = ():void => { - - //let self = this; this.$scope.filteredProperties = this.$scope.component.properties; this.$scope.sortBy = 'name'; this.$scope.reverse = false; -- 2.16.6