Project

General

Profile

« Previous | Next » 

Revision e14b9808

Added by Andreas Kohlbecker over 3 years ago

ref #9087 typedesignation/{uuid}/annotations returns pager

View differences:

cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/AbstractController.java
8 8
*/
9 9
package eu.etaxonomy.cdm.remote.controller;
10 10

  
11
import java.io.IOException;
11 12
import java.io.UnsupportedEncodingException;
13
import java.util.ArrayList;
12 14
import java.util.Arrays;
15
import java.util.Collection;
13 16
import java.util.List;
14 17

  
15 18
import javax.servlet.http.HttpServletRequest;
19
import javax.servlet.http.HttpServletResponse;
16 20

  
17 21
import org.springframework.beans.factory.annotation.Autowired;
22
import org.springframework.web.bind.annotation.RequestMapping;
18 23

  
19 24
import eu.etaxonomy.cdm.api.service.IService;
25
import eu.etaxonomy.cdm.api.service.pager.Pager;
26
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
20 27
import eu.etaxonomy.cdm.api.utility.UserHelper;
21 28
import eu.etaxonomy.cdm.model.common.CdmBase;
22 29
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.DaoBase;
......
133 140
        return pathParameter;
134 141
    }
135 142

  
143
    protected <T extends CdmBase> Pager<T> pagerForSubCollectionOf(Collection<T> c, Integer pageNumber, Integer pageSize, HttpServletResponse response) throws IOException {
144
        PagerParameters pagerParameters = new PagerParameters(pageSize, pageNumber);
145
        pagerParameters.normalizeAndValidate(response);
146

  
147
        int subCollectionStart = pagerParameters.getPageIndex() * pagerParameters.getPageSize();
148
        List<T> sub_c = subCollection(c, subCollectionStart, pagerParameters.getPageSize());
149
        Pager<T> p = new DefaultPagerImpl<>(pageNumber, c.size(), pagerParameters.getPageSize(), sub_c);
150
        return p;
151
    }
152

  
153
    protected <E> List<E> subCollection(Collection<? extends E> c, Integer start, Integer length) {
154
        List<E> sub_c = new ArrayList<E>(length);
155
        if(c.size() > length){
156
            E[] a = (E[]) c.toArray();
157
            for(int i = start; i < start + length; i++){
158
                sub_c.add(a[i]);
159
            }
160
        } else {
161
            sub_c.addAll(c);
162
        }
163
        return sub_c;
164

  
165
    }
166

  
136 167
}
cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/BaseController.java
42 42
import eu.etaxonomy.cdm.api.service.IService;
43 43
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
44 44
import eu.etaxonomy.cdm.api.service.pager.Pager;
45
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
46 45
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
47 46
import eu.etaxonomy.cdm.model.common.CdmBase;
48 47
import eu.etaxonomy.cdm.model.common.IPublishable;
49 48
import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;
50 49
import eu.etaxonomy.cdm.model.taxon.Classification;
51 50
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
52
import eu.etaxonomy.cdm.remote.controller.util.PagerParameters;
53 51
import eu.etaxonomy.cdm.remote.editor.UUIDPropertyEditor;
54 52

  
55 53
/**
......
199 197
        } else {
200 198
            //FIXME use real paging mechanism of according service class instead of subCollection()
201 199
            //FIXME use BaseListController.normalizeAndValidatePagerParameters(pageNumber, pageSize, response);
202
            PagerParameters pagerParameters = new PagerParameters(pageSize, pageNumber);
203
            pagerParameters.normalizeAndValidate(response);
204

  
205
            start = pagerParameters.getPageIndex() * pagerParameters.getPageSize();
206
            List<? extends CdmBase> sub_c = subCollection(c, start, pagerParameters.getPageSize());
207
            Pager<? extends CdmBase> p = new DefaultPagerImpl<>(pageNumber, c.size(), pagerParameters.getPageSize(), sub_c);
200
            Pager<? extends CdmBase> p = pagerForSubCollectionOf(c, pageNumber, pageSize, response);
208 201
            return p;
209 202
        }
210 203
    }
......
396 389
        return result;
397 390
    }
398 391

  
399
    private <E> List<E> subCollection(Collection<? extends E> c, Integer start, Integer length){
400
        List<E> sub_c = new ArrayList<E>(length);
401
        if(c.size() > length){
402
            E[] a = (E[]) c.toArray();
403
            for(int i = start; i < start + length; i++){
404
                sub_c.add(a[i]);
405
            }
406
        } else {
407
            sub_c.addAll(c);
408
        }
409
        return sub_c;
410

  
411
    }
412

  
413 392
    /**
414 393
     * Checks if an {@link IPublishable} was found and if it is publish.
415 394
     * If not the according {@link HttpStatusMessage http messages} are added to response.
cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/TypeDesignationController.java
24 24
import org.springframework.web.bind.annotation.PathVariable;
25 25
import org.springframework.web.bind.annotation.RequestMapping;
26 26
import org.springframework.web.bind.annotation.RequestMethod;
27
import org.springframework.web.bind.annotation.RequestParam;
27 28

  
28 29
import eu.etaxonomy.cdm.api.service.INameService;
29 30
import eu.etaxonomy.cdm.api.service.dto.MediaDTO;
31
import eu.etaxonomy.cdm.api.service.pager.Pager;
30 32
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
31 33
import eu.etaxonomy.cdm.model.common.Annotation;
32 34
import eu.etaxonomy.cdm.model.media.Media;
......
130 132
        return dtb.getAnnotations();
131 133
    }
132 134

  
135
    @RequestMapping(method = RequestMethod.GET, value="annotations", params = {"pageNumber", "pageSize"})
136
    public Pager<Annotation> doGetAnnotations(
137
            @PathVariable("uuid") UUID uuid,
138
            // doPage request parameters
139
            @RequestParam(value = "pageNumber", required = true) Integer pageNumber,
140
            @RequestParam(value = "pageSize", required = true) Integer pageSize,
141
            HttpServletRequest request,
142
            HttpServletResponse response) throws IOException {
143

  
144
        String servletPath = request.getServletPath();
145
        String propertyName = FilenameUtils.getBaseName(servletPath);
146

  
147
        logger.info("doGetAnnotations() - " + requestPathAndQuery(request));
148

  
149
        TypeDesignationBase<?> dtb = service.loadTypeDesignation(uuid, Arrays.asList("$", "annotations"));
150
        if(dtb == null){
151
            HttpStatusMessage.UUID_NOT_FOUND.send(response);
152
        }
153
        Pager<Annotation> p = pagerForSubCollectionOf(dtb.getAnnotations(), pageNumber, pageSize, response);
154
        return p;
155
    }
156

  
133 157
}

Also available in: Unified diff