package eu.dnetlib.openaire.db.objects;

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.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Index;



@Entity(name = "persons")
@Table(name = "persons")
public class Person extends AbstractOpenaireObject {

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

	@Id
	@Column(name = "personID")
	private String personID;
	
	@Column(name = "name")
	private String name;
	
	@Column(name = "surname")
	private String surname;
		
	@ManyToOne
	@JoinColumn(name="nationality", nullable=true)
	@Index(name="persons_nationality_idx")
	private Nationality nationality;
	
	@Column(name = "projectid")
	private String projectID;
	
	public String getProjectID() {
		return projectID;
	}

	public void setProjectID(String projectID) {
		this.projectID = projectID;
	}

	public String getParticipantOrder() {
		return participantOrder;
	}

	public void setParticipantOrder(String participantOrder) {
		this.participantOrder = participantOrder;
	}

	public String getProjectRole() {
		return projectRole;
	}

	public void setProjectRole(String projectRole) {
		this.projectRole = projectRole;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getFax() {
		return fax;
	}

	public void setFax(String fax) {
		this.fax = fax;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getFunction() {
		return function;
	}

	public void setFunction(String function) {
		this.function = function;
	}

	@Column(name = "participantorder")
	private String participantOrder;
	
	@Column(name = "projectRole")
	private String projectRole;
	
	@Column(name = "email")
	private String email;
	
	@Column(name = "fax")
	private String fax;
	
	@Column(name = "phone")
	private String phone;
	
	@Column(name = "function")
	private String function;
		
	@OneToMany(mappedBy="author", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
	private Collection<AuthorShip> authorShips;
	
	public String getPersonID() {
		return personID;
	}

	public void setPersonID(String personID) {
		this.personID = personID;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSurname() {
		return surname;
	}

	public void setSurname(String surname) {
		this.surname = surname;
	}

	public Nationality getNationality() {
		return nationality;
	}

	public void setNationality(Nationality nationality) {
		this.nationality = nationality;
	}

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

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

}
