Project

General

Profile

Download (9.01 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

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

    
12
import java.io.IOException;
13
import java.util.Arrays;
14
import java.util.Collection;
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.PathVariable;
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.IRegistrationService;
32
import eu.etaxonomy.cdm.api.service.dto.RegistrationDTO;
33
import eu.etaxonomy.cdm.api.service.dto.RegistrationWorkingSet;
34
import eu.etaxonomy.cdm.api.service.exception.RegistrationValidationException;
35
import eu.etaxonomy.cdm.api.service.pager.Pager;
36
import eu.etaxonomy.cdm.api.service.registration.IRegistrationWorkingSetService;
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

    
58
@Controller
59
@Api("registration")
60
public class RegistrationDTOController extends AbstractController<Registration, IRegistrationService>
61
{
62

    
63

    
64
    private static final List<OrderHint> ORDER_BY_IDENTIFIER = Arrays.asList(new OrderHint("specificIdentifier", SortOrder.DESCENDING));
65

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

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

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

    
78
    /* (non-Javadoc)
79
     * @see eu.etaxonomy.cdm.remote.controller.GenericController#setService(eu.etaxonomy.cdm.api.service.IService)
80
     */
81
    @Autowired
82
    @Override
83
    public void setService(IRegistrationService service) {
84
        this.service = service;
85
    }
86

    
87
    @Autowired
88
    private IRegistrationWorkingSetService registrationWorkingSetService;
89

    
90
    @Autowired
91
    RegistrationController registrationController;
92

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

    
100
    @ApiImplicitParams({
101
        @ApiImplicitParam(name = "identifier", value = "The persitent identifier of the Registration.", required = true, dataType = "string", paramType = "path"),
102
    })
103
    @ApiOperation(value = "Finds Registration by persitent identifier.",
104
        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,
105
        response = Registration.class
106
    )
107
    @RequestMapping(value="/registrationDTO/identifier/**", method = RequestMethod.GET)
108
    public RegistrationDTO doGetByIdentifier(
109
            HttpServletRequest request,
110
            HttpServletResponse response) throws IOException {
111

    
112
        logger.info("doGetByIdentifier() " + requestPathAndQuery(request));
113

    
114
        String identifier = readPathParameter(request, "/registrationDTO/identifier/");
115

    
116
        Pager<RegistrationDTO> regPager = registrationWorkingSetService.pageDTOs(identifier, 0, 2);
117

    
118
        if(regPager.getCount() == 1){
119
            return regPager.getRecords().get(0);
120
        } else if(regPager.getCount() > 1){
121
            HttpStatusMessage.create("The identifier " + identifier + " refrences multiple registrations", HttpServletResponse.SC_PRECONDITION_FAILED).send(response);
122
            return null; // never reached, due to previous send()
123
        } else {
124
            return null;
125
        }
126
    }
127

    
128
    @ApiImplicitParams({
129
        @ApiImplicitParam(name = "identifier", value = "The persitent identifier of the Registration.", required = true, dataType = "string", paramType = "path"),
130
    })
131
    @ApiOperation(value = "Finds Registrations by persitent identifier."
132
    )
133
    @RequestMapping(value="/registrationDTO/identifier/**", method = RequestMethod.GET, params={"validateUniqueness"})
134
    public Pager<RegistrationDTO> doPageByIdentifier(
135
            @RequestParam(value = "pageNumber", required=true) Integer pageIndex,
136
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
137
            HttpServletRequest request,
138
            HttpServletResponse response) throws IOException {
139

    
140
        logger.info("doPageByIdentifier() " + requestPathAndQuery(request));
141

    
142
        String identifier = readPathParameter(request, "/registrationDTO/identifier/");
143

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

    
146
        return regDTOPager;
147
    }
148

    
149
    @RequestMapping(value="/registrationDTO/find", method = RequestMethod.GET)
150
    public Pager<RegistrationDTO> doFind(
151
            @RequestParam(value = "submitterUuid", required=false) UUID submitterUuid,
152
            @RequestParam(value = "status", required=false) RegistrationStatusList status,
153
            @RequestParam(value = "typeDesignationStatusUuids", required=false) UuidList typeDesignationStatusUuids,
154
            @RequestParam(value = "identifierFilterPattern", required=false) String identifierFilterPattern,
155
            @RequestParam(value = "taxonNameFilterPattern", required=false) String taxonNameFilterPattern,
156
            @RequestParam(value = "pageNumber", required=false) Integer pageIndex,
157
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
158
            HttpServletRequest request,
159
            HttpServletResponse response) {
160

    
161
        logger.info("doFind() " + requestPathAndQuery(request));
162

    
163
        Collection<RegistrationStatus> statusSet = null;
164
        if(status != null){
165
            statusSet = status.asSet();
166
        }
167
        Pager<RegistrationDTO> pager = registrationWorkingSetService.pageDTOs(submitterUuid, statusSet,
168
                identifierFilterPattern, taxonNameFilterPattern, typeDesignationStatusUuids,
169
                pageSize, pageIndex, ORDER_BY_IDENTIFIER);
170
        return pager;
171
    }
172

    
173

    
174
    @RequestMapping(value="/registrationWorkingSetDTO/{reference_uuid}", method = RequestMethod.GET)
175
    public RegistrationWorkingSet doGetRegistrationWorkingSet(
176
            @PathVariable("reference_uuid") UUID referenceUuid,
177
            HttpServletRequest request,
178
            HttpServletResponse response) throws RegistrationValidationException {
179

    
180
        logger.info("doGetRegistrationWorkingSet() " + requestPathAndQuery(request));
181

    
182
        RegistrationWorkingSet workingset = registrationWorkingSetService.loadWorkingSetByReferenceUuid(referenceUuid, true);
183

    
184
        return workingset;
185
    }
186

    
187

    
188
    @RequestMapping(value="/registrationDTO/findInTaxonGraph", method = RequestMethod.GET)
189
    public Pager<RegistrationDTO> doPageByTaxomicInclusion(
190
            @RequestParam(value = "taxonNameFilter", required = true) String taxonNameFilterPattern,
191
            @RequestParam(value = "matchMode", required = false) MatchMode matchMode,
192
            @RequestParam(value = "pageNumber", required = false, defaultValue="0") Integer pageIndex,
193
            @RequestParam(value = "pageSize", required = false, defaultValue="30" /*AbstractController.DEFAULT_PAGE_SIZE_VALUE*/ ) Integer pageSize,
194
            HttpServletRequest request,
195
            HttpServletResponse response) {
196

    
197
        logger.info("findInTaxonGraph() " + requestPathAndQuery(request));
198

    
199
        Collection<RegistrationStatus> includedStatus = Arrays.asList(RegistrationStatus.PUBLISHED);
200

    
201
        Pager<RegistrationDTO> regPager = registrationWorkingSetService.findInTaxonGraph(null, includedStatus,
202
                taxonNameFilterPattern, matchMode,
203
                pageSize, pageIndex, ORDER_BY_IDENTIFIER);
204

    
205
        return regPager;
206
    }
207
}
(55-55/70)