3 * Copyright (C) 2009 EDIT 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
7 * 1.1 See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.remote
.controller
;
12 import java
.io
.IOException
;
13 import java
.util
.Arrays
;
14 import java
.util
.List
;
15 import java
.util
.UUID
;
17 import javax
.servlet
.http
.HttpServletRequest
;
18 import javax
.servlet
.http
.HttpServletResponse
;
20 import org
.apache
.log4j
.Logger
;
21 import org
.springframework
.beans
.factory
.annotation
.Autowired
;
22 import org
.springframework
.stereotype
.Controller
;
23 import org
.springframework
.web
.bind
.WebDataBinder
;
24 import org
.springframework
.web
.bind
.annotation
.InitBinder
;
25 import org
.springframework
.web
.bind
.annotation
.RequestMapping
;
26 import org
.springframework
.web
.bind
.annotation
.RequestMethod
;
27 import org
.springframework
.web
.bind
.annotation
.RequestParam
;
29 import eu
.etaxonomy
.cdm
.api
.service
.IDescriptionService
;
30 import eu
.etaxonomy
.cdm
.api
.service
.ITaxonService
;
31 import eu
.etaxonomy
.cdm
.api
.service
.ITermService
;
32 import eu
.etaxonomy
.cdm
.api
.service
.pager
.Pager
;
33 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionBase
;
34 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionElementBase
;
35 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
36 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
37 import eu
.etaxonomy
.cdm
.persistence
.query
.MatchMode
;
38 import eu
.etaxonomy
.cdm
.remote
.controller
.util
.PagerParameters
;
39 import eu
.etaxonomy
.cdm
.remote
.editor
.DefinedTermBaseList
;
40 import eu
.etaxonomy
.cdm
.remote
.editor
.TermBaseListPropertyEditor
;
45 * This controller is mostly a 1:1 copy of the DescriptionListController
46 * and this provides identical end points which only differ in the depth of the
47 * object graphs returned.
48 * An exception is the doAccumulateDistributions() method, which is not repeated
51 * @author a.kohlbecker
56 @RequestMapping(value
= {"/portal/description"})
57 public class DescriptionListPortalController
extends IdentifiableListController
<DescriptionBase
, IDescriptionService
> {
59 public static final Logger logger
= Logger
.getLogger(DescriptionListPortalController
.class);
62 private ITaxonService taxonService
;
64 protected static final List
<String
> DESCRIPTION_INIT_STRATEGY
= Arrays
.asList(new String
[]{
68 "elements.sources.citation.authorTeam",
69 "elements.sources.nameUsedInSource.originalNameString",
70 "elements.multilanguageText",
73 "name.rank.representations",
74 "name.status.type.representations",
79 public DescriptionListPortalController() {
81 setInitializationStrategy(DESCRIPTION_INIT_STRATEGY
);
86 private ITermService termService
;
89 * @see eu.etaxonomy.cdm.remote.controller.BaseListController#setService(eu.etaxonomy.cdm.api.service.IService)
93 public void setService(IDescriptionService service
) {
94 this.service
= service
;
99 public void initBinder(WebDataBinder binder
) {
100 super.initBinder(binder
);
101 binder
.registerCustomEditor(DefinedTermBaseList
.class, new TermBaseListPropertyEditor
<Feature
>(termService
));
113 * @throws IOException
115 @RequestMapping(value
= "/portal/descriptionElement/find", method
= RequestMethod
.GET
)
116 public Pager
<DescriptionElementBase
> doFindDescriptionElements(
117 @RequestParam(value
= "query", required
= true) String queryString
,
118 @RequestParam(value
= "type", required
= false) Class
<?
extends DescriptionElementBase
> type
,
119 @RequestParam(value
= "pageSize", required
= false) Integer pageSize
,
120 @RequestParam(value
= "pageNumber", required
= false) Integer pageNumber
,
121 @RequestParam(value
= "matchMode", required
= false) MatchMode matchMode
,
122 HttpServletRequest request
,
123 HttpServletResponse response
127 logger
.info("doFindDescriptionElements : " + request
.getRequestURI() + "?" + request
.getQueryString() );
129 PagerParameters pagerParams
= new PagerParameters(pageSize
, pageNumber
);
130 pagerParams
.normalizeAndValidate(response
);
132 Pager
<DescriptionElementBase
> pager
= service
.searchElements(type
, queryString
, pageSize
, pageNumber
, null, getInitializationStrategy());
138 * Requires the query parameter "descriptionType" to be present
141 * @param descriptionType
148 * @throws IOException
150 @RequestMapping(value
= "/portal/descriptionElement/byFeature", method
= {RequestMethod
.GET
, RequestMethod
.POST
})
151 public Pager
<DescriptionElementBase
> doPageDescriptionElementsByFeature(
152 @RequestParam(value
= "features", required
= false) DefinedTermBaseList
<Feature
> features
,
153 @RequestParam(value
= "descriptionType", required
= true) Class
<?
extends DescriptionBase
> descriptionType
,
154 @RequestParam(value
= "type", required
= false) Class
<?
extends DescriptionElementBase
> type
,
155 @RequestParam(value
= "pageSize", required
= false) Integer pageSize
,
156 @RequestParam(value
= "pageNumber", required
= false) Integer pageNumber
, HttpServletRequest request
,
157 HttpServletResponse response
) throws IOException
{
159 logger
.info("doPageDescriptionElementsByFeature : " + requestPathAndQuery(request
));
161 PagerParameters pagerParams
= new PagerParameters(pageSize
, pageNumber
);
162 pagerParams
.normalizeAndValidate(response
);
164 Pager
<DescriptionElementBase
> pager
= service
.pageDescriptionElements(null, descriptionType
, features
.asSet(),
165 type
, pagerParams
.getPageSize(), pagerParams
.getPageIndex(), getInitializationStrategy());
171 * Requires the query parameter "taxon" to be present
181 * @throws IOException
183 @RequestMapping(value
= "/portal/descriptionElement/byTaxon", method
= {RequestMethod
.GET
, RequestMethod
.POST
})
184 public <T
extends DescriptionElementBase
> Pager
<T
> getDescriptionElementsForTaxon(
185 @RequestParam(value
= "taxon", required
= true) UUID taxon_uuid
,
186 @RequestParam(value
= "features", required
= false) DefinedTermBaseList
<Feature
> features
,
187 @RequestParam(value
= "type", required
= false) Class
<T
> type
,
188 @RequestParam(value
= "pageSize", required
= false) Integer pageSize
,
189 @RequestParam(value
= "pageNumber", required
= false) Integer pageNumber
, HttpServletRequest request
,
190 HttpServletResponse response
) throws IOException
{
192 logger
.info("getDescriptionElementsForTaxon : " + requestPathAndQuery(request
));
194 PagerParameters pagerParams
= new PagerParameters(pageSize
, pageNumber
);
195 pagerParams
.normalizeAndValidate(response
);
198 if( taxon_uuid
!= null){
200 taxon
= (Taxon
) taxonService
.load(taxon_uuid
);
201 } catch (Exception e
) {
202 HttpStatusMessage
.UUID_NOT_FOUND
.send(response
);
205 //TODO it seems as if the InitializationStrategy is not appropriate here !!!
206 // see #3728 (DescriptionListPortalController.getDescriptionElementsForTaxon() seems to be using inapproptiate init strategy)
207 Pager
<T
> pager
= service
.pageDescriptionElementsForTaxon(
209 (features
!= null ? features
.asSet() : null),
211 pagerParams
.getPageSize(),
212 pagerParams
.getPageIndex(),
213 getInitializationStrategy()