Java 17 Upgrade
[policy/models.git] / models-tosca / src / main / java / org / onap / policy / models / tosca / simple / concepts / JpaToscaEntityType.java
index 2416bab..e23ac42 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2019-2020 Nordix Foundation.
+ *  Copyright (C) 2019-2020, 2022-2023 Nordix Foundation.
  *  Modifications Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
 
 package org.onap.policy.models.tosca.simple.concepts;
 
+import jakarta.persistence.AttributeOverride;
+import jakarta.persistence.Column;
+import jakarta.persistence.ElementCollection;
+import jakarta.persistence.EmbeddedId;
+import jakarta.persistence.Lob;
+import jakarta.persistence.MappedSuperclass;
+import jakarta.ws.rs.core.Response;
+import java.io.Serial;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.TreeMap;
-import javax.persistence.AttributeOverride;
-import javax.persistence.Column;
-import javax.persistence.ElementCollection;
-import javax.persistence.EmbeddedId;
-import javax.persistence.MappedSuperclass;
 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;
@@ -51,8 +57,11 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity;
 @Data
 @EqualsAndHashCode(callSuper = false)
 public class JpaToscaEntityType<T extends ToscaEntity> extends PfConcept implements PfAuthorative<T> {
+    @Serial
     private static final long serialVersionUID = -1330661834220739393L;
 
+    private static final StandardCoder STANDARD_CODER = new StandardCoder();
+
     @EmbeddedId
     @VerifyKey
     @NotNull
@@ -66,6 +75,7 @@ public class JpaToscaEntityType<T extends ToscaEntity> extends PfConcept impleme
     private PfConceptKey derivedFrom;
 
     @ElementCollection
+    @Lob
     private Map<@NotNull @NotBlank String, @NotNull @NotBlank String> metadata;
 
     @Column
@@ -126,7 +136,7 @@ public class JpaToscaEntityType<T extends ToscaEntity> extends PfConcept impleme
             toscaEntity.setDescription(description);
         }
 
-        toscaEntity.setMetadata(PfUtils.mapMap(metadata, item -> item));
+        toscaEntity.setMetadata(PfUtils.mapMap(metadata, this::deserializeMetadataValue));
 
         return toscaEntity;
     }
@@ -156,7 +166,7 @@ public class JpaToscaEntityType<T extends ToscaEntity> extends PfConcept impleme
             description = toscaEntity.getDescription();
         }
 
-        metadata = PfUtils.mapMap(toscaEntity.getMetadata(), item -> item);
+        metadata = PfUtils.mapMap(toscaEntity.getMetadata(), this::serializeMetadataValue);
     }
 
     @Override
@@ -217,4 +227,22 @@ public class JpaToscaEntityType<T extends ToscaEntity> extends PfConcept impleme
 
         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);
+        }
+    }
 }