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.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_PLACE_DATA")
@PrimaryKeyJoinColumn(name="BASE_DATA_FK")
public class MimsyPlaceDataHDO extends BaseMimsyDataHDO 
{
	private static final long serialVersionUID = 1L;
	private String name;
	private Set<PlaceVariationHDO> variations = new HashSet<PlaceVariationHDO>();
	private String description;
	private String note;
	private String place_type;
	private String level_number;	
	private String broader_place;
	
	protected MimsyPlaceDataHDO()
	{;}
	
    private MimsyPlaceDataHDO(String mimsy_identifier, Date last_updated,ObjectConformanceEnum conformance)
    {
        super(mimsy_identifier, MimsyDataTypeEnum.PLACE,last_updated,conformance);
    }
    
    @Column(name="NOTE")
    public String getNote() {
		return note;
	}

	public void setNote(String note) {
		this.note = note;
	}

	@Column(name="PLACE_TYPE")
	public String getPlaceType() {
		return place_type;
	}

	public void setPlaceType(String placeType) {
		place_type = placeType;
	}

	@Column(name="LEVEL_NUMBER")
	public String getLevelNumber() {
		return level_number;
	}

	public void setLevelNumber(String levelNumber) {
		level_number = levelNumber;
	}

	@Column(name="BROADER_PLACE")
	public String getBroaderPlace() {
		return broader_place;
	}

	public void setBroaderPlace(String broaderPlace) {
		broader_place = broaderPlace;
	}

	public void setPlace(String name)
    {
    	this.name=name;
    }
    
	@Column(name="PLACE")
    public String getPlace()
    {
    	return name;
    }
    
    public void setDescription(String description)
    {
    	this.description=description;
    }
    
    @Column(name="DESCRIPTION",length=4000)
    public String getDescription()
    {
    	return description;
    }
    
    @OneToMany(cascade=CascadeType.ALL)
    @JoinColumn(name="MIMSY_DATA_FK")
    public Set<PlaceVariationHDO> getVariations()
    {
    	return variations;
    }
    
    public void setVariations(Set<PlaceVariationHDO> variations)
    {
    	this.variations = variations;
    }
    
    public static MimsyPlaceDataHDO lookupDataOrCreateStub(Session sess,
			String mimsy_identifier) throws Exception 
	{
    	MimsyPlaceDataHDO retval = (MimsyPlaceDataHDO)BaseMimsyDataHDO.lookup(sess, mimsy_identifier);
		 if(retval==null)
		 {
			 MimsyPlaceDataHDO group = new MimsyPlaceDataHDO(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();
    	
    	name = null;
    	variations = null;
    	description = null;
    	note = null;
    	place_type = null;
    	level_number = null;	
    	broader_place = null;	
    }
}
