* ONAP Policy Model
* ================================================================================
* Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019-2020 Nordix Foundation.
+ * 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.tosca.simple.concepts;
+import jakarta.persistence.CollectionTable;
+import jakarta.persistence.ElementCollection;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Inheritance;
+import jakarta.persistence.InheritanceType;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.Table;
+import jakarta.ws.rs.core.Response;
+import java.io.Serial;
import java.util.LinkedHashMap;
import java.util.List;
-import javax.persistence.AttributeOverride;
-import javax.persistence.Column;
-import javax.persistence.ElementCollection;
-import javax.persistence.Entity;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.Table;
-import javax.ws.rs.core.Response;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NonNull;
import org.onap.policy.models.base.PfKey;
import org.onap.policy.models.base.PfModelRuntimeException;
import org.onap.policy.models.base.PfUtils;
-import org.onap.policy.models.base.validation.annotations.VerifyKey;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
/**
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Data
@EqualsAndHashCode(callSuper = true)
-public class JpaToscaPolicy extends JpaToscaWithStringProperties<ToscaPolicy> {
+public class JpaToscaPolicy extends JpaToscaWithTypeAndStringProperties<ToscaPolicy> {
+ @Serial
private static final long serialVersionUID = 3265174757061982805L;
+ private static final String METADATA_METADATA_SET_NAME_TAG = "metadataSetName";
+ private static final String METADATA_METADATA_SET_VERSION_TAG = "metadataSetVersion";
// Tags for metadata
private static final String METADATA_POLICY_ID_TAG = "policy-id";
private static final StandardCoder STANDARD_CODER = new StandardCoder();
- // @formatter:off
- @Column
- @AttributeOverride(name = "name", column = @Column(name = "type_name"))
- @AttributeOverride(name = "version", column = @Column(name = "type_version"))
- @VerifyKey
- @NotNull
- private PfConceptKey type;
-
@ElementCollection
+ @CollectionTable(joinColumns = {
+ @JoinColumn(name = "toscaPolicyName", referencedColumnName = "name"),
+ @JoinColumn(name = "toscaPolicyVersion", referencedColumnName = "version")
+ })
private List<@NotNull @Valid PfConceptKey> targets;
- // @formatter:on
/**
* The Default Constructor creates a {@link JpaToscaPolicy} object with a null key.
*/
public JpaToscaPolicy() {
- this(new PfConceptKey());
+ super();
}
/**
* @param key the key
*/
public JpaToscaPolicy(@NonNull final PfConceptKey key) {
- this(key, new PfConceptKey());
+ super(key, new PfConceptKey());
}
/**
* @param type the type of the policy
*/
public JpaToscaPolicy(@NonNull final PfConceptKey key, @NonNull final PfConceptKey type) {
- super(key);
- this.type = type;
+ super(key, type);
}
/**
*/
public JpaToscaPolicy(@NonNull final JpaToscaPolicy copyConcept) {
super(copyConcept);
- this.type = new PfConceptKey(copyConcept.type);
this.targets = PfUtils.mapList(copyConcept.targets, PfConceptKey::new);
}
*/
public JpaToscaPolicy(final ToscaPolicy authorativeConcept) {
super(new PfConceptKey());
- type = new PfConceptKey();
this.fromAuthorative(authorativeConcept);
}
@Override
public ToscaPolicy toAuthorative() {
- ToscaPolicy toscaPolicy = new ToscaPolicy();
+ var toscaPolicy = new ToscaPolicy();
super.setToscaEntity(toscaPolicy);
super.toAuthorative();
- toscaPolicy.setType(type.getName());
-
- if (!PfKey.NULL_KEY_VERSION.equals(type.getVersion())) {
- toscaPolicy.setTypeVersion(type.getVersion());
- } else {
- toscaPolicy.setTypeVersion(null);
- }
-
return toscaPolicy;
}
public void fromAuthorative(@NonNull final ToscaPolicy toscaPolicy) {
super.fromAuthorative(toscaPolicy);
- if (toscaPolicy.getType() != null) {
- type.setName(toscaPolicy.getType());
- } else {
- throw new PfModelRuntimeException(Response.Status.BAD_REQUEST,
- "PolicyType type not specified, the type of the PolicyType for this policy must be specified in "
- + "the type field");
- }
-
- if (toscaPolicy.getTypeVersion() != null) {
- type.setVersion(toscaPolicy.getTypeVersion());
- } else {
- throw new PfModelRuntimeException(Response.Status.BAD_REQUEST,
- "PolicyType version not specified, the version of the PolicyType for this policy must be specified"
- + " in the type_version field");
- }
-
// Add the property metadata if it doesn't exist already
if (toscaPolicy.getMetadata() == null) {
setMetadata(new LinkedHashMap<>());
// Add the policy name and version fields to the metadata
getMetadata().put(METADATA_POLICY_ID_TAG, getKey().getName());
getMetadata().put(METADATA_POLICY_VERSION_TAG, getKey().getVersion());
+
+ // Add metadataSet name and version to the metadata
+ if (getMetadata().containsKey(METADATA_METADATA_SET_NAME_TAG)
+ && getMetadata().containsKey(METADATA_METADATA_SET_VERSION_TAG)) {
+ getMetadata().put(METADATA_METADATA_SET_NAME_TAG, getMetadata().get(METADATA_METADATA_SET_NAME_TAG)
+ .replaceAll("^\"|\"$", ""));
+
+ getMetadata().put(METADATA_METADATA_SET_VERSION_TAG, getMetadata().get(METADATA_METADATA_SET_VERSION_TAG)
+ .replaceAll("^\"|\"$", ""));
+ }
}
@Override
public List<PfKey> getKeys() {
final List<PfKey> keyList = super.getKeys();
- keyList.addAll(type.getKeys());
-
if (targets != null) {
keyList.addAll(targets);
}
public void clean() {
super.clean();
- type.clean();
-
if (targets != null) {
for (PfConceptKey target : targets) {
target.clean();
}
@Override
- public BeanValidationResult validate(String fieldName) {
+ public BeanValidationResult validate(@NonNull String fieldName) {
BeanValidationResult result = super.validate(fieldName);
validateKeyVersionNotNull(result, "key", getKey());
final JpaToscaPolicy other = (JpaToscaPolicy) otherConcept;
- result = type.compareTo(other.type);
- if (result != 0) {
- return result;
- }
-
return PfUtils.compareCollections(targets, other.targets);
}
}