Project

General

Profile

1
package eu.dnetlib.repo.manager.service;
2

    
3
import eu.dnetlib.usagestats.sushilite.domain.ReportItem;
4
import eu.dnetlib.usagestats.sushilite.domain.ReportResponseWrapper;
5
import org.springframework.beans.factory.annotation.Value;
6
import org.springframework.core.ParameterizedTypeReference;
7
import org.springframework.http.HttpMethod;
8
import org.springframework.http.ResponseEntity;
9
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
10
import org.springframework.security.access.prepost.PreAuthorize;
11
import org.springframework.stereotype.Service;
12
import org.springframework.web.client.RestTemplate;
13
import org.springframework.web.util.UriComponentsBuilder;
14

    
15
import java.util.ArrayList;
16
import java.util.List;
17

    
18
@Service("sushiliteService")
19
public class SushiliteServiceImpl implements SushiliteService {
20

    
21

    
22
    @Value("${services.provide.usagestats.sushiliteEndpoint}")
23
    private String usagestatsSushiliteEndpoint;
24

    
25
    private static final org.apache.log4j.Logger LOGGER = org.apache.log4j.Logger.getLogger(SushiliteServiceImpl.class);
26

    
27

    
28
    @Override
29
    @PreAuthorize("hasAuthority('REGISTERED_USER')")
30
    public ReportResponseWrapper getReportResults(String page,
31
                                                  String pageSize,
32
                                                  String Report,
33
                                                  String Release,
34
                                                  String RequestorID,
35
                                                  String BeginDate,
36
                                                  String EndDate,
37
                                                  String RepositoryIdentifier,
38
                                                  String ItemIdentifier,
39
                                                  String ItemDataType,
40
                                                  String Granularity,
41
                                                  String Pretty) {
42

    
43
            //build the uri params
44
            UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(this.usagestatsSushiliteEndpoint + "GetReport/")
45
                                                                .queryParam("Report", Report)
46
                                                                .queryParam("Release", Release)
47
                                                                .queryParam("RequestorID", RequestorID)
48
                                                                .queryParam("BeginDate", BeginDate)
49
                                                                .queryParam("EndDate", EndDate)
50
                                                                .queryParam("RepositoryIdentifier", RepositoryIdentifier)
51
                                                                .queryParam("ItemIdentifier", ItemIdentifier)
52
                                                                .queryParam("ItemDataType", ItemDataType)
53
                                                                .queryParam("Granularity", Granularity)
54
                                                                .queryParam("Pretty", Pretty);
55

    
56
            //create new template engine
57
            RestTemplate template = new RestTemplate();
58
            template.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
59

    
60
            ResponseEntity<ReportResponseWrapper> resp;
61

    
62
            //communicate with endpoint
63
            resp = template.exchange(
64
                    builder.build().encode().toUri(),
65
                    HttpMethod.GET,
66
                    null,
67
                    new ParameterizedTypeReference<ReportResponseWrapper>() {
68
                    });
69

    
70
            // check remote api's response
71
            System.out.println("sushi responded status " + resp.getStatusCode());
72

    
73
            // get the items corresponding to the requested page
74
            List<ReportItem> requestedItemList = new ArrayList<>();
75
            if (resp.getBody().getReportResponse().getReportWrapper().getReport().getCustomer().getReportItems() != null) {
76
                try {
77
                    int totalItems = resp.getBody().getReportResponse().getReportWrapper().getReport().getCustomer().getReportItems().size();
78
                    int size = Integer.parseInt(pageSize);
79
                    int offset = Integer.parseInt(page)*size;
80

    
81
                    if (offset < totalItems ) {
82
                        int upperIndex = offset+size;
83
                        if (upperIndex > totalItems) {
84
                            upperIndex = totalItems;
85
                        }
86
                        requestedItemList = resp.getBody().getReportResponse().getReportWrapper().getReport().getCustomer().getReportItems().subList(offset,upperIndex);
87
                    }
88

    
89
                } catch (NumberFormatException e) {
90
                    LOGGER.debug("Exception on getReportResults - trying to cast strings to integers", e);
91
                    //emailUtils.reportException(e);
92
                    throw e;
93
                }
94

    
95
            }
96

    
97
            ReportResponseWrapper newReportResponse = resp.getBody();
98
            newReportResponse.getReportResponse().getReportWrapper().getReport().getCustomer().setReportItems(requestedItemList);
99

    
100

    
101
            return newReportResponse;
102
    }
103

    
104
}
(16-16/20)