/*
* The MIT License
*
* Copyright 2014 Miroslav Cupak (mirocupak@gmail.com).
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.dnastack.bob.persistence.entity;
import com.dnastack.bob.persistence.enumerated.Reference;
import java.util.Objects;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/**
* Beacon.
*
* @author Miroslav Cupak (mirocupak@gmail.com)
* @version 1.0
*/
@Entity
@NamedQueries({
@NamedQuery(name = "findBeaconsByAggregation", query = "SELECT b FROM Beacon b WHERE b.aggregator=:aggregator"),
@NamedQuery(name = "findBeaconsByVisibility", query = "SELECT b FROM Beacon b WHERE b.visible=:visible")
})
public class Beacon implements BasicEntity {
private static final long serialVersionUID = -1451238811291388547L;
@Id
@NotNull
@Column(nullable = false, unique = true)
@Size(min = 1)
private String id;
@NotNull
@Size(min = 1)
@Column(nullable = false)
private String name;
private String url;
@ManyToOne
@NotNull
private Organization organization;
private String description;
private String api;
private String homePage;
private String email;
private String auth;
private String parser;
private String fetcher;
private String requester;
private String chromosomeConverter;
private String positionConverter;
private String alleleConverter;
private String referenceConverter;
@ElementCollection(fetch = FetchType.EAGER)
// TODO: query from datasets or cache properly
private Set<Reference> supportedReferences;
@NotNull
@Column(nullable = false)
private Boolean visible;
@NotNull
@Column(nullable = false)
private Boolean enabled;
@NotNull
@Column(nullable = false)
private Boolean aggregator;
@ManyToMany
private Set<Beacon> parents;
@ManyToMany(mappedBy = "parents")
private Set<Beacon> children;
public Beacon() {
visible = true;
enabled = true;
aggregator = false;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Organization getOrganization() {
return organization;
}
public void setOrganization(Organization organization) {
this.organization = organization;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getApi() {
return api;
}
public void setApi(String api) {
this.api = api;
}
public String getHomePage() {
return homePage;
}
public void setHomePage(String homePage) {
this.homePage = homePage;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAuth() {
return auth;
}
public void setAuth(String auth) {
this.auth = auth;
}
public String getParser() {
return parser;
}
public void setParser(String parser) {
this.parser = parser;
}
public String getFetcher() {
return fetcher;
}
public void setFetcher(String fetcher) {
this.fetcher = fetcher;
}
public String getRequester() {
return requester;
}
public void setRequester(String requester) {
this.requester = requester;
}
public String getChromosomeConverter() {
return chromosomeConverter;
}
public void setChromosomeConverter(String chromosomeConverter) {
this.chromosomeConverter = chromosomeConverter;
}
public String getPositionConverter() {
return positionConverter;
}
public void setPositionConverter(String positionConverter) {
this.positionConverter = positionConverter;
}
public String getAlleleConverter() {
return alleleConverter;
}
public void setAlleleConverter(String alleleConverter) {
this.alleleConverter = alleleConverter;
}
public String getReferenceConverter() {
return referenceConverter;
}
public void setReferenceConverter(String referenceConverter) {
this.referenceConverter = referenceConverter;
}
public Set<Reference> getSupportedReferences() {
return supportedReferences;
}
public void setSupportedReferences(Set<Reference> supportedReferences) {
this.supportedReferences = supportedReferences;
}
public Boolean getVisible() {
return visible;
}
public void setVisible(Boolean visible) {
this.visible = visible;
}
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
public Boolean getAggregator() {
return aggregator;
}
public void setAggregator(Boolean aggregator) {
this.aggregator = aggregator;
}
public Set<Beacon> getParents() {
return parents;
}
public void setParents(Set<Beacon> parents) {
this.parents = parents;
}
public Set<Beacon> getChildren() {
return children;
}
public void setChildren(Set<Beacon> children) {
this.children = children;
}
@Override
public int hashCode() {
int hash = 5;
hash = 97 * hash + Objects.hashCode(this.id);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Beacon other = (Beacon) obj;
if (!Objects.equals(this.id, other.id)) {
return false;
}
return true;
}
@Override
public String toString() {
return "Beacon{" + "id=" + id + ", name=" + name + ", url=" + url + ", organization=" + organization + ", description=" + description + ", api=" + api + ", homePage=" + homePage + ", email=" + email + ", auth=" + auth + ", parser=" + parser + ", fetcher=" + fetcher + ", requester=" + requester + ", chromosomeConverter=" + chromosomeConverter + ", positionConverter=" + positionConverter + ", alleleConverter=" + alleleConverter + ", referenceConverter=" + referenceConverter + ", supportedReferences=" + supportedReferences + ", visible=" + visible + ", enabled=" + enabled + ", aggregator=" + aggregator + '}';
}
}