Support TOSCA functions in Node Filters
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / impl / utils / CINodeFilterUtils.java
index a7dd5af..5ac9bcd 100644 (file)
  */
 package org.openecomp.sdc.be.components.impl.utils;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+import org.apache.commons.collections4.CollectionUtils;
 import org.openecomp.sdc.be.datatypes.elements.CINodeFilterDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.PropertyFilterDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.RequirementNodeFilterCapabilityDataDefinition;
-import org.openecomp.sdc.be.datatypes.elements.RequirementNodeFilterPropertyDataDefinition;
 import org.openecomp.sdc.be.model.UploadNodeFilterCapabilitiesInfo;
 import org.openecomp.sdc.be.model.UploadNodeFilterInfo;
 import org.openecomp.sdc.be.model.UploadNodeFilterPropertyInfo;
-import org.openecomp.sdc.common.log.wrappers.Logger;
+import org.openecomp.sdc.be.utils.PropertyFilterConstraintDataDefinitionHelper;
 
 public class CINodeFilterUtils {
 
-    Logger log = Logger.getLogger(CINodeFilterUtils.class);
-
-    public CINodeFilterDataDefinition getNodeFilterDataDefinition(UploadNodeFilterInfo uploadNodeFilterInfo, String uniqueId) {
-        CINodeFilterDataDefinition nodeFilterDataDefinition = new CINodeFilterDataDefinition();
+    public CINodeFilterDataDefinition getNodeFilterDataDefinition(final UploadNodeFilterInfo uploadNodeFilterInfo, final String uniqueId) {
+        final var nodeFilterDataDefinition = new CINodeFilterDataDefinition();
         nodeFilterDataDefinition.setName(uploadNodeFilterInfo.getName());
-        List<RequirementNodeFilterPropertyDataDefinition> collect = uploadNodeFilterInfo.getProperties().stream().map(this::buildProperty)
+        final List<PropertyFilterDataDefinition> propertyFilterList = uploadNodeFilterInfo.getProperties().stream()
+            .map(this::buildOnePropertyFilterForEachConstraint)
+            .flatMap(Collection::stream)
             .collect(Collectors.toList());
-        ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> listDataDefinition = new ListDataDefinition<>();
-        listDataDefinition.getListToscaDataDefinition().addAll(collect);
+        final ListDataDefinition<PropertyFilterDataDefinition> listDataDefinition = new ListDataDefinition<>();
+        listDataDefinition.getListToscaDataDefinition().addAll(propertyFilterList);
         nodeFilterDataDefinition.setProperties(listDataDefinition);
-        nodeFilterDataDefinition.setCapabilities(converCapabilties(uploadNodeFilterInfo.getCapabilities()));
+        nodeFilterDataDefinition.setCapabilities(convertCapabilities(uploadNodeFilterInfo.getCapabilities()));
         nodeFilterDataDefinition.setID(uniqueId);
         nodeFilterDataDefinition.setTosca_id(uploadNodeFilterInfo.getTosca_id());
         return nodeFilterDataDefinition;
     }
 
-    private ListDataDefinition<RequirementNodeFilterCapabilityDataDefinition> converCapabilties(
+    private ListDataDefinition<RequirementNodeFilterCapabilityDataDefinition> convertCapabilities(
         Map<String, UploadNodeFilterCapabilitiesInfo> capabilities) {
         ListDataDefinition<RequirementNodeFilterCapabilityDataDefinition> listDataDefinition = new ListDataDefinition<>();
         for (UploadNodeFilterCapabilitiesInfo capability : capabilities.values()) {
@@ -58,19 +60,43 @@ public class CINodeFilterUtils {
     private RequirementNodeFilterCapabilityDataDefinition convertCapability(UploadNodeFilterCapabilitiesInfo capability) {
         RequirementNodeFilterCapabilityDataDefinition retVal = new RequirementNodeFilterCapabilityDataDefinition();
         retVal.setName(capability.getName());
-        List<RequirementNodeFilterPropertyDataDefinition> props = capability.getProperties().stream().map(this::buildProperty)
+        List<PropertyFilterDataDefinition> props = capability.getProperties().stream().map(this::buildProperty)
             .collect(Collectors.toList());
-        ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> propsList = new ListDataDefinition<>();
+        ListDataDefinition<PropertyFilterDataDefinition> propsList = new ListDataDefinition<>();
         propsList.getListToscaDataDefinition().addAll(props);
         retVal.setProperties(propsList);
         return retVal;
     }
 
-    private RequirementNodeFilterPropertyDataDefinition buildProperty(UploadNodeFilterPropertyInfo uploadNodeFilterPropertyInfo) {
-        RequirementNodeFilterPropertyDataDefinition retVal = new RequirementNodeFilterPropertyDataDefinition();
-        retVal.setName(uploadNodeFilterPropertyInfo.getName());
-        List<String> propertyConstraints = uploadNodeFilterPropertyInfo.getValues();
-        retVal.setConstraints(propertyConstraints);
-        return retVal;
+    private PropertyFilterDataDefinition buildProperty(final UploadNodeFilterPropertyInfo uploadNodeFilterPropertyInfo) {
+        final var propertyFilter = new PropertyFilterDataDefinition();
+        propertyFilter.setName(uploadNodeFilterPropertyInfo.getName());
+        final List<String> propertyConstraints = uploadNodeFilterPropertyInfo.getValues();
+        if (CollectionUtils.isNotEmpty(propertyConstraints)) {
+            propertyFilter.setConstraints(
+                propertyConstraints.stream()
+                    .map(PropertyFilterConstraintDataDefinitionHelper::convertLegacyConstraint)
+                    .collect(Collectors.toList())
+            );
+        }
+        return propertyFilter;
+    }
+
+    private List<PropertyFilterDataDefinition> buildOnePropertyFilterForEachConstraint(final UploadNodeFilterPropertyInfo uploadNodeFilterProperty) {
+        final List<String> propertyConstraints = uploadNodeFilterProperty.getValues();
+        if (CollectionUtils.isNotEmpty(propertyConstraints)) {
+            return propertyConstraints.stream()
+                .map(PropertyFilterConstraintDataDefinitionHelper::convertLegacyConstraint)
+                .map(propertyFilterConstraint -> {
+                    final var propertyFilter = new PropertyFilterDataDefinition();
+                    propertyFilter.setName(uploadNodeFilterProperty.getName());
+                    propertyFilter.setConstraints(List.of(propertyFilterConstraint));
+                    return propertyFilter;
+                }).collect(Collectors.toList());
+        } else {
+            final var propertyFilter = new PropertyFilterDataDefinition();
+            propertyFilter.setName(uploadNodeFilterProperty.getName());
+            return List.of(propertyFilter);
+        }
     }
 }