package com.k_int.aggr2.mimsy.data.hdo;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
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.DataStatusEnum;
import com.k_int.mimsy.ref.GroupEditorialStatusEnum;
import com.k_int.mimsy.ref.GroupMgmtStatusEnum;
import com.k_int.mimsy.ref.OriginatorEnum;
import com.k_int.mimsy.ref.GroupPublicationStatusEnum;
import com.k_int.mimsy.ref.MimsyDataTypeEnum;
import com.k_int.mimsy.ref.ObjectConformanceEnum;

@Entity
@Table(name="MIMSY_CURATED_GROUP")
@PrimaryKeyJoinColumn(name="BASE_DATA_FK")
public class MimsyCuratedGroupHDO extends BaseMimsyDataHDO
{
	private static final long serialVersionUID = 1L;
	private String name;
	private MimsyDataTypeEnum member_type;
	private String description;
	private String purpose;
	private String department;
	private String owner;
	private OriginatorEnum originator;
	
	protected MimsyCuratedGroupHDO()
	{
		super();
	}
	
	private MimsyCuratedGroupHDO(String mimsy_identifier,Date last_updated, OriginatorEnum originator)
	{
		super(mimsy_identifier,MimsyDataTypeEnum.GROUP,last_updated,ObjectConformanceEnum.CORE);
		this.originator=originator;
	}
	
	@Column(name="GRP_NAME", length=1000)
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	@Column(name="DESCRIPTION", length=1000)
	public String getDescription() {
		return description;
	}
	
	public void setDescription(String note) {
		this.description = note;
	}
	
	@Column(name="PURPOSE", length=1000)
	public String getPurpose() {
		return purpose;
	}
	
	public void setPurpose(String note) {
		this.purpose = note;
	}
	
	@Column(name="DEPARTMENT", length=128)
	public String getDepartment() {
		return department;
	}

	public void setDepartment(String department) {
		this.department = department;
	}
	
	@Column(name="OWNER")
	public String getOwner() {
		return owner;
	}

	public void setOwner(String owner) {
		this.owner = owner;
	}

	
	@Column(name = "MEMBER_TYPE")
	@Enumerated(EnumType.ORDINAL)
	public MimsyDataTypeEnum getMemberType() {
		return member_type;
	}

	public void setMemberType(MimsyDataTypeEnum type) 
	{
		member_type=type;
	}
	
	@Column(name = "ORIGINATOR")
	@Enumerated(EnumType.ORDINAL)
	public OriginatorEnum getOriginator() {
		return originator;
	}

	public void setOriginator(OriginatorEnum originator) {
		this.originator=originator;
	}

	
	public static MimsyCuratedGroupHDO lookupDataOrCreateStub(Session sess,
			String mimsy_identifier,OriginatorEnum originator) throws Exception 
	{
		 MimsyCuratedGroupHDO retval = (MimsyCuratedGroupHDO)BaseMimsyDataHDO.lookup(sess, mimsy_identifier);
		 if(retval==null)
		 {
			 MimsyCuratedGroupHDO group = new MimsyCuratedGroupHDO(mimsy_identifier, new Date(),originator);
			 group.setConformance(ObjectConformanceEnum.UNKNOWN);
			 group.setChecksum(MimsyHelper.getChecksum(mimsy_identifier));
			 group.setDataStatus(DataStatusEnum.LIVE);
			 sess.save(group);
			 CIIMGroupHDO ciim_group = new CIIMGroupHDO(group);			 
			 ciim_group.setMgmtStatus(GroupMgmtStatusEnum.UNCHECKED);
			 ciim_group.setPublicationStatus(GroupPublicationStatusEnum.UNPUBLISHED);
			 ciim_group.setEditorialStatus(GroupEditorialStatusEnum.CONTENTS_AND_METADATA_CHANGED); // so we can publish for the first time
			 sess.save(ciim_group);
			 sess.flush();
			 retval=group;
		 }
		 return retval;		
	}
	
	public void clear()
	{
		super.clear();
		
		name = null;
		description = null;
		purpose = null;
		department = null;
		owner = null;
	}
}
