CompoEntryFile.java 3.6 KB
/*
 * Copyright Codecrew Ry
 * 
 * All rights reserved.
 * 
 * This license applies to any software containing a notice placed by the 
 * copyright holder. Such software is herein referred to as the Software. 
 * This license covers modification, distribution and use of the Software. 
 * 
 * Any distribution and use in source and binary forms, with or without 
 * modification is not permitted without explicit written permission from the 
 * copyright owner. 
 * 
 * A non-exclusive royalty-free right is granted to the copyright owner of the 
 * Software to use, modify and distribute all modifications to the Software in 
 * future versions of the Software. 
 * 
 */
/*
 * 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.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 
 */
@Entity
@Table(name = "compo_entry_files")
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;
	}

}