Project

General

Profile

Download (8.89 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 io.swagger.annotations.Api;
13

    
14
import java.io.IOException;
15
import java.util.Arrays;
16
import java.util.List;
17
import java.util.UUID;
18

    
19
import javax.servlet.http.HttpServletRequest;
20
import javax.servlet.http.HttpServletResponse;
21

    
22
import org.apache.log4j.Logger;
23
import org.springframework.beans.factory.annotation.Autowired;
24
import org.springframework.stereotype.Controller;
25
import org.springframework.web.bind.WebDataBinder;
26
import org.springframework.web.bind.annotation.InitBinder;
27
import org.springframework.web.bind.annotation.RequestMapping;
28
import org.springframework.web.bind.annotation.RequestMethod;
29
import org.springframework.web.bind.annotation.RequestParam;
30

    
31
import eu.etaxonomy.cdm.api.service.IDescriptionService;
32
import eu.etaxonomy.cdm.api.service.ITaxonService;
33
import eu.etaxonomy.cdm.api.service.ITermService;
34
import eu.etaxonomy.cdm.api.service.description.TransmissionEngineDistribution;
35
import eu.etaxonomy.cdm.api.service.pager.Pager;
36
import eu.etaxonomy.cdm.ext.geo.IEditGeoService;
37
import eu.etaxonomy.cdm.model.description.DescriptionBase;
38
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
39
import eu.etaxonomy.cdm.model.description.Feature;
40
import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
41
import eu.etaxonomy.cdm.model.name.Rank;
42
import eu.etaxonomy.cdm.model.taxon.Taxon;
43
import eu.etaxonomy.cdm.persistence.query.MatchMode;
44
import eu.etaxonomy.cdm.remote.controller.util.PagerParameters;
45
import eu.etaxonomy.cdm.remote.editor.CdmTypePropertyEditor;
46
import eu.etaxonomy.cdm.remote.editor.DefinedTermBaseList;
47
import eu.etaxonomy.cdm.remote.editor.TermBaseListPropertyEditor;
48
import eu.etaxonomy.cdm.remote.editor.TermBasePropertyEditor;
49
import eu.etaxonomy.cdm.remote.editor.UUIDListPropertyEditor;
50
import eu.etaxonomy.cdm.remote.editor.UUIDPropertyEditor;
51
import eu.etaxonomy.cdm.remote.editor.UuidList;
52

    
53
/**
54
 * TODO write controller documentation
55
 *
56
 * @author a.kohlbecker
57
 * @date 24.03.2009
58
 */
59
@Controller
60
@Api("descriptionElement")
61
@RequestMapping(value = {"/descriptionElement"})
62
public class DescriptionElementListController {
63

    
64
    public static final Logger logger = Logger.getLogger(DescriptionElementListController.class);
65

    
66

    
67
    @Autowired
68
    private ITermService termService;
69

    
70
    @Autowired
71
    private ITaxonService taxonService;
72

    
73
    @Autowired
74
    private IEditGeoService geoService;
75

    
76
    @Autowired
77
    public TransmissionEngineDistribution transmissionEngineDistribution;
78

    
79
    @Autowired
80
    public ProgressMonitorController progressMonitorController;
81

    
82
    protected IDescriptionService service;
83

    
84
    protected static final List<String> DESCRIPTION_ELEMENT_INIT_STRATEGY = Arrays.asList(new String []{
85
            "$",
86
            "multilanguageText"
87
    });
88

    
89
    /**
90
     * @return
91
     */
92
    protected List<String> getInitializationStrategy() {
93
        return DESCRIPTION_ELEMENT_INIT_STRATEGY;
94
    }
95

    
96
    /**
97
     * @param request
98
     * @return
99
     */
100
    private String requestPathAndQuery(HttpServletRequest request) {
101
        return AbstractController.requestPathAndQuery(request);
102
    }
103

    
104
    @Autowired
105
    public void setService(IDescriptionService service) {
106
        this.service = service;
107
    }
108

    
109
    @InitBinder
110
    public void initBinder(WebDataBinder binder) {
111
        binder.registerCustomEditor(UUID.class, new UUIDPropertyEditor());
112
        binder.registerCustomEditor(UuidList.class, new UUIDListPropertyEditor());
113
        binder.registerCustomEditor(DefinedTermBaseList.class, new TermBaseListPropertyEditor<Feature>(termService));
114
        binder.registerCustomEditor(NamedAreaLevel.class, new TermBasePropertyEditor<NamedAreaLevel>(termService));
115
        binder.registerCustomEditor(Rank.class, new TermBasePropertyEditor<Rank>(termService));
116
        binder.registerCustomEditor(Class.class, new CdmTypePropertyEditor());
117
    }
118

    
119

    
120
    /**
121
     * Requires the query parameter "descriptionType" to be present
122
     *
123
     * @param features
124
     * @param descriptionType
125
     * @param type
126
     * @param pageSize
127
     * @param pageNumber
128
     * @param request
129
     * @param response
130
     * @return
131
     * @throws IOException
132
     */
133
    @RequestMapping(value = "byFeature", method = RequestMethod.GET) // mapped as absolute path, see CdmAntPathMatcher
134
    public Pager<? extends DescriptionElementBase> doPageDescriptionElementsByFeature(
135
            @RequestParam(value = "features", required = false) DefinedTermBaseList<Feature> features,
136
            @RequestParam(value = "descriptionType", required = true) Class<? extends DescriptionBase> descriptionType,
137
            @RequestParam(value = "type", required = false) Class<? extends DescriptionElementBase> type,
138
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
139
            @RequestParam(value = "pageNumber", required = false) Integer pageNumber, HttpServletRequest request,
140
            HttpServletResponse response) throws IOException {
141

    
142
        logger.info("doPageDescriptionElementsByFeature : " + requestPathAndQuery(request));
143

    
144
        PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber);
145
        pagerParams.normalizeAndValidate(response);
146

    
147
        if(features == null){
148
            features = new DefinedTermBaseList<Feature>();
149
        }
150

    
151
        Pager<? extends DescriptionElementBase> pager = service.pageDescriptionElements(null, descriptionType, features.asSet(),
152
                type, pagerParams.getPageSize(), pagerParams.getPageIndex(), getInitializationStrategy());
153

    
154
        return pager;
155
    }
156

    
157
    /**
158
     * Requires the query parameter "taxon"  to be present
159
     *
160
     * @param taxon_uuid
161
     * @param features
162
     * @param type
163
     * @param pageSize
164
     * @param pageNumber
165
     * @param request
166
     * @param response
167
     * @return
168
     * @throws IOException
169
     */
170
    @RequestMapping(value = "byTaxon", method = {RequestMethod.GET, RequestMethod.POST}) // mapped as absolute path, see CdmAntPathMatcher
171
    public <T extends DescriptionElementBase> Pager<T> doGetDescriptionElementsForTaxon(
172
            @RequestParam(value = "taxon", required = true) UUID taxon_uuid,
173
            @RequestParam(value = "features", required = false) DefinedTermBaseList<Feature> features,
174
            @RequestParam(value = "type", required = false) Class<T> type,
175
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
176
            @RequestParam(value = "pageNumber", required = false) Integer pageNumber, HttpServletRequest request,
177
            HttpServletResponse response) throws IOException {
178

    
179
        logger.info("getDescriptionElementsForTaxon : " + requestPathAndQuery(request));
180

    
181
        PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber);
182
        pagerParams.normalizeAndValidate(response);
183

    
184
        Taxon taxon = null;
185
        if( taxon_uuid!= null){
186
            try {
187
                taxon = (Taxon) taxonService.load(taxon_uuid);
188
            } catch (Exception e) {
189
                HttpStatusMessage.UUID_NOT_FOUND.send(response);
190
            }
191
        }
192

    
193
        Pager<T> pager = service.pageDescriptionElementsForTaxon(taxon, features != null ? features.asSet() : null, type, pageSize,
194
                pageNumber, getInitializationStrategy());
195
        return pager;
196
    }
