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
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
}\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
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