package com.k_int.aggr2.mimsy.data.hdo;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.Query;
import org.hibernate.Session;

import com.k_int.mimsy.ref.GroupEditorialStatusEnum;
import com.k_int.mimsy.ref.GroupMgmtStatusEnum;
import com.k_int.mimsy.ref.GroupPublicationStatusEnum;
import com.k_int.mimsy.ref.TopGroupEditorialStatusEnum;

@Entity
@Table(name="CIIM_GROUP")
public class CIIMGroupHDO 
{

	private CIIMGroupContextHDO 		group_context;
	private MimsyCuratedGroupHDO		group;
	private GroupMgmtStatusEnum 		mgmt_status;
	private GroupPublicationStatusEnum 	pub_status;
	private GroupEditorialStatusEnum	editorial_status;
	private TopGroupEditorialStatusEnum top_group_editorial;
	
	
	private Long id;
	
	
	
	
	protected CIIMGroupHDO()
	{;}
	
	public CIIMGroupHDO(MimsyCuratedGroupHDO group)
	{
		this.group=group;
	}
	
	
	@Id
	@Column(name="ID")
	@GeneratedValue(strategy=GenerationType.AUTO)
	public Long getId() 
	{
		return id;
	}
	
	protected void setId(Long id)
	{ 
		this.id = id;
	}
	
	@OneToOne(cascade=CascadeType.ALL)
	public CIIMGroupContextHDO getGroupContext()
	{
		return group_context;
	}
	
	public void setGroupContext(CIIMGroupContextHDO group_context)
	{
		this.group_context=group_context;
	}
	
	@OneToOne(cascade=CascadeType.ALL)
	public MimsyCuratedGroupHDO getCuratedGroup()
	{
		return group;
	}
	
	public void setCuratedGroup(MimsyCuratedGroupHDO group)
	{
		this.group=group;
	}
	
	@Column(name="MGMT_STATUS")
	@Enumerated(EnumType.ORDINAL)
	public GroupMgmtStatusEnum getMgmtStatus()
	{
		return mgmt_status;
	}
	
	public void setMgmtStatus(GroupMgmtStatusEnum status)
	{
		this.mgmt_status=status;
	}
	
	@Column(name="PUB_STATUS")
	@Enumerated(EnumType.ORDINAL)
	public GroupPublicationStatusEnum getPublicationStatus()
	{
		return pub_status;
	}
	
	public void setPublicationStatus(GroupPublicationStatusEnum status)
	{
		this.pub_status=status;
	}
	
	@Column(name="EDITORIAL_STATUS")
	@Enumerated(EnumType.ORDINAL)
	public GroupEditorialStatusEnum getEditorialStatus()
	{
		return editorial_status;
	}
	
	public void setEditorialStatus(GroupEditorialStatusEnum status)
	{
		this.editorial_status=status;
	}
	
	
	@Column(name="TOP_GRP_ED_STATUS")
	@Enumerated(EnumType.ORDINAL)
	public TopGroupEditorialStatusEnum getTopGroupEditorialStatus()
	{
		return top_group_editorial;
	}
	
	public void setTopGroupEditorialStatus(TopGroupEditorialStatusEnum status)
	{
		this.top_group_editorial=status;
	}
	
	
	
	
	public static CIIMGroupHDO lookupGroup(Session sess,String mimsy_identifier)
	{
		Query q = sess.createQuery("select x from com.k_int.aggr2.mimsy.data.hdo.CIIMGroupHDO x where x.curatedGroup.mimsyIdentifier=:mimsyIdentifier");
	 	q= q.setParameter("mimsyIdentifier", mimsy_identifier);		  
	 
	 	return (CIIMGroupHDO)q.uniqueResult();
	}
}
