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.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

@Entity(name = "projects")
@Table(name = "projects")
public class Project implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -5124327356779301705L;

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

	@Column(name="web_site")
	private String webSite;

	@Column(name="funding_scheme")
	private String fundingScheme;

	@Column(name="grant_agreement_number")
	private String grantAgreementNumber;

	@Column(name="acronym")
	private String acronym;

	@Column(name="title")
	private String title;

	@Column(name="start_date")
	private Date startDate;

	@Column(name="end_date")
	private Date endDate;

	@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE})
	@JoinTable(
        name="articles_projects",
        joinColumns=@JoinColumn(name="projectID"),
        inverseJoinColumns=@JoinColumn(name="articleID")
    )
	private Collection<Article> articles;

	@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE})
	@JoinTable(
        name="organizations_projects",
        joinColumns=@JoinColumn(name="projectID"),
        inverseJoinColumns=@JoinColumn(name="organizationID")
    )
	private Collection<Organization> organizations;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getWebSite() {
		return webSite;
	}

	public void setWebSite(String webSite) {
		this.webSite = webSite;
	}

	public String getFundingScheme() {
		return fundingScheme;
	}

	public void setFundingScheme(String fundingScheme) {
		this.fundingScheme = fundingScheme;
	}

	public String getGrantAgreementNumber() {
		return grantAgreementNumber;
	}

	public void setGrantAgreementNumber(String grantAgreementNumber) {
		this.grantAgreementNumber = grantAgreementNumber;
	}

	public String getAcronym() {
		return acronym;
	}

	public void setAcronym(String acronym) {
		this.acronym = acronym;
	}

	public String getTitle() {
		return title;
	}

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

	public Date getStartDate() {
		return startDate;
	}

	public void setStartDate(Date startDate) {
		this.startDate = startDate;
	}

	public Date getEndDate() {
		return endDate;
	}

	public void setEndDate(Date endDate) {
		this.endDate = endDate;
	}

	public Collection<Article> getArticles() {
		return articles;
	}

	public void setArticles(Collection<Article> articles) {
		this.articles = articles;
	}

	public Collection<Organization> getOrganizations() {
		return organizations;
	}

	public void setOrganizations(Collection<Organization> organizations) {
		this.organizations = organizations;
	}

}
