Project

General

Profile

Download (8.23 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
 * Copyright (C) 2009 EDIT European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
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.
8
 */
9

    
10
package eu.etaxonomy.cdm.remote.controller;
11

    
12
import java.io.IOException;
13
import java.util.Arrays;
14
import java.util.List;
15
import java.util.UUID;
16

    
17
import javax.servlet.http.HttpServletRequest;
18
import javax.servlet.http.HttpServletResponse;
19

    
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;
28

    
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;
41

    
42
/**
43
 * IMPORTANT:
44
 *
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
49
 * here
50
 *
51
 * @author a.kohlbecker
52
 * @date Jun 25, 2013
53
 *
54
 */
55
@Controller
56
@RequestMapping(value = {"/portal/description"})
57
public class DescriptionListPortalController extends IdentifiableListController<DescriptionBase, IDescriptionService> {
58

    
59
   public static final Logger logger = Logger.getLogger(DescriptionListPortalController.class);
60

    
61
    @Autowired
62
    private ITaxonService taxonService;
63

    
64
    protected static final List<String> DESCRIPTION_INIT_STRATEGY = Arrays.asList(new String []{
65
            "$",
66
            "elements.$",
67
            "elements.states.$",
68
            "elements.sources.citation.authorTeam",
69
            "elements.sources.nameUsedInSource.originalNameString",
70
            "elements.multilanguageText",
71
            "elements.media",
72
            "name.$",
73
            "name.rank.representations",
74
            "name.status.type.representations",
75
            "sources.$",
76
    });
77

    
78

    
79
    public DescriptionListPortalController() {
80
        super();
81
        setInitializationStrategy(DESCRIPTION_INIT_STRATEGY);
82
    }
83

    
84

    
85
    @Autowired
86
    private ITermService termService;
87

    
88
    /* (non-Javadoc)
89
     * @see eu.etaxonomy.cdm.remote.controller.BaseListController#setService(eu.etaxonomy.cdm.api.service.IService)
90
     */
91
    @Override
92
    @Autowired
93
    public void setService(IDescriptionService service) {
94
        this.service = service;
95
    }
96

    
97
    @InitBinder
98
    @Override
99
    public void initBinder(WebDataBinder binder) {
100
        super.initBinder(binder);
101
        binder.registerCustomEditor(DefinedTermBaseList.class, new TermBaseListPropertyEditor<Feature>(termService));
102
    }
103
    /**
104
    *
105
    * @param queryString
106
    * @param type
107
    * @param pageSize
108
    * @param pageNumber
109
    * @param matchMode
110
    * @param request
111
    * @param response
112
    * @return
113
    * @throws IOException
114
    */
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
124
           )
125
            throws IOException {
126

    
127
       logger.info("doFindDescriptionElements : " + request.getRequestURI() + "?" + request.getQueryString() );
128

    
129
       PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber);
130
       pagerParams.normalizeAndValidate(response);
131

    
132
       Pager<DescriptionElementBase> pager = service.searchElements(type, queryString, pageSize, pageNumber, null, getInitializationStrategy());
133

    
134
       return pager;
135
   }
136

    
137
   /**
138
    * Requires the query parameter "descriptionType" to be present
139
    *
140
    * @param features
141
    * @param descriptionType
142
    * @param type
143
    * @param pageSize
144
    * @param pageNumber
145
    * @param request
146
    * @param response
147
    * @return
148
    * @throws IOException
149
    */
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 {
158

    
159
       logger.info("doPageDescriptionElementsByFeature : " + requestPathAndQuery(request));
160

    
161
       PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber);
162
       pagerParams.normalizeAndValidate(response);
163

    
164
       Pager<DescriptionElementBase> pager = service.pageDescriptionElements(null, descriptionType, features.asSet(),
165
               type, pagerParams.getPageSize(), pagerParams.getPageIndex(), getInitializationStrategy());
166

    
167
       return pager;
168
   }
169

    
170
   /**
171
    * Requires the query parameter "taxon"  to be present
172
    *
173
    * @param taxon_uuid
174
    * @param features
175
    * @param type
176
    * @param pageSize
177
    * @param pageNumber
178
    * @param request
179
    * @param response
180
    * @return
181
    * @throws IOException
182
    */
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 {
191

    
192
       logger.info("getDescriptionElementsForTaxon : " + requestPathAndQuery(request));
193

    
194
       PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber);
195
       pagerParams.normalizeAndValidate(response);
196

    
197
       Taxon taxon = null;
198
       if( taxon_uuid!= null){
199
           try {
200
               taxon = (Taxon) taxonService.load(taxon_uuid);
201
           } catch (Exception e) {
202
               HttpStatusMessage.UUID_NOT_FOUND.send(response);
203
           }
204
       }
205

    
206
       Pager<T> pager = service.pageDescriptionElementsForTaxon(
207
               taxon,
208
               (features != null ? features.asSet() : null),
209
               type,
210
               pagerParams.getPageSize(),
211
               pagerParams.getPageIndex(),
212
               getInitializationStrategy()
213
              );
214

    
215
       return pager;
216
   }
217
}
(16-16/56)