Check for duplicates in lists 44/85244/5
authorJim Hahn <jrh3@att.com>
Fri, 12 Apr 2019 19:53:08 +0000 (15:53 -0400)
committerJim Hahn <jrh3@att.com>
Sat, 13 Apr 2019 01:42:16 +0000 (21:42 -0400)
Modified duplicate subgroup check to eliminate sonar issue.
Added duplicate group check.
Modified ModelsTest to exclude PdpMessage, which seemed to cause
intermittent junit failures.

Change-Id: Id281874506d3a39610739e24cee49360b345724f
Issue-ID: POLICY-1542
Signed-off-by: Jim Hahn <jrh3@att.com>
models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpGroup.java
models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpGroups.java
models-pdp/src/test/java/org/onap/policy/models/pdp/concepts/ModelsTest.java
models-pdp/src/test/java/org/onap/policy/models/pdp/concepts/PdpGroupsTest.java

index 3c1aec2..49dfd6f 100644 (file)
@@ -25,7 +25,7 @@ import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
+import java.util.stream.Collectors;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.onap.policy.common.parameters.BeanValidationResult;
@@ -83,7 +83,7 @@ public class PdpGroup implements PfNameVersion, Comparable<PdpGroup> {
         BeanValidationResult result = new BeanValidationResult("group", this);
 
         /*
-         * Don't care about version or state, because we override them. Ok if description is null.
+         * Don't care about state, because we override it. Ok if description is null.
          */
 
         result.validateNotNull("name", name);
@@ -100,24 +100,19 @@ public class PdpGroup implements PfNameVersion, Comparable<PdpGroup> {
      * @param result where to place validation results
      */
     private void checkDuplicateSubgroups(BeanValidationResult result) {
-        if (pdpSubgroups == null) {
+        if (pdpSubgroups == null || !result.isValid()) {
             return;
         }
 
-        Set<String> set = new HashSet<>();
-
-        for (PdpSubGroup subgrp : pdpSubgroups) {
-            String pdpType = (subgrp == null ? null : subgrp.getPdpType());
-
-            if (pdpType == null) {
-                continue;
-            }
-
-            if (!set.add(pdpType)) {
-                result.addResult(new ObjectValidationResult("subgroups", pdpType, ValidationStatus.INVALID,
-                        "duplicate subgroup"));
-            }
+        // verify that the same subgroup doesn't appear more than once
+        List<String> pdpTypes = pdpSubgroups.stream().map(PdpSubGroup::getPdpType).collect(Collectors.toList());
+        if (pdpSubgroups.size() == new HashSet<>(pdpTypes).size()) {
+            return;
         }
+
+        // different sizes implies duplicates
+        result.addResult(new ObjectValidationResult("pdpSubgroups", pdpTypes, ValidationStatus.INVALID,
+                        "duplicate subgroups"));
     }
 
     @Override
index a7e05dd..ab9afb0 100644 (file)
 package org.onap.policy.models.pdp.concepts;
 
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 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;
 
 /**
  * Request deploy or update a set of groups via the PDP Group deployment REST API.
@@ -63,7 +67,17 @@ public class PdpGroups {
         BeanValidationResult result = new BeanValidationResult("groups", this);
 
         result.validateNotNullList("groups", groups, PdpGroup::validatePapRest);
+        if (!result.isValid()) {
+            return result;
+        }
+
+        // verify that the same group doesn't appear more than once
+        List<String> names = groups.stream().map(PdpGroup::getName).collect(Collectors.toList());
+        if (groups.size() == new HashSet<>(names).size()) {
+            return result;
+        }
 
-        return result;
+        // different sizes implies duplicates
+        return new ObjectValidationResult("groups", names, ValidationStatus.INVALID, "duplicate group names");
     }
 }
index 7a6c03c..7438393 100644 (file)
@@ -42,6 +42,10 @@ public class ModelsTest {
     public void testPdpModels() {
         final Validator validator = ValidatorBuilder.create().with(new ToStringTester()).with(new SetterTester())
                         .with(new GetterTester()).build();
-        validator.validate(POJO_PACKAGE, new FilterPackageInfo(), new FilterClassName(PdpMessage.class.getName()));
+
+        // exclude Test classes and PdpMessage
+        validator.validate(POJO_PACKAGE, new FilterPackageInfo(),
+                        new FilterClassName("^((?!Test$).)*$"),
+                        new FilterClassName("^((?!" + PdpMessage.class.getName() + ").)*$"));
     }
 }
index 22e178d..e0fafc1 100644 (file)
@@ -82,6 +82,11 @@ public class PdpGroupsTest {
         groupX.setName(null);
         groups.setGroups(Arrays.asList(group1, groupX));
         assertInvalid(groups);
+
+        // duplicate groups
+        groups = new PdpGroups();
+        groups.setGroups(Arrays.asList(group1, group2, group1));
+        assertInvalid(groups);
     }
 
     private void assertInvalid(PdpGroups groups) {