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.
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
.springframework
.beans
.factory
.annotation
.Autowired
;
21 import org
.springframework
.stereotype
.Controller
;
22 import org
.springframework
.web
.bind
.WebDataBinder
;
23 import org
.springframework
.web
.bind
.annotation
.InitBinder
;
24 import org
.springframework
.web
.bind
.annotation
.PathVariable
;
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
.IAgentService
;
30 import eu
.etaxonomy
.cdm
.api
.service
.ITaxonNodeService
;
31 import eu
.etaxonomy
.cdm
.api
.service
.pager
.Pager
;
32 import eu
.etaxonomy
.cdm
.database
.UpdatableRoutingDataSource
;
33 import eu
.etaxonomy
.cdm
.model
.agent
.AgentBase
;
34 import eu
.etaxonomy
.cdm
.model
.common
.Annotation
;
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
>
76 private static final List
<String
> TAXONNODEAGENTRELATIONS_INIT_STRATEGY
= Arrays
.asList(new String
[]{
77 // NOTE: all other cases are covered in the TaxonNodeDaoHibernateImpl method
78 // which is using join fetches
79 "taxonNode.taxon.name.nomenclaturalReference",
82 public List
<String
> getTaxonNodeAgentRelationsInitStrategy() {
83 return TAXONNODEAGENTRELATIONS_INIT_STRATEGY
;
87 private ITaxonNodeService nodeService
;
91 public void setService(IAgentService service
) {
92 this.service
= service
;
97 public void initBinder(WebDataBinder binder
) {
98 super.initBinder(binder
);
99 binder
.registerCustomEditor(Rank
.class, new RankPropertyEditor());
104 * See also {@link TaxonController#doGetTaxonNodeAgentRelations(UUID, UUID, Integer, Integer, HttpServletRequest, HttpServletResponse)}
107 * @param classificationUuid
113 * @throws IOException
116 @RequestMapping(value
= "taxonNodeAgentRelations", method
= RequestMethod
.GET
)
117 public Pager
<TaxonNodeAgentRelation
> doGetTaxonNodeAgentRelations(
118 @PathVariable("uuid") UUID uuid
,
119 @RequestParam(value
= "classification_uuid" , required
= false) UUID classificationUuid
,
120 @RequestParam(value
= "taxon_uuid" , required
= false) UUID taxonUuid
,
121 @RequestParam(value
= "relType_uuid" , required
= false) UUID relTypeUuid
,
122 @RequestParam(value
= "rank" , required
= false) Rank rank
,
123 @RequestParam(value
= "pageNumber", required
= false) Integer pageNumber
,
124 @RequestParam(value
= "pageSize", required
= false) Integer pageSize
,
125 HttpServletRequest request
,
126 HttpServletResponse response
) throws IOException
{
128 PagerParameters pagerParams
= new PagerParameters(pageSize
, pageNumber
);
129 pagerParams
.normalizeAndValidate(response
);
131 UUID rankUuid
= null;
133 rankUuid
= rank
.getUuid();
135 Pager
<TaxonNodeAgentRelation
> pager
= nodeService
.pageTaxonNodeAgentRelations(taxonUuid
, classificationUuid
, uuid
,
136 rankUuid
, relTypeUuid
, pagerParams
.getPageSize(), pagerParams
.getPageIndex(), getTaxonNodeAgentRelationsInitStrategy());