Process.java

package com.tradecloud.domain.async;

import com.tradecloud.common.base.PersistenceBase;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Entity
public class Process extends PersistenceBase {

    @Enumerated(EnumType.STRING)
    private ProcessType processType;

    @Enumerated(EnumType.STRING)
    @NotNull
    private EntityType entityType;

    @Enumerated(EnumType.STRING)
    @NotNull
    private ProcessState processState = ProcessState.PENDING;

    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name = "process_fields", joinColumns = {@JoinColumn(name = "process_id", unique = false)})
    @org.hibernate.annotations.ForeignKey(name = "fk_process")
    @Fetch(value = FetchMode.SUBSELECT)
    private Map<String, String> additionalFields = new HashMap<>();

    private Long entityId;
    private String reference;
    private String userName;
    private String error;
    private EntityType relatedEntityType;
    private Long relatedEntityId;
    private String relatedEntityReference;

    private Date processedDate;
    private Date processingStartedDate;

    public Process() {
    }

    public Process(ProcessType processType, EntityType entityType, Long entityId, String reference, String userName) {
        this.processType = processType;
        this.entityType = entityType;
        this.entityId = entityId;
        this.reference = reference;
        this.userName = userName;
    }

    public ProcessType getProcessType() {
        return processType;
    }

    public void setProcessType(ProcessType processType) {
        this.processType = processType;
    }

    public EntityType getEntityType() {
        return entityType;
    }

    public void setEntityType(EntityType entityType) {
        this.entityType = entityType;
    }

    public Long getEntityId() {
        return entityId;
    }

    public void setEntityId(Long entityId) {
        this.entityId = entityId;
    }

    public ProcessState getProcessState() {
        return processState;
    }

    public void setProcessState(ProcessState processState) {
        this.processState = processState;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getReference() {
        return reference;
    }

    public void setReference(String reference) {
        this.reference = reference;
    }

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }

    public EntityType getRelatedEntityType() {
        return relatedEntityType;
    }

    public void setRelatedEntityType(EntityType relatedEntity) {
        this.relatedEntityType = relatedEntity;
    }

    public Long getRelatedEntityId() {
        return relatedEntityId;
    }

    public void setRelatedEntityId(Long relatedEntityId) {
        this.relatedEntityId = relatedEntityId;
    }

    public String getRelatedEntityReference() {
        return relatedEntityReference;
    }

    public void setRelatedEntityReference(String relatedEntityReference) {
        this.relatedEntityReference = relatedEntityReference;
    }

    public Date getProcessedDate() {
        return processedDate;
    }

    public void setProcessedDate(Date processedDate) {
        this.processedDate = processedDate;
    }

    public Date getProcessingStartedDate() {
        return processingStartedDate;
    }

    public void setProcessingStartedDate(Date processingStartedDate) {
        this.processingStartedDate = processingStartedDate;
    }

    @Override
    public String toString() {
        return "Process{" +
                "processType=" + processType +
                ", entityType=" + entityType +
                ", entityId=" + entityId +
                ", reference='" + reference + '\'' +
                '}';
    }

    public Map<String, String> getAdditionalFields() {
        return additionalFields;
    }

    public void setAdditionalFields(Map<String, String> additionalFields) {
        this.additionalFields = additionalFields;
    }
}