Project

General

Profile

Download (8.25 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.common.IdentifiableEntity;
27
import eu.etaxonomy.cdm.model.term.TermTree;
28
import eu.etaxonomy.cdm.model.term.TermType;
29
import eu.etaxonomy.cdm.persistence.dao.common.Restriction;
30
import eu.etaxonomy.cdm.persistence.query.MatchMode;
31
import eu.etaxonomy.cdm.remote.controller.util.PagerParameters;
32
import io.swagger.annotations.Api;
33

    
34

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

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

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

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

    
72

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

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

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

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

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

    
147
        PagerParameters pagerParams = new PagerParameters(pageSize, pageIndex);
148
        pagerParams.normalizeAndValidate(response);
149

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

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

    
154
    }
155

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

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

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

    
173
        PagerParameters pagerParams = new PagerParameters(pageSize, pageIndex);
174
        pagerParams.normalizeAndValidate(response);
175

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

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

    
180
    }
181

    
182
}
(69-69/76)