197

    
198
    /**
199
    *
200
    * @param queryString
201
    * @param type
202
    * @param pageSize
203
    * @param pageNumber
204
    * @param matchMode
205
    * @param request
206
    * @param response
207
    * @return
208
    * @throws IOException
209
    */
210
   @RequestMapping(value = "find", method = RequestMethod.GET) // mapped as absolute path, see CdmAntPathMatcher
211
   public Pager<DescriptionElementBase> doFindDescriptionElements(
212
           @RequestParam(value = "query", required = true) String queryString,
213
           @RequestParam(value = "type", required = false) Class<? extends DescriptionElementBase> type,
214
           @RequestParam(value = "pageSize", required = false) Integer pageSize,
215
           @RequestParam(value = "pageNumber", required = false) Integer pageNumber,
216
           @RequestParam(value = "matchMode", required = false) MatchMode matchMode,
217
           HttpServletRequest request,
218
           HttpServletResponse response
219
           )
220
            throws IOException {
221

    
222
       logger.info("doFindDescriptionElements : " + request.getRequestURI() + "?" + request.getQueryString() );
223

    
224
       PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber);
225
       pagerParams.normalizeAndValidate(response);
226

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

    
229
       return pager;
230
   }
231

    
232
    /**
233
     * @return
234
     */
235
    protected List<String> getDistributionInfoInitStrategy() {
236
        // TODO Auto-generated method stub
237
        return null;
238
    }
239

    
240
}
(17-17/63)