CompoEntryFile.java 3.13 KB
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package fi.codecrew.moya.model;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Calendar;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.apache.commons.codec.binary.Hex;
import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 
 */
@Entity
@Table(name = "compo_entry_files")
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class CompoEntryFile extends GenericEntity {
	private static final long serialVersionUID = 1L;
	@Column(name = "mime_type")
	private String mimeType;

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

	@Lob
	@Column(name = "description")
	private String description;

	@Column(name = "hash", updatable = false)
	private String hash;

	@Lob
	@Column(name = "file_data", updatable = false)
	@Basic(fetch = FetchType.LAZY)
	private byte[] fileData;

	@Column(name = "uploaded", nullable = false)
	@Temporal(TemporalType.TIMESTAMP)
	private Calendar uploaded = Calendar.getInstance();

	@JoinColumn(name = "entry_id", referencedColumnName = "id", nullable = false, updatable = false)
	@ManyToOne(optional = false)
	private CompoEntry entry;
	private static final Logger logger = LoggerFactory.getLogger(CompoEntryFile.class);

	public CompoEntryFile() {
		super();
	}

	public CompoEntryFile(CompoEntry entry) {
		this.entry = entry;
	}

	public String getMimeType() {
		return mimeType;
	}

	public void setMimeType(String mimeType) {
		this.mimeType = mimeType;
	}

	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

	public String getDescription() {
		return description;
	}

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

	public String getHash() {
		return hash;
	}

	public void setHash(String hash) {
		this.hash = hash;
	}

	public byte[] getFileData() {
		return fileData;
	}

	public void setFileData(byte[] fileData) {
		this.fileData = fileData;
		this.hash = getShaChecksum(fileData);
	}

	public Calendar getUploaded() {
		return uploaded;
	}

	public void setUploaded(Calendar uploaded) {
		this.uploaded = uploaded;
	}

	public CompoEntry getEntriesId() {
		return entry;
	}

	public void setEntriesId(CompoEntry entriesId) {
		this.entry = entriesId;
	}

	public static String getShaChecksum(byte[] data)
	{
		String ret = "ERROR CALCULATING CHECKSUM!";
		try {
			MessageDigest algo = MessageDigest.getInstance("SHA");
			algo.update(data);
			ret = new String(Hex.encodeHex(algo.digest())).toLowerCase();
		} catch (NoSuchAlgorithmException e) {
			logger.warn("Error calculating checksum", e);
		}
		return ret;
	}

}