Project

General

Profile

Download (8.89 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2009 EDIT European Distributed Institute of Taxonomy
3
 * http://www.e-taxonomy.eu
4
 *
5
 * The contents of this file are subject to the Mozilla Public License Version
6
 * 1.1 See LICENSE.TXT at the top of this package for the full license terms.
7
 */
8

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

    
11
import io.swagger.annotations.Api;
12

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

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

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

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

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

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

    
65

    
66
    @Autowired
67
    private ITermService termService;
68

    
69
    @Autowired
70
    private ITaxonService taxonService;
71

    
72
    @Autowired
73
    private IEditGeoService geoService;
74

    
75
    @Autowired
76
    public TransmissionEngineDistribution transmissionEngineDistribution;
77

    
78
    @Autowired
79
    public ProgressMonitorController progressMonitorController;
80

    
81
    protected IDescriptionService service;
82

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

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

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

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

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

    
118

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

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

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

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

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

    
153
        return pager;
154
    }
155

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

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

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

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

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

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

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

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

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

    
228
       return pager;
229
   }
230

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

    
239
}
(19-19/66)