From 98826572a529d01250cf4925dc3f26ac8c35478a Mon Sep 17 00:00:00 2001 From: vasraz Date: Thu, 17 Aug 2023 19:30:47 +0100 Subject: [PATCH] Fix 'Changing VFC version on template wipes previously assigned property values based on get_input'-bug Signed-off-by: Vasyl Razinkov Change-Id: I51bbc92ea355dd36206746f96984d3593446f188 Issue-ID: SDC-4586 --- .../components/impl/ComponentInstanceBusinessLogic.java | 17 +++++++++++++++-- .../components/merge/instance/DataForMergeHolder.java | 1 + .../DataDefinitionsValuesMergingBusinessLogic.java | 3 +++ .../property/PropertyDataValueMergeBusinessLogic.java | 4 +--- .../sdc/be/datatypes/tosca/ToscaDataDefinition.java | 4 ++-- 5 files changed, 22 insertions(+), 7 deletions(-) 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 ec7fe0c6bf..01e87a134b 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 @@ -42,9 +42,9 @@ import java.util.UUID; import java.util.stream.Collectors; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; -import org.apache.commons.text.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.text.StringEscapeUtils; import org.json.JSONArray; import org.json.JSONObject; import org.onap.sdc.tosca.datatypes.model.PropertyType; @@ -76,6 +76,7 @@ import org.openecomp.sdc.be.datatypes.elements.GetPolicyValueDataDefinition; import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition; import org.openecomp.sdc.be.datatypes.elements.RequirementDataDefinition; import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition; +import org.openecomp.sdc.be.datatypes.elements.ToscaFunctionType; import org.openecomp.sdc.be.datatypes.elements.ToscaGetFunctionDataDefinition; import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum; import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum; @@ -1985,6 +1986,9 @@ public class ComponentInstanceBusinessLogic extends BaseBusinessLogic { if (property.isToscaFunction()) { toscaFunctionValidator.validate(property, containerComponent); property.setValue(StringEscapeUtils.unescapeJava(property.getToscaFunction().getValue())); + if (ToscaFunctionType.GET_INPUT == property.getToscaFunction().getType()) { + property.setGetInputValues(Collections.singletonList(buildGetInputValue(property))); + } } if (CollectionUtils.isNotEmpty(property.getSubPropertyToscaFunctions())) { ToscaPropertyType type = ToscaPropertyType.isValidType(property.getType()); @@ -2047,6 +2051,14 @@ public class ComponentInstanceBusinessLogic extends BaseBusinessLogic { } } + private GetInputValueDataDefinition buildGetInputValue(final ComponentInstanceProperty property) { + final GetInputValueDataDefinition getInputValueDataDefinition = new GetInputValueDataDefinition(); + getInputValueDataDefinition.setPropName(property.getName()); + getInputValueDataDefinition.setInputName(((ToscaGetFunctionDataDefinition) property.getToscaFunction()).getPropertyName()); + getInputValueDataDefinition.setInputId(((ToscaGetFunctionDataDefinition) property.getToscaFunction()).getPropertyUniqueId()); + return getInputValueDataDefinition; + } + private void addE(JSONArray jsonArray, List path, String value) { Object objectForPath = jsonArray.opt(Integer.parseInt(path.get(0))); if (objectForPath == null) { @@ -2548,7 +2560,8 @@ public class ComponentInstanceBusinessLogic extends BaseBusinessLogic { throw ToscaGetFunctionExceptionSupplier .propertyTypeDiverge(toscaGetFunction.getType(), referredProperty.getType(), property.getType()).get(); } - if (PropertyType.typeHasSchema(referredProperty.getType()) && !referredProperty.getSchemaType().equals(property.getType()) && !"list".equalsIgnoreCase(referredProperty.getType()) && !referredProperty.getSchemaType().equals(property.getSchemaType())) { + if (PropertyType.typeHasSchema(referredProperty.getType()) && !referredProperty.getSchemaType().equals(property.getType()) + && !"list".equalsIgnoreCase(referredProperty.getType()) && !referredProperty.getSchemaType().equals(property.getSchemaType())) { throw ToscaGetFunctionExceptionSupplier .propertySchemaDiverge(toscaGetFunction.getType(), referredProperty.getSchemaType(), property.getSchemaType()).get(); } diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/DataForMergeHolder.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/DataForMergeHolder.java index 21c7461589..d838eb1cc0 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/DataForMergeHolder.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/DataForMergeHolder.java @@ -122,6 +122,7 @@ public class DataForMergeHolder { propertyCopy.setDefaultValue(property.getDefaultValue()); propertyCopy.setInputId(property.getInputId()); propertyCopy.setGetInputValues(property.getGetInputValues()); + propertyCopy.setToscaFunction(property.getToscaFunction()); this.origComponentInstanceProperties.add(propertyCopy); }); } diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/property/DataDefinitionsValuesMergingBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/property/DataDefinitionsValuesMergingBusinessLogic.java index 6f1a1e1ca8..c64e2efe88 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/property/DataDefinitionsValuesMergingBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/property/DataDefinitionsValuesMergingBusinessLogic.java @@ -67,6 +67,9 @@ public class DataDefinitionsValuesMergingBusinessLogic { private void mergeInstanceDefinition(MergePropertyData mergeData) { if (isSameType(mergeData.getOldProp(), mergeData.getNewProp())) { propertyValueMergeBL.mergePropertyValue(mergeData.getOldProp(), mergeData.getNewProp(), mergeData.getGetInputNamesToMerge()); + if (mergeData.getOldProp().isToscaFunction()) { + mergeData.getNewProp().setToscaFunction(mergeData.getOldProp().getToscaFunction()); + } } } diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/property/PropertyDataValueMergeBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/property/PropertyDataValueMergeBusinessLogic.java index 272798f869..7562dfeb19 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/property/PropertyDataValueMergeBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/property/PropertyDataValueMergeBusinessLogic.java @@ -88,9 +88,7 @@ public class PropertyDataValueMergeBusinessLogic { } private Object convertPropertyStrValueToObject(PropertyDataDefinition propertyDataDefinition, Map dataTypes) { - String propValue = propertyDataDefinition.getValue() == null ? "" : propertyDataDefinition.getValue(); - String propertyType = propertyDataDefinition.getType(); - String innerType = propertyDataDefinition.getSchemaType(); + final String propValue = propertyDataDefinition.getValue() == null ? "" : propertyDataDefinition.getValue(); return propertyConvertor.convertToToscaObject(propertyDataDefinition, propValue, dataTypes, true); } diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/tosca/ToscaDataDefinition.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/tosca/ToscaDataDefinition.java index 0b142d5306..95875d9bb7 100644 --- a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/tosca/ToscaDataDefinition.java +++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/tosca/ToscaDataDefinition.java @@ -34,12 +34,12 @@ public abstract class ToscaDataDefinition { protected Map toscaPresentation; - public ToscaDataDefinition() { + protected ToscaDataDefinition() { toscaPresentation = new HashMap<>(); } @JsonCreator - public ToscaDataDefinition(Map art) { + protected ToscaDataDefinition(Map art) { toscaPresentation = art; } -- 2.16.6