Error Importing node filter with multiple capability properties 61/130261/2
authorfranciscovila <javier.paradela.vila@est.tech>
Thu, 11 Aug 2022 10:33:01 +0000 (11:33 +0100)
committerMichael Morris <michael.morris@est.tech>
Thu, 11 Aug 2022 12:23:06 +0000 (12:23 +0000)
Fix importing NF with multiple Capability properties

Issue-ID: SDC-4117
Signed-off-by: franciscovila <javier.paradela.vila@est.tech>
Change-Id: I84fc245ddb40440d4909f5ae896b57ddf8b3740a

catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/NodeFilterConverter.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/NodeFilterOperation.java

index 63093eb..48932fe 100644 (file)
@@ -59,10 +59,12 @@ public class NodeFilterConverter {
 
     private void convertCapabilityConstraint(final RequirementNodeFilterCapabilityDataDefinition requirementNodeFilterCapabilityDataDefinition,
                                              final List<UIConstraint> capabilitiesConstraint) {
-        final UIConstraint uiConstraint = new UIConstraint();
         final ConstraintConvertor constraintConvertor = new ConstraintConvertor();
-        uiConstraint.setCapabilityName(requirementNodeFilterCapabilityDataDefinition.getName());
-        requirementNodeFilterCapabilityDataDefinition.getProperties().getListToscaDataDefinition().forEach(
-            property -> capabilitiesConstraint.add(constraintConvertor.getUiConstraint(property.getConstraints().iterator().next(), uiConstraint)));
+        requirementNodeFilterCapabilityDataDefinition.getProperties().getListToscaDataDefinition().forEach(property -> {
+            final UIConstraint uiConstraint = new UIConstraint();
+            uiConstraint.setCapabilityName(requirementNodeFilterCapabilityDataDefinition.getName());
+            capabilitiesConstraint.add(
+                    constraintConvertor.getUiConstraint(property.getConstraints().iterator().next(), uiConstraint));
+        });
     }
 }
index bcc005e..2d0693a 100644 (file)
@@ -24,6 +24,7 @@ import com.google.common.collect.ImmutableSet;
 import fj.data.Either;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
@@ -117,7 +118,18 @@ public class NodeFilterOperation extends BaseOperation {
             capabilities = new ListDataDefinition<>();
             nodeFilterDataDefinition.setCapabilities(capabilities);
         }
-        capabilities.getListToscaDataDefinition().add(requirementNodeFilterCapabilityDataDefinition);
+        
+        final Optional<RequirementNodeFilterCapabilityDataDefinition> existingCap = capabilities
+                .getListToscaDataDefinition().stream()
+                .filter(def -> def.getName().equals(requirementNodeFilterCapabilityDataDefinition.getName())).findAny();
+        
+        if (existingCap.isPresent()) {
+            final ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> newProperties  = requirementNodeFilterCapabilityDataDefinition.getProperties();
+            final ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> existingProperties = existingCap.get().getProperties();
+            newProperties.getListToscaDataDefinition().stream().forEach((prop -> existingProperties.add(prop))) ;
+        } else {
+            capabilities.getListToscaDataDefinition().add(requirementNodeFilterCapabilityDataDefinition);
+        }
         nodeFilterDataDefinition.setCapabilities(capabilities);
         return addOrUpdateNodeFilter(true, componentId, componentInstanceId, nodeFilterDataDefinition);
     }