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

import org.hibernate.annotations.Index;



@Entity(name = "datasources")
@Table(name = "datasources")
public class DataSource extends AbstractOpenaireObject {

	/**
	 * 
	 */
	private static final long serialVersionUID = -6442675978341641387L;
	
	@Id @GeneratedValue
	@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 = "deposition_page_URL")
	private String depositionPageURL;
	
	@Column(name = "logo_URL")
	private String logoURL;
	
	@Column(name = "contact_email")
	private String contactEmail;
	
	@Column(name = "longitude")
	private float longitude;
	
	@Column(name = "latitude")
	private float latitude;
	
	@Column(name = "timezone")
	private String timezone;
	
	@Column(name = "openairecompliant", nullable=false)
	private boolean openaireCompliant = false;
		
	@ManyToOne
	@JoinColumn(name="typology")
	@Index(name="datasources_typology_idx")
	private DataSourceTypology typology;
	
	@Lob
	@Column(name = "access_info_package")
	private String xmlAccessInfoPackage;
	
	@Lob
	@Column(name = "od_description")
	private String OD_description; 
		
	@Column(name = "od_numberofitems")
	private String OD_numberOfItems; 

	@Column(name = "od_numberofitemsdate")
	private String OD_numberOfItemsDate; 

	@Column(name = "od_subjects")
	private String OD_subjects; 

	@Column(name = "od_policies")
	private String OD_policies;
	
	@Column(name = "od_languages")
	private String OD_languages;
	
	@Column(name = "od_contenttypes")
	private String OD_contentTypes;
		
	@ManyToMany(
		cascade={CascadeType.PERSIST, CascadeType.MERGE},
		mappedBy = "dataSources"
	)
	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 getDepositionPageURL() {
		return depositionPageURL;
	}

	public void setDepositionPageURL(String depositionPageURL) {
		this.depositionPageURL = depositionPageURL;
	}

	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 getLongitude() {
		return longitude;
	}

	public void setLongitude(float longitude) {
		this.longitude = longitude;
	}

	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 boolean isOpenaireCompliant() {
		return openaireCompliant;
	}

	public void setOpenaireCompliant(boolean openaireCompliant) {
		this.openaireCompliant = openaireCompliant;
	}

	public DataSourceTypology getTypology() {
		return typology;
	}

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

	public String getXmlAccessInfoPackage() {
		return xmlAccessInfoPackage;
	}

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

	public String getOD_description() {
		return OD_description;
	}

	public void setOD_description(String oDDescription) {
		OD_description = oDDescription;
	}

	public String getOD_numberOfItems() {
		return OD_numberOfItems;
	}

	public void setOD_numberOfItems(String oDNumberOfItems) {
		OD_numberOfItems = oDNumberOfItems;
	}

	public String getOD_numberOfItemsDate() {
		return OD_numberOfItemsDate;
	}

	public void setOD_numberOfItemsDate(String oDNumberOfItemsDate) {
		OD_numberOfItemsDate = oDNumberOfItemsDate;
	}

	public String getOD_subjects() {
		return OD_subjects;
	}

	public void setOD_subjects(String oDSubjects) {
		OD_subjects = oDSubjects;
	}

	public String getOD_policies() {
		return OD_policies;
	}

	public void setOD_policies(String oDPolicies) {
		OD_policies = oDPolicies;
	}

	public String getOD_languages() {
		return OD_languages;
	}

	public void setOD_languages(String oDLanguages) {
		OD_languages = oDLanguages;
	}

	public String getOD_contentTypes() {
		return OD_contentTypes;
	}

	public void setOD_contentTypes(String oDContentTypes) {
		OD_contentTypes = oDContentTypes;
	}

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

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

}
