* ============LICENSE_START=======================================================
* ONAP Policy Model
* ================================================================================
- * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019-2020 Nordix Foundation.
+ * Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2019-2021 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import java.util.LinkedHashMap;
import java.util.List;
-import java.util.Map;
-import javax.persistence.AttributeOverride;
-import javax.persistence.AttributeOverrides;
-import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
-import javax.persistence.Lob;
import javax.persistence.Table;
import javax.ws.rs.core.Response;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NonNull;
import org.onap.policy.common.parameters.BeanValidationResult;
+import org.onap.policy.common.parameters.annotations.NotNull;
+import org.onap.policy.common.parameters.annotations.Valid;
import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.common.utils.coder.StandardCoder;
-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.PfModelRuntimeException;
import org.onap.policy.models.base.PfUtils;
-import org.onap.policy.models.base.Validated;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
/**
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Data
@EqualsAndHashCode(callSuper = true)
-public class JpaToscaPolicy extends JpaToscaEntityType<ToscaPolicy> implements PfAuthorative<ToscaPolicy> {
+public class JpaToscaPolicy extends JpaToscaWithTypeAndStringProperties<ToscaPolicy> {
private static final long serialVersionUID = 3265174757061982805L;
// Tags for metadata
private static final StandardCoder STANDARD_CODER = new StandardCoder();
- // @formatter:off
- @Column
- @AttributeOverrides({
- @AttributeOverride(name = "name",
- column = @Column(name = "type_name")),
- @AttributeOverride(name = "version",
- column = @Column(name = "type_version"))
- })
- private PfConceptKey type;
-
- @ElementCollection
- @Lob
- private Map<String, String> properties;
-
@ElementCollection
- private List<PfConceptKey> targets;
- // @formatter:on
+ private List<@NotNull @Valid PfConceptKey> targets;
/**
* 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.properties = (copyConcept.properties != null ? new LinkedHashMap<>(copyConcept.properties) : null);
this.targets = PfUtils.mapList(copyConcept.targets, PfConceptKey::new);
}
*/
public JpaToscaPolicy(final ToscaPolicy authorativeConcept) {
super(new PfConceptKey());
- type = new PfConceptKey();
this.fromAuthorative(authorativeConcept);
}
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);
- }
-
- toscaPolicy.setProperties(PfUtils.mapMap(properties, property -> {
- try {
- return STANDARD_CODER.decode(property, Object.class);
- } catch (CoderException ce) {
- String errorMessage = "error decoding property JSON value read from database: " + property;
- throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage, ce);
- }
- }));
-
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");
- }
-
- properties = PfUtils.mapMap(toscaPolicy.getProperties(), property -> {
- try {
- return STANDARD_CODER.encode(property);
- } catch (CoderException ce) {
- String errorMessage = "error encoding property JSON value for database: " + property;
- throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage, ce);
- }
- });
-
// Add the property metadata if it doesn't exist already
if (toscaPolicy.getMetadata() == null) {
setMetadata(new LinkedHashMap<>());
getMetadata().put(METADATA_POLICY_VERSION_TAG, getKey().getVersion());
}
+ @Override
+ protected Object deserializePropertyValue(String propValue) {
+ try {
+ return STANDARD_CODER.decode(propValue, Object.class);
+ } catch (CoderException ce) {
+ String errorMessage = "error decoding property JSON value read from database: " + propValue;
+ throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage, ce);
+ }
+ }
+
+ @Override
+ protected String serializePropertyValue(Object propValue) {
+ try {
+ return STANDARD_CODER.encode(propValue);
+ } catch (CoderException ce) {
+ String errorMessage = "error encoding property JSON value for database: " + propValue;
+ throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage, ce);
+ }
+ }
+
@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();
public BeanValidationResult validate(String fieldName) {
BeanValidationResult result = super.validate(fieldName);
- result.addResult(validateKeyVersionNotNull("key", getKey()));
- result.addResult(validateKeyNotNull("type", type));
-
- validateMap(result, "properties", properties, Validated::validateEntryNotBlankNotNull);
- validateList(result, "targets", targets, Validated::validateNotNull);
+ validateKeyVersionNotNull(result, "key", getKey());
return result;
}
@Override
public int compareTo(final PfConcept otherConcept) {
- if (otherConcept == null) {
- return -1;
- }
-
if (this == otherConcept) {
return 0;
}
- if (getClass() != otherConcept.getClass()) {
- return getClass().getName().compareTo(otherConcept.getClass().getName());
- }
-
- final JpaToscaPolicy other = (JpaToscaPolicy) otherConcept;
- int result = super.compareTo(other);
- if (result != 0) {
- return result;
- }
-
- result = type.compareTo(other.type);
+ int result = super.compareTo(otherConcept);
if (result != 0) {
return result;
}
- result = PfUtils.compareMaps(properties, other.properties);
- if (result != 0) {
- return result;
- }
+ final JpaToscaPolicy other = (JpaToscaPolicy) otherConcept;
return PfUtils.compareCollections(targets, other.targets);
}