/alaspatial/src/main/java/org/ala/spatial/dao/SpeciesDAOImpl.java

http://alageospatialportal.googlecode.com/ · Java · 255 lines · 129 code · 36 blank · 90 comment · 11 complexity · 8e7c11400ed9e037781f153c5774bc2b MD5 · raw file

  1. package org.ala.spatial.dao;
  2. import java.util.Hashtable;
  3. import java.util.List;
  4. import java.util.Map;
  5. import java.util.Vector;
  6. import org.ala.spatial.model.CommonName;
  7. import org.ala.spatial.model.Species;
  8. import org.ala.spatial.model.TaxonNames;
  9. import org.ala.spatial.model.ValidTaxonName;
  10. import org.hibernate.Query;
  11. import org.hibernate.Session;
  12. import org.hibernate.SessionFactory;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.beans.factory.annotation.Qualifier;
  15. import org.springframework.orm.hibernate3.HibernateCallback;
  16. import org.springframework.orm.hibernate3.HibernateTemplate;
  17. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
  18. import org.springframework.stereotype.Service;
  19. /**
  20. * Implementation class for any of the species search.
  21. * Currently, all species seach is combined into a single class
  22. * for easier management
  23. *
  24. * @author ajayr
  25. * @version 1.0
  26. *
  27. */
  28. @Service(value="speciesDAO")
  29. public class SpeciesDAOImpl extends HibernateDaoSupport implements SpeciesDAO {
  30. /*
  31. private SessionFactory sessionFactory;
  32. public void setSessionFactory(SessionFactory sessionFactory) {
  33. this.sessionFactory = sessionFactory;
  34. }
  35. */
  36. /**
  37. private HibernateTemplate hibernateTemplate;
  38. public void setSessionFactory(SessionFactory sessionFactory) {
  39. //System.out.println("Setting session factory!!");
  40. this.hibernateTemplate = new HibernateTemplate(sessionFactory);
  41. }
  42. **/
  43. private HibernateTemplate hibernateTemplate;
  44. @Autowired
  45. public SpeciesDAOImpl(@Qualifier("sessionFactory") SessionFactory sessionFactory) {
  46. this.setSessionFactory(sessionFactory);
  47. this.hibernateTemplate = new HibernateTemplate(sessionFactory);
  48. }
  49. /*
  50. * Test method to get some species quickly
  51. *
  52. * @return List of species
  53. */
  54. // TODO maybe remove this class eventually?
  55. @Override
  56. public List<Species> getSpecies() {
  57. Vector tmpSpecies = new Vector();
  58. Species s = new Species();
  59. s.setSpecies("Test name 1");
  60. tmpSpecies.add(s);
  61. Species s2 = new Species();
  62. s2.setSpecies("Test name 2");
  63. tmpSpecies.add(s2);
  64. return tmpSpecies;
  65. }
  66. /*
  67. * Get all records for a given taxon name.
  68. *
  69. * @param name Taxon name
  70. * @return List of species
  71. */
  72. @Override
  73. public List<Species> getRecordsByNameLevel(String name, String level) { // throws DataAccessException
  74. //return this.sessionFactory.getCurrentSession().createQuery("from Species where scientificname = ? ").setParameter(0, name).list();
  75. level = level.trim().toLowerCase();
  76. if (level.equalsIgnoreCase("g") || level.equalsIgnoreCase("genus")) {
  77. level = "genus";
  78. } else if (level.equalsIgnoreCase("sp") || level.equalsIgnoreCase("species")) {
  79. level = "species";
  80. } else if (level.equalsIgnoreCase("sn")) {
  81. level = "scientificname";
  82. } else if (level.equalsIgnoreCase("f")) {
  83. level = "family";
  84. } else if (level.equalsIgnoreCase("cn")) {
  85. level = "commonname";
  86. }
  87. //Object[] params = {level, name};
  88. //return hibernateTemplate.find("from Species where ? = ? ", params);
  89. /*
  90. Session session = getSession(false);
  91. try {
  92. Query query = session.createQuery("from Species where scientificname = ?");
  93. query.setString(0, name);
  94. List result = query.list();
  95. if (result == null) {
  96. //throw new MyException("No search results.");
  97. }
  98. return result;
  99. } catch (HibernateException ex) {
  100. throw convertHibernateAccessException(ex);
  101. }
  102. */
  103. final String theName = name; //.toLowerCase();
  104. final String theLevel = level.toLowerCase();
  105. return (List) this.hibernateTemplate.execute(new HibernateCallback() {
  106. @Override
  107. public List<Species> doInHibernate(Session session) {
  108. Query query = session.createQuery("from Species where "+theLevel+" = :name AND (longitude <> '' or longitude <> '') "); // (:level)
  109. //query.setParameter(0, theLevel);
  110. //query.setParameter(1, theName);
  111. //query.setString("level", theLevel);
  112. query.setString("name", theName);
  113. return query.list();
  114. }
  115. });
  116. }
  117. /*
  118. * Get all records for a given taxon id
  119. *
  120. * @param name Taxon id
  121. */
  122. @Override
  123. public List<Species> getRecordsById(String id) {
  124. //throw new UnsupportedOperationException("Not supported yet.");
  125. final String lsid = id + "%";
  126. return (List) this.hibernateTemplate.execute(new HibernateCallback() {
  127. @Override
  128. public List<Species> doInHibernate(Session session) {
  129. //Query query = session.createQuery("from Species where taxonconceptid = :lsid AND (longitude <> '' or longitude <> '') "); // (:level)
  130. //Query query = session.createQuery("from Species where scientificname like :lsid AND (longitude <> '' or longitude <> '') "); // (:level)
  131. Query query = session.createQuery("from Species where scientificname like :id AND (longitude is not null or longitude is not null) "); // (:level)
  132. //query.setParameter(0, theLevel);
  133. //query.setParameter(1, theName);
  134. //query.setString("level", theLevel);
  135. query.setString("id", lsid);
  136. return query.list();
  137. }
  138. });
  139. }
  140. /*
  141. * Test methond to get taxon names as Master Names List.
  142. *
  143. * @return List of names
  144. */
  145. @Override
  146. public List<TaxonNames> getNames() {
  147. Vector tmpSpecies = new Vector();
  148. TaxonNames s = new TaxonNames();
  149. s.setTname("Test name 1");
  150. s.setTlevel("species");
  151. tmpSpecies.add(s);
  152. TaxonNames s2 = new TaxonNames();
  153. s2.setTname("Test name 2");
  154. s2.setTlevel("species");
  155. tmpSpecies.add(s2);
  156. TaxonNames s3 = new TaxonNames();
  157. s3.setTname("Test name 3");
  158. s3.setTlevel("genus");
  159. tmpSpecies.add(s3);
  160. TaxonNames s4 = new TaxonNames();
  161. s4.setTname("Test name 4");
  162. s4.setTlevel("phylum");
  163. tmpSpecies.add(s4);
  164. return tmpSpecies;
  165. }
  166. /*
  167. * Get all taxon names list.
  168. *
  169. * @param name Taxon name
  170. * @return List of names
  171. */
  172. @Override
  173. public List<TaxonNames> findByName(String name) {
  174. return hibernateTemplate.find("from TaxonNames where lower(tname) like ? ", (name.toLowerCase() + "%"));
  175. }
  176. /*
  177. * Get all taxon names list, compatible with paging.
  178. *
  179. * @param name Taxon name
  180. * @param limit limit factor for paging
  181. * @param offset offset factor for paging
  182. * @return Map of names and the total count available
  183. */
  184. @Override
  185. public Map findByName(final String name, final int limit, final int offset) { // throws DataAccessException
  186. //Object[] mnldetails = {(name.toLowerCase() + "%"), limit, offset};
  187. //return hibernateTemplate.find("from TaxonNames where lower(tname) like ? LIMIT ? OFFSET ? ", mnldetails);
  188. int namesCount = ((Long) hibernateTemplate.find("select count(*) from TaxonNames where lower(tname) like ? ", (name.toLowerCase() + "%")).get(0)).intValue();
  189. List namesList = (List) this.hibernateTemplate.execute(new HibernateCallback() {
  190. @Override
  191. public List<TaxonNames> doInHibernate(Session session) {
  192. Query query = session.createQuery("from TaxonNames where lower(tname) LIKE ? ");
  193. query.setParameter(0, (name.toLowerCase() + "%"));
  194. query.setFirstResult(offset);
  195. query.setMaxResults(limit);
  196. return query.list();
  197. }
  198. });
  199. Hashtable<String, Object> htNames = new Hashtable();
  200. htNames.put("totalCount", namesCount);
  201. htNames.put("taxanames", namesList);
  202. return htNames;
  203. }
  204. @Override
  205. public List<CommonName> getCommonNames(String name) {
  206. //return hibernateTemplate.find("from CommonName where lower(commonname) like ? ", "%" + (name.toLowerCase() + "%"));
  207. //to allow easy removal of scientific name duplicates
  208. return hibernateTemplate.find("from CommonName where lower(commonname) like ? order by scientificname", "%" + (name.toLowerCase() + "%"));
  209. }
  210. @Override
  211. public List<ValidTaxonName> findById(String lsid) {
  212. System.out.println("findById: " + lsid.toLowerCase());
  213. List l = hibernateTemplate.find("from ValidTaxonName where lower(guid) = ? ", (lsid.toLowerCase()));
  214. System.out.println("returning " + l.size() + " items.");
  215. return l;
  216. }
  217. }