From b909d1e85f13431436808e6880a1e857addb449c Mon Sep 17 00:00:00 2001
From: Ittay Stern <ittay.stern@att.com>
Date: Mon, 23 Dec 2019 09:44:11 +0200
Subject: Add request-summary field to ServiceInfo

Issue-ID: VID-724

Change-Id: Ifdf39a0c21e7a96065f88aa2aa4a5560e0559564
Signed-off-by: Ittay Stern <ittay.stern@att.com>
---
 .../main/java/org/onap/vid/model/ServiceInfo.java  | 32 +++++++++++---
 .../AsyncInstantiationBusinessLogicImpl.java       |  3 +-
 .../src/main/java/org/onap/vid/utils/DaoUtils.java | 51 ++++++++++++++++++++--
 3 files changed, 74 insertions(+), 12 deletions(-)

(limited to 'vid-app-common/src/main/java')

diff --git a/vid-app-common/src/main/java/org/onap/vid/model/ServiceInfo.java b/vid-app-common/src/main/java/org/onap/vid/model/ServiceInfo.java
index 85c83eb98..677d67c8e 100644
--- a/vid-app-common/src/main/java/org/onap/vid/model/ServiceInfo.java
+++ b/vid-app-common/src/main/java/org/onap/vid/model/ServiceInfo.java
@@ -24,10 +24,12 @@ package org.onap.vid.model;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 import java.util.UUID;
 import javax.persistence.Column;
+import javax.persistence.Convert;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
@@ -41,6 +43,8 @@ import org.hibernate.annotations.SelectBeforeUpdate;
 import org.hibernate.annotations.Type;
 import org.onap.portalsdk.core.domain.support.DomainVo;
 import org.onap.vid.job.Job;
