Project

General

Profile

1
package eu.dnetlib.server;
2

    
3
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
4
import eu.dnetlib.client.DataService;
5
import eu.dnetlib.goldoa.domain.*;
6
import eu.dnetlib.goldoa.domain.Currency;
7
import eu.dnetlib.goldoa.domain.stats.*;
8
import eu.dnetlib.goldoa.service.*;
9
import eu.dnetlib.goldoa.service.CurrencyConverter;
10
import eu.dnetlib.goldoa.service.stats.StatsManager;
11
import eu.dnetlib.shared.*;
12
import net.tanesha.recaptcha.ReCaptchaImpl;
13
import net.tanesha.recaptcha.ReCaptchaResponse;
14
import org.apache.commons.logging.Log;
15
import org.apache.commons.logging.LogFactory;
16
import org.springframework.context.ApplicationContext;
17
import org.springframework.web.context.support.WebApplicationContextUtils;
18

    
19
import javax.servlet.ServletConfig;
20
import javax.servlet.ServletException;
21
import java.util.*;
22

    
23
/**
24
 * Created by stefania on 3/4/15.
25
 */
26
public class DataServiceImpl extends RemoteServiceServlet implements DataService {
27

    
28
    private OrganizationManager organizationManager = null;
29
    private UserManager userManager = null;
30
    private ProjectManager projectManager = null;
31
    private PublisherManager publisherManager = null;
32
    private JournalManager journalManager = null;
33
    private PublicationManager publicationManager = null;
34
    private RequestManager requestManager = null;
35
    private EligibilityManager eligibilityManager = null;
36
    private BudgetManager budgetManager = null;
37
    private ContactManager contactManager = null;
38
    private HelpManager helpManager = null;
39
    private CurrencyConverter currencyConverter = null;
40
    private StatsManager statsManager = null;
41

    
42
    private String hostName;
43
    private String publicCaptchaKey = null;
44
    private String privateCaptchaKey = null;
45
    private Log log = LogFactory.getLog(DataServiceImpl.class);
46

    
47
    public void init(ServletConfig config) throws ServletException {
48

    
49
        super.init(config);
50

    
51
        ApplicationContext context = WebApplicationContextUtils
52
                .getWebApplicationContext(getServletContext());
53

    
54
        this.organizationManager = (OrganizationManager) context.getBean("organizationManager");
55
        this.userManager = (UserManager) context.getBean("userManager");
56
        this.projectManager = (ProjectManager) context.getBean("projectManager");
57
        this.publisherManager = (PublisherManager) context.getBean("publisherManager");
58
        this.journalManager = (JournalManager) context.getBean("journalManager");
59
        this.publicationManager = (PublicationManager) context.getBean("publicationManager");
60
        this.requestManager = (RequestManager) context.getBean("requestManager");
61
        this.eligibilityManager = (EligibilityManager) context.getBean("eligibilityManager");
62
        this.budgetManager = (BudgetManager) context.getBean("budgetManager");
63
        this.contactManager = (ContactManager) context.getBean("contactManager");
64
        this.helpManager = (HelpManager) context.getBean("helpManager");
65
        this.currencyConverter = (CurrencyConverter) context.getBean("currencyConverter");
66
        this.statsManager = (StatsManager) context.getBean("statsManager");
67

    
68
        this.publicCaptchaKey = (String) context.getBean("goldoa.recaptcha.key.public");
69
        this.privateCaptchaKey = (String) context.getBean("goldoa.recaptcha.key.private");
70
        this.hostName = (String) context.getBean("goldoa.hostname");
71
    }
72

    
73
    @Override
74
    public InitLoad load(String hash, String email, String token, String cookie) {
75

    
76
        InitLoad initLoad = new InitLoad();
77
        String message = null;
78
        String goTo = "home";
79
        User user = null;
80

    
81
        String hashValue = "home";
82
        if(hash!=null && !hash.equals(""))
83
                hashValue = hash.substring(1);
84

    
85
        if(hashValue.equals("activate")) {
86

    
87
            if (email != null && token != null) {
88

    
89
                try {
90
                    user = userManager.activate(email, token);
91
                    goTo = "myAccount";
92

    
93
                } catch (PersonManagerException pme) {
94
                    if(pme.getErrorCause().equals(PersonManagerException.ErrorCause.NOT_EXISTS))
95
                        message = "Invalid email or activation token";
96
                    else
97
                        message = "Activation token has expired";
98
                }
99

    
100
            } else {
101
                message = "Invalid activation URL";
102
            }
103

    
104
        } else {
105

    
106
            if(cookie!=null) {
107

    
108
                try {
109
                    user = userManager.getByEmail(cookie);
110
                } catch (PersonManagerException pme) {
111
                    //TODO do we want to display a message like that or not?
112
                    if(pme.getErrorCause().equals(PersonManagerException.ErrorCause.NOT_EXISTS))
113
                        message = "User does not exist";
114
                }
115
                goTo = hashValue;
116

    
117
            } else {
118

    
119
                goTo = hashValue;
120
            }
121
        }
122

    
123
        initLoad.setPerson(user);
124
        initLoad.setGoTo(goTo);
125
        initLoad.setErrorMessage(message);
126
        initLoad.setPublicCaptchaKey(publicCaptchaKey);
127
        initLoad.setUserRoles(userManager.getRoles());
128
        return initLoad;
129
    }
130

    
131
    @Override
132
    public String saveOrganization(Organization organization) throws OrganizationManagerException {
133
        return organizationManager.saveOrganization(organization);
134
    }
135

    
136
    @Override
137
    public User loginUser(String email, String password) throws PersonManagerException {
138
        return userManager.login(email, password);
139
    }
140

    
141
    @Override
142
    public void resetPassword(String email) throws PersonManagerException {
143
        userManager.resetPassword(email);
144
    }
145

    
146
    @Override
147
    public void registerUser(User user, String captchaChallenge, String captchaResponse) throws Exception {
148

    
149
        ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
150
        reCaptcha.setPrivateKey(privateCaptchaKey);
151
        ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(hostName, captchaChallenge, captchaResponse);
152

    
153
        if (!reCaptchaResponse.isValid())
154
            throw new Exception("captcha");
155

    
156
        Publisher pub = user.getPublisher();
157
        if(pub != null){
158
            user.setPublisher(pub);
159
            if(pub.getId() == null){
160
                pub.getContacts().add(user);
161
                publisherManager.savePublisher(pub);
162
                userManager.register(user);
163
            }else{
164
                userManager.register(user);
165
                pub.getContacts().add(user);
166
                publisherManager.savePublisher(pub);
167
            }
168
        }else
169
            userManager.register(user);
170
    }
171

    
172
    @Override
173
    public User updateUser(User user) throws PersonManagerException {
174

    
175
        Publisher p = user.getPublisher();
176
        if(p!=null){
177
            p.getContacts().add(user);
178
            publisherManager.savePublisher(p);
179
        }
180
        return userManager.saveUser(user);
181
    }
182

    
183
    @Override
184
    public User getUserById(String userId) throws PersonManagerException {
185
        return userManager.getById(userId);
186
    }
187

    
188
    @Override
189
    public User getUserByEmail(String email) throws PersonManagerException{
190
        return userManager.getByEmail(email);
191
    }
192

    
193
    @Override
194
    public User saveResearcher(User user) throws PersonManagerException {
195
        return userManager.saveUser(user);
196
    }
197

    
198
    @Override
199
    public Request saveRequest(Request request) {
200
        return requestManager.saveRequest(request);
201
    }
202

    
203
    @Override
204
    public Request submitRequest(Request request) throws PersonManagerException {
205
        return requestManager.submitRequest(request);
206
    }
207

    
208
    @Override
209
    public ProjectAndEligibility getProjectInfoAndEligibility(String projectId) {
210

    
211
        Project project = projectManager.getById(projectId);
212

    
213
        ProjectAndEligibility projectInfoAndEligibility = new ProjectAndEligibility();
214
        projectInfoAndEligibility.setProject(project);
215
        Request request = new Request();
216
        request.setProject(project);
217
        projectInfoAndEligibility.setEligibility(eligibilityManager.validate(request));
218

    
219
        return projectInfoAndEligibility;
220
    }
221

    
222
    @Override
223
    public Publication savePublication(Publication publication) {
224

    
225
        Publication savedPublication = null;
226
        if(publication.getType().equals(PublicationType.ARTICLE)) {
227
            Journal journal = publication.getJournal();
228
            if (journal.getId()==null) {
229
                Journal savedJournal = journalManager.generateId(journal);
230
                //Journal savedJournal = journalManager.saveJournal(journal);
231
                publication.setJournal(savedJournal);
232
            }
233
            savedPublication = publicationManager.savePublication(publication);
234
        } else {
235
            Publisher publisher = publication.getPublisher();
236
            if(publisher.getId()==null) {
237
                Publisher savedPublisher = publisherManager.generateId(publisher);
238
                publication.setPublisher(savedPublisher);
239
            }
240
            savedPublication = publicationManager.savePublication(publication);
241
        }
242
        return savedPublication;
243
    }
244

    
245
    @Override
246
    public Journal getJournal(String journalId) {
247
        return journalManager.getJournal(journalId);
248
    }
249

    
250
    @Override
251
    public Publisher getPublisher(String publisherId) {
252
        return publisherManager.getPublisher(publisherId);
253
    }
254

    
255

    
256
    @Override
257
    public Publication resolveDOI(String doi) throws ManagerException {
258
        return publicationManager.resolveDOI(doi);
259
    }
260

    
261
    @Override
262
    public RequestPage getRequests(Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order,
263
                                         RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilters,
264
                                         int from, int to) {
265
        return requestManager.getRequests(fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilters, from, to);
266
    }
267

    
268
    @Override
269
    public RequestPage getRequestsForAccounting(Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order,
270
                                         RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilters,
271
                                         int from, int to) {
272
        return requestManager.getForAccounting(fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilters, from, to);
273
    }
274

    
275
    @Override
276
    public RequestPage getRequestsForUser(String email, Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order,
277
                                                RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilters,
278
                                                int from, int to) {
279
        return requestManager.getForUser(email, fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilters, from, to);
280
    }
281

    
282
    @Override
283
    public RequestPage getRequestsForOrganizations(List<String> organizationIds, Date fromDate, Date toDate, RequestSort requestSortBy,
284
                                                         RequestSortOrder order, RequestFilter requestFilter, String term,
285
                                                         Request.RequestStatus[] statusFilters, int from, int to) {
286
        return requestManager.getForOrganization(organizationIds, fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilters, from, to);
287
    }
288

    
289
    @Override
290
    public RequestPage getRequestsForPublisher(String publisher, Date fromDate, Date toDate, RequestSort requestSortBy,
291
                                                     RequestSortOrder order, RequestFilter requestFilter, String term,
292
                                                     Request.RequestStatus[] statusFilters, int from, int to) {
293
        return requestManager.getForPublisher(publisher, fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilters, from, to);
294
    }
295

    
296
    @Override
297
    public FundingWizardState getFundingWizardState(String requestId) {
298

    
299
        Request request = requestManager.getById(requestId);
300

    
301
        if(request!=null) {
302

    
303
            FundingWizardState fundingWizardState = new FundingWizardState();
304
            fundingWizardState.setRequest(request);
305
            fundingWizardState.setResearcher(request.getResearcher());
306
            fundingWizardState.setProject(request.getProject());
307
            fundingWizardState.setPublication(request.getPublication());
308
            fundingWizardState.setInvoice(request.getInvoice());
309

    
310
            return fundingWizardState;
311
        }
312

    
313
        return null;
314
    }
315

    
316
    @Override
317
    public void approveRequest(String requestId, String personId, String comment, String templateId) {
318
        requestManager.approveRequest(requestId, personId, comment, templateId);
319
    }
320

    
321
    @Override
322
    public void conditionalApproveRequest(String requestId, String personId, String comment, String templateId) {
323
        requestManager.conditionallyApproveRequest(requestId, personId, comment, templateId);
324
    }
325

    
326
    @Override
327
    public void rejectRequest(String requestId, String personId, String comment, String templateId) {
328
        requestManager.rejectRequest(requestId, personId, comment, templateId);
329
    }
330

    
331
    @Override
332
    public void processingRequest(String requestId, String personId, String comment, String templateId) {
333
        requestManager.processingRequest(requestId, personId, comment, templateId);
334
    }
335

    
336
    @Override
337
    public void onHoldRequest(String requestId, String personId, String comment, String templateId) {
338
        requestManager.onHoldRequest(requestId, personId, comment, templateId);
339
    }
340

    
341
    @Override
342
    public void deniedRequest(String requestId, String personId, String comment, String templateId) {
343
        requestManager.deniedRequest(requestId, personId, comment, templateId);
344
    }
345

    
346
    @Override
347
    public void paidLibraryRequest(String requestId, String personId, String comment, String template, float apc_paid, float transfer_cost, float other_cost, Date datePaid) {
348
        requestManager.paidLibraryRequest(requestId, personId, comment, template, apc_paid, transfer_cost, other_cost, datePaid);
349
    }
350

    
351
    @Override
352
    public void paidPublisherRequest(String requestId, String personId, String comment, String template, float apc_paid, float transfer_cost, float other_cost, Date datePaid) {
353
        requestManager.paidPublisherRequest(requestId, personId, comment, template, apc_paid, transfer_cost, other_cost, datePaid);
354
    }
355

    
356
    @Override
357
    public Request getRequestById(String requestId) {
358
        return requestManager.getById(requestId);
359
    }
360

    
361
    @Override
362
    public void submitContactForm(Contact contact, String captchaChallenge, String captchaResponse) throws Exception {
363

    
364
        ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
365
        reCaptcha.setPrivateKey(privateCaptchaKey);
366
        ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(hostName, captchaChallenge, captchaResponse);
367

    
368
        if (!reCaptchaResponse.isValid())
369
        	throw new Exception("captcha");
370

    
371
        contactManager.submitContact(contact);
372
    }
373

    
374
    @Override
375
    public List<User> getUsers() {
376
        return userManager.getUsers();
377
    }
378

    
379
    @Override
380
    public void activateUser(String email) {
381
        userManager.activateUser(email);
382
    }
383

    
384
    @Override
385
    public void activateUsers(List<String> emails) {
386
        userManager.activateUsers(emails);
387
    }
388

    
389
    @Override
390
    public void deactivateUser(String email) {
391
        userManager.deactivateUser(email);
392
    }
393

    
394
    @Override
395
    public void deactivateUsers(List<String> emails) {
396
        userManager.deactivateUsers(emails);
397
    }
398

    
399
    @Override
400
    public void acceptUserRole(String email, String roleId) {
401
        userManager.acceptUserRole(email, roleId);
402
    }
403

    
404
    @Override
405
    public void rejectRole(String email, String roleId) {
406
        userManager.rejectRole(email, roleId);
407
    }
408

    
409
    @Override
410
    public Budget submitBudgetRequest(Budget budget) {
411
        return budgetManager.submitBudgetRequest(budget);
412
    }
413

    
414
    @Override
415
    public Budget saveBudget(Budget budget) {
416
        return budgetManager.saveBudget(budget);
417
    }
418

    
419
    @Override
420
    public Budget getBudgetById(String budgetId) {
421
        return budgetManager.getBudget(budgetId);
422
    }
423

    
424
    @Override
425
    public List<Budget> getBudgets() {
426
        return budgetManager.getBudgets();
427
    }
428

    
429
    @Override
430
    public List<Budget> getBudgetsForUser(String email) {
431
        return budgetManager.getBudgetsForUser(email);
432
    }
433

    
434
    @Override
435
    public List<Budget> getBudgetsForOrganizations(List<String> organizationIds) {
436
        return budgetManager.getBudgetsForOrganization(organizationIds);
437
    }
438

    
439

    
440
    @Override
441
    public void initiallyApproveBudgetRequest(String budgetId, String comment, String personId) {
442
        budgetManager.initiallyApproveBudgetRequest(budgetId, comment, personId);
443
    }
444

    
445
    @Override
446
    public void approveBudgetRequest(String budgetId, String comment, float amountGranted, String personId) {
447
        budgetManager.approveBudgetRequest(budgetId, comment, amountGranted, personId);
448
    }
449

    
450
    @Override
451
    public void rejectBudgetRequest(String budgetId, String comment, String personId) {
452
        budgetManager.rejectBudgetRequest(budgetId, comment, personId);
453
    }
454

    
455
    @Override
456
    public void processingPayment(String budgetId, String comment, String personId) {
457
        budgetManager.processingPayment(budgetId, comment, personId);
458
    }
459

    
460
    @Override
461
    public void denyPayment(String budgetId, String comment, String personId) {
462
        budgetManager.denyPayment(budgetId, comment, personId);
463
    }
464

    
465
    @Override
466
    public void onHoldPayment(String budgetId, String comment, String personId) {
467
        budgetManager.onHoldPayment(budgetId, comment, personId);
468
    }
469

    
470
    @Override
471
    public void budgetPaid(String budgetId, String comment, String personId) {
472
        budgetManager.budgetPaid(budgetId, comment, personId);
473
    }
474

    
475
    @Override
476
    public EligiblePresentAndFutureProjects getEligibleProjectsForOrganization(String organizationId) {
477

    
478
        EligiblePresentAndFutureProjects eligiblePresentAndFutureProjects = new EligiblePresentAndFutureProjects();
479
        eligiblePresentAndFutureProjects.setPresentEligibleProjects(projectManager.getEligibleProjectsForOrganization(organizationId));
480
        eligiblePresentAndFutureProjects.setFutureEligibleProjects(projectManager.getFutureEligibleProjectsForOrganization(organizationId));
481

    
482
        return eligiblePresentAndFutureProjects;
483
    }
484

    
485
    @Override
486
    public Help saveHelp(Help help) {
487
        return helpManager.saveHelp(help);
488
    }
489

    
490
    @Override
491
    public Help getHelpById(String id) {
492
        return helpManager.getById(id);
493
    }
494

    
495
    @Override
496
    public Invoice invoiceUploaded(String requestId, String invoiceId) throws ManagerException {
497
        return requestManager.invoiceUploaded(requestId, invoiceId);
498
    }
499

    
500
    @Override
501
    public float convert(Currency from, Currency to, float amount) {
502
        return currencyConverter.convert(from, to, amount);
503
    }
504

    
505
    @Override
506
    public StatsData getStatsData() {
507

    
508
        StatsData statsData = new StatsData();
509

    
510
        statsData.setNumbers(statsManager.getNumbers(new Numbers.Category[]{Numbers.Category.REQUESTS, Numbers.Category.PROJECTS,
511
                Numbers.Category.TOTAL_AMOUNT, Numbers.Category.AVERAGE_AMOUNT, Numbers.Category.AVERAGE_PER_ARTICLE,
512
                Numbers.Category.AVERAGE_PER_MONOGRAPH, Numbers.Category.AVERAGE_PER_BOOK_CHAPTER, Numbers.Category.PAID_REQUESTS,
513
                Numbers.Category.PAID_REQUESTS_WITH_DOI, Numbers.Category.APPROVED_REQUESTS_WITH_DOI, Numbers.Category.PAID_ARTICLE_REQUESTS,
514
                Numbers.Category.PAID_MONOGRAPH_REQUESTS, Numbers.Category.PAID_BOOK_CHAPTER_REQUESTS}));
515

    
516
        Series fundedRequests = statsManager.getSeries(new Series.Category[] {Series.Category.COUNTRY, Series.Category.ORGANIZATION,
517
                Series.Category.PUBLISHER}, new Request.RequestStatus[] {Request.RequestStatus.CONDITIONALLY_APPROVED,
518
                Request.RequestStatus.APPROVED, Request.RequestStatus.ACCOUNTING_PROCESSING, Request.RequestStatus.ACCOUNTING_PAID,
519
                Request.RequestStatus.ACCOUNTING_ON_HOLD});
520
        Series rejectedRequests = statsManager.getSeries(new Series.Category[] {Series.Category.COUNTRY, Series.Category.ORGANIZATION,
521
                Series.Category.PUBLISHER}, new Request.RequestStatus[] {Request.RequestStatus.REJECTED,
522
                Request.RequestStatus.ACCOUNTING_DENIED});
523

    
524

    
525
        // Countries
526
        extractInfo(statsData, fundedRequests, rejectedRequests, Series.Category.COUNTRY);
527

    
528
        // Publishers
529
        extractInfo(statsData, fundedRequests, rejectedRequests, Series.Category.PUBLISHER);
530

    
531
        // Organisations
532
        extractInfo(statsData, fundedRequests, rejectedRequests, Series.Category.ORGANIZATION);
533

    
534
        //Date Series
535
        statsData.setBrowse(statsManager.browse(new Browse.Category[] {Browse.Category.COUNTRY, Browse.Category.ORGANIZATION,
536
                Browse.Category.PUBLISHER, Browse.Category.SCIENTIFIC_AREA}));
537
        log.debug("After date series");
538
        //get funding requests and amount funded per day for the whole pilot duration
539
        statsData.setDateSeriesData(getDateSeriesData(DateSeries.Over.DAY, null, null, null, null, null, null));
540
        log.debug("After over day series");
541
        Series statusDistributionSeries = statsManager.getSeries(new Series.Category[] {Series.Category.STATUS}, null);
542
        statsData.setStatusesDistribution(statusDistributionSeries.getData(Series.Category.STATUS));
543

    
544
        Series publicationTypeDistributionSeries = statsManager.getSeries(new Series.Category[] {Series.Category.PUBLICATION_TYPE},
545
                new Request.RequestStatus[] {Request.RequestStatus.CONDITIONALLY_APPROVED, Request.RequestStatus.APPROVED,
546
                        Request.RequestStatus.ACCOUNTING_PROCESSING, Request.RequestStatus.ACCOUNTING_PAID, Request.RequestStatus.ACCOUNTING_ON_HOLD});
547
        statsData.setPublicationTypeDistribution(publicationTypeDistributionSeries.getData(Series.Category.PUBLICATION_TYPE));
548

    
549
        return statsData;
550
    }
551

    
552
    @Override
553
    public DateSeriesData getDateSeriesData(DateSeries.Over over, Date from, Date to, String[] publishers, String[] organizations, String[] countries, String[] scientificAreas) {
554

    
555
        DateSeriesData dateSeriesData = new DateSeriesData();
556
        dateSeriesData.setNewRequestsDateSeries(statsManager.getDateSeries(over, false, from, to, publishers, organizations, countries, scientificAreas));
557
        dateSeriesData.setCumulativeRequestsDateSeries(statsManager.getDateSeries(over, true, from, to, publishers, organizations, countries, scientificAreas));
558

    
559
        return dateSeriesData;
560
    }
561

    
562
    @Override
563
    public List<CommentTemplate> getCommentTemplates(Request.RequestStatus requestStatus) {
564
        return requestManager.getCommentTemplates(requestStatus);
565
    }
566

    
567
    private void extractInfo(StatsData statsData, Series fundedRequests, Series rejectedRequests, Series.Category category) {
568

    
569
        Map<String, Tuple<Integer, Integer>> requestsMap = new HashMap<>();
570
        Map<String, Tuple<Float, Float>> amountMap = new HashMap<>();
571

    
572
        List<Triple<String, Integer, Integer>> requestsPerCategory = new ArrayList<>();
573
        List<Triple<String, Float, Float>> funds = new ArrayList<>();
574
        List<Quintuple<String, Integer, Integer, Float, Float>> fullInfo = new ArrayList<>();
575

    
576
        for(Quadruple<String, Integer, Float, Float> quadruple : fundedRequests.getData(category)) {
577
            requestsMap.put(quadruple.getFirst(), new Tuple<Integer, Integer>(quadruple.getSecond(), 0));
578
            amountMap.put(quadruple.getFirst(), new Tuple<Float, Float>(quadruple.getThird(), quadruple.getFourth()));
579
            funds.add(new Triple<String, Float, Float>(quadruple.getFirst(), quadruple.getThird(), quadruple.getFourth()));
580
        }
581

    
582
        for(Quadruple<String, Integer, Float, Float> quadruple: rejectedRequests.getData(category)) {
583
            if(!requestsMap.containsKey(quadruple.getFirst())) {
584
                requestsMap.put(quadruple.getFirst(), new Tuple<Integer, Integer>(0, quadruple.getSecond()));
585
            } else {
586
                Tuple<Integer, Integer> existingTuple = requestsMap.get(quadruple.getFirst());
587
                existingTuple.setSecond(quadruple.getSecond());
588
                requestsMap.put(quadruple.getFirst(), existingTuple);
589
            }
590
        }
591

    
592
        for(String country : requestsMap.keySet()) {
593

    
594
            Triple<String, Integer, Integer> categoryRequests = new Triple<>(country, requestsMap.get(country).getFirst(),
595
                    requestsMap.get(country).getSecond());
596
            requestsPerCategory.add(categoryRequests);
597

    
598
            Float amountPaid = 0.0f;
599
            Float avgAmountPaid = 0.0f;
600
            if(amountMap.get(country)!=null && amountMap.get(country).getFirst()!=null && amountMap.get(country).getSecond()!=null) {
601
                amountPaid = amountMap.get(country).getFirst();
602
                avgAmountPaid = amountMap.get(country).getSecond();
603
            }
604

    
605
            Quintuple<String, Integer, Integer, Float, Float> categoryFullInfo =
606
                    new Quintuple<>(country, requestsMap.get(country).getFirst(),
607
                    requestsMap.get(country).getSecond(), amountPaid, avgAmountPaid);
608
            fullInfo.add(categoryFullInfo);
609
        }
610

    
611
        Collections.sort(requestsPerCategory, new Comparator<Triple<String, Integer, Integer>>() {
612
            @Override
613
            public int compare(Triple<String, Integer, Integer> o1, Triple<String, Integer, Integer> o2) {
614
                return -(o1.getSecond()).compareTo(o2.getSecond());
615
            }
616
        });
617

    
618
        Collections.sort(funds, new Comparator<Tuple<String, Float>>() {
619
            @Override
620
            public int compare(Tuple<String, Float> o1, Tuple<String, Float> o2) {
621
                return -(o1.getSecond()).compareTo(o2.getSecond());
622
            }
623
        });
624

    
625
        if(category.equals(Series.Category.COUNTRY)) {
626

    
627
            statsData.setRequestsPerCountry(requestsPerCategory);
628
            statsData.setFundsPerCountry(funds);
629
            statsData.setCountriesFullInfo(fullInfo);
630

    
631
        } else if(category.equals(Series.Category.ORGANIZATION)) {
632

    
633
            statsData.setRequestsPerOrganisation(requestsPerCategory);
634
            statsData.setFundsPerOrganisation(funds);
635
            statsData.setOrganisationsFullInfo(fullInfo);
636

    
637
        } else if(category.equals(Series.Category.PUBLISHER)) {
638

    
639
            statsData.setRequestsPerPublisher(requestsPerCategory);
640
            statsData.setFundsPerPublisher(funds);
641
            statsData.setPublishersFullInfo(fullInfo);
642
        }
643
    }
644

    
645
    @Override
646
    public  Organization getOrganization(String organizationId) throws OrganizationManagerException {
647
        return organizationManager.getById(organizationId);
648
    }
649

    
650
    @Override
651
    public Project getProject(String projectId){
652
        return projectManager.getById(projectId);
653
    }
654

    
655
}
(3-3/5)