Fix resource property constraint values mutable in Service design 96/132596/3
authorJvD_Ericsson <jeff.van.dam@est.tech>
Tue, 6 Dec 2022 11:40:17 +0000 (11:40 +0000)
committerJvD_Ericsson <jeff.van.dam@est.tech>
Tue, 10 Jan 2023 16:06:58 +0000 (16:06 +0000)
Issue-ID: SDC-4290
Signed-off-by: JvD_Ericsson <jeff.van.dam@est.tech>
Change-Id: Ica942b7a8bb1f03cbf6baec709135287e31def06

19 files changed:
asdctool/src/main/resources/config/error-configuration.yaml
catalog-be/src/main/docker/backend/chef-repo/cookbooks/sdc-catalog-be/files/default/error-configuration.yaml
catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogic.java
catalog-be/src/main/resources/config/error-configuration.yaml
catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java
catalog-be/src/test/resources/config/catalog-be/error-configuration.yaml
catalog-dao/src/main/java/org/openecomp/sdc/be/dao/api/ActionStatus.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/EqualConstraint.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/GreaterOrEqualConstraint.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/GreaterThanConstraint.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/InRangeConstraint.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/LengthConstraint.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/LessOrEqualConstraint.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/LessThanConstraint.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/MaxLengthConstraint.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/MinLengthConstraint.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/PatternConstraint.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/constraints/ValidValuesConstraint.java
catalog-ui/src/app/ng2/pages/properties-assignment/constraints/constraints.component.html

index 5bd933a..4246e0d 100644 (file)
@@ -2853,4 +2853,11 @@ errors:
   CAPABILITY_NOT_FOUND:
     code: 404
     message: "Capability '%1' was not found for model '%2'."
-    messageId: "SVC4014"
\ No newline at end of file
+    messageId: "SVC4014"
+
+  #---------SVC4015-----------------------------
+  CANNOT_CHANGE_CONSTRAINTS: {
+    code: 400,
+    message: "Cannot change this properties constraints as the resource is an instance.",
+    messageId: "SVC4015"
+  }
\ No newline at end of file
index a9df460..0530298 100644 (file)
@@ -2862,4 +2862,11 @@ errors:
     CAPABILITY_NOT_FOUND:
         code: 404
         message: "Capability '%1' was not found for model '%2'."
-        messageId: "SVC4014"
\ No newline at end of file
+        messageId: "SVC4014"
+
+    #---------SVC4015-----------------------------
+    CANNOT_CHANGE_CONSTRAINTS: {
+        code: 400,
+        message: "Cannot change this properties constraints as the resource is an instance.",
+        messageId: "SVC4015"
+    }
\ No newline at end of file
index fe6ea03..64c66c5 100644 (file)
@@ -104,6 +104,7 @@ import org.openecomp.sdc.be.model.InterfaceDefinition;
 import org.openecomp.sdc.be.model.LifecycleStateEnum;
 import org.openecomp.sdc.be.model.OutputDefinition;
 import org.openecomp.sdc.be.model.PolicyDefinition;
+import org.openecomp.sdc.be.model.PropertyConstraint;
 import org.openecomp.sdc.be.model.PropertyDefinition;
 import org.openecomp.sdc.be.model.RelationshipInfo;
 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
