Project

General

Profile

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

    
3
import eu.dnetlib.domain.data.Repository;
4
import eu.dnetlib.repo.manager.domain.RepositorySummaryInfo;
5
import eu.dnetlib.repo.manager.shared.AggregationDetails;
6
import eu.dnetlib.repo.manager.shared.BrokerException;
7
import eu.dnetlib.repo.manager.shared.MetricsInfo;
8
import eu.dnetlib.repo.manager.shared.RepositoryServiceException;
9
import eu.dnetlib.repo.manager.shared.broker.BrowseEntry;
10
import org.apache.log4j.Logger;
11
import org.json.JSONException;
12
import org.springframework.beans.factory.annotation.Autowired;
13
import org.springframework.web.bind.annotation.PathVariable;
14

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

    
18
public class DashboardServiceImpl implements DashboardService {
19

    
20
    private static final Logger logger = Logger.getLogger(DashboardServiceImpl.class);
21

    
22
    @Autowired
23
    private EmailUtils emailUtils;
24

    
25
    @Autowired
26
    private RepositoryService repositoryService;
27

    
28
    @Autowired
29
    private BrokerService brokerService;
30

    
31
    @Override
32
    public List<RepositorySummaryInfo> getRepositoriesSummaryInfo(@PathVariable("userEmail") String userEmail,
33
                                                                  @PathVariable("page") String page,
34
                                                                  @PathVariable("size") String size) throws JSONException {
35

    
36
        List<RepositorySummaryInfo> repositorySummaryInfoList = new ArrayList<>();
37

    
38
        List<Repository> repositoriesOfUser = repositoryService.getRepositoriesOfUser(userEmail, page, size);
39
        for(Repository repository: repositoriesOfUser) {
40

    
41
            RepositorySummaryInfo repositorySummaryInfo = new RepositorySummaryInfo();
42
            repositorySummaryInfo.setId(repository.getId());
43
            repositorySummaryInfo.setRepositoryName(repository.getOfficialName());
44
            repositorySummaryInfo.setLogoURL(repository.getLogoUrl());
45

    
46
            //TODO getRepositoryAggregations returns only the 20 more recent items. Is it positive that we will find an indexed version there?
47
            List<AggregationDetails> aggregationDetailsList = repositoryService.getRepositoryAggregations(repository.getId());
48
            for(AggregationDetails aggregationDetails: aggregationDetailsList) {
49
                if(aggregationDetails.getIndexedVersion()) {
50
                    repositorySummaryInfo.setRecordsCollected(aggregationDetails.getNumberOfRecords());
51
                    repositorySummaryInfo.setLastIndexedVersion(aggregationDetails.getDate());
52
                    break;
53
                }
54
            }
55

    
56
            try {
57

    
58
                MetricsInfo metricsInfo = repositoryService.getMetricsInfoForRepository(repository.getId());
59
                repositorySummaryInfo.setTotalDownloads(metricsInfo.getMetricsNumbers().getTotalDownloads());
60
                repositorySummaryInfo.setTotalViews(metricsInfo.getMetricsNumbers().getTotalViews());
61

    
62
            } catch (RepositoryServiceException e) {
63
                logger.error("Exception getting metrics info for repository: " + repository.getId(), e);
64
            }
65

    
66
            try {
67

    
68
                List<BrowseEntry> events = brokerService.getTopicsForDatasource(repository.getOfficialName());
69
                Long totalEvents = 0L;
70
                for(BrowseEntry browseEntry: events)
71
                    totalEvents += browseEntry.getSize();
72
                repositorySummaryInfo.setEnrichmentEvents(totalEvents);
73

    
74

    
75
            } catch (BrokerException e) {
76
                logger.error("Exception getting broker events for repository: " + repository.getId(), e);
77
            }
78

    
79
            repositorySummaryInfoList.add(repositorySummaryInfo);
80
        }
81

    
82
        return repositorySummaryInfoList;
83
    }
84
}
(4-4/20)