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

import org.hibernate.annotations.Index;



@Entity(name = "organizations")
@Table(name = "organizations")
public class Organization extends AbstractOpenaireObject {

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

	@Id
	@Column(name = "organizationID")
	private String organizationID;
	
	@Column(name = "legal_short_name")
	private String legalShortName;
	
	@Column(name = "legal_name")
	private String legalName;
	
	@Column(name = "web_site_URL")
	private String webSiteURL;
	
	@Column(name = "logo_URL", nullable=true)
	private String logoURL;
	
	@ManyToOne
	@JoinColumn(name = "country_of_origin")
	@Index(name="organizations_country_of_origin_idx")
	private Country countryOfOrigin;
	
	@Column(name = "legal_body")
	private boolean legalBody;
	
	@Column(name = "legal_person")
	private boolean legalPerson;
	
	@Column(name = "non_profit")
	private boolean nonProfit;
	
	@Column(name = "research_organization")
	private boolean researchOrganization;
	
	@Column(name = "higher_education")
	private boolean higherEducation;
	
	@Column(name = "international_organization_with_eur_interests")
	private boolean internationalOrganizationWithEurInterests;
	
	@Column(name = "international_organization")
	private boolean internationalOrganization;
	
	@Column(name = "enterprise")
	private boolean enterprise;
	
	@Column(name = "sme_validated")
	private boolean SMEvalidated;
	
	@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE})
	@JoinTable(
	        name="datasources_organizations",
	        joinColumns=@JoinColumn(name="organization"),
	        inverseJoinColumns=@JoinColumn(name="datasource")
	    )
	private Collection<DataSource> dataSources;
	

	public String getOrganizationID() {
		return organizationID;
	}

	public void setOrganizationID(String organizationID) {
		this.organizationID = organizationID;
	}

	public String getLegalShortName() {
		return legalShortName;
	}

	public void setLegalShortName(String legalShortName) {
		this.legalShortName = legalShortName;
	}

	public String getLegalName() {
		return legalName;
	}

	public void setLegalName(String legalName) {
		this.legalName = legalName;
	}

	public String getWebSiteURL() {
		return webSiteURL;
	}

	public void setWebSiteURL(String webSiteURL) {
		this.webSiteURL = webSiteURL;
	}

	public String getLogoURL() {
		return logoURL;
	}

	public void setLogoURL(String logoURL) {
		this.logoURL = logoURL;
	}

	public Country getCountryOfOrigin() {
		return countryOfOrigin;
	}

	public void setCountryOfOrigin(Country countryOfOrigin) {
		this.countryOfOrigin = countryOfOrigin;
	}

	public Collection<DataSource> getDataSources() {
		return dataSources;
	}

	public void setDataSources(Collection<DataSource> dataSources) {
		this.dataSources = dataSources;
	}

	public boolean isLegalBody() {
		return legalBody;
	}

	public void setLegalBody(boolean legalBody) {
		this.legalBody = legalBody;
	}

	public boolean isLegalPerson() {
		return legalPerson;
	}

	public void setLegalPerson(boolean legalPerson) {
		this.legalPerson = legalPerson;
	}

	public boolean isNonProfit() {
		return nonProfit;
	}

	public void setNonProfit(boolean nonProfit) {
		this.nonProfit = nonProfit;
	}

	public boolean isResearchOrganization() {
		return researchOrganization;
	}

	public void setResearchOrganization(boolean researchOrganization) {
		this.researchOrganization = researchOrganization;
	}

	public boolean isHigherEducation() {
		return higherEducation;
	}

	public void setHigherEducation(boolean higherEducation) {
		this.higherEducation = higherEducation;
	}

	public boolean isInternationalOrganizationWithEurInterests() {
		return internationalOrganizationWithEurInterests;
	}

	public void setInternationalOrganizationWithEurInterests(
			boolean internationalOrganizationWithEurInterests) {
		this.internationalOrganizationWithEurInterests = internationalOrganizationWithEurInterests;
	}

	public boolean isInternationalOrganization() {
		return internationalOrganization;
	}

	public void setInternationalOrganization(boolean internationalOrganization) {
		this.internationalOrganization = internationalOrganization;
	}

	public boolean isEnterprise() {
		return enterprise;
	}

	public void setEnterprise(boolean enterprise) {
		this.enterprise = enterprise;
	}

	public boolean isSMEvalidated() {
		return SMEvalidated;
	}

	public void setSMEvalidated(boolean sMEvalidated) {
		SMEvalidated = sMEvalidated;
	}

}
