package com.k_int.aggr2.mimsy.data.hdo;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Lob;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

import org.hibernate.Session;

import com.k_int.aggr2.mimsy.data.util.MimsyHelper;
import com.k_int.mimsy.ref.MimsyDataTypeEnum;
import com.k_int.mimsy.ref.ObjectConformanceEnum;


@Entity
@Table(name="MIMSY_SUBJECT_DATA")
@PrimaryKeyJoinColumn(name="BASE_DATA_FK")
public class MimsySubjectDataHDO extends BaseMimsyDataHDO
{
	private static final long serialVersionUID = 1L;
	private String description;
    private String category;
    private String subject;
    private String sub_category;	
	private String area;
    private String period;
    
    private MimsySubjectDataHDO(String mimsy_identifier, Date last_updated, ObjectConformanceEnum conformance)
    {
        super(mimsy_identifier, MimsyDataTypeEnum.SUBJECT, last_updated,conformance);
    }
    
    protected MimsySubjectDataHDO()
    {
    	
    }
    
    @Column(name="SUBJECT", length=1000)
    public String getSubject() 
    {
		return subject;
	}

	public void setSubject(String subject) 
	{
		this.subject = subject;
	}

    public void setDescription(String description)
    {
        this.description=description;
    }
   
    @Column(name="DESCRIPTION", length=4000)
    @Lob
    public String getDescription()
    {
        return description;
    }
    
    public void setCategory(String category)
    {
        this.category=category;
    }
    
    @Column(name="CATEGORY")
    public String getCategory()
    {
        return category;
    }
    
    @Column(name="SUB_CATEGORY")
    public String getSubCategory() 
    {
		return sub_category;
	}

	public void setSubCategory(String subCategory) 
	{
		sub_category = subCategory;
	}

	@Column(name="AREA")
	public String getArea() {
		return area;
	}

	public void setArea(String area) {
		this.area = area;
	}

	@Column(name="PERIOD")
	public String getPeriod() 
	{
		return period;
	}

	public void setPeriod(String period) 
	{
		this.period = period;
	}
	
	 public static MimsySubjectDataHDO lookupDataOrCreateStub(Session sess,
				String mimsy_identifier) throws Exception 
		{
	    	
		 MimsySubjectDataHDO retval = (MimsySubjectDataHDO)BaseMimsyDataHDO.lookup(sess, mimsy_identifier);
			 if(retval==null)
			 {
				 MimsySubjectDataHDO group = new MimsySubjectDataHDO(mimsy_identifier, new Date(), ObjectConformanceEnum.UNKNOWN);
				 group.setChecksum(MimsyHelper.getChecksum(mimsy_identifier));
				 retval=group;
				 sess.save(retval);
				 sess.flush();
			 }
			 return retval;
			
		}

	public void clear()
	{
		super.clear();
		
		description = null;
	    category = null;
	    subject = null;
	    sub_category = null;	
		area = null;
	    period = null;
	}
	
}
