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.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
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 = "description", nullable=true)
	private String description;
	
	@Column(name = "numberOfItems")
	private int numberOfItems = 0;
	*/
	
	@Column(name = "web_site_URL")
	private String webSiteURL;
	
	@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;
	
	@ManyToOne
	@JoinColumn(name="typology")
	private DataSourceTypology typology;
		
	@Column(name = "access_info_package")
	private String xmlAccessInfoPackage;
	
	@ManyToMany(
		cascade={CascadeType.PERSIST, CascadeType.MERGE},
		mappedBy = "dataSources"
	)
	private Collection<Organization> organizations;
	
	/*
	@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE})
	@JoinTable(
	        name="datasources_resulttypes",
	        joinColumns=@JoinColumn(name="datasource"),
	        inverseJoinColumns=@JoinColumn(name="contenttype")
	    )
	private Collection<ResultType> contentTypes;
	
	@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE})
	@JoinTable(
	        name="datasources_languages",
	        joinColumns=@JoinColumn(name="datasource"),
	        inverseJoinColumns=@JoinColumn(name="contentlanguage")
	    )
	private Collection<Language> contentLanguages;
	
	@Column(name = "subjects")
	private String subjects;	
	
	@Column(name = "policies")
	private String policies;
	*/
	
	@Column(name = "optional1", nullable=true)
	private String optional1;

	@Column(name = "optional2", nullable=true)
	private String optional2;

	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 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 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 Collection<Organization> getOrganizations() {
		return organizations;
	}

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

	public String getOptional1() {
		return optional1;
	}

	public void setOptional1(String optional1) {
		this.optional1 = optional1;
	}

	public String getOptional2() {
		return optional2;
	}

	public void setOptional2(String optional2) {
		this.optional2 = optional2;
	}

	/*
	public void setDescription(String description) {
		this.description = description;
	}

	public String getDescription() {
		return description;
	}

	public void setNumberOfItems(int numberOfItems) {
		this.numberOfItems = numberOfItems;
	}

	public int getNumberOfItems() {
		return numberOfItems;
	}

	public Collection<ResultType> getContentTypes() {
		return contentTypes;
	}

	public void setContentTypes(Collection<ResultType> contentTypes) {
		this.contentTypes = contentTypes;
	}

	public Collection<Language> getContentLanguages() {
		return contentLanguages;
	}

	public void setContentLanguages(Collection<Language> contentLanguages) {
		this.contentLanguages = contentLanguages;
	}

	public String getSubjects() {
		return subjects;
	}

	public void setSubjects(String subjects) {
		this.subjects = subjects;
	}

	public String getPolicies() {
		return policies;
	}

	public void setPolicies(String policies) {
		this.policies = policies;
	}
	*/
}
