Merged search changes from 2.0
authora.babadshanjan <a.babadshanjan@localhost>
Thu, 28 May 2009 12:36:39 +0000 (12:36 +0000)
committera.babadshanjan <a.babadshanjan@localhost>
Thu, 28 May 2009 12:36:39 +0000 (12:36 +0000)
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonServiceImpl.java

index 7d6500fd4ce066adf0441fc9bdbbbb69ce7fde53..ff573fb93e601890b1f90f328d240f98c3feb185 100644 (file)
@@ -52,6 +52,7 @@ import eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao;
 import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonDao;\r
 import eu.etaxonomy.cdm.persistence.fetch.CdmFetch;\r
 import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
+import eu.etaxonomy.cdm.persistence.query.SelectMode;\r
 \r
 \r
 @Service\r
@@ -343,41 +344,48 @@ public class TaxonServiceImpl extends IdentifiableServiceBase<TaxonBase,ITaxonDa
        public Pager<IdentifiableEntity> findTaxaAndNames(ITaxonServiceConfigurator configurator) {\r
                \r
                List<IdentifiableEntity> results = new ArrayList<IdentifiableEntity>();\r
-               int numberOfResults = 0;\r
+               int numberOfResults = 0; // overall number of results (as opposed to number of results per page)\r
+               List<TaxonBase> taxa = null; \r
 \r
-               // TODO: Implement matching count-methods for the search methods\r
-\r
-               if(configurator.isDoTaxa()) {\r
-                       int numberTaxaResults = dao.countTaxaByName(configurator.getSearchString(), configurator.getMatchMode(),\r
-                                       true);\r
-//                     int numberTaxaResults = dao.countTaxaByName(configurator.getSearchString(), true, configurator.getSec());\r
-                       List<TaxonBase> taxa =  \r
-                               dao.getTaxaByName(configurator.getSearchString(), configurator.getMatchMode(),\r
-                                               true, configurator.getPageSize(), configurator.getPageNumber());\r
-//                     dao.getTaxaByName(configurator.getSearchString(), true, configurator.getSec());\r
-                       if (logger.isDebugEnabled()) { logger.debug(taxa.size() + " matching taxa counted"); }\r
-                       if (taxa.size() > 0) {\r
-                               results.addAll(taxa);\r
-                               numberOfResults += numberTaxaResults;\r
-                       }\r
-               }\r
-\r
-               if(configurator.isDoSynonyms()) {\r
-                       int numberSynonymResults = dao.countTaxaByName(configurator.getSearchString(), configurator.getMatchMode(),\r
-                                       false);\r
-                       List<TaxonBase> synonyms = \r
-                               dao.getTaxaByName(configurator.getSearchString(), configurator.getMatchMode(),\r
-                                               false, configurator.getPageSize(), configurator.getPageNumber());\r
-//                     dao.getTaxaByName(configurator.getSearchString(), false, configurator.getSec());\r
-                       if (logger.isDebugEnabled()) { logger.debug(synonyms.size() + " matching synonym(s) counted"); }\r
-                       if (synonyms.size() > 0) {\r
-                               results.addAll(synonyms);\r
-                               numberOfResults += numberSynonymResults;\r
-                       }\r
+               // Taxa and synonyms\r
+               \r
+               int numberTaxaResults = 0;\r
+               \r
+               if (configurator.isDoTaxa() && configurator.isDoSynonyms()) {\r
+                       taxa = dao.getTaxaByName(configurator.getSearchString(), \r
+                                       configurator.getMatchMode(), SelectMode.ALL, configurator.getSec(),\r
+                                               configurator.getPageSize(), configurator.getPageNumber());\r
+                       numberTaxaResults = \r
+                               dao.countTaxaByName(configurator.getSearchString(), \r
+                                               configurator.getMatchMode(), SelectMode.ALL, configurator.getSec());\r
+                       \r
+               } else if(configurator.isDoTaxa()) {\r
+                       taxa = dao.getTaxaByName(configurator.getSearchString(), \r
+                                       configurator.getMatchMode(), SelectMode.TAXA, configurator.getSec(),\r
+                                       configurator.getPageSize(), configurator.getPageNumber());\r
+                       numberTaxaResults = \r
+                               dao.countTaxaByName(configurator.getSearchString(), \r
+                                               configurator.getMatchMode(), SelectMode.TAXA, configurator.getSec());\r
+                       \r
+               } else if (configurator.isDoSynonyms()) {\r
+                       taxa = dao.getTaxaByName(configurator.getSearchString(), \r
+                                       configurator.getMatchMode(), SelectMode.SYNONYMS, configurator.getSec(),\r
+                                       configurator.getPageSize(), configurator.getPageNumber());\r
+                       numberTaxaResults = \r
+                               dao.countTaxaByName(configurator.getSearchString(), \r
+                                               configurator.getMatchMode(), SelectMode.SYNONYMS, configurator.getSec());\r
                }\r
 \r
+               if (logger.isDebugEnabled()) { logger.debug(numberTaxaResults + " matching taxa counted"); }\r
+               \r
+               results.addAll(taxa);\r
+               \r
+               numberOfResults += numberTaxaResults;\r
+               \r
+               // Names without taxa \r
+               \r
                if (configurator.isDoNamesWithoutTaxa()) {\r
-                       int numberNameResults = nameDao.countByName(configurator.getSearchString(), configurator.getMatchMode(), null);\r
+            int numberNameResults = 0;\r
                        List<? extends TaxonNameBase<?,?>> names = \r
                                nameDao.findByName(configurator.getSearchString(), configurator.getMatchMode(), \r
                                                configurator.getPageSize(), configurator.getPageNumber(), null);\r
@@ -394,9 +402,10 @@ public class TaxonServiceImpl extends IdentifiableServiceBase<TaxonBase,ITaxonDa
                        }\r
                }\r
                \r
+               // Taxa from common names\r
+               \r
                if (configurator.isDoTaxaByCommonNames()) {\r
-                       int numberCommonNameResults = descriptionDao.countDescriptionByCommonName(configurator.getSearchString(), \r
-                                       configurator.getMatchMode());\r
+                       int numberCommonNameResults = 0;\r
                        List<CommonTaxonName> commonTaxonNames = \r
                                descriptionDao.searchDescriptionByCommonName(configurator.getSearchString(), \r
                                                configurator.getMatchMode(), configurator.getPageSize(), configurator.getPageNumber());\r
@@ -406,9 +415,13 @@ public class TaxonServiceImpl extends IdentifiableServiceBase<TaxonBase,ITaxonDa
                                        DescriptionBase description = commonTaxonName.getInDescription();\r
                                        description = HibernateProxyHelper.deproxy(description, DescriptionBase.class);\r
                                        if (description instanceof TaxonDescription) {\r
-                                               Taxon taxon = ((TaxonDescription)description).getTaxon();\r
-                                               results.add(taxon);\r
-                                               numberCommonNameResults++;\r
+                                               TaxonDescription taxonDescription = HibernateProxyHelper.deproxy(description, TaxonDescription.class);\r
+                                               Taxon taxon = taxonDescription.getTaxon();\r
+                                               taxon = HibernateProxyHelper.deproxy(taxon, Taxon.class);\r
+                                               if (!results.contains(taxon) && !taxon.isMisappliedName()) {\r
+                                                       results.add(taxon);\r
+                                                       numberCommonNameResults++;\r
+                                               }\r
                                        } else {\r
                                                logger.warn("Description of " + commonTaxonName.getName() + " is not an instance of TaxonDescription");\r
                                        }\r