Merge branch 'release/5.44.0'
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / IdentificationKeyServiceImpl.java
1 package eu.etaxonomy.cdm.api.service;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.springframework.beans.factory.annotation.Autowired;
7 import org.springframework.stereotype.Service;
8 import org.springframework.transaction.annotation.Transactional;
9
10 import eu.etaxonomy.cdm.api.service.pager.Pager;
11 import eu.etaxonomy.cdm.api.service.pager.PagerUtils;
12 import eu.etaxonomy.cdm.api.service.pager.impl.AbstractPagerImpl;
13 import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
14 import eu.etaxonomy.cdm.model.description.IIdentificationKey;
15 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
16 import eu.etaxonomy.cdm.persistence.dao.description.IIdentificationKeyDao;
17
18 @Service
19 @Transactional(readOnly = true)
20 public class IdentificationKeyServiceImpl implements IIdentificationKeyService {
21
22 IIdentificationKeyDao dao;
23
24 @Autowired
25 public void setDao(IIdentificationKeyDao dao) {
26 this.dao = dao;
27 }
28
29 @Override
30 public Pager<IIdentificationKey> page(Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
31 long numberOfResults = dao.count();
32 List<IIdentificationKey> results = new ArrayList<>();
33 if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
34 Integer limit = PagerUtils.limitFor(pageSize);
35 Integer start = PagerUtils.startFor(pageSize, pageNumber);
36 results = dao.list(limit, start, propertyPaths);
37 }
38 return new DefaultPagerImpl<>(pageNumber, numberOfResults, pageSize, results);
39 }
40
41
42 @Override
43 public <T extends IIdentificationKey> Pager<T> findKeysConvering(TaxonBase taxon,
44 Class<T> type, Integer pageSize,
45 Integer pageNumber, List<String> propertyPaths) {
46
47 Long numberOfResults = dao.countByTaxonomicScope(taxon.getUuid(), type);
48 List<T> results = new ArrayList<T>();
49 if(AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)){
50 results = dao.findByTaxonomicScope(taxon.getUuid(), type, pageSize, pageNumber, propertyPaths);
51 }
52 return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
53 }
54
55 }