package com.k_int.aggr2.mimsy.data.hdo;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.OneToMany;
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_SITE_DATA")
@PrimaryKeyJoinColumn(name="BASE_DATA_FK")
public class MimsySiteDataHDO extends BaseMimsyDataHDO
{
	private static final long serialVersionUID = 1L;
	private String name;
	private String site_year;
	private String summary;
	private String date;
	private String location;
	private String borough;
	private String eastings;
	private String northings;
	private String site_type;
	private String organisation;
	private String site_id;
	
	private Set<ExcavationHDO> excavations 		= new HashSet<ExcavationHDO>();
	
	private MimsySiteDataHDO(String mimsy_identifier, Date last_updated, ObjectConformanceEnum conformance, String site_id)
	{
		super(mimsy_identifier, MimsyDataTypeEnum.SITE,last_updated,conformance);
		this.site_id=site_id;
	}
	
	protected MimsySiteDataHDO()
	{;}
	
	@Column(name="SITE_ID")
	public String getSiteId() {
		return site_id;
	}
	
	public void setSiteId(String site_id)
	{
		this.site_id=site_id;
	}
	 
	 
	@Column(name="NAME")
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Column(name="SITE_YEAR")
	public String getSiteYear() {
		return site_year;
	}

	public void setSiteYear(String site_year) {
		this.site_year = site_year;
	}

	@Column(name="SUMMARY", length=4000)
	@Lob
	public String getSummary() {
		return summary;
	}

	public void setSummary(String summary) {
		this.summary = summary;
	}

	@Column(name="DATE")
	public String getDate() {
		return date;
	}

	public void setDate(String date) {
		this.date = date;
	}

	@Column(name="LOCATION")
	public String getLocation() {
		return location;
	}

	public void setLocation(String location) {
		this.location = location;
	}

	@Column(name="BOROUGH")
	public String getBorough() {
		return borough;
	}

	public void setBorough(String borough) {
		this.borough = borough;
	}

	@Column(name="EASTINGS")
	public String getEastings() {
		return eastings;
	}

	public void setEastings(String eastings) {
		this.eastings = eastings;
	}

	@Column(name="NORTHINGS")
	public String getNorthings() {
		return northings;
	}

	public void setNorthings(String northings) {
		this.northings = northings;
	}

	@Column(name="SITE_TYPE")
	public String getSiteType() {
		return site_type;
	}

	public void setSiteType(String siteType) {
		site_type = siteType;
	}

	@Column(name="ORGANISATION")
	public String getOrganisation() {
		return organisation;
	}

	public void setOrganisation(String organisation) {
		this.organisation = organisation;
	}

	@OneToMany(cascade=CascadeType.ALL)
	@JoinColumn(name="MIMSY_DATA_FK")
	public Set<ExcavationHDO> getExcavations() {
		return excavations;
	}

	public void setExcavations(Set<ExcavationHDO> excavations) {
		this.excavations = excavations;
	}
	
	 public static MimsySiteDataHDO lookupDataOrCreateStub(Session sess,
				String mimsy_identifier) throws Exception 
		{
	    	
		 MimsySiteDataHDO retval = (MimsySiteDataHDO)BaseMimsyDataHDO.lookup(sess, mimsy_identifier);
			 if(retval==null)
			 {
				 MimsySiteDataHDO group = new MimsySiteDataHDO(mimsy_identifier, new Date(), ObjectConformanceEnum.UNKNOWN,null);
				 group.setChecksum(MimsyHelper.getChecksum(mimsy_identifier));
				 retval=group;
				 sess.save(retval);
				 sess.flush();
			 }
			 return retval;
			
		}
	 
	public void clear()
	{
		super.clear();
		
		name = null;
		site_year = null;
		summary = null;
		date = null;
		location = null;
		borough = null;
		eastings = null;
		northings = null;
		site_type = null;
		organisation = null;
		excavations = null;
	}


}
