/**
*
*/
package org.inbio.m3s.dao.ara.impl;
import java.util.Date;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.Session;
import org.inbio.m3s.dao.GenericBaseDAOImpl;
import org.inbio.m3s.dao.core.TaxonDAO;
import org.inbio.m3s.model.ara.ARATaxon;
import org.inbio.m3s.model.taxonomy.Taxon;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
/**
* @author jgutierrez
*
*/
public class ARATaxonDAOImpl extends GenericBaseDAOImpl<Taxon,Integer> implements TaxonDAO {
private static Logger logger = Logger.getLogger(ARATaxonDAOImpl.class);
/* (non-Javadoc)
* @see org.inbio.m3s.dao.core.TaxonDAO#findAllByName(java.lang.String)
*/
@SuppressWarnings("unchecked")
public List<Taxon> findAllByName(final String defaultName)
throws IllegalArgumentException {
logger.debug("getTaxonLite for default name: '" + defaultName + "'.");
HibernateTemplate template = getHibernateTemplate();
return (List<Taxon>) template.execute(new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(
"select t"
+ " from ARATaxon as t"
+ " where t.defaultName = :defaultName");
query.setParameter("defaultName", defaultName);
query.setCacheable(true);
return query.list();
}
});
}
/*
* (non-Javadoc)
* @see org.inbio.m3s.dao.core.TaxonDAO#findAllByPartialNamePaginated(java.lang.String, int, int)
*/
@SuppressWarnings("unchecked")
public List<Taxon> findAllByPartialNamePaginated(final String partialTaxonName, final int maxResults) throws IllegalArgumentException {
logger.debug("findAllByPartialNamePaginated for default name: '" + partialTaxonName + "'.");
HibernateTemplate template = getHibernateTemplate();
return (List<Taxon>) template.execute(new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(
"select t"
+ " from ARATaxon as t"
+ " where t.defaultName like :defaultName");
query.setParameter("defaultName", partialTaxonName);
query.setFirstResult(0);
query.setMaxResults(maxResults);
query.setCacheable(true);
return query.list();
}
});
}
/* (non-Javadoc)
* @see org.inbio.m3s.dao.core.TaxonDAO#findByDefaultNameAndKingdomId(java.lang.String, java.lang.Integer)
*/
public Taxon findByDefaultNameAndKingdomId(final String defaultName,
final Integer kingdomTaxonId) throws IllegalArgumentException {
logger.debug("getTaxonLite for default name: '" + defaultName
+ "' and kingdomTaxonId: '" + kingdomTaxonId + "'.");
HibernateTemplate template = getHibernateTemplate();
return (Taxon) template.execute(new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(
"select t"
+ " from ARATaxon as t"
+ " where t.defaultName = :defaultName"
+" and t.kingdomId = :kingdomTaxonId");
query.setParameter("defaultName", defaultName);
query.setParameter("kingdomTaxonId", kingdomTaxonId);
query.setCacheable(true);
return query.uniqueResult();
}
});
}
/*
* (non-Javadoc)
* @see org.inbio.m3s.dao.core.TaxonDAO#findByOrder(java.lang.Integer)
*/
@SuppressWarnings("unchecked")
public List<Taxon> findByOrder(final Integer orderTaxonId) {
logger.debug("findByOrder with orderTaxonId["+orderTaxonId+"]");
HibernateTemplate template = getHibernateTemplate();
return (List<Taxon>) template.execute(new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(
"select t"
+ " from ARATaxon as t"
+ " where t.orderId = :orderTaxonId"
+ " or t.taxonId = :taxonId");
query.setParameter("orderTaxonId", orderTaxonId);
query.setParameter("taxonId", orderTaxonId);
query.setCacheable(true);
return query.list();
}
});
}
/* (non-Javadoc)
* @see org.inbio.m3s.dao.core.TaxonDAO#findByFamily(java.lang.Integer)
*/
@SuppressWarnings("unchecked")
public List<Taxon> findByFamily(final Integer familyTaxonId) {
logger.debug("findByFamily with familyTaxonId["+familyTaxonId+"]");
HibernateTemplate template = getHibernateTemplate();
return (List<Taxon>) template.execute(new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(
"select t"
+ " from ARATaxon as t"
+ " where t.familyId = :familyTaxonId"
+ " or t.taxonId = :taxonId");
query.setParameter("familyTaxonId", familyTaxonId);
query.setParameter("taxonId", familyTaxonId);
query.setCacheable(true);
return query.list();
}
});
}
/* (non-Javadoc)
* @see org.inbio.m3s.dao.core.TaxonDAO#findByGenus(java.lang.Integer)
*/
@SuppressWarnings("unchecked")
public List<Taxon> findByGenus(final Integer genusTaxonId) {
logger.debug("findByGenus with genusTaxonId["+genusTaxonId+"]");
HibernateTemplate template = getHibernateTemplate();
return (List<Taxon>) template.execute(new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(
"select t"
+ " from ARATaxon as t"
+ " where t.genusId = :genusTaxonId"
+ " or t.taxonId = :taxonId" );
query.setParameter("genusTaxonId", genusTaxonId);
query.setParameter("taxonId", genusTaxonId);
query.setCacheable(true);
return query.list();
}
});
}
/* (non-Javadoc)
* @see org.inbio.m3s.dao.core.TaxonDAO#findByNameAndRange(java.lang.String, java.lang.Integer)
*/
public Taxon findByNameAndRange(final String taxonDefaultName,final Integer taxonomicalRangeId) {
logger.debug("findByNameAndRange with taxonDefaultName["+taxonDefaultName+"] and Range["+taxonomicalRangeId+"]");
HibernateTemplate template = getHibernateTemplate();
return (Taxon) template.execute(new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(
"select t from ARATaxon as t"
+ " where t.defaultName = :taxonDefaultName"
+ " and t.taxonomicalRangeId = :taxonomicalRangeId");
query.setParameter("taxonDefaultName", taxonDefaultName);
query.setParameter("taxonomicalRangeId", taxonomicalRangeId);
query.setCacheable(true);
return query.uniqueResult();
}
});
}
/* (non-Javadoc)
* @see org.inbio.m3s.dao.core.TaxonDAO#findByObservationId(java.lang.Integer)
*/
public List<Taxon> findByObservationId(Integer observationId)
throws IllegalArgumentException {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.inbio.m3s.dao.core.TaxonDAO#findBySpecies(java.lang.Integer)
*/
@SuppressWarnings("unchecked")
public List<Taxon> findBySpecies(final Integer speciesTaxonId) {
logger.debug("findBySpecies with speciesTaxonId["+speciesTaxonId+"]");
HibernateTemplate template = getHibernateTemplate();
return (List<Taxon>) template.execute(new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(
"select t"
+ " from ARATaxon as t"
+ " where t.speciesId = :speciesTaxonId"
+ " or t.taxonId = :taxonId");
query.setParameter("speciesTaxonId", speciesTaxonId);
query.setParameter("taxonId", speciesTaxonId);
query.setCacheable(true);
return query.list();
}
});
}
/* (non-Javadoc)
* @see org.inbio.m3s.dao.core.TaxonDAO#findBySpecimenId(java.lang.Integer)
*/
public Taxon findBySpecimenId(Integer specimenId)
throws IllegalArgumentException {
// TODO Auto-generated method stub
return (ARATaxon) new Taxon(new Integer(7), new Integer(1), "falta hacer", new Date(), "falta hacer", new Integer(1), "falta hacer");
}
/*
* (non-Javadoc)
* @see org.inbio.m3s.dao.impl.BaseDAOImpl#create(java.lang.Object)
*/
@Override
public void create(Taxon entity) throws IllegalArgumentException {
super.create((ARATaxon) entity);
}
/*
* (non-Javadoc)
*
* @see org.inbio.m3s.dao.BaseDAO#delete(java.lang.Object)
*/
@Override
public void update(Taxon entity) throws IllegalArgumentException {
super.update((ARATaxon) entity);
}
/*
* (non-Javadoc)
*
* @see org.inbio.m3s.dao.BaseDAO#update(java.lang.Object)
*/
@Override
public void delete(Taxon entity) throws IllegalArgumentException {
super.delete((ARATaxon) entity);
}
/*
* (non-Javadoc)
* @see org.inbio.m3s.dao.BaseDAO#findById(java.lang.Class, java.lang.Object)
*/
@Override
public Taxon findById(Class<Taxon> entityClass, Integer id) throws IllegalArgumentException {
HibernateTemplate template = getHibernateTemplate();
return (Taxon) template.get(ARATaxon.class, id);
}
/*
* (non-Javadoc)
* @see org.inbio.m3s.dao.BaseDAO#findAll(java.lang.Class)
*/
@SuppressWarnings("unchecked")
@Override
public List<Taxon> findAll(Class<Taxon> entityClass) throws IllegalArgumentException {
HibernateTemplate template = getHibernateTemplate();
return template.loadAll(ARATaxon.class);
}
@SuppressWarnings("unchecked")
public List<Taxon> findAllByRangeAndPartialNamePaginated(
final Integer taxonimicalRangeId, final String partialTaxonName) {
logger.debug("findAllByRangeAndPartialNamePaginated, taxonimicalRangeId["+taxonimicalRangeId+"] and partialTaxonName["+partialTaxonName+"]");
HibernateTemplate template = getHibernateTemplate();
return (List<Taxon>) template.execute(new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(
"select t"
+ " from ARATaxon as t"
+ " where t.taxonomicalRangeId = :taxonimicalRangeId"
+ " and t.defaultName like :defaultName");
query.setParameter("taxonimicalRangeId", taxonimicalRangeId);
query.setParameter("defaultName", partialTaxonName);
query.setCacheable(true);
return query.list();
}
});
}
}