+import org.onap.vid.job.Job.JobStatus;
+import org.onap.vid.utils.DaoUtils.StringToLongMapAttributeConverter;
 
 /*
  The following 2 annotations let hibernate to update only fields that actually have been changed.
@@ -91,17 +95,19 @@ public class ServiceInfo extends DomainVo {
     private String serviceModelVersion;
     private Date createdBulkDate;
     private ServiceAction action;
+    private Map<String, Long> requestSummary;
 
     public ServiceInfo(){
 
     }
 
-    public ServiceInfo(String userId, Boolean aLaCarte, Job.JobStatus jobStatus, boolean pause, UUID jobId, UUID templateId,
-                       String owningEntityId, String owningEntityName, String project, String aicZoneId, String aicZoneName,
-                       String tenantId, String tenantName, String regionId, String regionName, String serviceType,
-                       String subscriberName, String subscriberId, String serviceInstanceId, String serviceInstanceName,
-                       String serviceModelId, String serviceModelName, String serviceModelVersion, Date createdBulkDate,
-                       ServiceAction action, boolean retryEnabled) {
+    public ServiceInfo(String userId, Boolean aLaCarte, JobStatus jobStatus, boolean pause, UUID jobId,
+        UUID templateId,
+        String owningEntityId, String owningEntityName, String project, String aicZoneId, String aicZoneName,
+        String tenantId, String tenantName, String regionId, String regionName, String serviceType,
+        String subscriberName, String subscriberId, String serviceInstanceId, String serviceInstanceName,
+        String serviceModelId, String serviceModelName, String serviceModelVersion, Date createdBulkDate,
+        ServiceAction action, boolean retryEnabled, Map<String, Long> requestSummary) {
         this.userId = userId;
         this.aLaCarte = aLaCarte;
         this.jobStatus = jobStatus;
@@ -128,6 +134,7 @@ public class ServiceInfo extends DomainVo {
         this.createdBulkDate = createdBulkDate;
         this.action = action;
         this.retryEnabled = retryEnabled;
+        this.requestSummary = requestSummary;
     }
 
     @Column(name = "JOB_ID", columnDefinition = "CHAR(36)")
@@ -287,6 +294,12 @@ public class ServiceInfo extends DomainVo {
         return action;
     }
 
+    @Column(name="REQUEST_SUMMARY")
+    @Convert(converter = StringToLongMapAttributeConverter.class)
+    public Map<String, Long> getRequestSummary() {
+        return requestSummary;
+    }
+
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Override
@@ -454,6 +467,10 @@ public class ServiceInfo extends DomainVo {
 
     public void setAction(ServiceAction action) { this.action = action; }
 
+    public void setRequestSummary(Map<String, Long> requestSummary) {
+        this.requestSummary = requestSummary;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
@@ -488,6 +505,7 @@ public class ServiceInfo extends DomainVo {
                 Objects.equals(getServiceModelName(), that.getServiceModelName()) &&
                 Objects.equals(getServiceModelVersion(), that.getServiceModelVersion()) &&
                 Objects.equals(getCreatedBulkDate(), that.getCreatedBulkDate()) &&
+                Objects.equals(getRequestSummary(), that.getRequestSummary()) &&
                 getAction() == that.getAction();
     }
 
@@ -497,6 +515,6 @@ public class ServiceInfo extends DomainVo {
                 getStatusModifiedDate(), isHidden(), isPause(), isRetryEnabled(), getDeletedAt(), getOwningEntityId(), getOwningEntityName(),
                 getProject(), getAicZoneId(), getAicZoneName(), getTenantId(), getTenantName(), getRegionId(), getRegionName(), getServiceType(),
                 getSubscriberName(), getSubscriberId(), getServiceInstanceId(), getServiceInstanceName(), getServiceModelId(), getServiceModelName(),
-                getServiceModelVersion(), getCreatedBulkDate(), getAction());
+                getServiceModelVersion(), getCreatedBulkDate(), getAction(), getRequestSummary());
     }
 }
diff --git a/vid-app-common/src/main/java/org/onap/vid/services/AsyncInstantiationBusinessLogicImpl.java b/vid-app-common/src/main/java/org/onap/vid/services/AsyncInstantiationBusinessLogicImpl.java
index 787ad1262..6729bdac8 100644
--- a/vid-app-common/src/main/java/org/onap/vid/services/AsyncInstantiationBusinessLogicImpl.java
+++ b/vid-app-common/src/main/java/org/onap/vid/services/AsyncInstantiationBusinessLogicImpl.java
@@ -266,7 +266,8 @@ public class AsyncInstantiationBusinessLogicImpl implements
                 serviceInstantiation.getModelInfo().getModelVersion(),
                 createdBulkDate,
                 serviceAction,
-                false);
+                false,
+                null);
     }
 
     @Override
diff --git a/vid-app-common/src/main/java/org/onap/vid/utils/DaoUtils.java b/vid-app-common/src/main/java/org/onap/vid/utils/DaoUtils.java
index 7d3b926ea..7fb03aea8 100644
--- a/vid-app-common/src/main/java/org/onap/vid/utils/DaoUtils.java
+++ b/vid-app-common/src/main/java/org/onap/vid/utils/DaoUtils.java
@@ -20,14 +20,21 @@
 
 package org.onap.vid.utils;
 
+import static java.util.Objects.isNull;
+import static org.onap.vid.utils.KotlinUtilsKt.JACKSON_OBJECT_MAPPER;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Function;
+import javax.persistence.AttributeConverter;
+import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
 import org.hibernate.Transaction;
-import org.onap.vid.exceptions.GenericUncheckedException;
 import org.onap.portalsdk.core.domain.FusionObject;
-
-import java.util.HashMap;
-import java.util.function.Function;
+import org.onap.vid.exceptions.GenericUncheckedException;
 
 public class DaoUtils {
 
@@ -70,4 +77,40 @@ public class DaoUtils {
         props.put(FusionObject.Parameters.PARAM_USERID, 0);
         return props;
     }
+
+    public static class StringToLongMapAttributeConverter extends JsonAttributeConverter<Map<String, Long>> {
+
+        private final TypeReference<Map<String, Long>> typeReference =
+            new TypeReference<Map<String, Long>>() {};
+
+        @Override
+        public TypeReference<Map<String, Long>> getTypeReference() {
+            return typeReference;
+        }
+    }
+
+    private static abstract class JsonAttributeConverter<T> implements AttributeConverter<T, String> {
+
+        abstract public TypeReference<T> getTypeReference();
+
+        @Override
+        public String convertToDatabaseColumn(T attribute) {
+            try {
+                return isNull(attribute) ? null
+                    : JACKSON_OBJECT_MAPPER.writeValueAsString(attribute);
+            } catch (JsonProcessingException e) {
+                return ExceptionUtils.rethrow(e);
+            }
+        }
+
+        @Override
+        public T convertToEntityAttribute(String dbData) {
+            try {
+                return isNull(dbData) ? null
+                    : JACKSON_OBJECT_MAPPER.readValue(dbData, getTypeReference());
+            } catch (JsonProcessingException e) {
+                return ExceptionUtils.rethrow(e);
+            }
+        }
+    }
 }
-- 
cgit 1.2.3-korg