import javax.persistence.EmbeddedId;
import javax.persistence.Lob;
import javax.persistence.MappedSuperclass;
+import javax.ws.rs.core.Response;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NonNull;
import org.apache.commons.lang3.ObjectUtils;
import org.onap.policy.common.parameters.annotations.NotBlank;
import org.onap.policy.common.parameters.annotations.NotNull;
+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.validation.annotations.VerifyKey;
import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity;
public class JpaToscaEntityType<T extends ToscaEntity> extends PfConcept implements PfAuthorative<T> {
private static final long serialVersionUID = -1330661834220739393L;
+ private static final StandardCoder STANDARD_CODER = new StandardCoder();
+
@EmbeddedId
@VerifyKey
@NotNull
toscaEntity.setDescription(description);
}
- toscaEntity.setMetadata(PfUtils.mapMap(metadata, item -> item));
+ toscaEntity.setMetadata(PfUtils.mapMap(metadata, this::deserializeMetadataValue));
return toscaEntity;
}
description = toscaEntity.getDescription();
}
- metadata = PfUtils.mapMap(toscaEntity.getMetadata(), Object::toString);
+ metadata = PfUtils.mapMap(toscaEntity.getMetadata(), this::serializeMetadataValue);
}
@Override
return ObjectUtils.compare(description, other.description);
}
+
+ protected Object deserializeMetadataValue(String metadataValue) {
+ try {
+ return STANDARD_CODER.decode(metadataValue, Object.class);
+ } catch (CoderException ce) {
+ String errorMessage = "error decoding metadata JSON value read from database: " + metadataValue;
+ throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage, ce);
+ }
+ }
+
+ protected String serializeMetadataValue(Object metadataValue) {
+ try {
+ return STANDARD_CODER.encode(metadataValue);
+ } catch (CoderException ce) {
+ String errorMessage = "error encoding metadata JSON value for database: " + metadataValue;
+ throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage, ce);
+ }
+ }
}
@EqualsAndHashCode(callSuper = true)
public class JpaToscaPolicy extends JpaToscaWithTypeAndStringProperties<ToscaPolicy> {
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";
// 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