Project

General

Profile

1 54525 panagiotis
package eu.dnetlib.repo.manager.service;
2 52829 myrto.kouk
3 52911 myrto.kouk
import eu.dnetlib.usagestats.sushilite.domain.ReportItem;
4
import eu.dnetlib.usagestats.sushilite.domain.ReportResponseWrapper;
5 52829 myrto.kouk
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 54525 panagiotis
import org.springframework.stereotype.Service;
12 52829 myrto.kouk
import org.springframework.web.client.RestTemplate;
13
import org.springframework.web.util.UriComponentsBuilder;
14
15 52911 myrto.kouk
import java.util.ArrayList;
16
import java.util.List;
17
18 54525 panagiotis
@Service("sushiliteService")
19 54690 panagiotis
public class SushiliteServiceImpl implements SushiliteService {
20 52829 myrto.kouk
21
22 61716 antonis.le
    @Value("${services.provide.usagestats.sushiliteEndpoint}")
23 52829 myrto.kouk
    private String usagestatsSushiliteEndpoint;
24
25 54690 panagiotis
    private static final org.apache.log4j.Logger LOGGER = org.apache.log4j.Logger.getLogger(SushiliteServiceImpl.class);
26 52829 myrto.kouk
27
28
    @Override
29 61441 antonis.le
    @PreAuthorize("hasAuthority('REGISTERED_USER')")
30 56761 ioannis.di
    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 52829 myrto.kouk
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 52911 myrto.kouk
60 52829 myrto.kouk
            ResponseEntity<ReportResponseWrapper> resp;
61
62 61696 antonis.le
            //communicate with endpoint
63
            resp = template.exchange(
64
                    builder.build().encode().toUri(),
65
                    HttpMethod.GET,
66
                    null,
67
                    new ParameterizedTypeReference<ReportResponseWrapper>() {
68
                    });
69
70 52932 myrto.kouk
            // check remote api's response
71 52911 myrto.kouk
            System.out.println("sushi responded status " + resp.getStatusCode());
72
73 52932 myrto.kouk
            // get the items corresponding to the requested page
74 52911 myrto.kouk
            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 52932 myrto.kouk
                    int offset = Integer.parseInt(page)*size;
80 52911 myrto.kouk
81 52932 myrto.kouk
                    if (offset < totalItems ) {
82 52911 myrto.kouk
                        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 52829 myrto.kouk
    }
103 52911 myrto.kouk
104 52829 myrto.kouk
}