package com.k_int.npdb.datamodel;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 * Class Role
 */
@Entity
@Table(name = "ROLE")
public class Role {

	private Long id;
	private String externalId;
	private Source source;
	private String role;
	private String roleQualifier;
	private Contributor contributor;
    private List<Work> works = new ArrayList<Work>();
    private List<Production> productions = new ArrayList<Production>();
    private List<Performance> performances = new ArrayList<Performance>();
    
	
	
	public Role() {
	};

	/**
	 * Get the value of id
	 * 
	 * @return the value of id
	 */
	@Id
	@Column(name = "ID")
	@GeneratedValue(strategy = GenerationType.AUTO)
	public Long getId() {
		return id;
	}

	/**
	 * Get the value of externalId
	 * 
	 * @return the value of externalId
	 */
	@Column(name = "EXTERNAL_ID")
	public String getExternalId() {
		return externalId;
	}

	/**
	 * Get the value of source
	 * 
	 * @return the value of source
	 */
	@ManyToOne
	@JoinColumn(name="SOURCE_FK")
	public Source getSource() {
		return source;
	}

	/**
	 * Get the value of role
	 * 
	 * @return the value of role
	 */
	@Column(name = "ROLE")
	public String getRole() {
		return role;
	}

	/**
	 * Get the value of roleQualifier
	 * 
	 * @return the value of roleQualifier
	 */
	@Column(name = "ROLE_QUALIFIER")
	public String getRoleQualifier() {
		return roleQualifier;
	}

	/**
	 * Get the value of contributor
	 * 
	 * @return the value of contributor
	 */
	@ManyToOne
	@JoinColumn(name = "CONTRIBUTOR_FK")
	public Contributor getContributor() {
		return contributor;
	}

	@ManyToMany
	@JoinTable(name = "PERFORMANCE_CONTRIBUTOR", joinColumns = { @JoinColumn(name = "ROLE_FK") }, inverseJoinColumns = @JoinColumn(name = "PERFORMANCE_FK"))
	public List<Performance> getPerformances() {
		return performances;
	}

	public void setPerformances(List<Performance> performances) {
		this.performances = performances;
	}

	@ManyToMany
	@JoinTable(name = "PRODUCTION_CONTRIBUTOR", joinColumns = { @JoinColumn(name = "ROLE_FK") }, inverseJoinColumns = @JoinColumn(name = "PRODUCTION_FK"))
	public List<Production> getProductions() {
		return productions;
	}

	public void setProductions(List<Production> productions) {
		this.productions = productions;
	}

	@ManyToMany
	@JoinTable(name = "WORK_CONTRIBUTOR", joinColumns = { @JoinColumn(name = "ROLE_FK") }, inverseJoinColumns = @JoinColumn(name = "WORK_FK"))
	public List<Work> getWorks() {
		return works;
	}

	public void setWorks(List<Work> works) {
		this.works = works;
	}

	public void setContributor(Contributor contributor) {
		this.contributor = contributor;
	}

	public void setExternalId(String externalId) {
		this.externalId = externalId;
	}

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

	public void setRole(String role) {
		this.role = role;
	}

	public void setRoleQualifier(String roleQualifier) {
		this.roleQualifier = roleQualifier;
	}

	public void setSource(Source source) {
		this.source = source;
	}

}
