Project

General

Profile

« Previous | Next » 

Revision 52911

added pagination to the sushilite call

View differences:

SushiliteApiImpl.java
1 1
package eu.dnetlib.repo.manager.service.controllers;
2 2

  
3
import eu.dnetlib.usagestats.sushilite.ReportResponseWrapper;
3
import com.fasterxml.jackson.databind.ObjectMapper;
4
import com.google.gson.Gson;
5
import eu.dnetlib.usagestats.sushilite.domain.ReportItem;
6
import eu.dnetlib.usagestats.sushilite.domain.ReportResponse;
7
import eu.dnetlib.usagestats.sushilite.domain.ReportResponseWrapper;
8
import org.json.JSONException;
4 9
import org.springframework.beans.factory.annotation.Autowired;
5 10
import org.springframework.beans.factory.annotation.Value;
6 11
import org.springframework.core.ParameterizedTypeReference;
12
import org.springframework.http.HttpEntity;
13
import org.springframework.http.HttpHeaders;
7 14
import org.springframework.http.HttpMethod;
8 15
import org.springframework.http.ResponseEntity;
9 16
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
10 17
import org.springframework.security.access.prepost.PreAuthorize;
18
import org.springframework.stereotype.Component;
19
import org.springframework.web.bind.annotation.PathVariable;
11 20
import org.springframework.web.bind.annotation.RequestParam;
12 21
import org.springframework.web.client.RestClientException;
13 22
import org.springframework.web.client.RestTemplate;
14 23
import org.springframework.web.util.UriComponentsBuilder;
15 24

  
25
import java.util.ArrayList;
26
import java.util.List;
27

  
28
@Component
16 29
public class SushiliteApiImpl implements SushiliteApi {
17 30

  
18 31

  
19
    @Value("${services.repomanager.usagestats.sushiliteEndoint}")
32
    @Value("${services.repomanager.usagestats.sushiliteEndpoint}")
20 33
    private String usagestatsSushiliteEndpoint;
21 34

  
22 35
    @Autowired
23 36
    private EmailUtils emailUtils;
24 37

  
25
    private static final org.apache.log4j.Logger LOGGER = org.apache.log4j.Logger
26
            .getLogger(SushiliteApiImpl.class);
38
    private static final org.apache.log4j.Logger LOGGER = org.apache.log4j.Logger.getLogger(SushiliteApiImpl.class);
27 39

  
28 40

  
29 41
    @Override
30 42
    @PreAuthorize("hasRole('ROLE_USER')")
31
    public ReportResponseWrapper getReportResults(@RequestParam(value = "Report") String Report,
43
    public ReportResponseWrapper getReportResults(@PathVariable("page") String page,
44
                                                  @PathVariable("pageSize") String pageSize,
45
                                                  @RequestParam(value = "Report") String Report,
32 46
                                                  @RequestParam(value = "Release",defaultValue="4") String Release,
33
                                                  @RequestParam(value = "RequestorID",required=false) String RequestorID,
34
                                                  @RequestParam(value = "BeginDate",required=false) String BeginDate,
35
                                                  @RequestParam(value = "EndDate",required=false) String EndDate,
47
                                                  @RequestParam(value = "RequestorID",required=false,defaultValue="anonymous") String RequestorID,
48
                                                  @RequestParam(value = "BeginDate",required=false,defaultValue="") String BeginDate,
49
                                                  @RequestParam(value = "EndDate",required=false,defaultValue="") String EndDate,
36 50
                                                  @RequestParam(value = "RepositoryIdentifier") String RepositoryIdentifier,
37
                                                  @RequestParam(value = "ItemIdentifier",required=false) String ItemIdentifier,
38
                                                  @RequestParam(value = "ItemDataType",required=false) String ItemDataType,
51
                                                  @RequestParam(value = "ItemIdentifier",required=false,defaultValue="") String ItemIdentifier,
52
                                                  @RequestParam(value = "ItemDataType",required=false,defaultValue="") String ItemDataType,
39 53
                                                  @RequestParam(value = "Granularity") String Granularity,
40
                                                  @RequestParam(value = "Pretty",required=false) String Pretty) {
54
                                                  @RequestParam(value = "Pretty",required=false,defaultValue="") String Pretty) {
41 55

  
42 56
            //build the uri params
43 57
            UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(this.usagestatsSushiliteEndpoint + "GetReport/")
......
55 69
            //create new template engine
56 70
            RestTemplate template = new RestTemplate();
57 71
            template.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
72

  
58 73
            ResponseEntity<ReportResponseWrapper> resp;
59 74
            try {
60 75
                //communicate with endpoint
......
70 85
                throw e;
71 86
            }
72 87

  
73
            return resp.getBody();
88
            System.out.println("sushi responded status " + resp.getStatusCode());
89

  
90
            List<ReportItem> requestedItemList = new ArrayList<>();
91
            if (resp.getBody().getReportResponse().getReportWrapper().getReport().getCustomer().getReportItems() != null) {
92
                try {
93
                    int totalItems = resp.getBody().getReportResponse().getReportWrapper().getReport().getCustomer().getReportItems().size();
94
                    int offset = Integer.parseInt(page);
95
                    int size = Integer.parseInt(pageSize);
96

  
97
                    if (offset <= (totalItems / size) ) {
98
                        int upperIndex = offset+size;
99
                        if (upperIndex > totalItems) {
100
                            upperIndex = totalItems;
101
                        }
102
                        requestedItemList = resp.getBody().getReportResponse().getReportWrapper().getReport().getCustomer().getReportItems().subList(offset,upperIndex);
103
                    }
104

  
105
                } catch (NumberFormatException e) {
106
                    LOGGER.debug("Exception on getReportResults - trying to cast strings to integers", e);
107
                    //emailUtils.reportException(e);
108
                    throw e;
109
                }
110

  
111
            }
112

  
113
            ReportResponseWrapper newReportResponse = resp.getBody();
114
            newReportResponse.getReportResponse().getReportWrapper().getReport().getCustomer().setReportItems(requestedItemList);
115

  
116

  
117
            return newReportResponse;
74 118
    }
119

  
75 120
}

Also available in: Unified diff