X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/blobdiff_plain/892efc6951acfa51b009e26798a12033d2a6335b..503a869b4d6597c13223ffb5a6747828ec113058:/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IdentificationKeyServiceImpl.java diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IdentificationKeyServiceImpl.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IdentificationKeyServiceImpl.java index f8bf3548f9..b141ee912c 100644 --- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IdentificationKeyServiceImpl.java +++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IdentificationKeyServiceImpl.java @@ -5,34 +5,51 @@ import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import eu.etaxonomy.cdm.api.service.pager.Pager; +import eu.etaxonomy.cdm.api.service.pager.PagerUtils; +import eu.etaxonomy.cdm.api.service.pager.impl.AbstractPagerImpl; import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl; import eu.etaxonomy.cdm.model.description.IIdentificationKey; +import eu.etaxonomy.cdm.model.taxon.TaxonBase; import eu.etaxonomy.cdm.persistence.dao.description.IIdentificationKeyDao; @Service -@Transactional(readOnly = true, propagation = Propagation.SUPPORTS) +@Transactional(readOnly = true) public class IdentificationKeyServiceImpl implements IIdentificationKeyService { - - IIdentificationKeyDao dao; - - @Autowired - public void setDao(IIdentificationKeyDao dao) { - this.dao = dao; - } - - public Pager page(Integer pageSize, Integer pageNumber, List propertyPaths) { - Integer numberOfResults = dao.count(); - List results = new ArrayList(); - pageNumber = pageNumber == null ? 0 : pageNumber; - if(numberOfResults > 0) { // no point checking again - Integer start = pageSize == null ? 0 : pageSize * pageNumber; - results = dao.list(pageSize, start, propertyPaths); - } - return new DefaultPagerImpl(pageNumber, numberOfResults, pageSize, results); - } + + IIdentificationKeyDao dao; + + @Autowired + public void setDao(IIdentificationKeyDao dao) { + this.dao = dao; + } + + @Override + public Pager page(Integer pageSize, Integer pageNumber, List propertyPaths) { + Integer numberOfResults = dao.count(); + List results = new ArrayList(); + if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize) + Integer limit = PagerUtils.limitFor(pageSize); + Integer start = PagerUtils.startFor(pageSize, pageNumber); + results = dao.list(limit, start, propertyPaths); + } + return new DefaultPagerImpl(pageNumber, numberOfResults, pageSize, results); + } + + + @Override + public Pager findKeysConvering(TaxonBase taxon, + Class type, Integer pageSize, + Integer pageNumber, List propertyPaths) { + + Long numberOfResults = dao.countByTaxonomicScope(taxon, type); + List results = new ArrayList(); + if(AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)){ + results = dao.findByTaxonomicScope(taxon, type, pageSize, pageNumber, propertyPaths); + } + return new DefaultPagerImpl(pageNumber, numberOfResults.intValue(), pageSize, results); + } }