ref #6612 PropertyNameMatchMode to Restriction class which contains the values to...
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / RegistrationServiceImpl.java
index 3c4cd46956a9cf17b6d2d196a45bf16997deaf57..8bb246686c2c9b9cd4b55861177feebd5f5a03a8 100644 (file)
@@ -11,20 +11,22 @@ package eu.etaxonomy.cdm.api.service;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Optional;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 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.common.User;
 import eu.etaxonomy.cdm.model.name.Registration;
 import eu.etaxonomy.cdm.model.name.RegistrationStatus;
-import eu.etaxonomy.cdm.model.reference.IReference;
+import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.cdm.persistence.dao.common.Restriction;
 import eu.etaxonomy.cdm.persistence.dao.name.IRegistrationDao;
+import eu.etaxonomy.cdm.persistence.query.MatchMode;
 import eu.etaxonomy.cdm.persistence.query.OrderHint;
 
 /**
@@ -49,38 +51,44 @@ public class RegistrationServiceImpl extends AnnotatableServiceBase<Registration
      * {@inheritDoc}
      */
     @Override
-    public Pager<Registration> page(Integer pageSize, Integer pageIndex, IReference reference,
-            Collection<RegistrationStatus> includeStatus, List<OrderHint> orderHints, List<String> propertyPaths) {
+    public Pager<Registration> page(Optional<Reference> reference, Collection<RegistrationStatus> includedStatus,
+            Integer pageSize, Integer pageIndex, List<String> propertyPaths) {
 
-        long numberOfResults = dao.count(reference);
+        long numberOfResults = dao.count(reference, includedStatus);
 
-        List<Registration> results = new ArrayList<Registration>();
-        if(AbstractPagerImpl.hasResultsInRange(numberOfResults, pageIndex, pageSize)) {
-            Integer limit = PagerUtils.limitFor(pageSize);
-            Integer start = PagerUtils.startFor(pageSize, pageIndex);
-            results = dao.list(limit, start, reference, orderHints, propertyPaths);
+        List<Registration> results = new ArrayList<>();
+        Integer [] limitStart = AbstractPagerImpl.limitStartforRange(numberOfResults, pageIndex, pageSize);
+        if(limitStart != null) {
+            results = dao.list(reference, includedStatus, limitStart[0], limitStart[1], propertyPaths);
         }
 
-         return new DefaultPagerImpl<Registration>(pageIndex, numberOfResults, pageSize, results);
+        return new DefaultPagerImpl<>(pageIndex, numberOfResults, pageSize, results);
     }
 
     /**
      * {@inheritDoc}
      */
     @Override
-    public Pager<Registration> page(Integer pageSize, Integer pageIndex, User submitter, Collection<RegistrationStatus> includeStatus,
-            List<OrderHint> orderHints, List<String> propertyPaths) {
+    public Pager<Registration> page(User submitter, Collection<RegistrationStatus> includedStatus,
+            Integer pageSize, Integer pageIndex, List<OrderHint> orderHints, List<String> propertyPaths) {
+
+        List<Restriction<? extends Object>> restrictions = new ArrayList<>();
+        if(submitter != null){
+            restrictions.add(new Restriction<User>("submitter", MatchMode.EXACT, submitter));
+        }
+        if(includedStatus != null && !includedStatus.isEmpty()){
+            restrictions.add(new Restriction<RegistrationStatus>("status", MatchMode.EXACT, includedStatus.toArray(new RegistrationStatus[includedStatus.size()])));
+        }
 
-        long numberOfResults = dao.count(Registration.class, "submitter", submitter, null);
+        long numberOfResults = dao.count(Registration.class, restrictions);
 
         List<Registration> results = new ArrayList<Registration>();
-        if(AbstractPagerImpl.hasResultsInRange(numberOfResults, pageIndex, pageSize)) {
-            Integer limit = PagerUtils.limitFor(pageSize);
-            Integer start = PagerUtils.startFor(pageSize, pageIndex);
-            results = dao.list(Registration.class, "submitter", submitter, null, limit, start, orderHints, propertyPaths);
+        Integer [] limitStart = AbstractPagerImpl.limitStartforRange(numberOfResults, pageIndex, pageSize);
+        if(limitStart != null) {
+            results = dao.list(Registration.class, restrictions, limitStart[0], limitStart[1], orderHints, propertyPaths);
         }
 
-         return new DefaultPagerImpl<Registration>(pageIndex, numberOfResults, pageSize, results);
+        return new DefaultPagerImpl<>(pageIndex, numberOfResults, pageSize, results);
     }