Use annotations on parameterized types
[policy/models.git] / models-pdp / src / main / java / org / onap / policy / models / pdp / persistence / concepts / JpaPdpGroup.java
index d0fc216..c91bf9a 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP Policy Model
  * ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
  * Modifications Copyright (C) 2019 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -28,7 +28,6 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-
 import javax.persistence.CascadeType;
 import javax.persistence.CollectionTable;
 import javax.persistence.Column;
@@ -41,24 +40,20 @@ import javax.persistence.InheritanceType;
 import javax.persistence.JoinColumn;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
-
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NonNull;
-
 import org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.onap.policy.common.utils.validation.Assertions;
-import org.onap.policy.common.utils.validation.ParameterValidationUtils;
+import org.onap.policy.common.parameters.annotations.NotBlank;
+import org.onap.policy.common.parameters.annotations.NotNull;
+import org.onap.policy.common.parameters.annotations.Valid;
 import org.onap.policy.models.base.PfAuthorative;
 import org.onap.policy.models.base.PfConcept;
 import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.base.PfKey;
 import org.onap.policy.models.base.PfReferenceKey;
 import org.onap.policy.models.base.PfUtils;
-import org.onap.policy.models.base.PfValidationMessage;
-import org.onap.policy.models.base.PfValidationResult;
-import org.onap.policy.models.base.PfValidationResult.ValidationResult;
+import org.onap.policy.models.base.validation.annotations.VerifyKey;
 import org.onap.policy.models.pdp.concepts.PdpGroup;
 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
 import org.onap.policy.models.pdp.enums.PdpState;
@@ -77,16 +72,20 @@ public class JpaPdpGroup extends PfConcept implements PfAuthorative<PdpGroup> {
     private static final long serialVersionUID = -357224425637789775L;
 
     @EmbeddedId
+    @VerifyKey
+    @NotNull
     private PfConceptKey key;
 
     @Column
+    @NotBlank
     private String description;
 
     @Column
+    @NotNull
     private PdpState pdpGroupState;
 
     @ElementCollection
-    private Map<String, String> properties;
+    private Map<@NotNull @NotBlank String, @NotNull @NotBlank String> properties;
 
     // @formatter:off
     @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@@ -97,7 +96,8 @@ public class JpaPdpGroup extends PfConcept implements PfAuthorative<PdpGroup> {
             @JoinColumn(name = "pdpGroupLocalName",        referencedColumnName = "localName")
         })
     // @formatter:on
-    private List<JpaPdpSubGroup> pdpSubGroups;
+    @NotNull
+    private List<@NotNull @Valid JpaPdpSubGroup> pdpSubGroups;
 
     /**
      * The Default Constructor creates a {@link JpaPdpGroup} object with a null key.
@@ -135,6 +135,11 @@ public class JpaPdpGroup extends PfConcept implements PfAuthorative<PdpGroup> {
      */
     public JpaPdpGroup(@NonNull final JpaPdpGroup copyConcept) {
         super(copyConcept);
+        this.key = new PfConceptKey(copyConcept.key);
+        this.description = copyConcept.description;
+        this.pdpGroupState = copyConcept.pdpGroupState;
+        this.properties = (copyConcept.properties == null ? null : new LinkedHashMap<>(copyConcept.properties));
+        this.pdpSubGroups = PfUtils.mapList(copyConcept.pdpSubGroups, JpaPdpSubGroup::new, new ArrayList<>(0));
     }
 
     /**
@@ -216,52 +221,6 @@ public class JpaPdpGroup extends PfConcept implements PfAuthorative<PdpGroup> {
         }
     }
 
-    @Override
-    public PfValidationResult validate(@NonNull final PfValidationResult resultIn) {
-        PfValidationResult result = resultIn;
-
-        if (key.isNullKey()) {
-            result.addValidationMessage(
-                    new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key"));
-        }
-
-        result = key.validate(result);
-
-        if (description != null && StringUtils.isBlank(description)) {
-            result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID,
-                    "description may not be blank"));
-        }
-
-        if (pdpGroupState == null) {
-            result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID,
-                    "pdpGroupState may not be null"));
-        }
-
-        if (properties != null) {
-            for (Entry<String, String> propertyEntry : properties.entrySet()) {
-                if (!ParameterValidationUtils.validateStringParameter(propertyEntry.getKey())) {
-                    result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID,
-                            "a property key may not be null or blank"));
-                }
-                if (!ParameterValidationUtils.validateStringParameter(propertyEntry.getValue())) {
-                    result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID,
-                            "a property value may not be null or blank"));
-                }
-            }
-        }
-
-        if (pdpSubGroups == null) {
-            result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID,
-                    "a PDP group must have a list of PDP subgroups"));
-        } else {
-            for (JpaPdpSubGroup jpaPdpSubgroup : pdpSubGroups) {
-                result = jpaPdpSubgroup.validate(result);
-            }
-        }
-
-        return result;
-    }
-
     @Override
     public int compareTo(final PfConcept otherConcept) {
         if (otherConcept == null) {
@@ -271,7 +230,7 @@ public class JpaPdpGroup extends PfConcept implements PfAuthorative<PdpGroup> {
             return 0;
         }
         if (getClass() != otherConcept.getClass()) {
-            return this.getClass().getCanonicalName().compareTo(otherConcept.getClass().getCanonicalName());
+            return this.getClass().getName().compareTo(otherConcept.getClass().getName());
         }
 
         final JpaPdpGroup other = (JpaPdpGroup) otherConcept;
@@ -296,19 +255,4 @@ public class JpaPdpGroup extends PfConcept implements PfAuthorative<PdpGroup> {
 
         return PfUtils.compareObjects(pdpSubGroups, other.pdpSubGroups);
     }
-
-    @Override
-    public PfConcept copyTo(@NonNull final PfConcept target) {
-        Assertions.instanceOf(target, JpaPdpGroup.class);
-
-        final JpaPdpGroup copy = ((JpaPdpGroup) target);
-        copy.setKey(new PfConceptKey(key));
-
-        copy.setDescription(description);
-        copy.setPdpGroupState(pdpGroupState);
-        copy.setProperties(properties == null ? null : new LinkedHashMap<>(properties));
-        copy.setPdpSubGroups(PfUtils.mapList(pdpSubGroups, JpaPdpSubGroup::new));
-
-        return copy;
-    }
 }