package eu.dnetlib.openaire.db.objects;

import java.io.Serializable;
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.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity(name = "datasources")
@Table(name = "datasources")
public class DataSource implements Serializable {

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

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

	
	@Column(name = "official_name")
	private String officialName;
	
	@Column(name = "english_name", nullable=true)
	private String englishName;
	
	@Column(name = "web_site_URL")
	private String webSiteURL;
	
	@Column(name = "logo_URL")
	private String logoURL;
	
	@Column(name = "contact_email")
	private String contactEmail;
	
	@Column(name = "Stringitude")
	private float Stringitude;
	
	@Column(name = "latitude")
	private float latitude;
	
	@Column(name = "timezone")
	private String timezone;
	
	@Column(name = "typology")
	private String typology;
		
	@Column(name = "access_info_package")
	private String xmlAccessInfoPackage;
	
	@OneToMany(mappedBy="datasource", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
	private Collection<Manifestation> manifestations;
	
	@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE})
	@JoinTable(
        name="organizations_datasources",
        joinColumns=@JoinColumn(name="datasourceID"),
        inverseJoinColumns=@JoinColumn(name="organizationID")
    )
	private Collection<Organization> organizations;

	public String getDatasourceID() {
		return datasourceID;
	}

	public void setDatasourceID(String datasourceID) {
		this.datasourceID = datasourceID;
	}

	public String getOfficialName() {
		return officialName;
	}

	public void setOfficialName(String officialName) {
		this.officialName = officialName;
	}

	public String getEnglishName() {
		return englishName;
	}

	public void setEnglishName(String englishName) {
		this.englishName = englishName;
	}

	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 String getContactEmail() {
		return contactEmail;
	}

	public void setContactEmail(String contactEmail) {
		this.contactEmail = contactEmail;
	}

	public float getStringitude() {
		return Stringitude;
	}

	public void setStringitude(float Stringitude) {
		this.Stringitude = Stringitude;
	}

	public float getLatitude() {
		return latitude;
	}

	public void setLatitude(float latitude) {
		this.latitude = latitude;
	}

	public String getTimezone() {
		return timezone;
	}

	public void setTimezone(String timezone) {
		this.timezone = timezone;
	}

	public String getTypology() {
		return typology;
	}

	public void setTypology(String typology) {
		this.typology = typology;
	}

	public String getXmlAccessInfoPackage() {
		return xmlAccessInfoPackage;
	}

	public void setXmlAccessInfoPackage(String xmlAccessInfoPackage) {
		this.xmlAccessInfoPackage = xmlAccessInfoPackage;
	}

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

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

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

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

}
