Add validation methods for PAP REST API
[policy/models.git] / models-pdp / src / main / java / org / onap / policy / models / pdp / concepts / PdpGroup.java
index 8805ae9..53bf3c1 100644 (file)
 
 package org.onap.policy.models.pdp.concepts;
 
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-
+import java.util.Set;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-
+import org.onap.policy.common.parameters.BeanValidationResult;
+import org.onap.policy.common.parameters.ObjectValidationResult;
+import org.onap.policy.common.parameters.ValidationResult;
+import org.onap.policy.common.parameters.ValidationStatus;
 import org.onap.policy.models.base.PfNameVersion;
 import org.onap.policy.models.base.PfUtils;
 import org.onap.policy.models.pdp.enums.PdpState;
@@ -78,4 +82,55 @@ public class PdpGroup implements PfNameVersion, Comparable<PdpGroup> {
     public int compareTo(final PdpGroup other) {
         return compareNameVersion(this, other);
     }
+
+    /**
+     * Validates that appropriate fields are populated for an incoming call to the PAP
+     * REST API.
+     *
+     * @return the validation result
+     */
+    public ValidationResult validatePapRest() {
+        BeanValidationResult result = new BeanValidationResult("group", this);
+
+        /*
+         * Don't care about version or state, because we override them. Ok if description
+         * is null.
+         */
+
+        result.validateNotNull("name", name);
+        result.validateNotNullList("pdpSubgroups", pdpSubgroups, PdpSubGroup::validatePapRest);
+
+        checkDuplicateSubgroups(result);
+
+        return result;
+    }
+
+    /**
+     * Checks for duplicate subgroups.
+     *
+     * @param result where to place validation results
+     */
+    private void checkDuplicateSubgroups(BeanValidationResult result) {
+        if (pdpSubgroups == null) {
+            return;
+        }
+
+        Set<String> set = new HashSet<>();
+
+        for (PdpSubGroup subgrp : pdpSubgroups) {
+            if (subgrp == null) {
+                continue;
+            }
+
+            String pdpType = subgrp.getPdpType();
+            if (pdpType == null) {
+                continue;
+            }
+
+            if (!set.add(pdpType)) {
+                result.addResult(new ObjectValidationResult("subgroups", pdpType, ValidationStatus.INVALID,
+                                "duplicate subgroup"));
+            }
+        }
+    }
 }