/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.jbpm.services.task.audit.impl.model;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.Date;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.Version;
import org.kie.internal.task.api.model.TaskEvent;
/**
*
*/
@Entity
@Table(name = "TaskEvent")
@SequenceGenerator(name = "taskEventIdSeq", sequenceName = "TASK_EVENT_ID_SEQ")
public class TaskEventImpl implements TaskEvent, Externalizable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "taskEventIdSeq")
@Column(name = "id")
private Long id;
@Version
@Column(name = "OPTLOCK")
private Integer version;
private Long taskId;
private Long workItemId;
@Enumerated(EnumType.STRING)
private TaskEventType type;
private Long processInstanceId;
private String userId;
private String message;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date logTime;
public TaskEventImpl() {
}
public TaskEventImpl(long taskId, TaskEventType type, String userId) {
this.taskId = taskId;
this.type = type;
this.userId = userId;
this.logTime = new Date();
}
public TaskEventImpl(Long taskId, TaskEventType type, String userId, Date logTime) {
this.taskId = taskId;
this.type = type;
this.userId = userId;
this.logTime = logTime;
}
public TaskEventImpl(Long taskId, TaskEventType type, Long processInstanceId, Long workItemId, String userId, Date logTime) {
this.taskId = taskId;
this.type = type;
this.processInstanceId = processInstanceId;
this.workItemId = workItemId;
this.userId = userId;
this.logTime = logTime;
}
public TaskEventImpl(Long taskId, TaskEventType type, Long processInstanceId, Long workItemId, String userId) {
this(taskId, type, processInstanceId, workItemId, userId, new Date());
}
public TaskEventImpl(Long taskId, TaskEventType type, Long processInstanceId, Long workItemId, String userId, String message) {
this(taskId, type, processInstanceId, workItemId, userId, new Date());
this.message = message;
}
@Override
public long getId() {
return id;
}
@Override
public long getTaskId() {
return taskId;
}
@Override
public TaskEventType getType() {
return type;
}
@Override
public String getUserId() {
return userId;
}
@Override
public Date getLogTime() {
return logTime;
}
@Override
public Long getProcessInstanceId() {
return processInstanceId;
}
public Long getWorkItemId() {
return workItemId;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
id = in.readLong();
processInstanceId = in.readLong();
taskId = in.readLong();
type = TaskEventType.valueOf(in.readUTF());
message = in.readUTF();
userId = in.readUTF();
workItemId = in.readLong();
if (in.readBoolean()) {
logTime = new Date(in.readLong());
}
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeLong( id );
out.writeLong( processInstanceId );
out.writeLong( taskId );
if (type != null) {
out.writeUTF(type.name());
} else {
out.writeUTF("");
}
if (message != null) {
out.writeUTF(message);
} else {
out.writeUTF("");
}
if (userId != null) {
out.writeUTF(userId);
} else {
out.writeUTF("");
}
out.writeLong( workItemId );
if (logTime != null) {
out.writeBoolean(true);
out.writeLong(logTime.getTime());
} else {
out.writeBoolean(false);
}
}
@Override
public int hashCode() {
int hash = 3;
hash = 97 * hash + (this.id != null ? this.id.hashCode() : 0);
hash = 97 * hash + (this.version != null ? this.version.hashCode() : 0);
hash = 97 * hash + (this.taskId != null ? this.taskId.hashCode() : 0);
hash = 97 * hash + (this.workItemId != null ? this.workItemId.hashCode() : 0);
hash = 97 * hash + (this.type != null ? this.type.hashCode() : 0);
hash = 97 * hash + (this.message != null ? this.message.hashCode() : 0);
hash = 97 * hash + (this.processInstanceId != null ? this.processInstanceId.hashCode() : 0);
hash = 97 * hash + (this.userId != null ? this.userId.hashCode() : 0);
hash = 97 * hash + (this.logTime != null ? this.logTime.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final TaskEventImpl other = (TaskEventImpl) obj;
if (!Objects.equals(this.id, other.id) && (this.id == null || !this.id.equals(other.id))) {
return false;
}
if (!Objects.equals(this.version, other.version) && (this.version == null || !this.version.equals(other.version))) {
return false;
}
if (!Objects.equals(this.taskId, other.taskId) && (this.taskId == null || !this.taskId.equals(other.taskId))) {
return false;
}
if (!Objects.equals(this.workItemId, other.workItemId) && (this.workItemId == null || !this.workItemId.equals(other.workItemId))) {
return false;
}
if (this.type != other.type) {
return false;
}
if (!this.message.equals(other.message) ) {
return false;
}
if (!Objects.equals(this.processInstanceId, other.processInstanceId) && (this.processInstanceId == null || !this.processInstanceId.equals(other.processInstanceId))) {
return false;
}
if ((this.userId == null) ? (other.userId != null) : !this.userId.equals(other.userId)) {
return false;
}
if (this.logTime != other.logTime && (this.logTime == null || !this.logTime.equals(other.logTime))) {
return false;
}
return true;
}
}