Project

General

Profile

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

    
12
import java.io.IOException;
13
import java.util.UUID;
14

    
15
import javax.servlet.http.HttpServletRequest;
16
import javax.servlet.http.HttpServletResponse;
17

    
18
import org.apache.commons.lang.StringUtils;
19
import org.springframework.beans.factory.annotation.Autowired;
20
import org.springframework.web.bind.WebDataBinder;
21
import org.springframework.web.bind.annotation.InitBinder;
22
import org.springframework.web.bind.annotation.RequestMapping;
23
import org.springframework.web.bind.annotation.RequestMethod;
24
import org.springframework.web.bind.annotation.RequestParam;
25

    
26
import eu.etaxonomy.cdm.api.service.IIdentifiableEntityService;
27
import eu.etaxonomy.cdm.api.service.ITermService;
28
import eu.etaxonomy.cdm.api.service.dto.FindByIdentifierDTO;
29
import eu.etaxonomy.cdm.api.service.dto.FindByMarkerDTO;
30
import eu.etaxonomy.cdm.api.service.pager.Pager;
31
import eu.etaxonomy.cdm.model.common.CdmBase;
32
import eu.etaxonomy.cdm.model.common.DefinedTerm;
33
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
34
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
35
import eu.etaxonomy.cdm.model.common.MarkerType;
36
import eu.etaxonomy.cdm.persistence.query.MatchMode;
37
import eu.etaxonomy.cdm.remote.controller.util.PagerParameters;
38
import eu.etaxonomy.cdm.remote.editor.MatchModePropertyEditor;
39

    
40
/**
41
 * @author l.morris
42
 * @date 27 Mar 2012
43
 *
44
 */
45
public abstract class IdentifiableListController <T extends IdentifiableEntity, SERVICE extends IIdentifiableEntityService<T>> extends BaseListController<T,SERVICE>  {
46

    
47

    
48
    @InitBinder
49
    @Override
50
    public void initBinder(WebDataBinder binder) {
51
        super.initBinder(binder);
52
        binder.registerCustomEditor(MatchMode.class, new MatchModePropertyEditor());
53
    }
54

    
55
	@Autowired
56
	private ITermService termService;
57

    
58
    /**
59
     * Find IdentifiableEntity objects by name
60
     * <p>
61
     *
62
     * @param query
63
     *            the string to query for. Since the wildcard character '*'
64
     *            internally always is appended to the query string, a search
65
     *            always compares the query string with the beginning of a name.
66
     *            - <i>required parameter</i>
67
     * @param pageNumber
68
     *            the number of the page to be returned, the first page has the
69
     *            pageNumber = 1 - <i>optional parameter</i>
70
     * @param pageSize
71
     *            the maximum number of entities returned per page (can be -1
72
     *            to return all entities in a single page) - <i>optional parameter</i>
73
     * @param matchMode
74
     *           valid values are "EXACT", "BEGINNING", "ANYWHERE", "END" (case sensitive !!!)
75
     * @return a Pager on a list of {@link IdentifiableEntity}s
76
     * @throws IOException
77
     */
78
    @RequestMapping(method = RequestMethod.GET, value={"findByTitle"})
79
    public Pager<T> doFindByTitle(
80
            @RequestParam(value = "query", required = true) String query,
81
            @RequestParam(value = "pageNumber", required = false) Integer pageNumber,
82
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
83
            @RequestParam(value = "matchMode", required = false) MatchMode matchMode,
84
            HttpServletRequest request,
85
            HttpServletResponse response
86
            )
87
             throws IOException {
88

    
89

    
90

    
91
        logger.info("doFind : " + request.getRequestURI() + "?" + request.getQueryString() );
92

    
93
        PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber);
94
        pagerParams.normalizeAndValidate(response);
95

    
96
        matchMode = matchMode != null ? matchMode : MatchMode.BEGINNING;
97

    
98
        return service.findByTitle(null, query, matchMode, null, pagerParams.getPageSize(), pagerParams.getPageIndex(), null, initializationStrategy);
99

    
100
    }
