package eu.stork.documentservice.model;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;

import eu.stork.documentservice.exceptions.ModelException;

/**
 * The document model class
 * @author sveinbjorno
 *
 */
public class DocumentModel {
	private String docid;
	private byte[] document;
	private String filename;
	private String mimetype;
	private String reicevercert;	
	private String enckey;
	private String enciv;
	private Date created;
	private Date updated;
	private Date deleted;
	
	public String getDocid() {
		return docid;
	}
	public void setDocid(String docid) {
		this.docid = docid;
	}
	public byte[] getDocument() {
		return document;
	}
	public void setDocument(byte[] document) {
		this.document = document;
	}
	public String getFilename() {
		return filename;
	}
	public void setFilename(String filename) {
		this.filename = filename;
	}
	public String getMimetype() {
		return mimetype;
	}
	public void setMimetype(String mimetype) {
		this.mimetype = mimetype;
	}
	public String getReicevercert() {
		return reicevercert;
	}
	public void setReicevercert(String reicevercert) {
		this.reicevercert = reicevercert;		
	}
	public String getEnckey() {
		return enckey;
	}
	public void setEnckey(String enckey) {
		this.enckey = enckey;
	}
	public String getEnciv() {
		return enciv;
	}
	public void setEnciv(String enciv) {
		this.enciv = enciv;
	}
	public Date getCreated() {
		return created;
	}
	public void setCreated(Date created) {
		this.created = created;
	}
	public Date getUpdated() {
		return updated;
	}
	public void setUpdated(Date updated) {
		this.updated = updated;
	}
	public Date getDeleted() {
		return deleted;
	}
	public void setDeleted(Date deleted) {
		this.deleted = deleted;
	}
	
	public InputStream getDataStream()
	{
		if (this.document != null)			
			return new ByteArrayInputStream(this.document);
		else
			return null;
	}
	
	public void setDataStream(InputStream stream) throws ModelException
	{				
		try {
			this.document = new byte[stream.available()];
			stream.read(this.document);
		} catch (IOException e) {
			throw new ModelException("Unable to parse stream.", e);
		}
	}
	
	public void insertValidate() throws ModelException
	{		
		if (this.docid == null || this.docid.isEmpty())
			throw new ModelException("Document ID is null or empty");
		if (this.document == null)
			throw new ModelException("Document is null");
		if (this.mimetype == null || this.mimetype.isEmpty())
			throw new ModelException("MIME type is null or empty.");
	}
	
	public void updateValidate() throws ModelException
	{
		this.insertValidate();
		if (this.created == null)
			throw new ModelException("Created is null");
	}	
}