Revision e14b9808
Added by Andreas Kohlbecker over 2 years ago
cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/AbstractController.java | ||
---|---|---|
8 | 8 |
*/ |
9 | 9 |
package eu.etaxonomy.cdm.remote.controller; |
10 | 10 |
|
11 |
import java.io.IOException; |
|
11 | 12 |
import java.io.UnsupportedEncodingException; |
13 |
import java.util.ArrayList; |
|
12 | 14 |
import java.util.Arrays; |
15 |
import java.util.Collection; |
|
13 | 16 |
import java.util.List; |
14 | 17 |
|
15 | 18 |
import javax.servlet.http.HttpServletRequest; |
19 |
import javax.servlet.http.HttpServletResponse; |
|
16 | 20 |
|
17 | 21 |
import org.springframework.beans.factory.annotation.Autowired; |
22 |
import org.springframework.web.bind.annotation.RequestMapping; |
|
18 | 23 |
|
19 | 24 |
import eu.etaxonomy.cdm.api.service.IService; |
25 |
import eu.etaxonomy.cdm.api.service.pager.Pager; |
|
26 |
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl; |
|
20 | 27 |
import eu.etaxonomy.cdm.api.utility.UserHelper; |
21 | 28 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
22 | 29 |
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.DaoBase; |
... | ... | |
133 | 140 |
return pathParameter; |
134 | 141 |
} |
135 | 142 |
|
143 |
protected <T extends CdmBase> Pager<T> pagerForSubCollectionOf(Collection<T> c, Integer pageNumber, Integer pageSize, HttpServletResponse response) throws IOException { |
|
144 |
PagerParameters pagerParameters = new PagerParameters(pageSize, pageNumber); |
|
145 |
pagerParameters.normalizeAndValidate(response); |
|
146 |
|
|
147 |
int subCollectionStart = pagerParameters.getPageIndex() * pagerParameters.getPageSize(); |
|
148 |
List<T> sub_c = subCollection(c, subCollectionStart, pagerParameters.getPageSize()); |
|
149 |
Pager<T> p = new DefaultPagerImpl<>(pageNumber, c.size(), pagerParameters.getPageSize(), sub_c); |
|
150 |
return p; |
|
151 |
} |
|
152 |
|
|
153 |
protected <E> List<E> subCollection(Collection<? extends E> c, Integer start, Integer length) { |
|
154 |
List<E> sub_c = new ArrayList<E>(length); |
|
155 |
if(c.size() > length){ |
|
156 |
E[] a = (E[]) c.toArray(); |
|
157 |
for(int i = start; i < start + length; i++){ |
|
158 |
sub_c.add(a[i]); |
|
159 |
} |
|
160 |
} else { |
|
161 |
sub_c.addAll(c); |
|
162 |
} |
|
163 |
return sub_c; |
|
164 |
|
|
165 |
} |
|
166 |
|
|
136 | 167 |
} |
cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/BaseController.java | ||
---|---|---|
42 | 42 |
import eu.etaxonomy.cdm.api.service.IService; |
43 | 43 |
import eu.etaxonomy.cdm.api.service.ITaxonNodeService; |
44 | 44 |
import eu.etaxonomy.cdm.api.service.pager.Pager; |
45 |
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl; |
|
46 | 45 |
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; |
47 | 46 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
48 | 47 |
import eu.etaxonomy.cdm.model.common.IPublishable; |
49 | 48 |
import eu.etaxonomy.cdm.model.reference.INomenclaturalReference; |
50 | 49 |
import eu.etaxonomy.cdm.model.taxon.Classification; |
51 | 50 |
import eu.etaxonomy.cdm.model.taxon.TaxonNode; |
52 |
import eu.etaxonomy.cdm.remote.controller.util.PagerParameters; |
|
53 | 51 |
import eu.etaxonomy.cdm.remote.editor.UUIDPropertyEditor; |
54 | 52 |
|
55 | 53 |
/** |
... | ... | |
199 | 197 |
} else { |
200 | 198 |
//FIXME use real paging mechanism of according service class instead of subCollection() |
201 | 199 |
//FIXME use BaseListController.normalizeAndValidatePagerParameters(pageNumber, pageSize, response); |
202 |
PagerParameters pagerParameters = new PagerParameters(pageSize, pageNumber); |
|
203 |
pagerParameters.normalizeAndValidate(response); |
|
204 |
|
|
205 |
start = pagerParameters.getPageIndex() * pagerParameters.getPageSize(); |
|
206 |
List<? extends CdmBase> sub_c = subCollection(c, start, pagerParameters.getPageSize()); |
|
207 |
Pager<? extends CdmBase> p = new DefaultPagerImpl<>(pageNumber, c.size(), pagerParameters.getPageSize(), sub_c); |
|
200 |
Pager<? extends CdmBase> p = pagerForSubCollectionOf(c, pageNumber, pageSize, response); |
|
208 | 201 |
return p; |
209 | 202 |
} |
210 | 203 |
} |
... | ... | |
396 | 389 |
return result; |
397 | 390 |
} |
398 | 391 |
|
399 |
private <E> List<E> subCollection(Collection<? extends E> c, Integer start, Integer length){ |
|
400 |
List<E> sub_c = new ArrayList<E>(length); |
|
401 |
if(c.size() > length){ |
|
402 |
E[] a = (E[]) c.toArray(); |
|
403 |
for(int i = start; i < start + length; i++){ |
|
404 |
sub_c.add(a[i]); |
|
405 |
} |
|
406 |
} else { |
|
407 |
sub_c.addAll(c); |
|
408 |
} |
|
409 |
return sub_c; |
|
410 |
|
|
411 |
} |
|
412 |
|
|
413 | 392 |
/** |
414 | 393 |
* Checks if an {@link IPublishable} was found and if it is publish. |
415 | 394 |
* If not the according {@link HttpStatusMessage http messages} are added to response. |
cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/TypeDesignationController.java | ||
---|---|---|
24 | 24 |
import org.springframework.web.bind.annotation.PathVariable; |
25 | 25 |
import org.springframework.web.bind.annotation.RequestMapping; |
26 | 26 |
import org.springframework.web.bind.annotation.RequestMethod; |
27 |
import org.springframework.web.bind.annotation.RequestParam; |
|
27 | 28 |
|
28 | 29 |
import eu.etaxonomy.cdm.api.service.INameService; |
29 | 30 |
import eu.etaxonomy.cdm.api.service.dto.MediaDTO; |
31 |
import eu.etaxonomy.cdm.api.service.pager.Pager; |
|
30 | 32 |
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; |
31 | 33 |
import eu.etaxonomy.cdm.model.common.Annotation; |
32 | 34 |
import eu.etaxonomy.cdm.model.media.Media; |
... | ... | |
130 | 132 |
return dtb.getAnnotations(); |
131 | 133 |
} |
132 | 134 |
|
135 |
@RequestMapping(method = RequestMethod.GET, value="annotations", params = {"pageNumber", "pageSize"}) |
|
136 |
public Pager<Annotation> doGetAnnotations( |
|
137 |
@PathVariable("uuid") UUID uuid, |
|
138 |
// doPage request parameters |
|
139 |
@RequestParam(value = "pageNumber", required = true) Integer pageNumber, |
|
140 |
@RequestParam(value = "pageSize", required = true) Integer pageSize, |
|
141 |
HttpServletRequest request, |
|
142 |
HttpServletResponse response) throws IOException { |
|
143 |
|
|
144 |
String servletPath = request.getServletPath(); |
|
145 |
String propertyName = FilenameUtils.getBaseName(servletPath); |
|
146 |
|
|
147 |
logger.info("doGetAnnotations() - " + requestPathAndQuery(request)); |
|
148 |
|
|
149 |
TypeDesignationBase<?> dtb = service.loadTypeDesignation(uuid, Arrays.asList("$", "annotations")); |
|
150 |
if(dtb == null){ |
|
151 |
HttpStatusMessage.UUID_NOT_FOUND.send(response); |
|
152 |
} |
|
153 |
Pager<Annotation> p = pagerForSubCollectionOf(dtb.getAnnotations(), pageNumber, pageSize, response); |
|
154 |
return p; |
|
155 |
} |
|
156 |
|
|
133 | 157 |
} |
Also available in: Unified diff
ref #9087 typedesignation/{uuid}/annotations returns pager