Project

General

Profile

Download (8.21 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.List;
14

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

    
18
import org.springframework.beans.factory.annotation.Autowired;
19
import org.springframework.stereotype.Controller;
20
import org.springframework.web.bind.annotation.RequestMapping;
21
import org.springframework.web.bind.annotation.RequestMethod;
22
import org.springframework.web.bind.annotation.RequestParam;
23

    
24
import eu.etaxonomy.cdm.api.service.ITermTreeService;
25
import eu.etaxonomy.cdm.api.service.pager.Pager;
26
import eu.etaxonomy.cdm.model.term.TermTree;
27
import eu.etaxonomy.cdm.model.term.TermType;
28
import eu.etaxonomy.cdm.persistence.dao.common.Restriction;
29
import eu.etaxonomy.cdm.persistence.query.MatchMode;
30
import eu.etaxonomy.cdm.remote.controller.util.PagerParameters;
31
import io.swagger.annotations.Api;
32

    
33

    
34
@Controller
35
@Api("termTree")
36
@RequestMapping(value = {"/featureTree", "/termTree"})
37
public class TermTreeListController extends AbstractIdentifiableListController<TermTree, ITermTreeService> {
38

    
39
    @Override
40
    @Autowired
41
    public void setService(ITermTreeService service) {
42
        this.service = service;
43
    }
44

    
45
    @Override
46
    @SuppressWarnings("unchecked")
47
    @RequestMapping(method = RequestMethod.GET)
48
    public Pager<TermTree> doPage(
49
            @RequestParam(value = "pageNumber", required = false) Integer pageIndex,
50
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
51
            @RequestParam(value = "class", required = false) Class type,
52
            @RequestParam(name="orderBy", defaultValue="BY_TITLE_CACHE_ASC", required=true) OrderHintPreset orderBy,
53
            HttpServletRequest request,
54
            HttpServletResponse response) throws IOException
55
            {
56
        String requestPathAndQuery = requestPathAndQuery(request);
57
        if(requestPathAndQuery.contains("/featureTree")){
58
            logger.info(" Delegating usage of deprecated /featureTree service to /termTree");
59
            return doPageByTermType(TermType.Feature, pageIndex, pageSize, orderBy, request, response);
60
        }
61
        logger.info("doPage() " + requestPathAndQuery(request));
62
        PagerParameters pagerParameters = new PagerParameters(pageSize, pageIndex).normalizeAndValidate(response);
63

    
64
        if(type != null) {
65
            orderBy = orderBy.checkSuitableFor(type);
66
            // TODO how can we check in case type == null?
67
        }
68
        return service.page(type, pagerParameters.getPageSize(), pagerParameters.getPageIndex(), orderBy.orderHints(), getInitializationStrategy());
69
    }
70

    
71

    
72
    /**
73
     * @param termType
74
     *            Usually {@link TermType#Feature} or {@link TermType#Character} do make sense here.
75
     *
76
     * @param pageIndex
77
     *            the index of the page to be returned, the first page has the
78
     *            pageIndex = 0 - <i>optional parameter</i>. Defaults to 0 if
79
     *            set to <code>NULL</code>.
80
     * @param pageSize
81
     *            the maximum number of entities returned per page.
82
     *            The {@link #DEFAULT_PAGE_SIZE} will be used if pageSize is set to
83
     *            <code>null</code> - <i>optional parameter</i>
84
     * @param type
85
     *            Further restricts the type of entities to be returned.
86
     *            If null the base type <code>&lt;T&gt;</code> is being used. - <i>optional parameter</i>
87
     * @return
88
     * @throws IOException
89
     */
90
    @SuppressWarnings("unchecked")
91
    @RequestMapping(method = RequestMethod.GET, params={"termType"})
92
    public Pager<TermTree> doPageByTermType(
93
            @RequestParam(value = "termType", required = false) TermType termType,
94
            @RequestParam(value = "pageNumber", required = false) Integer pageIndex,
95
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
96
            @RequestParam(name="orderBy", defaultValue="BY_TITLE_CACHE_ASC", required=true) OrderHintPreset orderBy,
97
            HttpServletRequest request,
98
            HttpServletResponse response) throws IOException
99
            {
100

    
101
        logger.info("doPage() " + requestPathAndQuery(request));
102
        PagerParameters pagerParameters = new PagerParameters(pageSize, pageIndex).normalizeAndValidate(response);
103

    
104
        return service.page(termType, pagerParameters.getPageSize(), pagerParameters.getPageIndex(), orderBy.orderHints(), getInitializationStrategy());
105
    }
106

    
107
    /**
108
     * Find IdentifiableEntity objects by name
109
     * <p>
110
     *
111
     * @param query
112
     *            the string to query for. Since the wildcard character '*'
113
     *            internally always is appended to the query string, a search
114
     *            always compares the query string with the beginning of a name.
115
     *            - <i>required parameter</i>
116
     * @param pageNumber
117
     *            the number of the page to be returned, the first page has the
118
     *            pageNumber = 1 - <i>optional parameter</i>
119
     * @param pageSize
120
     *            the maximum number of entities returned per page (can be -1
121
     *            to return all entities in a single page) - <i>optional parameter</i>
122
     * @param matchMode
123
     *           valid values are "EXACT", "BEGINNING", "ANYWHERE", "END" (case sensitive !!!)
124
     * @return a Pager on a list of {@link IdentifiableEntity}s
125
     * @throws IOException
126
     */
127
    @Override
128
    @RequestMapping(method = RequestMethod.GET, value={"findByTitle"})
129
    public Pager<TermTree> doFindByTitle(
130
            @RequestParam(value = "query", required = true) String query,
131
            @RequestParam(value = "pageNumber", required = false) Integer pageNumber,
132
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
133
            @RequestParam(value = "matchMode", required = false) MatchMode matchMode,
134
            HttpServletRequest request,
135
            HttpServletResponse response
136
            )
137
             throws IOException {
138

    
139
        String requestPathAndQuery = requestPathAndQuery(request);
140
        if(requestPathAndQuery.contains("/featureTree")){
141
            logger.info(" Delegating usage of deprecated /featureTree service to /termTree");
142
            return doFindByTitleByTermType(query, TermType.Feature, pageNumber, pageSize, matchMode, request, response);
143
        }
144
        logger.info("doFind : " + request.getRequestURI() + "?" + request.getQueryString() );
145

    
146
        PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber);
147
        pagerParams.normalizeAndValidate(response);
148

    
149
        matchMode = matchMode != null ? matchMode : MatchMode.BEGINNING;
150

    
151
        return service.findByTitleWithRestrictions(null, query, matchMode, null, pagerParams.getPageSize(), pagerParams.getPageIndex(), null, initializationStrategy);
152

    
153
    }
154

    
155
    @RequestMapping(method = RequestMethod.GET, value={"findByTitle"}, params={"termType"})
156
    public Pager<TermTree> doFindByTitleByTermType(
157
            @RequestParam(value = "query", required = true) String query,
158
            @RequestParam(value = "termType", required = false) TermType termType,
159
            @RequestParam(value = "pageNumber", required = false) Integer pageNumber,
160
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
161
            @RequestParam(value = "matchMode", required = false) MatchMode matchMode,
162
            HttpServletRequest request,
163
            HttpServletResponse response
164
            )
165
             throws IOException {
166

    
167
        List<Restriction<?>> restrictions = service.buildTermTypeFilterRestrictions(termType);
168
        String requestPathAndQuery = requestPathAndQuery(request);
169

    
170
        logger.info("doFindByTitleByTermType() : " + requestPathAndQuery );
171

    
172
        PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber);
173
        pagerParams.normalizeAndValidate(response);
174

    
175
        matchMode = matchMode != null ? matchMode : MatchMode.BEGINNING;
176

    
177
        return service.findByTitleWithRestrictions(null, query, matchMode, restrictions, pagerParams.getPageSize(), pagerParams.getPageIndex(), null, initializationStrategy);
178

    
179
    }
180

    
181
}
(68-68/75)