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.Autowired;
6
import org.springframework.beans.factory.annotation.Value;
7
import org.springframework.core.ParameterizedTypeReference;
8
import org.springframework.http.HttpMethod;
9
import org.springframework.http.ResponseEntity;
10
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
11
import org.springframework.security.access.prepost.PreAuthorize;
12 54525 panagiotis
import org.springframework.stereotype.Service;
13 52829 myrto.kouk
import org.springframework.web.client.RestClientException;
14
import org.springframework.web.client.RestTemplate;
15
import org.springframework.web.util.UriComponentsBuilder;
16
17 52911 myrto.kouk
import java.util.ArrayList;
18
import java.util.List;
19
20 54525 panagiotis
@Service("sushiliteService")
21 54690 panagiotis
public class SushiliteServiceImpl implements SushiliteService {
22 52829 myrto.kouk
23
24 52911 myrto.kouk
    @Value("${services.repomanager.usagestats.sushiliteEndpoint}")
25 52829 myrto.kouk
    private String usagestatsSushiliteEndpoint;
26
27
    @Autowired
28
    private EmailUtils emailUtils;
29
30 54690 panagiotis
    private static final org.apache.log4j.Logger LOGGER = org.apache.log4j.Logger.getLogger(SushiliteServiceImpl.class);
31 52829 myrto.kouk
32
33
    @Override
34 61371 spyroukon
    @PreAuthorize("hasAuthority('REGISTERED_USER')")
35 56761 ioannis.di
    public ReportResponseWrapper getReportResults(String page,
36
                                                  String pageSize,
37
                                                  String Report,
38
                                                  String Release,
39
                                                  String RequestorID,
40
                                                  String BeginDate,
41
                                                  String EndDate,
42
                                                  String RepositoryIdentifier,
43
                                                  String ItemIdentifier,
44
                                                  String ItemDataType,
45
                                                  String Granularity,
46
                                                  String Pretty) {
47 52829 myrto.kouk
48
            //build the uri params
49
            UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(this.usagestatsSushiliteEndpoint + "GetReport/")
50
                                                                .queryParam("Report", Report)
51
                                                                .queryParam("Release", Release)
52
                                                                .queryParam("RequestorID", RequestorID)
53
                                                                .queryParam("BeginDate", BeginDate)
54
                                                                .queryParam("EndDate", EndDate)
55
                                                                .queryParam("RepositoryIdentifier", RepositoryIdentifier)
56
                                                                .queryParam("ItemIdentifier", ItemIdentifier)
57
                                                                .queryParam("ItemDataType", ItemDataType)
58
                                                                .queryParam("Granularity", Granularity)
59
                                                                .queryParam("Pretty", Pretty);
60
61
            //create new template engine
62
            RestTemplate template = new RestTemplate();
63
            template.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
64 52911 myrto.kouk
65 52829 myrto.kouk
            ResponseEntity<ReportResponseWrapper> resp;
66
            try {
67
                //communicate with endpoint
68
                resp = template.exchange(
69
                        builder.build().encode().toUri(),
70
                        HttpMethod.GET,
71
                        null,
72
                        new ParameterizedTypeReference<ReportResponseWrapper>() {
73
                        });
74
            } catch (RestClientException e) {
75
                LOGGER.debug("Exception on getReportResults" , e);
76
                emailUtils.reportException(e);
77
                throw e;
78
            }
79
80 52932 myrto.kouk
            // check remote api's response
81 52911 myrto.kouk
            System.out.println("sushi responded status " + resp.getStatusCode());
82
83 52932 myrto.kouk
            // get the items corresponding to the requested page
84 52911 myrto.kouk
            List<ReportItem> requestedItemList = new ArrayList<>();
85
            if (resp.getBody().getReportResponse().getReportWrapper().getReport().getCustomer().getReportItems() != null) {
86
                try {
87
                    int totalItems = resp.getBody().getReportResponse().getReportWrapper().getReport().getCustomer().getReportItems().size();
88
                    int size = Integer.parseInt(pageSize);
89 52932 myrto.kouk
                    int offset = Integer.parseInt(page)*size;
90 52911 myrto.kouk
91 52932 myrto.kouk
                    if (offset < totalItems ) {
92 52911 myrto.kouk
                        int upperIndex = offset+size;
93
                        if (upperIndex > totalItems) {
94
                            upperIndex = totalItems;
95
                        }
96
                        requestedItemList = resp.getBody().getReportResponse().getReportWrapper().getReport().getCustomer().getReportItems().subList(offset,upperIndex);
97
                    }
98
99
                } catch (NumberFormatException e) {
100
                    LOGGER.debug("Exception on getReportResults - trying to cast strings to integers", e);
101
                    //emailUtils.reportException(e);
102
                    throw e;
103
                }
104
105
            }
106
107
            ReportResponseWrapper newReportResponse = resp.getBody();
108
            newReportResponse.getReportResponse().getReportWrapper().getReport().getCustomer().setReportItems(requestedItemList);
109
110
111
            return newReportResponse;
112 52829 myrto.kouk
    }
113 52911 myrto.kouk
114 52829 myrto.kouk
}