Project

General

Profile

Download (11 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* 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 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.cdm.remote.controller;
10

    
11
import java.io.IOException;
12
import java.util.Arrays;
13
import java.util.Collection;
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.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;
29

    
30
import eu.etaxonomy.cdm.api.service.IRegistrationService;
31
import eu.etaxonomy.cdm.api.service.dto.RegistrationDTO;
32
import eu.etaxonomy.cdm.api.service.dto.RegistrationWorkingSet;
33
import eu.etaxonomy.cdm.api.service.exception.RegistrationValidationException;
34
import eu.etaxonomy.cdm.api.service.pager.Pager;
35
import eu.etaxonomy.cdm.api.service.registration.IRegistrationWorkingSetService;
36
import eu.etaxonomy.cdm.database.PermissionDeniedException;
37
import eu.etaxonomy.cdm.model.name.Registration;
38
import eu.etaxonomy.cdm.model.name.RegistrationStatus;
39
import eu.etaxonomy.cdm.persistence.query.MatchMode;
40
import eu.etaxonomy.cdm.persistence.query.OrderHint;
41
import eu.etaxonomy.cdm.persistence.query.OrderHint.SortOrder;
42
import eu.etaxonomy.cdm.remote.editor.UUIDListPropertyEditor;
43
import eu.etaxonomy.cdm.remote.editor.UUIDPropertyEditor;
44
import eu.etaxonomy.cdm.remote.editor.UuidList;
45
import eu.etaxonomy.cdm.remote.editor.term.RegistrationStatusList;
46
import io.swagger.annotations.Api;
47
import io.swagger.annotations.ApiImplicitParam;
48
import io.swagger.annotations.ApiImplicitParams;
49
import io.swagger.annotations.ApiOperation;
50

    
51
/**
52
 * TODO write controller documentation
53
 *
54
 * @author a.kohlbecker
55
 * @since 24.03.2009
56
 */
57
@Controller
58
@Api("registration")
59
public class RegistrationDTOController
60
            extends AbstractController<Registration, IRegistrationService>{
61

    
62
    private static final List<OrderHint> ORDER_BY_DATE_AND_ID = Arrays.asList(
63
            new OrderHint("registrationDate", SortOrder.DESCENDING),
64
            new OrderHint("specificIdentifier", SortOrder.DESCENDING)
65
            );
66

    
67
    private static final List<OrderHint> ORDER_BY_SUMMARY = Arrays.asList(new OrderHint("summary", SortOrder.ASCENDING));
68

    
69
    public static final Logger logger = Logger.getLogger(RegistrationDTOController.class);
70

    
71
    public RegistrationDTOController(){
72
        setInitializationStrategy(Arrays.asList(new String[]{
73
                "$",
74
                "name.$",
75
                "typeDesignations.$"
76
             }));
77
    }
78

    
79
    @Autowired
80
    @Override
81
    public void setService(IRegistrationService service) {
82
        this.service = service;
83
    }
84

    
85
    @Autowired
86
    private IRegistrationWorkingSetService registrationWorkingSetService;
87

    
88
    @Autowired
89
    RegistrationController registrationController;
90

    
91
    @InitBinder
92
    public void initBinder(WebDataBinder binder) {
93
        binder.registerCustomEditor(UuidList.class, new UUIDListPropertyEditor("NULL"));
94
        binder.registerCustomEditor(RegistrationStatusList.class, new RegistrationStatusList().propertyEditor());
95
        binder.registerCustomEditor(UUID.class, new UUIDPropertyEditor());
96
    }
97

    
98
    @ApiImplicitParams({
99
        @ApiImplicitParam(name = "identifier", value = "The persitent identifier of the Registration.", required = true, dataType = "string", paramType = "path"),
100
    })
101
    @ApiOperation(value = "Finds Registration by persitent identifier.",
102
        notes = "The identifier passed as paramter must be unique in the database otherwise the server will responde with the HTTP error code: " + HttpServletResponse.SC_PRECONDITION_FAILED,
103
        response = Registration.class
104
    )
105
    @RequestMapping(value="/registrationDTO", method = RequestMethod.GET, params={"identifier"})
106
    public RegistrationDTO doGetByIdentifier(
107
            @RequestParam(value = "identifier", required = true) String identifier,
108
            HttpServletRequest request,
109
            HttpServletResponse response) throws IOException {
110

    
111
        logger.info("doGetByIdentifier() " + requestPathAndQuery(request));
112
        Pager<RegistrationDTO> registrationDTOsPager = pageRegistrationDTOs(identifier, true, 0, 2, response);
113
        if(registrationDTOsPager == null) {
114
            HttpStatusMessage.create("No registration found for " + identifier + " ", HttpServletResponse.SC_NOT_FOUND).send(response);
115
            return null;
116
        } else {
117
            return registrationDTOsPager.getRecords().get(0);
118
        }
119
    }
120

    
121
    @ApiImplicitParams({
122
        @ApiImplicitParam(name = "identifier", value = "The persitent identifier of the Registration.", required = true, dataType = "string", paramType = "path"),
123
    })
124
    @ApiOperation(value = "Finds Registrations by persistent identifier."
125
    )
126
    @RequestMapping(value="/registrationDTO", method = RequestMethod.GET, params={"identifier", "validateUniqueness"})
127
    public Pager<RegistrationDTO> doPageByIdentifier(
128
            @RequestParam(value = "identifier", required = true) String identifier,
129
            @RequestParam(value = "validateUniqueness") boolean validateUniqueness,
130
            @RequestParam(value = "pageNumber", required=true) Integer pageIndex,
131
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
132
            HttpServletRequest request,
133
            HttpServletResponse response) throws IOException {
134

    
135
        logger.info("doPageByIdentifier() " + requestPathAndQuery(request));
136

    
137
        return pageRegistrationDTOs(identifier, validateUniqueness, pageIndex, pageSize, response);
138

    
139
    }
140

    
141
    protected Pager<RegistrationDTO> pageRegistrationDTOs(String identifier, boolean validateUniqueness, Integer pageIndex, Integer pageSize, HttpServletResponse response) throws IOException {
142

    
143
        Pager<RegistrationDTO> regPager = registrationWorkingSetService.pageDTOs(identifier, pageIndex, pageSize);
144

    
145
        if(regPager.getCount() == 1){
146
            return regPager;
147
        } else if(regPager.getCount() > 1){
148
            if(validateUniqueness) {
149
                HttpStatusMessage.create("The identifier " + identifier + " refrences multiple registrations", HttpServletResponse.SC_PRECONDITION_FAILED).send(response);
150
                return null; // never reached, due to previous send()
151
            } else {
152
                return regPager;
153
            }
154
        } else {
155
            return null;
156
        }
157
    }
158

    
159
    @RequestMapping(value="/registrationDTO/find", method = RequestMethod.GET)
160
    public Pager<RegistrationDTO> doFind(
161
            @RequestParam(value = "submitterUuid", required=false) UUID submitterUuid,
162
            @RequestParam(value = "status", required=false) RegistrationStatusList status,
163
            @RequestParam(value = "typeDesignationStatusUuids", required=false) UuidList typeDesignationStatusUuids,
164
            @RequestParam(value = "identifierFilterPattern", required=false) String identifierFilterPattern,
165
            @RequestParam(value = "taxonNameFilterPattern", required=false) String taxonNameFilterPattern,
166
            @RequestParam(value = "referenceFilterPattern", required=false) String referenceFilterPattern,
167
            @RequestParam(value = "pageNumber", required=false) Integer pageIndex,
168
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
169
            HttpServletRequest request,
170
            @SuppressWarnings("unused") HttpServletResponse response) {
171

    
172
        logger.info("doFind() " + requestPathAndQuery(request));
173

    
174
        Collection<RegistrationStatus> statusSet = null;
175
        if(status != null){
176
            statusSet = status.asSet();
177
        }
178
        Pager<RegistrationDTO> pager = registrationWorkingSetService.pageDTOs(submitterUuid, statusSet,
179
                identifierFilterPattern, taxonNameFilterPattern, referenceFilterPattern,
180
                typeDesignationStatusUuids, pageSize, pageIndex, ORDER_BY_DATE_AND_ID);
181
        return pager;
182
    }
183

    
184

    
185
    @RequestMapping(value="/registrationWorkingSetDTO/{reference_uuid}", method = RequestMethod.GET)
186
    public RegistrationWorkingSet doGetRegistrationWorkingSet(
187
            @PathVariable("reference_uuid") UUID referenceUuid,
188
            HttpServletRequest request,
189
            HttpServletResponse response) throws RegistrationValidationException {
190

    
191
        logger.info("doGetRegistrationWorkingSet() " + requestPathAndQuery(request));
192

    
193
        RegistrationWorkingSet workingset = registrationWorkingSetService.loadWorkingSetByReferenceUuid(referenceUuid, true);
194

    
195
        return workingset;
196
    }
197

    
198

    
199
    @RequestMapping(value="/registrationDTO/findInTaxonGraph", method = RequestMethod.GET)
200
    public Pager<RegistrationDTO> doPageByTaxomicInclusion(
201
            @RequestParam(value = "taxonNameFilter", required = true) String taxonNameFilterPattern,
202
            @RequestParam(value = "matchMode", required = false) MatchMode matchMode,
203
            @RequestParam(value = "pageNumber", required = false, defaultValue="0") Integer pageIndex,
204
            @RequestParam(value = "pageSize", required = false, defaultValue="30" /*AbstractController.DEFAULT_PAGE_SIZE_VALUE*/ ) Integer pageSize,
205
            HttpServletRequest request,
206
            HttpServletResponse response) {
207

    
208
        logger.info("findInTaxonGraph() " + requestPathAndQuery(request));
209

    
210
        Collection<RegistrationStatus> includedStatus = Arrays.asList(RegistrationStatus.PUBLISHED);
211

    
212
        Pager<RegistrationDTO> regPager = registrationWorkingSetService.findInTaxonGraph(null, includedStatus,
213
                taxonNameFilterPattern, matchMode,
214
                pageSize, pageIndex, ORDER_BY_DATE_AND_ID);
215

    
216
        return regPager;
217
    }
218

    
219
    @RequestMapping(value="/registrationDTO", method = RequestMethod.GET, params="nameUuid")
220
    public Pager<RegistrationDTO> doGetByNameUUID(
221
            @RequestParam(value = "submitterUuid", required=false) UUID submitterUuid,
222
            @RequestParam(value = "status", required=false) RegistrationStatusList status,
223
            @RequestParam(value = "nameUuid", required=true) Collection<UUID> nameUuids,
224
            @RequestParam(value = "pageNumber", required=false) Integer pageIndex,
225
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
226
            HttpServletRequest request,
227
            HttpServletResponse response) throws PermissionDeniedException, RegistrationValidationException {
228

    
229
        logger.info("doGetByNameUUID() " + requestPathAndQuery(request));
230

    
231
        Collection<RegistrationStatus> statusSet = null;
232
        if(status != null){
233
            statusSet = status.asSet();
234
        }
235
        Pager<RegistrationDTO> pager = registrationWorkingSetService.pageWorkingSetsByNameUUID(
236
                nameUuids, pageSize, pageIndex, ORDER_BY_DATE_AND_ID);
237
        return pager;
238
    }
239
}
(55-55/76)