2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.vid.model;
23 import java.text.DateFormat;
24 import java.text.ParseException;
25 import java.text.SimpleDateFormat;
26 import java.util.Date;
27 import java.util.Locale;
28 import java.util.TimeZone;
29 import java.util.UUID;
30 import javax.persistence.Column;
31 import javax.persistence.Entity;
32 import javax.persistence.EnumType;
33 import javax.persistence.Enumerated;
34 import javax.persistence.GeneratedValue;
35 import javax.persistence.GenerationType;
36 import javax.persistence.Id;
37 import javax.persistence.Table;
38 import javax.persistence.Transient;
39 import org.apache.commons.lang3.StringUtils;
40 import org.apache.commons.lang3.builder.EqualsBuilder;
41 import org.apache.commons.lang3.builder.HashCodeBuilder;
42 import org.hibernate.annotations.DynamicUpdate;
43 import org.hibernate.annotations.SelectBeforeUpdate;
44 import org.hibernate.annotations.Type;
45 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
46 import org.onap.vid.job.Job.JobStatus;
49 The following 2 annotations let hibernate to update only fields that actually have been changed.
50 DynamicUpdate tell hibernate to update only dirty fields.
51 SelectBeforeUpdate is needed since during update the entity is detached (get and update are in different sessions)
56 @Table(name = "vid_job_audit_status")
57 public class JobAuditStatus extends VidBaseEntity {
59 public static final int MAX_ADDITIONAL_INFO_LENGTH = 2000;
60 static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(JobAuditStatus.class);
61 private static final String defaultFormat = "E, dd MMM yyyy HH:mm:ss z";
63 public JobAuditStatus(){}
65 private JobAuditStatus(UUID jobId, String instanceName, String instanceType, String jobStatus,
66 SourceStatus source, UUID requestId, String additionalInfo, Date date, int ordinal) {
68 this.instanceName = instanceName;
69 this.instanceType = instanceType;
70 this.jobStatus = jobStatus;
72 this.requestId = requestId;
73 setAdditionalInfo(additionalInfo);
74 this.ordinal = ordinal;
78 public JobAuditStatus(UUID jobId, String jobStatus, SourceStatus source){
79 this(jobId, null, null, jobStatus, source, null, null, null, 0);
82 public JobAuditStatus(UUID jobId, String jobStatus, SourceStatus source, UUID requestId, String additionalInfo) {
83 this(jobId, null, null, jobStatus, source, requestId, additionalInfo, null, 0);
86 public JobAuditStatus(String instanceName, String jobStatus, UUID requestId, String additionalInfo, String date, String instanceType) {
87 this(null, instanceName, instanceType, jobStatus, null, requestId, additionalInfo, null, 0);
88 this.created = dateStringToDate(date);
91 public static JobAuditStatus createForTest(UUID jobId, String jobStatus, SourceStatus source, Date date, int ordinal) {
92 return new JobAuditStatus(jobId, null, null, jobStatus, source, null, null, date, ordinal);
95 public static JobAuditStatus createForTest(UUID jobId, String jobStatus, SourceStatus source, UUID requestId, String additionalInfo, Date date) {
96 return new JobAuditStatus(jobId, null, null, jobStatus, source, requestId, additionalInfo, date, 0);
99 private Date dateStringToDate(String dateAsString){
100 if (StringUtils.isEmpty(dateAsString)) {
104 DateFormat format = new SimpleDateFormat(defaultFormat, Locale.US);
105 format.setTimeZone(TimeZone.getTimeZone("GMT"));
108 date = format.parse(dateAsString);
109 } catch (ParseException e) {
110 logger.error("There was an error to parse the string "+ dateAsString +" to date ", e.getMessage());
116 public boolean equals(Object o) {
117 if (this == o) return true;
119 if (o == null || getClass() != o.getClass()) return false;
121 JobAuditStatus that = (JobAuditStatus) o;
123 return new EqualsBuilder()
124 .append(jobId, that.jobId)
125 .append(jobStatus, that.jobStatus)
126 .append(source, that.source)
127 .append(requestId, that.requestId)
128 .append(additionalInfo, that.additionalInfo)
129 .append(modelType, that.modelType)
130 // ordinal is not part of equality (similarly to "created" field)
135 public int hashCode() {
136 return new HashCodeBuilder(17, 37)
141 .append(additionalInfo)
143 // ordinal is not part of equality (similarly to "created" field)
147 public enum SourceStatus {
152 public enum ResourceTypeFilter {
153 SERVICE("serviceInstanceId"),
154 VNF("vnfInstanceId"),
155 VFMODULE("vfModuleInstanceId"),
156 NETWORK("networkInstanceId"),
157 VNFGROUP("instanceGroupId");
159 private final String filterBy;
161 ResourceTypeFilter(String filterBy) {
162 this.filterBy = filterBy;
165 public String getFilterBy() {
170 public JobAuditStatus(UUID requestId, String instanceName,
171 String modelType, String instanceType, String startTime,
172 String finishTime, String jobStatus, String additionalInfo) {
173 this.requestId = requestId;
174 this.instanceName = instanceName;
175 this.modelType = modelType;
176 this.instanceType = instanceType;
178 this.startTime = startTime;
179 this.finishTime = finishTime;
181 this.jobStatus = jobStatus;
182 this.additionalInfo = additionalInfo;
183 this.created = dateStringToDate(finishTime);
185 private String modelType;
186 private String startTime;
187 private String finishTime;
190 public String getModelType() {
194 public void setModelType(String modelType) {
195 this.modelType = modelType;
199 public String getFinishTime() {
203 public void setFinishTime(String finishTime) {
204 this.finishTime = finishTime;
208 public String getStartTime() {
212 public void setStartTime(String startTime) {
213 this.startTime = startTime;
218 private String instanceName;
219 private String instanceType;
220 private String jobStatus;
221 private SourceStatus source;
222 private UUID requestId;
223 private String additionalInfo;
227 @GeneratedValue(strategy = GenerationType.IDENTITY)
229 @Column(name = "ID", columnDefinition = "INT(11)")
230 public Long getId() {
234 @Column(name = "JOB_ID", columnDefinition = "CHAR(36)")
235 @Type(type="org.hibernate.type.UUIDCharType")
236 public UUID getJobId() {
240 public void setJobId(UUID jobId) {
245 @Column(name = "JOB_STATUS")
246 public String getJobStatus() {
250 public void setJobStatus(String jobStatus) {
251 this.jobStatus = jobStatus;
255 @Enumerated(EnumType.STRING)
256 @Column(name = "SOURCE")
257 public SourceStatus getSource() {
261 public void setSource(SourceStatus source) {
262 this.source = source;
265 @Column(name = "REQUEST_ID", columnDefinition = "CHAR(36)")
266 @Type(type="org.hibernate.type.UUIDCharType")
267 public UUID getRequestId() {
271 public void setRequestId(UUID requestId) {
272 this.requestId = requestId;
275 @Column(name = "ADDITIONAL_INFO", columnDefinition = "VARCHAR(2000)")
276 public String getAdditionalInfo() {
277 return additionalInfo;
280 public void setAdditionalInfo(String additionalInfo) {
281 this.additionalInfo = StringUtils.substring(additionalInfo, 0, MAX_ADDITIONAL_INFO_LENGTH);
284 @Column(name = "ORDINAL", columnDefinition = "INT")
285 public int getOrdinal() {
286 // Ordinal allows sorting audit statuses by
287 // insertion order, regardless of "created"
292 public void setOrdinal(int ordinal) {
293 this.ordinal = ordinal;
297 public String getInstanceName() {
301 public void setInstanceName(String instanceName) {
302 this.instanceName = instanceName;
306 public String getInstanceType() {
310 public void setInstanceType(String instanceType) {
311 this.instanceType = instanceType;
315 public Boolean isFinal(){
317 if (getSource() == SourceStatus.VID) {
318 return JobStatus.valueOf(getJobStatus()).isFinal();
321 catch (IllegalArgumentException e){
322 logger.error("JobStatus: " + getJobStatus() + " from vid isn't a value of JobStatus enum" + e.getMessage());
329 public Date getCreatedDate() {