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;
/**
* {@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);
}