@@ -1975,6 +1976,7 @@ public class ComponentInstanceBusinessLogic extends BaseBusinessLogic {
             for (ComponentInstanceProperty property : properties) {
                 validateMandatoryFields(property);
                 validatePropertyExistsOnComponent(property, containerComponent, foundResourceInstance);
+                validatePropertyConstraintsNotChanged(properties, foundResourceInstance);
                 String propertyParentUniqueId = property.getParentUniqueId();
                 if (property.isToscaFunction()) {
                     toscaFunctionValidator.validate(property, containerComponent);
@@ -3993,6 +3995,22 @@ public class ComponentInstanceBusinessLogic extends BaseBusinessLogic {
         }
     }
 
+    private void validatePropertyConstraintsNotChanged(List<ComponentInstanceProperty> newProperties, ComponentInstance originalResourceInstance) {
+        for (ComponentInstanceProperty newProperty : newProperties) {
+            Optional<PropertyDefinition> originalProperty = originalResourceInstance.getProperties().stream()
+                    .filter(prop -> prop.getUniqueId().equals(newProperty.getUniqueId())).findAny();
+            if (originalProperty.isPresent()) {
+                List<PropertyConstraint> originalConstraints = originalProperty.get().getConstraints();
+                List<PropertyConstraint> newConstraints = newProperty.getConstraints();
+                if (!Objects.equals(originalConstraints, newConstraints)) {
+                    throw new ByActionStatusComponentException(ActionStatus.CANNOT_CHANGE_CONSTRAINTS);
+                }
+            } else {
+                throw new ByActionStatusComponentException(ActionStatus.PROPERTY_NOT_FOUND, newProperty.getUniqueId());
+            }
+        }
+    }
+
     private Either<Boolean, ResponseFormat> validatePropertyValueConstraint(List<? extends PropertyDefinition> properties, final String componentId) {
         try {
             String propertyModel = propertyBusinessLogic.getComponentModelByComponentId(componentId);
index c53efc2..56dd54c 100644 (file)
@@ -2862,4 +2862,11 @@ errors:
     CAPABILITY_NOT_FOUND:
         code: 404
         message: "Capability '%1' was not found for model '%2'."
-        messageId: "SVC4014"
\ No newline at end of file
+        messageId: "SVC4014"
+
+    #---------SVC4015-----------------------------
+    CANNOT_CHANGE_CONSTRAINTS: {
+        code: 400,
+        message: "Cannot change this properties constraints as the resource is an instance.",
+        messageId: "SVC4015"
+    }
\ No newline at end of file
index f22b346..f6a86ac 100644 (file)
@@ -319,6 +319,7 @@ class ComponentInstanceBusinessLogicTest {
         property.setName("property");
         property.setValue("newVal");
         property.setType("string");
+        property.setUniqueId("propId");
         properties.add(property);
 
         List<ComponentInstanceProperty> origProperties = new ArrayList<>();
@@ -328,6 +329,14 @@ class ComponentInstanceBusinessLogicTest {
         origProperty.setType("string");
         origProperties.add(origProperty);
 
+        List<PropertyDefinition> ciProperties = new ArrayList<>();
+        PropertyDefinition ciProperty = new ComponentInstanceProperty();
+        ciProperty.setName("property");
+        ciProperty.setValue("value");
+        ciProperty.setType("string");
+        ciProperty.setUniqueId("propId");
+        ciProperties.add(ciProperty);
+
         Map<String, DataTypeDefinition> types = new HashMap<>();
         DataTypeDefinition dataTypeDef = new DataTypeDefinition();
         types.put("string", dataTypeDef);
@@ -340,6 +349,7 @@ class ComponentInstanceBusinessLogicTest {
         component.setComponentInstancesProperties(componentInstanceProps);
         ComponentInstance ci = createComponentInstance("ci1");
         ci.setUniqueId("resourceId");
+        ci.setProperties(ciProperties);
         component.setComponentInstances(Arrays.asList(ci, createComponentInstance("ci2"),
             createComponentInstance(componentInstanceID)));
 
index b3df674..fc4e7d3 100644 (file)
@@ -2848,4 +2848,11 @@ errors:
     CAPABILITY_NOT_FOUND:
         code: 404
         message: "Capability '%1' was not found for model '%2'."
-        messageId: "SVC4014"
\ No newline at end of file
+        messageId: "SVC4014"
+
+    #---------SVC4015-----------------------------
+    CANNOT_CHANGE_CONSTRAINTS: {
+        code: 400,
+        message: "Cannot change this properties constraints as the resource is an instance.",
+        messageId: "SVC4015"
+    }
\ No newline at end of file
index 0150ebe..d2b1409 100644 (file)
@@ -114,7 +114,7 @@ public enum ActionStatus {
     //InterfaceLifeCycleType
     INTERFACE_LIFECYCLE_TYPES_NOT_FOUND, INVALID_PROPERTY_NAME, INVALID_INPUT_NAME,
     //Property Constraints
-    INVALID_PROPERTY_CONSTRAINTS, INVALID_PROPERTY_CONSTRAINTS_FORMAT, CANNOT_DELETE_VALID_VALUES,
+    INVALID_PROPERTY_CONSTRAINTS, INVALID_PROPERTY_CONSTRAINTS_FORMAT, CANNOT_DELETE_VALID_VALUES, CANNOT_CHANGE_CONSTRAINTS,
     //Container
     CONTAINER_CANNOT_CONTAIN_COMPONENT_IN_STATE, CONTAINER_CANNOT_CONTAIN_INSTANCE, MISSING_MANDATORY_PROPERTY, MANDATORY_PROPERTY_MISSING_VALUE,
     //Capability related
index e1c55ac..7462a72 100644 (file)
@@ -20,6 +20,7 @@
 package org.openecomp.sdc.be.model.tosca.constraints;
 
 import javax.validation.constraints.NotNull;
+import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.Setter;
 import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
@@ -31,11 +32,13 @@ import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintViolatio
 import org.openecomp.sdc.be.model.tosca.constraints.exception.PropertyConstraintException;
 
 @SuppressWarnings("serial")
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
 public class EqualConstraint extends AbstractComparablePropertyConstraint {
 
     @Getter
     @Setter
     @NotNull
+    @EqualsAndHashCode.Include
     private Object equal;
     private Object typed;
 
index e90f1c0..35f036b 100644 (file)
@@ -21,6 +21,7 @@ package org.openecomp.sdc.be.model.tosca.constraints;
 
 import javax.validation.constraints.NotNull;
 import lombok.AllArgsConstructor;
+import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.Setter;
 import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
@@ -34,6 +35,7 @@ import org.openecomp.sdc.be.model.tosca.constraints.exception.PropertyConstraint
 @Getter
 @Setter
 @AllArgsConstructor
+@EqualsAndHashCode
 public class GreaterOrEqualConstraint extends AbstractComparablePropertyConstraint {
 
     @NotNull
index e1293d1..7ecec8a 100644 (file)
@@ -21,6 +21,7 @@ package org.openecomp.sdc.be.model.tosca.constraints;
 
 import javax.validation.constraints.NotNull;
 import lombok.AllArgsConstructor;
+import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.Setter;
 import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
@@ -34,6 +35,7 @@ import org.openecomp.sdc.be.model.tosca.constraints.exception.PropertyConstraint
 @Getter
 @Setter
 @AllArgsConstructor
+@EqualsAndHashCode
 public class GreaterThanConstraint<T> extends AbstractComparablePropertyConstraint {
 
     @NotNull
index 26d75bd..19e2153 100644 (file)
@@ -21,6 +21,7 @@ package org.openecomp.sdc.be.model.tosca.constraints;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import java.util.List;
+import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.NonNull;
@@ -36,9 +37,11 @@ import org.openecomp.sdc.be.model.tosca.constraints.exception.PropertyConstraint
 @NoArgsConstructor
 @Getter
 @Setter
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
 public class InRangeConstraint extends AbstractPropertyConstraint {
 
     @NonNull
+    @EqualsAndHashCode.Include
     private List<Object> inRange;
     @JsonIgnore
     private Comparable min;
index 3ed6e7f..f7952fa 100644 (file)
@@ -22,6 +22,7 @@ package org.openecomp.sdc.be.model.tosca.constraints;
 import java.util.List;
 import java.util.Map;
 import javax.validation.constraints.NotNull;
+import lombok.EqualsAndHashCode;
 import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
 import org.openecomp.sdc.be.model.PropertyConstraint;
 import org.openecomp.sdc.be.model.tosca.ToscaType;
@@ -33,6 +34,7 @@ import lombok.NoArgsConstructor;
 
 @AllArgsConstructor
 @NoArgsConstructor
+@EqualsAndHashCode
 public class LengthConstraint extends AbstractPropertyConstraint {
 
     @NotNull
index 3830ddf..ece5e40 100644 (file)
@@ -21,6 +21,7 @@ package org.openecomp.sdc.be.model.tosca.constraints;
 
 import javax.validation.constraints.NotNull;
 import lombok.AllArgsConstructor;
+import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.Setter;
 import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
@@ -34,6 +35,7 @@ import org.openecomp.sdc.be.model.tosca.constraints.exception.PropertyConstraint
 @Getter
 @Setter
 @AllArgsConstructor
+@EqualsAndHashCode
 public class LessOrEqualConstraint<T> extends AbstractComparablePropertyConstraint {
 
     @NotNull
index f3e283c..d071dba 100644 (file)
@@ -21,6 +21,7 @@ package org.openecomp.sdc.be.model.tosca.constraints;
 
 import javax.validation.constraints.NotNull;
 import lombok.AllArgsConstructor;
+import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.Setter;
 import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
@@ -34,6 +35,7 @@ import org.openecomp.sdc.be.model.tosca.constraints.exception.PropertyConstraint
 @Getter
 @Setter
 @AllArgsConstructor
+@EqualsAndHashCode
 public class LessThanConstraint extends AbstractComparablePropertyConstraint {
 
     @NotNull
index 388eb05..dfc0d9b 100644 (file)
@@ -22,6 +22,7 @@ package org.openecomp.sdc.be.model.tosca.constraints;
 import java.util.List;
 import java.util.Map;
 import javax.validation.constraints.NotNull;
+import lombok.EqualsAndHashCode;
 import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
 import org.openecomp.sdc.be.model.PropertyConstraint;
 import org.openecomp.sdc.be.model.tosca.ToscaType;
@@ -29,6 +30,7 @@ import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintFunction
 import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintViolationException;
 import org.openecomp.sdc.be.model.tosca.constraints.exception.PropertyConstraintException;
 
+@EqualsAndHashCode
 public class MaxLengthConstraint extends AbstractPropertyConstraint {
 
     @NotNull
index a2ff955..fbced6b 100644 (file)
@@ -22,6 +22,7 @@ package org.openecomp.sdc.be.model.tosca.constraints;
 import java.util.List;
 import java.util.Map;
 import javax.validation.constraints.NotNull;
+import lombok.EqualsAndHashCode;
 import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
 import org.openecomp.sdc.be.model.PropertyConstraint;
 import org.openecomp.sdc.be.model.tosca.ToscaType;
@@ -29,6 +30,7 @@ import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintFunction
 import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintViolationException;
 import org.openecomp.sdc.be.model.tosca.constraints.exception.PropertyConstraintException;
 
+@EqualsAndHashCode
 public class MinLengthConstraint extends AbstractPropertyConstraint {
 
     @NotNull
index 6ff9524..6d67847 100644 (file)
@@ -21,6 +21,7 @@ package org.openecomp.sdc.be.model.tosca.constraints;
 
 import java.util.regex.Pattern;
 import javax.validation.constraints.NotNull;
+import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
@@ -30,11 +31,13 @@ import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintFunction
 import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintViolationException;
 import org.openecomp.sdc.be.model.tosca.constraints.exception.PropertyConstraintException;
 
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
 @NoArgsConstructor
 public class PatternConstraint extends AbstractStringPropertyConstraint {
 
     @NotNull
     @Getter
+    @EqualsAndHashCode.Include
     private String pattern;
     private Pattern compiledPattern;
 
index f6bc589..bf979fe 100644 (file)
@@ -25,9 +25,9 @@ import com.google.common.collect.Sets;
 import java.util.List;
 import java.util.Set;
 import javax.validation.constraints.NotNull;
+import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
-import lombok.RequiredArgsConstructor;
 import lombok.Setter;
 import org.openecomp.sdc.be.dao.api.ActionStatus;
 import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
@@ -39,12 +39,14 @@ import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintViolatio
 import org.openecomp.sdc.be.model.tosca.constraints.exception.PropertyConstraintException;
 
 @NoArgsConstructor
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
 public class ValidValuesConstraint extends AbstractPropertyConstraint {
 
     private static final String PROPERTY_TYPE_IS = "> property type is <";
     @Getter
     @Setter
     @NotNull
+    @EqualsAndHashCode.Include
     private List<Object> validValues;
     private Set<Object> validValuesTyped;
 
index 6272a45..cbe858f 100644 (file)
@@ -78,8 +78,9 @@
 
             <div *ngIf="constraint.type != 'inRange' && constraint.type != 'validValues'">
               <input type="text" class="i-sdc-form-input myClass"
-                    (input)="onChangeConstraintValue(constraintIndex, $event.target.value)"
-                    [value]="constraint.value"/>
+                     [disabled]="isViewOnly"
+                     (input)="onChangeConstraintValue(constraintIndex, $event.target.value)"
+                     [value]="constraint.value"/>
             </div>
           </div>