CMSgov/dpc-app

View on GitHub
dpc-queue/src/main/java/gov/cms/dpc/queue/models/JobQueueBatchFile.java

Summary

Maintainability
A
0 mins
Test Coverage
C
75%
package gov.cms.dpc.queue.models;

import gov.cms.dpc.fhir.DPCResourceType;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import java.io.Serializable;
import java.util.Objects;
import java.util.UUID;

/**
 * A JobQueueBatchFile represents the output of a job. There is a one-to-one relationship with export files.
 * The object is immutable.
 */
@Entity(name = "job_queue_batch_file")
public class JobQueueBatchFile implements Serializable {
    public static final long serialVersionUID = 42L;

    @Embeddable
    public static class JobQueueBatchFileID implements Serializable {
        public static final long serialVersionUID = 3L;

        @Column(name = "batch_id")
        private UUID batchID;

        @Column(name = "resource_type")
        private DPCResourceType resourceType;

        @Column(name = "sequence")
        private int sequence;

        public JobQueueBatchFileID() {
        }

        public JobQueueBatchFileID(UUID batchID, DPCResourceType resourceType, int sequence) {
            this.batchID = batchID;
            this.resourceType = resourceType;
            this.sequence = sequence;
        }

        public UUID getBatchID() {
            return batchID;
        }

        public DPCResourceType getResourceType() {
            return resourceType;
        }

        public int getSequence() {
            return sequence;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (!(o instanceof JobQueueBatchFileID)) return false;
            JobQueueBatchFileID that = (JobQueueBatchFileID) o;
            return sequence == that.sequence &&
                    batchID.equals(that.batchID) &&
                    resourceType == that.resourceType;
        }

        @Override
        public int hashCode() {
            return Objects.hash(batchID, resourceType, sequence);
        }

        @Override
        public String toString() {
            return "JobQueueBatchFileID{" +
                    "batchID=" + batchID +
                    ", resourceType=" + resourceType +
                    ", sequence=" + sequence +
                    '}';
        }
    }

    /**
     * Form a file name for passed in parameters.
     *
     * @param batchID      - the batch id
     * @param resourceType - the resource type
     * @param sequence     - the sequence
     * @return a file name
     */
    public static String formOutputFileName(UUID batchID, DPCResourceType resourceType, int sequence) {
        return String.format("%s-%s.%s", batchID.toString(), sequence, resourceType.getPath());
    }

    @EmbeddedId
    private JobQueueBatchFileID jobQueueBatchFileID;

    @Column(name = "job_id")
    private UUID jobID;

    @Column(name = "file_name")
    private String fileName;

    @Column(name = "count")
    private int count;

    @Column(name = "checksum")
    private byte[] checksum;

    @Column(name = "file_length")
    private long fileLength;

    public JobQueueBatchFile() {
        // for hibernate
    }

    public JobQueueBatchFile(UUID jobID, UUID batchID, DPCResourceType resourceType, int sequence, int count) {
        this.jobQueueBatchFileID = new JobQueueBatchFileID(batchID, resourceType, sequence);
        this.jobID = jobID;
        this.fileName = formOutputFileName(batchID, resourceType, sequence);
        this.count = count;
    }

    public JobQueueBatchFileID getJobQueueBatchFileID() {
        return jobQueueBatchFileID;
    }

    public UUID getBatchID() {
        return jobQueueBatchFileID.getBatchID();
    }

    public UUID getJobID() {
        return jobID;
    }

    public DPCResourceType getResourceType() {
        return jobQueueBatchFileID.getResourceType();
    }

    public int getSequence() {
        return jobQueueBatchFileID.getSequence();
    }

    public String getFileName() {
        return fileName;
    }

    public int getCount() {
        return count;
    }

    public void appendCount(int count) {
        this.count += count;
    }

    public byte[] getChecksum() {
        return checksum;
    }

    public void setChecksum(byte[] checksum) {
        this.checksum = checksum;
    }

    public long getFileLength() {
        return fileLength;
    }

    public void setFileLength(long fileLength) {
        this.fileLength = fileLength;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof JobQueueBatchFile)) return false;
        JobQueueBatchFile that = (JobQueueBatchFile) o;
        return jobQueueBatchFileID.equals(that.jobQueueBatchFileID) &&
                jobID.equals(that.jobID);
    }

    @Override
    public int hashCode() {
        return Objects.hash(jobQueueBatchFileID, jobID);
    }

    @Override
    public String toString() {
        return "JobQueueBatchFile{" +
                "jobQueueBatchFileID=" + jobQueueBatchFileID +
                ", jobID=" + jobID +
                ", count=" + count +
                '}';
    }
}