- added service method to term service that retrieves terms by TermType
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / IdentificationKeyServiceImpl.java
index e3f113fca3a9b3389a8f23ac6d0274fbdca72dda..b141ee912c60f60687e3eb857c6078f354f27684 100644 (file)
@@ -8,30 +8,48 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;\r
 \r
 import eu.etaxonomy.cdm.api.service.pager.Pager;\r
+import eu.etaxonomy.cdm.api.service.pager.PagerUtils;\r
+import eu.etaxonomy.cdm.api.service.pager.impl.AbstractPagerImpl;\r
 import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;\r
 import eu.etaxonomy.cdm.model.description.IIdentificationKey;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.cdm.persistence.dao.description.IIdentificationKeyDao;\r
 \r
 @Service\r
 @Transactional(readOnly = true)\r
 public class IdentificationKeyServiceImpl implements IIdentificationKeyService {\r
-       \r
-       IIdentificationKeyDao dao;\r
-       \r
-       @Autowired\r
-       public void setDao(IIdentificationKeyDao dao) {\r
-               this.dao = dao;\r
-       }\r
-\r
-       public Pager<IIdentificationKey> page(Integer pageSize, Integer pageNumber,     List<String> propertyPaths) {\r
-               Integer numberOfResults = dao.count();\r
-               List<IIdentificationKey> results = new ArrayList<IIdentificationKey>();\r
-               pageNumber = pageNumber == null ? 0 : pageNumber;\r
-               if(numberOfResults > 0) { // no point checking again\r
-                       Integer start = pageSize == null ? 0 : pageSize * pageNumber;\r
-                       results = dao.list(pageSize, start, propertyPaths);\r
-               }\r
-               return new DefaultPagerImpl<IIdentificationKey>(pageNumber, numberOfResults, pageSize, results);\r
-       }\r
+\r
+    IIdentificationKeyDao dao;\r
+\r
+    @Autowired\r
+    public void setDao(IIdentificationKeyDao dao) {\r
+        this.dao = dao;\r
+    }\r
+\r
+    @Override\r
+    public Pager<IIdentificationKey> page(Integer pageSize, Integer pageNumber,        List<String> propertyPaths) {\r
+        Integer numberOfResults = dao.count();\r
+        List<IIdentificationKey> results = new ArrayList<IIdentificationKey>();\r
+        if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)\r
+            Integer limit = PagerUtils.limitFor(pageSize);\r
+            Integer start = PagerUtils.startFor(pageSize, pageNumber);\r
+            results = dao.list(limit, start, propertyPaths);\r
+        }\r
+        return new DefaultPagerImpl<IIdentificationKey>(pageNumber, numberOfResults, pageSize, results);\r
+    }\r
+\r
+\r
+    @Override\r
+    public <T extends IIdentificationKey> Pager<T> findKeysConvering(TaxonBase taxon,\r
+            Class<T> type, Integer pageSize,\r
+            Integer pageNumber, List<String> propertyPaths) {\r
+\r
+        Long numberOfResults = dao.countByTaxonomicScope(taxon, type);\r
+        List<T> results = new ArrayList<T>();\r
+        if(AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)){\r
+            results = dao.findByTaxonomicScope(taxon, type, pageSize, pageNumber, propertyPaths);\r
+        }\r
+        return new DefaultPagerImpl<T>(pageNumber, numberOfResults.intValue(), pageSize, results);\r
+    }\r
 \r
 }\r