AuditEntry.java

package com.tradecloud.domain.autoemail;

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.event.AuditEntryEvent;
import com.tradecloud.domain.event.Event;
import com.tradecloud.domain.helper.ReportFormat;
import com.tradecloud.domain.party.Employee;
import com.tradecloud.domain.state.Stateful;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.ForeignKey;

import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.ArrayList;
import java.util.List;

@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Group")
@Entity
@Table(name = "autoemailauditentry")
public class AuditEntry extends PersistenceBase implements Stateful<AuditEntryState, AuditEntryEvent> {

    private static final long serialVersionUID = 1L;

    private String summary;

    private String description;

    @Enumerated(value = EnumType.STRING)
    private EmailEventType emailTaskEventType;

    private Long sourceEntityID;

    @Enumerated(value = EnumType.STRING)
    private Report report;

    @Enumerated(value = EnumType.STRING)
    private ReportFormat reportFormat;

    private boolean perBuyer;

    @ManyToOne
    @ForeignKey(name = "fk_buyer")
    private Employee buyer;

    private boolean includeEventTriggeringUser;

    private String emailFrom;

    private String emailTo;

    private String emailSubject;

    private String emailBody;

    @ManyToOne(fetch = FetchType.EAGER)
    private Task task;

    @Enumerated(value = EnumType.STRING)
    private AuditEntryState state = AuditEntryState.PROCESSING;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @Fetch(value = FetchMode.SUBSELECT)
    @OrderBy("createDateTime")
    private List<AuditEntryEvent> events = new ArrayList<AuditEntryEvent>();

    public AuditEntry(Task task, Employee buyer) {
        this.task = task;
        this.emailTaskEventType = task.getEmailTaskEventType();
        this.report = task.getReport();
        this.reportFormat = task.getReportFormat();
        this.perBuyer = task.isPerBuyer();
        this.includeEventTriggeringUser = task.isIncludeEventTriggeringUser();
        this.buyer = buyer;
    }

    protected AuditEntry() {
    }

    public String getSummary() {
        return summary;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public EmailEventType getEmailTaskEventType() {
        return emailTaskEventType;
    }

    public EmailEventType getEventType() {
        return emailTaskEventType;
    }

    public void setEmailTaskEventType(EmailEventType emailTaskEventType) {
        this.emailTaskEventType = emailTaskEventType;
    }

    public Report getReport() {
        return report;
    }

    public void setReport(Report report) {
        this.report = report;
    }

    public ReportFormat getReportFormat() {
        return reportFormat;
    }

    public void setReportFormat(ReportFormat reportFormat) {
        this.reportFormat = reportFormat;
    }

    public boolean isPerBuyer() {
        return perBuyer;
    }

    public void setPerBuyer(boolean perBuyer) {
        this.perBuyer = perBuyer;
    }

    public String getEmailFrom() {
        return emailFrom;
    }

    public void setEmailFrom(String emailFrom) {
        this.emailFrom = emailFrom;
    }

    public String getEmailTo() {
        return emailTo;
    }

    public void setEmailTo(String emailTo) {
        this.emailTo = emailTo;
    }

    public String getEmailSubject() {
        return emailSubject;
    }

    public void setEmailSubject(String emailSubject) {
        this.emailSubject = emailSubject;
    }

    public String getEmailBody() {
        return emailBody;
    }

    public void setEmailBody(String emailBody) {
        this.emailBody = emailBody;
    }

    public Task getTask() {
        return task;
    }

    public void setTask(Task task) {
        this.task = task;
    }

    public boolean isIncludeEventTriggeringUser() {
        return includeEventTriggeringUser;
    }

    public void setIncludeEventTriggeringUser(boolean includeEventTriggeringUser) {
        this.includeEventTriggeringUser = includeEventTriggeringUser;
    }

    public AuditEntryState getState() {
        return state;
    }

    @Override
    public void setState(AuditEntryState state) {
        this.state = state;
    }

    @Override
    public AuditEntryEvent getLastEvent() {
        return Event.getLastEvent(events);
    }

    @Override
    public List<AuditEntryEvent> getEvents() {
        return events;
    }

    @Override
    public boolean inNonEditableState() {
        return false;
    }

    public Long getSourceEntityID() {
        return sourceEntityID;
    }

    public void setSourceEntityID(Long sourceEntityID) {
        this.sourceEntityID = sourceEntityID;
    }

    public Employee getBuyer() {
        return buyer;
    }

    public void setBuyer(Employee buyer) {
        this.buyer = buyer;
    }
}