package com.k_int.aggr2.mimsy.data.hdo;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

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_PUBLICATION_DATA")
@PrimaryKeyJoinColumn(name="BASE_DATA_FK")
public class MimsyPublicationDataHDO extends BaseMimsyDataHDO 
{
	private static final long serialVersionUID = 1L;
	private String publisher;
    private String publication_date;
    private String year_published;
    private String title;
    private String brief_title;
    private String title_statement;
    private String series_title;
    private String publication_type;
    private String author; // this should be a link - not sure if we should create this person
    private String editor;
    private Boolean published;
    private String place_published;
    private String citation;
    private String volume;
    private String issue;
    private String edition;
    private String volumes;
    
    private String pages_tracks;
    private String illustrated;
    private List<SubjectHeadingHDO> subject_headings = new ArrayList<SubjectHeadingHDO>(); // type and list type separated by semi colon
    private String isbn_issn;
    private String location;
    private String description;
    
    protected MimsyPublicationDataHDO()
    {
    	super();
    }
    
    private MimsyPublicationDataHDO(String mimsy_identifier, Date last_updated,ObjectConformanceEnum conformance)
    {
        super(mimsy_identifier, MimsyDataTypeEnum.PUBLICATION,last_updated,conformance);
    }

    @Column(name="YEAR_PUBLISHED")
	public String getYearPublished() 
	{
		return year_published;
	}

	public void setYearPublished(String yearPublished) 
	{
		year_published = yearPublished;
	}

	@Column(name="TITLE", length=1000)
	public String getTitle() 
	{
		return title;
	}

	public void setTitle(String title) 
	{
		this.title = title;
	}

	@Column(name="DESCRIPTION", length=4000)
	@Lob
	public String getDescription()
	{
		return description;
	}
	
	public void setDescription(String description)
	{
		this.description=description;
	}
	
	public void setBriefTitle(String brief_title) 
	{
		this.brief_title = brief_title;
	}

	@Column(name="BRIEF_TITLE")
	public String getBriefTitle() 
	{
		return brief_title;
	}

	@Column(name="TITLE_STATEMENT")
	public String getTitleStatement() 
	{
		return title_statement;
	}

	public void setTitleStatement(String titleStatement) {
		title_statement = titleStatement;
	}

	@Column(name="SERIES_TITLE")
	public String getSeriesTitle() {
		return series_title;
	}

	public void setSeriesTitle(String seriesTitle) {
		series_title = seriesTitle;
	}

	@Column(name="PUBLICATION_TYPE")
	public String getPublicationType() {
		return publication_type;
	}

	public void setPublicationType(String publicationType) {
		publication_type = publicationType;
	}

	@Column(name="AUTHOR")
	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	@Column(name="EDITOR")
	public String getEditor() {
		return editor;
	}

	public void setEditor(String editor) {
		this.editor = editor;
	}

	@Column(name="PUBLISHED")
	public Boolean isPublished() {
		return published;
	}

	public void setPublished(Boolean published) {
		this.published = published;
	}

	@Column(name="PLACE_PUBLISHED")
	public String getPlacePublished() {
		return place_published;
	}

	public void setPlacePublished(String placePublished) {
		place_published = placePublished;
	}

	@Column(name="CITATION", length=1000)
	public String getCitation() {
		return citation;
	}

	public void setCitation(String citation) {
		this.citation = citation;
	}

	@Column(name="VOLUME")
	public String getVolume() {
		return volume;
	}

	public void setVolume(String volume) {
		this.volume = volume;
	}

	@Column(name="ISSUE")
	public String getIssue() {
		return issue;
	}

	public void setIssue(String issue) {
		this.issue = issue;
	}

	@Column(name="EDITION")
	public String getEdition() {
		return edition;
	}

	public void setEdition(String edition) {
		this.edition = edition;
	}

	@Column(name="VOLUMES")
	public String getVolumes() {
		return volumes;
	}

	public void setVolumes(String volumes) {
		this.volumes = volumes;
	}

	@Column(name="PAGES_TRACKS")
	public String getPagesTracks() {
		return pages_tracks;
	}

	public void setPagesTracks(String pagesTracks) {
		pages_tracks = pagesTracks;
	}

	@Column(name="ILLUSTRATED")
	public String getIllustrated() {
		return illustrated;
	}

	public void setIllustrated(String illustrated) {
		this.illustrated = illustrated;
	}

	@OneToMany(cascade=CascadeType.ALL)
	@JoinColumn(name="MIMSY_DATA_FK")
	public List<SubjectHeadingHDO> getSubjectHeadings() {
		return subject_headings;
	}

	public void setSubjectHeadings(List<SubjectHeadingHDO> subjectHeadings) {
		subject_headings = subjectHeadings;
	}

	@Column(name="ISBN_ISSN")
	public String getIsbnIssn() {
		return isbn_issn;
	}

	public void setIsbnIssn(String isbnIssn) {
		isbn_issn = isbnIssn;
	}

	@Column(name="LOCATION")
	public String getLocation() {
		return location;
	}

	public void setLocation(String location) {
		this.location = location;
	}

	public void setPublisher(String publisher)
    {
        this.publisher=publisher;
    }
    
	@Column(name="PUBLISHER")
    public String getPublisher()
    {
        return publisher;
    }
    
    public void setPublicationDate(String pub_date)
    {
        publication_date=pub_date;
    }
    
    @Column(name="PUBLICATION_DATE")
    public String getPublicationDate()
    {
        return publication_date;
    }
    
    public static MimsyPublicationDataHDO lookupDataOrCreateStub(Session sess,
			String mimsy_identifier) throws Exception 
	{
    	
    	MimsyPublicationDataHDO retval = (MimsyPublicationDataHDO)BaseMimsyDataHDO.lookup(sess, mimsy_identifier);
		 if(retval==null)
		 {
			 MimsyPublicationDataHDO group = new MimsyPublicationDataHDO(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();
    	
		publisher = null;
		publication_date = null;
		year_published = null;
		title = null;
		brief_title = null;
		title_statement = null;
		series_title = null;
		publication_type = null;
		author = null;
		editor = null;
		published = null;
		place_published = null;
		citation = null;
		volume = null;
		issue = null;
		edition = null;
		volumes = null;		
		pages_tracks = null;
		illustrated = null;
		subject_headings = null;
		isbn_issn = null;
		location = null;
		description = null;
    }

}
