2 * Copyright (C) 2017 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
9 package eu
.etaxonomy
.cdm
.api
.service
;
11 import java
.util
.ArrayList
;
12 import java
.util
.Collection
;
13 import java
.util
.List
;
14 import java
.util
.Optional
;
16 import org
.springframework
.beans
.factory
.annotation
.Autowired
;
17 import org
.springframework
.stereotype
.Service
;
18 import org
.springframework
.transaction
.annotation
.Transactional
;
20 import eu
.etaxonomy
.cdm
.api
.service
.pager
.Pager
;
21 import eu
.etaxonomy
.cdm
.api
.service
.pager
.impl
.AbstractPagerImpl
;
22 import eu
.etaxonomy
.cdm
.api
.service
.pager
.impl
.DefaultPagerImpl
;
23 import eu
.etaxonomy
.cdm
.model
.common
.User
;
24 import eu
.etaxonomy
.cdm
.model
.name
.Registration
;
25 import eu
.etaxonomy
.cdm
.model
.name
.RegistrationStatus
;
26 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
27 import eu
.etaxonomy
.cdm
.persistence
.dao
.common
.Restriction
;
28 import eu
.etaxonomy
.cdm
.persistence
.dao
.name
.IRegistrationDao
;
29 import eu
.etaxonomy
.cdm
.persistence
.query
.MatchMode
;
30 import eu
.etaxonomy
.cdm
.persistence
.query
.OrderHint
;
33 * @author a.kohlbecker
38 @Transactional(readOnly
= true)
39 public class RegistrationServiceImpl
extends AnnotatableServiceBase
<Registration
, IRegistrationDao
> implements IRegistrationService
{
46 protected void setDao(IRegistrationDao dao
) {
54 public Pager
<Registration
> page(Optional
<Reference
> reference
, Collection
<RegistrationStatus
> includedStatus
,
55 Integer pageSize
, Integer pageIndex
, List
<String
> propertyPaths
) {
57 long numberOfResults
= dao
.count(reference
, includedStatus
);
59 List
<Registration
> results
= new ArrayList
<>();
60 Integer
[] limitStart
= AbstractPagerImpl
.limitStartforRange(numberOfResults
, pageIndex
, pageSize
);
61 if(limitStart
!= null) {
62 results
= dao
.list(reference
, includedStatus
, limitStart
[0], limitStart
[1], propertyPaths
);
65 return new DefaultPagerImpl
<>(pageIndex
, numberOfResults
, pageSize
, results
);
72 public Pager
<Registration
> page(User submitter
, Collection
<RegistrationStatus
> includedStatus
,
73 Integer pageSize
, Integer pageIndex
, List
<OrderHint
> orderHints
, List
<String
> propertyPaths
) {
75 List
<Restriction
<?
extends Object
>> restrictions
= new ArrayList
<>();
76 if(submitter
!= null){
77 restrictions
.add(new Restriction
<User
>("submitter", MatchMode
.EXACT
, submitter
));
79 if(includedStatus
!= null && !includedStatus
.isEmpty()){
80 restrictions
.add(new Restriction
<RegistrationStatus
>("status", MatchMode
.EXACT
, includedStatus
.toArray(new RegistrationStatus
[includedStatus
.size()])));
83 long numberOfResults
= dao
.count(Registration
.class, restrictions
);
85 List
<Registration
> results
= new ArrayList
<Registration
>();
86 Integer
[] limitStart
= AbstractPagerImpl
.limitStartforRange(numberOfResults
, pageIndex
, pageSize
);
87 if(limitStart
!= null) {
88 results
= dao
.list(Registration
.class, restrictions
, limitStart
[0], limitStart
[1], orderHints
, propertyPaths
);
91 return new DefaultPagerImpl
<>(pageIndex
, numberOfResults
, pageSize
, results
);