Project

General

Profile

Download (7.57 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 = {"/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

    
58
        logger.info("doPage() " + requestPathAndQuery(request));
59
        PagerParameters pagerParameters = new PagerParameters(pageSize, pageIndex).normalizeAndValidate(response);
60

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

    
68

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

    
98
        logger.info("doPage() " + requestPathAndQuery(request));
99
        PagerParameters pagerParameters = new PagerParameters(pageSize, pageIndex).normalizeAndValidate(response);
100

    
101
        return service.page(termType, pagerParameters.getPageSize(), pagerParameters.getPageIndex(), orderBy.orderHints(), getInitializationStrategy());
102
    }
103

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

    
136

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

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

    
142
        matchMode = matchMode != null ? matchMode : MatchMode.BEGINNING;
143

    
144
        return service.findByTitleWithRestrictions(null, query, matchMode, null, pagerParams.getPageSize(), pagerParams.getPageIndex(), null, initializationStrategy);
145

    
146
    }
147

    
148
    @RequestMapping(method = RequestMethod.GET, value={"findByTitle"}, params={"termType"})
149
    public Pager<TermTree> doFindByTitleByTermType(
150
            @RequestParam(value = "query", required = true) String query,
151
            @RequestParam(value = "termType", required = false) TermType termType,
152
            @RequestParam(value = "pageIndex", required = false) Integer pageIndex,
153
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
154
            @RequestParam(value = "matchMode", required = false) MatchMode matchMode,
155
            HttpServletRequest request,
156
            HttpServletResponse response
157
            )
158
             throws IOException {
159

    
160
        List<Restriction<?>> restrictions = service.buildTermTypeFilterRestrictions(termType);
161
        String requestPathAndQuery = requestPathAndQuery(request);
162

    
163
        logger.info("doFindByTitleByTermType() : " + requestPathAndQuery );
164

    
165
        PagerParameters pagerParams = new PagerParameters(pageSize, pageIndex);
166
        pagerParams.normalizeAndValidate(response);
167

    
168
        matchMode = matchMode != null ? matchMode : MatchMode.BEGINNING;
169

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

    
172
    }
173

    
174
}
(69-69/76)