Merge from ECOMP's repository
[vid.git] / vid-app-common / src / main / java / org / onap / vid / model / JobAuditStatus.java
index 6142679..3da41a4 100644 (file)
@@ -1,20 +1,36 @@
 package org.onap.vid.model;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.EqualsBuilder;
 import org.apache.commons.lang3.builder.HashCodeBuilder;
+import org.hibernate.annotations.DynamicUpdate;
+import org.hibernate.annotations.SelectBeforeUpdate;
 import org.hibernate.annotations.Type;
-import org.onap.vid.job.Job.JobStatus;
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.vid.job.Job.JobStatus;
 
 import javax.persistence.*;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.TimeZone;
 import java.util.UUID;
 
+/*
+ The following 2 annotations let hibernate to update only fields that actually have been changed.
+ DynamicUpdate tell hibernate to update only dirty fields.
+ SelectBeforeUpdate is needed since during update the entity is detached (get and update are in different sessions)
+ */
+@DynamicUpdate()
+@SelectBeforeUpdate()
 @Entity
 @Table(name = "vid_job_audit_status")
 public class JobAuditStatus extends VidBaseEntity {
 
+    public static final int MAX_ADDITIONAL_INFO_LENGTH = 2000;
     static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(JobAuditStatus.class);
+    private static final String defaultFormat = "E, dd MMM yyyy HH:mm:ss z";
 
     public JobAuditStatus(){}
 
@@ -32,7 +48,7 @@ public class JobAuditStatus extends VidBaseEntity {
     public JobAuditStatus(UUID jobId, String jobStatus, SourceStatus source, UUID requestId, String additionalInfo) {
         this(jobId, jobStatus, source);
         this.requestId = requestId;
-        this.additionalInfo = additionalInfo;
+        setAdditionalInfo(additionalInfo);
     }
 
     public JobAuditStatus(UUID jobId, String jobStatus, SourceStatus source, UUID requestId, String additionalInfo, Date date){
@@ -40,6 +56,37 @@ public class JobAuditStatus extends VidBaseEntity {
         this.created = date;
     }
 
+    public JobAuditStatus(String instanceName, String jobStatus, UUID requestId, String additionalInfo) {
+        this.instanceName = instanceName;
+        this.jobStatus = jobStatus;
+        this.requestId = requestId;
+        this.additionalInfo = additionalInfo;
+
+    }
+
+    public JobAuditStatus(String instanceName, String jobStatus, UUID requestId, String additionalInfo, String date, String instanceType) {
+       this(instanceName, jobStatus, requestId, additionalInfo);
+       this.created = dateStringToDate(date);
+       this.instanceType = instanceType;
+    }
+
+
+    private Date dateStringToDate(String dateAsString){
+        if (StringUtils.isEmpty(dateAsString)) {
+            return null;
+        }
+
+        DateFormat format = new SimpleDateFormat(defaultFormat);
+        format.setTimeZone(TimeZone.getTimeZone("GMT"));
+        Date date = null ;
+        try {
+            date = format.parse(dateAsString);
+        } catch (ParseException e) {
+            logger.error("There was an error to parse the string "+ dateAsString +" to date ", e.getMessage());
+        }
+        return date;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
@@ -74,6 +121,8 @@ public class JobAuditStatus extends VidBaseEntity {
     }
 
     private UUID jobId;
+    private String instanceName;
+    private String instanceType;
     private String jobStatus;
     private SourceStatus source;
     private UUID requestId;
@@ -128,13 +177,31 @@ public class JobAuditStatus extends VidBaseEntity {
         this.requestId = requestId;
     }
 
-    @Column(name = "ADDITIONAL_INFO")
+    @Column(name = "ADDITIONAL_INFO", columnDefinition = "VARCHAR(2000)")
     public String getAdditionalInfo() {
         return additionalInfo;
     }
 
     public void setAdditionalInfo(String additionalInfo) {
-        this.additionalInfo = additionalInfo;
+        this.additionalInfo = StringUtils.substring(additionalInfo, 0, MAX_ADDITIONAL_INFO_LENGTH);
+    }
+
+    @Transient
+    public String getInstanceName() {
+        return instanceName;
+    }
+
+    public void setInstanceName(String instanceName) {
+        this.instanceName = instanceName;
+    }
+
+    @Transient
+    public String getInstanceType() {
+        return instanceType;
+    }
+
+    public void setInstanceType(String instanceType) {
+        this.instanceType = instanceType;
     }
 
     @Transient