org.emonocot.model.PhylogeneticTree.java Source code

Java tutorial

Introduction

Here is the source code for org.emonocot.model.PhylogeneticTree.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;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
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.JoinTable;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
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 com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import org.emonocot.model.constants.MediaType;
import org.emonocot.model.marshall.json.ReferenceDeserializer;
import org.emonocot.model.marshall.json.ReferenceSerializer;
import org.emonocot.model.marshall.json.TaxonDeserializer;
import org.emonocot.model.marshall.json.TaxonSerializer;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Where;

@Entity
public class PhylogeneticTree extends Multimedia {

    /**
     *
     */
    private static final long serialVersionUID = 6377124432983928528L;

    private Long id;

    private Set<Taxon> taxa = new HashSet<Taxon>();

    private Set<Taxon> leaves = new HashSet<Taxon>();

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

    private String phylogeny;

    private List<Comment> comments = new ArrayList<Comment>();

    private Long numberOfExternalNodes;

    private Reference bibliographicReference;

    private boolean hasBranchLengths;

    public Long getNumberOfExternalNodes() {
        return numberOfExternalNodes;
    }

    public void setNumberOfExternalNodes(Long numberOfExternalNodes) {
        this.numberOfExternalNodes = numberOfExternalNodes;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @Cascade({ CascadeType.SAVE_UPDATE })
    @JsonSerialize(using = ReferenceSerializer.class)
    public Reference getBibliographicReference() {
        return bibliographicReference;
    }

    @JsonDeserialize(using = ReferenceDeserializer.class)
    public void setBibliographicReference(Reference bibliographicReference) {
        this.bibliographicReference = bibliographicReference;
    }

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

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

    @Override
    public void setAnnotations(Set<Annotation> annotations) {
        this.annotations = annotations;
    }

    @Override
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "Taxon_PhylogeneticTree", joinColumns = {
            @JoinColumn(name = "trees_id") }, inverseJoinColumns = { @JoinColumn(name = "Taxon_id") })
    @Cascade({ CascadeType.SAVE_UPDATE, CascadeType.MERGE })
    @JsonSerialize(contentUsing = TaxonSerializer.class)
    public Set<Taxon> getTaxa() {
        return taxa;
    }

    @Override
    @JsonDeserialize(contentUsing = TaxonDeserializer.class)
    public void setTaxa(Set<Taxon> taxa) {
        this.taxa = taxa;
    }

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "PhylogeneticTree_Taxon", joinColumns = {
            @JoinColumn(name = "PhylogeneticTree_id") }, inverseJoinColumns = { @JoinColumn(name = "leaves_id") })
    @Cascade({ CascadeType.SAVE_UPDATE, CascadeType.MERGE })
    @JsonSerialize(contentUsing = TaxonSerializer.class)
    public Set<Taxon> getLeaves() {
        return leaves;
    }

    @JsonDeserialize(contentUsing = TaxonDeserializer.class)
    public void setLeaves(Set<Taxon> leaves) {
        this.leaves = leaves;
    }

    @Lob
    public String getPhylogeny() {
        return phylogeny;
    }

    public void setPhylogeny(String phylogeny) {
        this.phylogeny = phylogeny;
    }

    public void setHasBranchLengths(boolean hasBranchLengths) {
        this.hasBranchLengths = hasBranchLengths;
    }

    public boolean getHasBranchLengths() {
        return hasBranchLengths;
    }

    @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true)
    @JoinColumn(name = "commentPage_id")
    @OrderBy("created DESC")
    @Where(clause = "commentPage_type = 'PhylogeneticTree'")
    @Cascade({ CascadeType.SAVE_UPDATE, CascadeType.MERGE, CascadeType.DELETE })
    @JsonIgnore
    public List<Comment> getComments() {
        return comments;
    }

    /**
     * @param comments - Comments made about this tree
     */
    @JsonIgnore
    public void setComments(List<Comment> comments) {
        this.comments = comments;
    }

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

    /* (non-Javadoc)
     * @see org.emonocot.model.Multimedia#getType()
     */
    @Override
    @Transient
    public MediaType getType() {
        return MediaType.InteractiveResource;
    }

    @Override
    public SolrInputDocument toSolrInputDocument() {
        SolrInputDocument sid = super.toSolrInputDocument();
        //sid.addField("phylogeny.title_t", getTitle());
        //addField(sid,"phylogeny.creator_t", getCreator());
        //addField(sid,"phylogeny.description_t", getDescription());
        StringBuilder summary = new StringBuilder().append(getTitle()).append(" ").append(getCreator()).append(" ")
                .append(getDescription());
        if (getTaxa() != null) {
            boolean first = true;
            for (Taxon t : getTaxa()) {
                if (first) {
                    //addField(sid,"taxon.class_s", t.getClazz());
                    //addField(sid,"taxon.kingdom_s", t.getKingdom());
                    //addField(sid,"taxon.phylum_s", t.getPhylum());
                    addField(sid, "taxon.subgenus_s", t.getSubgenus());
                    addField(sid, "taxon.order_s", t.getOrder());
                }
                addField(sid, "taxon.family_ss", t.getFamily());
                addField(sid, "taxon.genus_ss", t.getGenus());
                addField(sid, "taxon.subfamily_ss", t.getSubfamily());
                addField(sid, "taxon.subtribe_ss", t.getSubtribe());
                addField(sid, "taxon.tribe_ss", t.getTribe());
                summary.append(" ").append(t.getClazz()).append(" ").append(t.getClazz()).append(" ")
                        .append(t.getFamily()).append(" ").append(t.getGenus()).append(" ").append(t.getKingdom())
                        .append(" ").append(t.getOrder()).append(" ").append(t.getPhylum()).append(" ")
                        .append(t.getSubfamily()).append(" ").append(t.getSubgenus()).append(" ")
                        .append(t.getSubtribe()).append(" ").append(t.getTribe());
                first = false;
            }
        }
        sid.addField("searchable.solrsummary_t", summary.toString());

        return sid;
    }
}