101

    
102
    /**
103
     * list IdentifiableEntity objects by identifiers
104
     *
105
     * @param type
106
     * @param identifierType
107
     * @param identifier
108
     * @param pageNumber
109
     * @param pageSize
110
     * @param matchMode
111
     * @param request
112
     * @param response
113
     * @param includeEntity
114
     * @return
115
     * @throws IOException
116
     */
117
    @RequestMapping(method = RequestMethod.GET, value={"findByIdentifier"})
118
    public  Pager<FindByIdentifierDTO<T>> doFindByIdentifier(
119
    		@RequestParam(value = "class", required = false) Class type,
120
    		@RequestParam(value = "identifierType", required = false) String identifierType,
121
            @RequestParam(value = "identifier", required = false) String identifier,
122
            @RequestParam(value = "pageNumber", required = false) Integer pageNumber,
123
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
124
            @RequestParam(value = "matchMode", required = false) MatchMode matchMode,
125
            @RequestParam(value = "includeEntity", required = false) Boolean includeEntity,
126
            HttpServletRequest request,
127
            HttpServletResponse response
128
            )
129
             throws IOException {
130

    
131
    	DefinedTerm definedTerm = null;
132
    	if(StringUtils.isNotBlank(identifierType)){
133
    		identifierType = StringUtils.trim(identifierType);
134
    		UUID identifierTypeUUID = UUID.fromString(identifierType);
135
    		definedTerm = CdmBase.deproxy(termService.find(identifierTypeUUID), DefinedTerm.class);
136
    	}
137

    
138
        logger.info("doFind : " + request.getRequestURI() + "?" + request.getQueryString() );
139

    
140
        PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber).normalizeAndValidate(response);
141

    
142
        matchMode = matchMode != null ? matchMode : MatchMode.EXACT;
143
        boolean includeCdmEntity = includeEntity == null ||  includeEntity == true ? true : false;
144
        return service.findByIdentifier(type, identifier, definedTerm , matchMode, includeCdmEntity, pagerParams.getPageSize(), pagerParams.getPageIndex(), initializationStrategy);
145
    }
146

    
147
    /**
148
     * List identifiable entities by markers
149
     *
150
     * @param type
151
     * @param markerType
152
     * @param value
153
     * @param pageNumber
154
     * @param pageSize
155
     * @param request
156
     * @param response
157
     * @return
158
     * @see IdentifiableListController#doFindByIdentifier(Class, String, String, Integer, Integer, MatchMode, Boolean, HttpServletRequest, HttpServletResponse)
159
     * @throws IOException
160
     */
161
    @RequestMapping(method = RequestMethod.GET, value={"findByMarker"}, params={"subtree"})
162
    public Pager<FindByMarkerDTO<T>> doFindByMarker(
163
            @RequestParam(value = "class", required = false) Class<T> type,
164
            @RequestParam(value = "markerType", required = true) String markerTypeUuidStr,
165
            @RequestParam(value = "value", required = false) Boolean value,
166
            @RequestParam(value = "pageNumber", required = false) Integer pageNumber,
167
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
168
            @RequestParam(value = "includeEntity", required = false, defaultValue="true") Boolean includeEntity, //TODO true only for debuging
169
            HttpServletRequest request,
170
            HttpServletResponse response
171
            )
172
            throws IOException {
173

    
174
        MarkerType markerType = null;
175
        if(StringUtils.isNotBlank(markerTypeUuidStr)){
176
            markerTypeUuidStr = StringUtils.trim(markerTypeUuidStr);
177
            UUID markerTypeUUID = UUID.fromString(markerTypeUuidStr);
178
            DefinedTermBase<?> term = CdmBase.deproxy(termService.find(markerTypeUUID), MarkerType.class);
179
            if (term != null && term.isInstanceOf(MarkerType.class)){
180
                markerType = CdmBase.deproxy(term, MarkerType.class);
181
            }
182
        }
183

    
184
        if (logger.isDebugEnabled()){logger.info("doFindByMarker [subtreeUuid]  : " + request.getRequestURI() + "?" + request.getQueryString() );}
185

    
186
        PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber).normalizeAndValidate(response);
187

    
188
        return service.findByMarker(type, markerType, value, includeEntity, pagerParams.getPageSize(), pagerParams.getPageIndex(), initializationStrategy);
189
    }
190

    
191

    
192
}
(32-32/63)