From 6ad41e3ccd398a2721f41ad61c80b7bb03f7d127 Mon Sep 17 00:00:00 2001 From: Ittay Stern Date: Mon, 31 Dec 2018 17:21:27 +0200 Subject: Merge from ECOMP's repository Main Features -------------- - Async-Instantiation jobs mechanism major update; still WIP (package `org.onap.vid.job`) - New features in View/Edit: Activate fabric configuration; show related networks; soft delete - Support AAI service-tree traversal (`AAIServiceTree`) - In-memory cache for SDC models and certain A&AI queries (`CacheProviderWithLoadingCache`) - Upgrade TOSCA Parser and add parsing options; fix malformed TOSCA models - Resolve Cloud-Owner values for MSO - Pass X-ONAP headers to MSO Infrastructure -------------- - Remove codehaus' jackson mapper; use soley fasterxml 2.9.7 - Surefire invokes both TestNG and JUnit tests - Support Kotlin source files - AaiController2 which handles errors in a "Spring manner" - Inline generated-sources and remove jsonschema2pojo Quality -------- - Cumulative bug fixes (A&AI API, UI timeouts, and many more) - Many Sonar issues cleaned-up - Some unused classes removed - Minor changes in vid-automation project, allowing some API verification to run Hard Merges ------------ - HTTP Clients (MSO, A&AI, WebConfig, OutgoingRequestHeadersTest) - Moved `package org.onap.vid.controllers` to `controller`, without plural -- just to keep semantic sync with ECOMP. Reference commit in ECOMP: 3d1141625 Issue-ID: VID-378 Change-Id: I9c8d1e74caa41815891d441fc0760bb5f29c5788 Signed-off-by: Ittay Stern --- .../java/org/onap/vid/model/JobAuditStatus.java | 75 ++++++++++++++++++++-- 1 file changed, 71 insertions(+), 4 deletions(-) (limited to 'vid-app-common/src/main/java/org/onap/vid/model/JobAuditStatus.java') diff --git a/vid-app-common/src/main/java/org/onap/vid/model/JobAuditStatus.java b/vid-app-common/src/main/java/org/onap/vid/model/JobAuditStatus.java index 614267990..3da41a419 100644 --- a/vid-app-common/src/main/java/org/onap/vid/model/JobAuditStatus.java +++ b/vid-app-common/src/main/java/org/onap/vid/model/JobAuditStatus.java @@ -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 -- cgit 1.2.3-korg