diff options
author | MichaelMorris <michael.morris@est.tech> | 2023-02-17 16:55:53 +0000 |
---|---|---|
committer | JEFF VAN DAM <jeff.van.dam@est.tech> | 2023-02-22 14:22:15 +0000 |
commit | b275933c9cee0b36fc4038040b8417c80b08e603 (patch) | |
tree | 39d5b2a30448aa3d37694c68b85ca05e7c9490a6 | |
parent | 9b8d90c9cdc012ca444d35465dc2e77662e4becf (diff) |
Fix error validation equals constraint
Error thrown when validating value for list property with an equal constraint, even when valid valid is given
Signed-off-by: MichaelMorris <michael.morris@est.tech>
Issue-ID: SDC-4399
Change-Id: Iec1746561351acc026050bf8571c060cc5705c2e
3 files changed, 31 insertions, 19 deletions
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/PropertyOperation.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/PropertyOperation.java index 8756ac4ee2..2d88f38977 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/PropertyOperation.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/PropertyOperation.java @@ -2503,6 +2503,12 @@ public class PropertyOperation extends AbstractOperation implements IPropertyOpe } } else if (jsonElement.getNodeType().equals(JsonNodeType.BOOLEAN)) { return jsonElement.asBoolean(); + } else if (jsonElement.getNodeType().equals(JsonNodeType.ARRAY)) { + List<Object> listValues = new ArrayList<>(); + for (JsonNode jsonArrayElement : jsonElement) { + listValues.add(convertToType(jsonArrayElement)); + } + return listValues; } else { return jsonElement.asText(); } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/ConstraintUtil.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/ConstraintUtil.java index fee828c1be..83b3ab82d8 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/ConstraintUtil.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/ConstraintUtil.java @@ -53,16 +53,8 @@ public final class ConstraintUtil { throw new ConstraintValueDoNotMatchPropertyTypeException("Invalid property type <" + propertyType.toString() + ">"); } } - - /** - * Verify that the given tosca type is supported for comparison - * - * @param propertyType the tosca type to check - * @throws ConstraintValueDoNotMatchPropertyTypeException if the property type cannot be compared - */ - public static void checkComparableType(final ToscaType propertyType) throws ConstraintValueDoNotMatchPropertyTypeException { - // The validity of the value is already assured by us with our ToscaType.convert() method - // here we just want to check that the constraint is not used on unsupported type as boolean + + public static boolean isComparableType(final ToscaType propertyType) { final ToscaType toscaType = ToscaType.getToscaType(propertyType.getType()); switch (toscaType) { case FLOAT: @@ -76,12 +68,21 @@ public final class ConstraintUtil { case SCALAR_UNIT_TIME: case SCALAR_UNIT_BITRATE: case SCALAR_UNIT_FREQUENCY: - break; - case BOOLEAN: - case SCALAR_UNIT: - throw new ConstraintValueDoNotMatchPropertyTypeException("Constraint is invalid for property type <" + propertyType.getType() + ">"); + return true; default: - throw new ConstraintValueDoNotMatchPropertyTypeException("Invalid property type <" + propertyType.getType() + ">"); + return false; + } + } + + /** + * Verify that the given tosca type is supported for comparison + * + * @param propertyType the tosca type to check + * @throws ConstraintValueDoNotMatchPropertyTypeException if the property type cannot be compared + */ + public static void checkComparableType(final ToscaType propertyType) throws ConstraintValueDoNotMatchPropertyTypeException { + if (!isComparableType(propertyType)) { + throw new ConstraintValueDoNotMatchPropertyTypeException("Constraint is invalid for property type <" + propertyType.getType() + ">"); } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/EqualConstraint.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/EqualConstraint.java index 3017a0532d..a565580d38 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/EqualConstraint.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/EqualConstraint.java @@ -20,6 +20,8 @@ package org.openecomp.sdc.be.model.tosca.constraints; +import java.util.List; + import javax.validation.constraints.NotNull; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -52,10 +54,9 @@ public class EqualConstraint extends AbstractComparablePropertyConstraint { public void initialize(ToscaType propertyType) throws ConstraintValueDoNotMatchPropertyTypeException { if (propertyType.isValidValue(String.valueOf(equal))) { typed = propertyType.convert(String.valueOf(equal)); - if (propertyType.equals(ToscaType.BOOLEAN)) { - return; + if (ConstraintUtil.isComparableType(propertyType)) { + initialize(String.valueOf(equal), propertyType); } - initialize(String.valueOf(equal), propertyType); } else { throw new ConstraintValueDoNotMatchPropertyTypeException( "constraintValue constraint has invalid value <" + equal + "> property type is <" + propertyType.toString() + ">"); @@ -104,11 +105,15 @@ public class EqualConstraint extends AbstractComparablePropertyConstraint { if (propertyValue == null) { throw new ConstraintViolationException("Value to check is null"); } - if (!(propertyValue instanceof Boolean)) { + if (isComparableValue(propertyValue)) { super.validate(propertyValue); } doValidate(propertyValue); } + + private boolean isComparableValue(Object propertyValue) { + return Comparable.class.isAssignableFrom(propertyValue.getClass()); + } public boolean validateValueType(String propertyType) throws ConstraintValueDoNotMatchPropertyTypeException { ToscaType toscaType = ToscaType.getToscaType(propertyType); |