Upgrade to java 11
[sdc.git] / common / onap-tosca-datatype / src / main / java / org / onap / sdc / tosca / datatypes / model / NodeTemplate.java
index 82f1581..ae1ca01 100644 (file)
 
 package org.onap.sdc.tosca.datatypes.model;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.Set;
+
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.Setter;
+
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.MapUtils;
 import org.onap.sdc.tosca.error.ToscaRuntimeException;
+import org.onap.sdc.tosca.services.ToscaExtensionYamlUtil;
 import org.onap.sdc.tosca.services.YamlUtil;
+import org.yaml.snakeyaml.constructor.ConstructorException;
 
 
 @Getter
@@ -37,6 +44,7 @@ import org.onap.sdc.tosca.services.YamlUtil;
 @EqualsAndHashCode
 public class NodeTemplate implements Template, Cloneable {
 
+    private static final String INVALID_TOSCA_REQUIREMENT_SECTION = "Invalid TOSCA requirement section";
     private String type;
     private String description;
     private Map<String, String> metadata;
@@ -50,6 +58,62 @@ public class NodeTemplate implements Template, Cloneable {
     private NodeFilter node_filter;
     private String copy;
 
+    public void setRequirements(List requirementAssignmentObj) {
+        this.requirements = convertToscaRequirementAssignment(requirementAssignmentObj); 
+    }
+
+    public static List<Map<String, RequirementAssignment>> convertToscaRequirementAssignment(List<?> requirementAssignmentObj) {
+
+        List<Map<String, RequirementAssignment>> convertedRequirements = new ArrayList<>();
+        if (CollectionUtils.isEmpty(requirementAssignmentObj)) {
+            return null;
+        }
+        for (Object requirementEntry : requirementAssignmentObj) {
+            convertToscaRequirementAssignmentEntry(convertedRequirements, requirementEntry);
+        }
+        return convertedRequirements;
+    }
+
+    private static void convertToscaRequirementAssignmentEntry(List<Map<String, RequirementAssignment>> convertedRequirements, Object requirementEntry) {
+        if (requirementEntry instanceof Map) {
+            try {
+                Set<Map.Entry<String, RequirementAssignment>> requirementEntries = ((Map)requirementEntry).entrySet();
+                for (Map.Entry<String, RequirementAssignment> toscaRequirements : requirementEntries) {
+                    String key = toscaRequirements.getKey();
+                    Object requirementValue = toscaRequirements.getValue();
+                    if (requirementValue instanceof Map) {
+                        RequirementAssignment requirementObject;
+                        try {
+                            YamlUtil yamlUtil = new YamlUtil();
+                            requirementObject = yamlUtil
+                                .yamlToObject(yamlUtil.objectToYaml(requirementValue), RequirementAssignment.class);
+                        } catch (ConstructorException ex) {
+                            // The requirement might contains extended attribute, so try to parse it into RequirementAssignmentExt as well
+                            ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
+                            requirementObject = toscaExtensionYamlUtil
+                                    .yamlToObject(toscaExtensionYamlUtil.objectToYaml(requirementValue), RequirementAssignment.class);
+                        }
+                        Map<String, RequirementAssignment> convertedToscaRequirement = new HashMap<>();
+                        convertedToscaRequirement.put(key, requirementObject);
+                        convertedRequirements.add(convertedToscaRequirement);
+                    } else  if (requirementValue instanceof RequirementAssignment) {
+                        Map<String, RequirementAssignment> convertedToscaRequirement = new HashMap<>();
+                        convertedToscaRequirement.put(key, (RequirementAssignment)requirementValue);
+                        convertedRequirements.add(convertedToscaRequirement);
+                    }
+                }
+            } catch (Exception ex) {
+                throw new ToscaRuntimeException(INVALID_TOSCA_REQUIREMENT_SECTION, ex);
+            }
+        }
+    }
+
+    public void addRequirements(Map<String, RequirementAssignment> newRequirement) {
+        if (CollectionUtils.isEmpty(this.requirements)) {
+            this.requirements = new ArrayList<Map<String, RequirementAssignment>>();
+        }
+        this.requirements.add(newRequirement);
+    }
 
     public Map<String, InterfaceDefinitionTemplate> getNormalizeInterfaces() {
         if (MapUtils.isEmpty(interfaces)) {