EntandoBundleComponentJobEntity.java

package org.entando.kubernetes.model.job;

import java.time.LocalDateTime;
import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.PrePersist;
import javax.persistence.Table;
import javax.persistence.Transient;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.entando.kubernetes.controller.digitalexchange.job.model.InstallAction;
import org.entando.kubernetes.model.bundle.ComponentType;
import org.entando.kubernetes.model.bundle.installable.Installable;
import org.hibernate.annotations.Type;

@Getter
@Setter
@Entity
@NoArgsConstructor
@Table(name = "entando_bundle_component_jobs")
public class EntandoBundleComponentJobEntity implements TrackableJob, HasInstallable {

    @Transient
    Installable installable;

    @Id
    @Column
    @Type(type = "uuid-char")
    private UUID id;
    @ManyToOne
    @JoinColumn(name = "parent_entando_bundle_job_id")
    private EntandoBundleJobEntity parentJob;
    @Column
    @Enumerated(EnumType.STRING)
    private ComponentType componentType;
    @Column
    private String componentId;
    @Column
    private Integer installErrorCode;
    @Column
    private String installErrorMessage;
    @Column
    private Integer rollbackErrorCode;
    @Column
    private String rollbackErrorMessage;
    @Column
    private String checksum;
    @Column
    @Enumerated(EnumType.STRING)
    private JobStatus status;
    @Column
    @Enumerated(EnumType.STRING)
    private InstallAction action;
    @Column
    private LocalDateTime startedAt;
    // metadata?
    @Column
    private LocalDateTime finishedAt;

    public static EntandoBundleComponentJobEntity getNewCopy(EntandoBundleComponentJobEntity o) {
        EntandoBundleComponentJobEntity newComponent = new EntandoBundleComponentJobEntity();
        newComponent.setParentJob(o.getParentJob());
        newComponent.setComponentType(o.getComponentType());
        newComponent.setComponentId(o.getComponentId());
        newComponent.setChecksum(o.getChecksum());
        newComponent.setStartedAt(o.getStartedAt());
        newComponent.setFinishedAt(o.getFinishedAt());
        newComponent.setStatus(o.getStatus());
        newComponent.setAction(o.getAction());
        newComponent.setInstallable(o.getInstallable());
        newComponent.setInstallErrorMessage(o.getInstallErrorMessage());
        newComponent.setInstallErrorCode(o.getInstallErrorCode());
        newComponent.setRollbackErrorMessage(o.getRollbackErrorMessage());
        newComponent.setRollbackErrorCode(o.getRollbackErrorCode());
        return newComponent;
    }

    @PrePersist
    public void generateId() {
        this.id = UUID.randomUUID();
    }

}