package pl.net.bluesoft.rnd.processtool.model;
import static pl.net.bluesoft.util.lang.FormatUtil.nvl;
import java.util.Calendar;
import java.util.Comparator;
import javax.persistence.*;
import javax.persistence.Entity;
import javax.persistence.Parameter;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlTransient;
import org.hibernate.annotations.*;
import pl.net.bluesoft.rnd.processtool.model.config.ProcessStateConfiguration;
/**
* @author tlipski@bluesoft.net.pl
*/
@Entity
@Table(name = "pt_process_instance_log")
public class ProcessInstanceLog extends AbstractPersistentEntity {
public enum LogType {
START, CLAIM, ACTION, INFO
}
public static final String LOG_TYPE_START_PROCESS = "START_PROCESS";
public static final String LOG_TYPE_CLAIM_PROCESS = "CLAIM_PROCESS";
public static final String LOG_TYPE_PERFORM_ACTION = "PERFORM_ACTION";
public static final String LOG_TYPE_INFO = "INFO";
@Id
@GeneratedValue(generator = "idGenerator")
@GenericGenerator(
name = "idGenerator",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@org.hibernate.annotations.Parameter(name = "initial_value", value = "" + 1),
@org.hibernate.annotations.Parameter(name = "value_column", value = "_DB_ID"),
@org.hibernate.annotations.Parameter(name = "sequence_name", value = "DB_SEQ_ID_PROC_INST_LOG")
}
)
@Column(name = "id")
protected Long id;
// @Field
// @CalendarBridge(resolution = Resolution.MINUTE)
private Calendar entryDate;
private String eventI18NKey;
@Lob
// @Type(type = "org.hibernate.type.MaterializedClobType")
@Type(type = "org.hibernate.type.StringClobType")
@Column(length = Integer.MAX_VALUE)
private String additionalInfo;
private String logValue;
private String logType;
private String executionId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="process_state_id")
private ProcessStateConfiguration state;
// @XmlTransient
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="own_process_instance_id")
private ProcessInstance ownProcessInstance;
@ManyToOne
@JoinColumn(name="process_instance_id")
private ProcessInstance processInstance;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="user_id")
private UserData user;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="user_substitute_id")
private UserData userSubstitute;
public ProcessInstanceLog() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Calendar getEntryDate() {
return entryDate;
}
public void setEntryDate(Calendar entryDate) {
this.entryDate = entryDate;
}
public String getEventI18NKey() {
return eventI18NKey;
}
public void setEventI18NKey(String eventI18NKey) {
this.eventI18NKey = eventI18NKey;
}
public String getAdditionalInfo() {
return additionalInfo;
}
public void setAdditionalInfo(String additionalInfo) {
this.additionalInfo = additionalInfo;
}
public ProcessStateConfiguration getState() {
return state;
}
public void setState(ProcessStateConfiguration state) {
this.state = state;
}
@XmlTransient
public ProcessInstance getProcessInstance() {
return processInstance;
}
// @XmlTransient
public void setProcessInstance(ProcessInstance processInstance) {
this.processInstance = processInstance;
}
public void setUser(UserData user) {
this.user = user;
}
public UserData getUser() {
return user;
}
public UserData getUserSubstitute() {
return userSubstitute;
}
public void setUserSubstitute(UserData userSubstitute) {
this.userSubstitute = userSubstitute;
}
public String getLogValue() {
return logValue;
}
public void setLogValue(String logValue) {
this.logValue = logValue;
}
public String getLogType() {
return logType;
}
public void setLogType(String logType) {
this.logType = logType;
}
public static final Comparator<ProcessInstanceLog> DEFAULT_COMPARATOR = new Comparator<ProcessInstanceLog>() {
@Override
public int compare(ProcessInstanceLog o1, ProcessInstanceLog o2) {
return nvl(o2.getEntryDate(), Calendar.getInstance()).compareTo(nvl(o1.getEntryDate(), Calendar.getInstance()));
}
};
public String getExecutionId()
{
return executionId;
}
public void setExecutionId(String executionId)
{
this.executionId = executionId;
}
@XmlTransient
public ProcessInstance getOwnProcessInstance() {
if(ownProcessInstance == null)
return processInstance;
return ownProcessInstance;
}
public void setOwnProcessInstance(ProcessInstance ownProcessInstance) {
this.ownProcessInstance = ownProcessInstance;
}
}