2 * Copyright (C) 2007 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
.remote
.controller
;
11 import java
.io
.IOException
;
12 import java
.util
.Arrays
;
13 import java
.util
.List
;
14 import java
.util
.UUID
;
16 import javax
.servlet
.http
.HttpServletRequest
;
17 import javax
.servlet
.http
.HttpServletResponse
;
19 import org
.apache
.logging
.log4j
.LogManager
;
20 import org
.apache
.logging
.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
.PathVariable
;
26 import org
.springframework
.web
.bind
.annotation
.RequestMapping
;
27 import org
.springframework
.web
.bind
.annotation
.RequestMethod
;
28 import org
.springframework
.web
.bind
.annotation
.RequestParam
;
30 import eu
.etaxonomy
.cdm
.api
.service
.IAgentService
;
31 import eu
.etaxonomy
.cdm
.api
.service
.ITaxonNodeService
;
32 import eu
.etaxonomy
.cdm
.api
.service
.pager
.Pager
;
33 import eu
.etaxonomy
.cdm
.database
.UpdatableRoutingDataSource
;
34 import eu
.etaxonomy
.cdm
.model
.agent
.AgentBase
;
35 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
36 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonNodeAgentRelation
;
37 import eu
.etaxonomy
.cdm
.remote
.controller
.util
.PagerParameters
;
38 import eu
.etaxonomy
.cdm
.remote
.editor
.RankPropertyEditor
;
39 import io
.swagger
.annotations
.Api
;
42 * The AgentController class is a Spring MVC Controller.
44 * The syntax of the mapped service URIs contains the the {datasource-name} path element.
45 * The available {datasource-name}s are defined in a configuration file which
46 * is loaded by the {@link UpdatableRoutingDataSource}. If the
47 * UpdatableRoutingDataSource is not being used in the actual application
48 * context any arbitrary {datasource-name} may be used.
50 * Methods mapped at type level, inherited from super classes ({@link BaseController}):
52 * URI: <b>/{datasource-name}/agent/name/{agent-uuid}</b>
54 * Get the {@link AgentBase} instance identified by the <code>{agent-uuid}</code>.
55 * The returned AgentBase is initialized by
56 * the default initialization strategy: {@link #DEFAULT_INIT_STRATEGY}
59 * URI: <b>/{datasource-name}/agent/name/{agent-uuid}/annotation</b>
61 * Returns a {@link Pager} on the {@link Annotation}s for the {@link AgentBase} instance identified by the
62 * <code>{agent-uuid}</code>.
63 * The returned AgentBase instances are initialized by
64 * the following strategy: {@link #ANNOTATION_INIT_STRATEGY}
67 * @author a.kohlbecker
72 @RequestMapping(value
= {"/agent/{uuid}"})
73 public class AgentController
extends AbstractIdentifiableController
<AgentBase
, IAgentService
> {
75 private static final Logger logger
= LogManager
.getLogger();
77 private static final List
<String
> TAXONNODEAGENTRELATIONS_INIT_STRATEGY
= Arrays
.asList(new String
[]{
78 // NOTE: all other cases are covered in the TaxonNodeDaoHibernateImpl method
79 // which is using join fetches
80 "taxonNode.taxon.name.nomenclaturalSource.citation",
83 public List
<String
> getTaxonNodeAgentRelationsInitStrategy() {
84 return TAXONNODEAGENTRELATIONS_INIT_STRATEGY
;
88 private ITaxonNodeService nodeService
;
92 public void setService(IAgentService service
) {
93 this.service
= service
;
98 public void initBinder(WebDataBinder binder
) {
99 super.initBinder(binder
);
100 binder
.registerCustomEditor(Rank
.class, new RankPropertyEditor());
104 * See also {@link TaxonController#doGetTaxonNodeAgentRelations(UUID, UUID, Integer, Integer, HttpServletRequest, HttpServletResponse)}
106 @RequestMapping(value
= "taxonNodeAgentRelations", method
= RequestMethod
.GET
)
107 public Pager
<TaxonNodeAgentRelation
> doGetTaxonNodeAgentRelations(
108 @PathVariable("uuid") UUID uuid
,
109 @RequestParam(value
= "classification_uuid" , required
= false) UUID classificationUuid
,
110 @RequestParam(value
= "taxon_uuid" , required
= false) UUID taxonUuid
,
111 @RequestParam(value
= "relType_uuid" , required
= false) UUID relTypeUuid
,
112 @RequestParam(value
= "rank" , required
= false) Rank rank
,
113 @RequestParam(value
= "pageIndex", required
= false) Integer pageIndex
,
114 @RequestParam(value
= "pageSize", required
= false) Integer pageSize
,
115 HttpServletRequest request
,
116 HttpServletResponse response
) throws IOException
{
118 logger
.info("doGetTaxonNodeAgentRelations" + requestPathAndQuery(request
));
120 PagerParameters pagerParams
= new PagerParameters(pageSize
, pageIndex
);
121 pagerParams
.normalizeAndValidate(response
);
123 UUID rankUuid
= null;
125 rankUuid
= rank
.getUuid();
127 Pager
<TaxonNodeAgentRelation
> pager
= nodeService
.pageTaxonNodeAgentRelations(taxonUuid
, classificationUuid
, uuid
,
128 rankUuid
, relTypeUuid
, pagerParams
.getPageSize(), pagerParams
.getPageIndex(), getTaxonNodeAgentRelationsInitStrategy());