org.emonocot.model.registry.Organisation.java Source code

Java tutorial

Introduction

Here is the source code for org.emonocot.model.registry.Organisation.java

Source

/*
 * This is eMonocot, a global online biodiversity information resource.
 *
 * Copyright  20112015 The Board of Trustees of the Royal Botanic Gardens, Kew and The University of Oxford
 *
 * eMonocot is free software: you can redistribute it and/or modify it under the terms of the
 * GNU Affero General Public License as published by the Free Software Foundation, either version 3
 * of the License, or (at your option) any later version.
 *
 * eMonocot is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * The complete text of the GNU Affero General Public License is in the source repository as the file
 * COPYING.  It is also available from <http://www.gnu.org/licenses/>.
 */
package org.emonocot.model.registry;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Transient;

import org.apache.solr.common.SolrInputDocument;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.emonocot.model.Annotation;
import org.emonocot.model.BaseData;
import org.emonocot.model.Searchable;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Where;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.URL;

/**
 * Class that represents the authority an object is harvested from.
 *
 * @author ben
 *
 */
@Entity
public class Organisation extends BaseData implements Comparable<Organisation>, Searchable {

    private static final long serialVersionUID = -2463044801110563816L;

    private Long id;

    private String creatorEmail;

    private String description;

    private String logoUrl;

    private Integer footerLogoPosition;

    private String publisherName;

    private String publisherEmail;

    private String subject;

    private String title;

    private String bibliographicCitation;

    private String creator;

    private Set<Resource> resources;

    private Set<Annotation> annotations = new HashSet<Annotation>();

    /**
     *
     */
    private String commentsEmailedTo;

    private boolean insertCommentsIntoScratchpad;

    public void setId(Long newId) {
        this.id = newId;
    }

    @Id
    @GeneratedValue(generator = "table-hilo", strategy = GenerationType.TABLE)
    public Long getId() {
        return id;
    }

    public boolean getInsertCommentsIntoScratchpad() {
        return insertCommentsIntoScratchpad;
    }

    public void setInsertCommentsIntoScratchpad(boolean insertCommentsIntoScratchpad) {
        this.insertCommentsIntoScratchpad = insertCommentsIntoScratchpad;
    }

    @Transient
    @JsonIgnore
    public String getClassName() {
        return "Organisation";
    }

    public String getCreatorEmail() {
        return creatorEmail;
    }

    /**
     * @param newCreatorEmail the creatorEmail to set
     */
    @Email
    public void setCreatorEmail(String newCreatorEmail) {
        this.creatorEmail = newCreatorEmail;
    }

    /**
     * @return the description
     */
    @Lob
    @Length(max = 1431655761)
    public String getDescription() {
        return description;
    }

    /**
     * @param newDescription the description to set
     */
    public void setDescription(String newDescription) {
        this.description = newDescription;
    }

    /**
     * @return the logoUrl
     */
    @URL
    public String getLogoUrl() {
        return logoUrl;
    }

    /**
     * @param logoUrl the logoUrl to set
     */
    public void setLogoUrl(String logoUrl) {
        this.logoUrl = logoUrl;
    }

    /**
     * @return the footerLogoPosition
     */
    public Integer getFooterLogoPosition() {
        return footerLogoPosition;
    }

    /**
     * @param footerLogoPosition the footerLogoPosition to set
     */
    public void setFooterLogoPosition(Integer footerLogoPosition) {
        this.footerLogoPosition = footerLogoPosition;
    }

    /**
     * @return the publisherName
     */
    public String getPublisherName() {
        return publisherName;
    }

    /**
     * @param newPublisherName the publisherName to set
     */
    public void setPublisherName(String newPublisherName) {
        this.publisherName = newPublisherName;
    }

    /**
     * @return the publisherEmail
     */
    public String getPublisherEmail() {
        return publisherEmail;
    }

    /**
     * @param newPublisherEmail the publisherEmail to set
     */
    public void setPublisherEmail(String newPublisherEmail) {
        this.publisherEmail = newPublisherEmail;
    }

    /**
     * @return the subject
     */
    public String getSubject() {
        return subject;
    }

    /**
     * @param newSubject the subject to set
     */
    public void setSubject(String newSubject) {
        this.subject = newSubject;
    }

