* ============LICENSE_START=======================================================
* ONAP Policy Model
* ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019 Nordix Foundation.
+ * Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2019, 2021, 2023 Nordix Foundation.
+ * Modifications Copyright (C) 2022 Bell Canada. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package org.onap.policy.models.pdp.persistence.concepts;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.CollectionTable;
+import jakarta.persistence.Column;
+import jakarta.persistence.ElementCollection;
+import jakarta.persistence.EmbeddedId;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Inheritance;
+import jakarta.persistence.InheritanceType;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.Table;
+import java.io.Serial;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-
-import javax.persistence.CollectionTable;
-import javax.persistence.Column;
-import javax.persistence.ElementCollection;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.Inheritance;
-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;
@Data
@EqualsAndHashCode(callSuper = false)
public class JpaPdpGroup extends PfConcept implements PfAuthorative<PdpGroup> {
+ @Serial
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
+ @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@CollectionTable(joinColumns = {
- @JoinColumn(name = "pdpGroupParentKeyName", referencedColumnName = "parentKeyName"),
- @JoinColumn(name = "pdpGroupParentKeyVersion", referencedColumnName = "parentKeyVersion"),
- @JoinColumn(name = "pdpGroupParentLocalName", referencedColumnName = "parentLocalName"),
- @JoinColumn(name = "pdpGroupLocalName", referencedColumnName = "localName")
- })
+ @JoinColumn(name = "name", referencedColumnName = "name"),
+ @JoinColumn(name = "version", referencedColumnName = "version")
+ })
// @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.
*/
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));
}
/**
@Override
public PdpGroup toAuthorative() {
- PdpGroup pdpGroup = new PdpGroup();
+ var pdpGroup = new PdpGroup();
pdpGroup.setName(getKey().getName());
pdpGroup.setVersion(getKey().getVersion());
this.pdpSubGroups = new ArrayList<>();
for (PdpSubGroup pdpSubgroup : pdpGroup.getPdpSubgroups()) {
- JpaPdpSubGroup jpaPdpSubGroup = new JpaPdpSubGroup();
+ var jpaPdpSubGroup = new JpaPdpSubGroup();
jpaPdpSubGroup.setKey(new PfReferenceKey(getKey(), pdpSubgroup.getPdpType()));
jpaPdpSubGroup.fromAuthorative(pdpSubgroup);
this.pdpSubGroups.add(jpaPdpSubGroup);
}
}
- @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) {
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;
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;
- }
}