package eu.dnetlib.openaire.db.objects;

import java.io.Serializable;
import java.sql.Date;
import java.util.Collection;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity(name = "articles")
@Table(name = "articles")
public class Article implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 9047252156085313834L;
	

	@Id
	@Column(name = "articleID")
	private String articleID;

	@Column(name = "title")
	private String title;
	
	@Column(name = "publication_date", nullable=true)
	private Date publication_date;
	
	@Column(name = "abstract")
	private String abstractText;
	
	@Column(name = "subjects")
	private String subjects;
	
	@Column(name = "publisher", nullable=true)
	private String publisher;
	
	@Column(name="language")
	private String language;
	
	@Column(name="license_name")
	private String licenseName;
	
	@Column(name="license_kind")
	private String licenseKind;
	
	@Column(name="embargo_end_date", nullable=true)
	private Date embargoEndDate;
	
	@Column(name="keywords")
	private String keywords;
	
	@OneToMany(mappedBy="article", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
	private Collection<AuthorShip> authorShips;
	
	@OneToMany(mappedBy="article", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
	private Collection<Manifestation> manifestations;
	
	@ManyToMany(
		cascade={CascadeType.PERSIST, CascadeType.MERGE},
		mappedBy = "articles"
	)
	private Collection<Project> projects;

	public String getArticleID() {
		return articleID;
	}

	public void setArticleID(String articleID) {
		this.articleID = articleID;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public Date getPublication_date() {
		return publication_date;
	}

	public void setPublication_date(Date publicationDate) {
		publication_date = publicationDate;
	}

	public String getAbstractText() {
		return abstractText;
	}

	public void setAbstractText(String abstractText) {
		this.abstractText = abstractText;
	}

	public String getSubjects() {
		return subjects;
	}

	public void setSubjects(String subjects) {
		this.subjects = subjects;
	}

	public String getPublisher() {
		return publisher;
	}

	public void setPublisher(String publisher) {
		this.publisher = publisher;
	}

	public String getLanguage() {
		return language;
	}

	public void setLanguage(String language) {
		this.language = language;
	}

	public String getLicenseName() {
		return licenseName;
	}

	public void setLicenseName(String licenseName) {
		this.licenseName = licenseName;
	}

	public String getLicenseKind() {
		return licenseKind;
	}

	public void setLicenseKind(String licenseKind) {
		this.licenseKind = licenseKind;
	}

	public Date getEmbargoEndDate() {
		return embargoEndDate;
	}

	public void setEmbargoEndDate(Date embargoEndDate) {
		this.embargoEndDate = embargoEndDate;
	}

	public String getKeywords() {
		return keywords;
	}

	public void setKeywords(String keywords) {
		this.keywords = keywords;
	}

	public Collection<AuthorShip> getAuthorShips() {
		return authorShips;
	}

	public void setAuthorShips(Collection<AuthorShip> authorShips) {
		this.authorShips = authorShips;
	}

	public Collection<Manifestation> getManifestations() {
		return manifestations;
	}

	public void setManifestations(Collection<Manifestation> manifestations) {
		this.manifestations = manifestations;
	}

	public Collection<Project> getProjects() {
		return projects;
	}

	public void setProjects(Collection<Project> projects) {
		this.projects = projects;
	}

}