    /**
     * @return the title
     */
    @NotEmpty
    public String getTitle() {
        return title;
    }

    /**
     * @param newTitle the title to set
     */
    public void setTitle(String newTitle) {
        this.title = newTitle;
    }

    /**
     * @return the bibliographicCitation
     */
    public String getBibliographicCitation() {
        return bibliographicCitation;
    }

    /**
     * @param bibliographicCitation the bibliographicCitation to set
     */
    public void setBibliographicCitation(String bibliographicCitation) {
        this.bibliographicCitation = bibliographicCitation;
    }

    /**
     * @return the creator
     */
    public String getCreator() {
        return creator;
    }

    /**
     * @param creator the creator to set
     */
    public void setCreator(String creator) {
        this.creator = creator;
    }

    /**
     * @return the jobs
     */
    @JsonIgnore
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "organisation")
    @Cascade(CascadeType.DELETE)
    @OrderBy("lastHarvested DESC")
    public Set<Resource> getResources() {
        return resources;
    }

    /**
     * @param resources the jobs to set
     */
    @JsonIgnore
    public void setResources(Set<Resource> resources) {
        this.resources = resources;
    }

    @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true)
    @JoinColumn(name = "annotatedObjId")
    @Where(clause = "annotatedObjType = 'Organisation'")
    @Cascade({ CascadeType.SAVE_UPDATE, CascadeType.MERGE, CascadeType.DELETE })
    @JsonIgnore
    public Set<Annotation> getAnnotations() {
        return annotations;
    }

    /**
     * @param annotations
     *            the annotations to set
     */
    public void setAnnotations(Set<Annotation> annotations) {
        this.annotations = annotations;
    }

    /**
     * @return the commentsEmailedTo
     */
    public String getCommentsEmailedTo() {
        return commentsEmailedTo;
    }

    /**
     * @param commentsEmailedTo the commentsEmailedTo to set
     */
    @NotBlank
    public void setCommentsEmailedTo(String commentsEmailedTo) {
        this.commentsEmailedTo = commentsEmailedTo;
    }

    public static int nullSafeStringComparator(final String one, final String two) {
        if (one == null ^ two == null) {
            return (one == null) ? -1 : 1;
        }

        if (one == null && two == null) {
            return 0;
        }

        return one.compareToIgnoreCase(two);
    }

    @Override
    public int compareTo(Organisation o) {

        return nullSafeStringComparator(this.title, o.title);
    }

    @Override
    @Transient
    @JsonIgnore
    public String getDocumentId() {
        return getClassName() + "_" + getId();
    }

    @Override
    public SolrInputDocument toSolrInputDocument() {
        SolrInputDocument sid = new SolrInputDocument();
        sid.addField("id", getClassName() + "_" + getId());
        sid.addField("base.id_l", getId());
        sid.addField("base.class_searchable_b", false);
        sid.addField("base.class_s", getClass().getName());
        if (getAuthority() != null) {
            sid.addField("base.authority_s", getAuthority().getIdentifier());
        }
        sid.addField("organisation.bibliographic_citation_s", getBibliographicCitation());
        sid.addField("organisation.creator_t", getCreator());
        sid.addField("organisation.description_t", getDescription());
        sid.addField("organisation.publisher_name_t", getPublisherName());
        sid.addField("organisation.subject_t", getSubject());
        sid.addField("organisation.title_t", getTitle());
        sid.addField("searchable.label_sort", getTitle());
        StringBuilder summary = new StringBuilder().append(getBibliographicCitation()).append(" ")
                .append(getCreator()).append(" ").append(getDescription()).append(" ").append(getPublisherName())
                .append(" ").append(getSubject()).append(" ").append(getTitle());
        sid.addField("searchable.solrsummary_t", summary);
        return sid;
    }

    @Transient
    @JsonIgnore
    public Collection<String> getCommentDestinations() {
        Set<String> destinations = new HashSet<String>();
        if (this.commentsEmailedTo != null && !this.commentsEmailedTo.isEmpty()) {
            destinations.add(commentsEmailedTo);
        }
        if (this.insertCommentsIntoScratchpad) {
            destinations.add("http://" + this.identifier + "/feedback");
        }
        return destinations;
    }
}