/**
*
*/
package org.inbio.m3s.dao.core;
import java.util.List;
import org.inbio.m3s.dao.GenericBaseDAO;
import org.inbio.m3s.exception.TaxonNotFoundException;
import org.inbio.m3s.model.taxonomy.Taxon;
/**
* @author jgutierrez
*
*/
public interface TaxonDAO extends GenericBaseDAO<Taxon, Integer> {
public List<Taxon> findAllByName(String defaultName) throws IllegalArgumentException;
/**
* This method is useful for the autocompleteManager implementation, receives part of the
* taxon name and looks for all the possible names.
*
* @param partialTaxonName
* @param maxResults
* @return
* @throws IllegalArgumentException
*/
public List<Taxon> findAllByPartialNamePaginated(String partialTaxonName, int maxResults) throws IllegalArgumentException;
/**
*
* @param taxonimicalRangeId
* @param partialTaxonName
* @return
*/
public List<Taxon> findAllByRangeAndPartialNamePaginated(final Integer taxonimicalRangeId,final String partialTaxonName);
public Taxon findByDefaultNameAndKingdomId(String defaultName, Integer kingdomTaxonId) throws TaxonNotFoundException;
public Taxon findBySpecimenId(Integer specimenId) throws IllegalArgumentException;
public List<Taxon> findByObservationId(Integer observationId) throws IllegalArgumentException;
/**
*
* @param taxonDefaultName
* @param taxonomicalRangeId
* @return
*/
public Taxon findByNameAndRange(String taxonDefaultName, Integer taxonomicalRangeId);
/**
*
* @param taxonId
* @return
*/
public List<Taxon> findByOrder(Integer orderTaxonId);
/**
*
* @param taxonId
* @return
*/
public List<Taxon> findByFamily(Integer familyTaxonId);
/**
*
* @param genusTaxonId
* @return
*/
public List<Taxon> findByGenus(Integer genusTaxonId);
/**
*
* @param speciesTaxonId
* @return
*/
public List<Taxon> findBySpecies(Integer speciesTaxonId);
}