Project

General

Profile

1
package eu.dnetlib.server;
2

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

    
21
import javax.servlet.ServletConfig;
22
import javax.servlet.ServletException;
23
import javax.servlet.http.HttpServletRequest;
24
import java.util.*;
25

    
26
/**
27
 * Created by stefania on 3/4/15.
28
 */
29
public class DataServiceImpl extends RemoteServiceServlet implements DataService {
30

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

    
45
    private String hostName;
46
    private String publicCaptchaKey = null;
47
    private String privateCaptchaKey = null;
48
    private Log log = LogFactory.getLog(DataServiceImpl.class);
49

    
50
    public void init(ServletConfig config) throws ServletException {
51

    
52
        super.init(config);
53

    
54
        ApplicationContext context = WebApplicationContextUtils
55
                .getWebApplicationContext(getServletContext());
56

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

    
71
        this.publicCaptchaKey = (String) context.getBean("goldoa.recaptcha.key.public");
72
        this.privateCaptchaKey = (String) context.getBean("goldoa.recaptcha.key.private");
73
        this.hostName = (String) context.getBean("goldoa.hostname");
74
    }
75

    
76
    @Override
77
    public InitLoad load(String hash, String email, String token, String cookie) {
78

    
79
        InitLoad initLoad = new InitLoad();
80
        String message = null;
81
        String goTo = "home";
82
        User user = null;
83

    
84
        String hashValue = "home";
85
        if(hash!=null && !hash.equals(""))
86
                hashValue = hash.substring(1);
87

    
88
        if(hashValue.equals("activate")) {
89

    
90
            if (email != null && token != null) {
91

    
92
                try {
93
                    user = userManager.activate(email, token);
94
                    goTo = "myAccount";
95

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

    
103
            } else {
104
                message = "Invalid activation URL";
105
            }
106

    
107
        } else {
108

    
109
            if(cookie!=null) {
110

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

    
120
            } else {
121

    
122
                goTo = hashValue;
123
            }
124
        }
125

    
126
        initLoad.setPerson(user);
127
        initLoad.setGoTo(goTo);
128
        initLoad.setErrorMessage(message);
129
        initLoad.setPublicCaptchaKey(publicCaptchaKey);
130
        initLoad.setUserRoles(userManager.getRoles());
131
        return initLoad;
132
    }
133

    
134
    @Override
135
    public String saveOrganization(Organization organization) throws OrganizationManagerException {
136
        return organizationManager.saveOrganization(organization);
137
    }
138

    
139
    @Override
140
    public User loginUser(String email, String password) throws PersonManagerException {
141
        User user = userManager.login(email, password);
142
        System.out.println("SKATA " + user.getEmail());
143
        return user;
144
    }
145

    
146
    @Override
147
    public void resetPassword(String email) throws PersonManagerException {
148
        userManager.resetPassword(email);
149
    }
150

    
151
    @Override
152
    public void registerUser(User user, String captchaChallenge, String captchaResponse) throws Exception {
153

    
154
        ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
155
        reCaptcha.setPrivateKey(privateCaptchaKey);
156
        ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(hostName, captchaChallenge, captchaResponse);
157

    
158
        if (!reCaptchaResponse.isValid())
159
            throw new Exception("captcha");
160

    
161
        Publisher pub = user.getPublisher();
162
        if(pub != null){
163
            user.setPublisher(pub);
164
            if(pub.getId() == null){
165
                pub.getContacts().add(user);
166
                publisherManager.savePublisher(pub);
167
                userManager.register(user);
168
            }else{
169
                userManager.register(user);
170
                pub.getContacts().add(user);
171
                publisherManager.savePublisher(pub);
172
            }
173
        }else
174
            userManager.register(user);
175
    }
176

    
177
    @Override
178
    public User updateUser(User user) throws PersonManagerException {
179

    
180
        Publisher p = user.getPublisher();
181
        if(p!=null){
182
            p.getContacts().add(user);
183
            publisherManager.savePublisher(p);
184
        }
185
        return userManager.saveUser(user);
186
    }
187

    
188
    @Override
189
    public User getUserById(String userId) throws PersonManagerException {
190
        return userManager.getById(userId);
191
    }
192

    
193
    @Override
194
    public User getUserByEmail(String email) throws PersonManagerException{
195
        return userManager.getByEmail(email);
196
    }
197

    
198
    @Override
199
    public User saveResearcher(User user) throws PersonManagerException {
200
        return userManager.saveUser(user);
201
    }
202

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

    
208
    @Override
209
    public Request submitRequest(Request request) throws PersonManagerException {
210
        return requestManager.submitRequest(request);
211
    }
212

    
213
    @Override
214
    public ProjectAndEligibility getProjectInfoAndEligibility(String projectId) {
215

    
216
        Project project = projectManager.getById(projectId);
217

    
218
        ProjectAndEligibility projectInfoAndEligibility = new ProjectAndEligibility();
219
        projectInfoAndEligibility.setProject(project);
220
        Request request = new Request();
221
        request.setProject(project);
222
        request.setStatus(Request.RequestStatus.INCOMPLETE);
223
        projectInfoAndEligibility.setEligibility(eligibilityManager.validate(request));
224

    
225
        return projectInfoAndEligibility;
226
    }
227

    
228
    @Override
229
    public Publication savePublication(Publication publication) {
230

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

    
251
    @Override
252
    public Journal getJournal(String journalId) {
253
        return journalManager.getJournal(journalId);
254
    }
255

    
256
    @Override
257
    public Publisher getPublisher(String publisherId) {
258
        return publisherManager.getPublisher(publisherId);
259
    }
260

    
261

    
262
    @Override
263
    public Publication resolveDOI(String doi) throws ManagerException {
264
        return publicationManager.resolveDOI(doi);
265
    }
266

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

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

    
281
    @Override
282
    public RequestPage getRequestsForUser(String email, Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order,
283
                                                RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilters,
284
                                                int from, int to) {
285
        return requestManager.getForUser(email, fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilters, from, to);
286
    }
287

    
288
    @Override
289
    public RequestPage getRequestsForOrganizations(List<String> organizationIds, Date fromDate, Date toDate, RequestSort requestSortBy,
290
                                                         RequestSortOrder order, RequestFilter requestFilter, String term,
291
                                                         Request.RequestStatus[] statusFilters, int from, int to) {
292
        return requestManager.getForOrganization(organizationIds, fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilters, from, to);
293
    }
294

    
295
    @Override
296
    public RequestPage getRequestsForPublisher(String publisher, Date fromDate, Date toDate, RequestSort requestSortBy,
297
                                                     RequestSortOrder order, RequestFilter requestFilter, String term,
298
                                                     Request.RequestStatus[] statusFilters, int from, int to) {
299
        return requestManager.getForPublisher(publisher, fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilters, from, to);
300
    }
301

    
302
    @Override
303
    public FundingWizardState getFundingWizardState(String requestId) {
304

    
305
        Request request = requestManager.getById(requestId);
306

    
307
        if(request!=null) {
308

    
309
            FundingWizardState fundingWizardState = new FundingWizardState();
310
            fundingWizardState.setRequest(request);
311
            fundingWizardState.setResearcher(request.getResearcher());
312
            fundingWizardState.setProject(request.getProject());
313
            fundingWizardState.setPublication(request.getPublication());
314
            fundingWizardState.setInvoice(request.getInvoice());
315

    
316
            return fundingWizardState;
317
        }
318

    
319
        return null;
320
    }
321

    
322
    @Override
323
    public void approveRequest(String requestId, String email, String comment, String templateId) {
324
        requestManager.approveRequest(requestId, email, comment, templateId);
325
    }
326

    
327
    @Override
328
    public void conditionalApproveRequest(String requestId, String email, String comment, String templateId) {
329
        requestManager.conditionallyApproveRequest(requestId, email, comment, templateId);
330
    }
331

    
332
    @Override
333
    public void rejectRequest(String requestId, String email, String comment, String templateId) {
334
        requestManager.rejectRequest(requestId, email, comment, templateId);
335
    }
336

    
337
    @Override
338
    public void processingRequest(String requestId, String email, String comment, String templateId) {
339
        requestManager.processingRequest(requestId, email, comment, templateId);
340
    }
341

    
342
    @Override
343
    public void onHoldRequest(String requestId, String email, String comment, String templateId) {
344
        requestManager.onHoldRequest(requestId, email, comment, templateId);
345
    }
346

    
347
    @Override
348
    public void deniedRequest(String requestId, String email, String comment, String templateId) {
349
        requestManager.deniedRequest(requestId, email, comment, templateId);
350
    }
351

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

    
357
    @Override
358
    public void paidPublisherRequest(String requestId, String email, String comment, String template, float apc_paid, float transfer_cost, float other_cost, Date datePaid) {
359
        requestManager.paidPublisherRequest(requestId, email, comment, template, apc_paid, transfer_cost, other_cost, datePaid);
360
    }
361

    
362
    @Override
363
    public Request getRequestById(String requestId) {
364
        return requestManager.getById(requestId);
365
    }
366

    
367
    @Override
368
    public void submitContactForm(Contact contact, String captchaChallenge, String captchaResponse) throws Exception {
369

    
370
        ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
371
        reCaptcha.setPrivateKey(privateCaptchaKey);
372
        ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(hostName, captchaChallenge, captchaResponse);
373

    
374
        if (!reCaptchaResponse.isValid())
375
        	throw new Exception("captcha");
376

    
377
        contactManager.submitContact(contact);
378
    }
379

    
380
    @Override
381
    public List<User> getUsers() {
382
        return userManager.getUsers();
383
    }
384

    
385
    @Override
386
    public void activateUser(String email) {
387
        userManager.activateUser(email);
388
    }
389

    
390
    @Override
391
    public void activateUsers(List<String> emails) {
392
        userManager.activateUsers(emails);
393
    }
394

    
395
    @Override
396
    public void deactivateUser(String email) {
397
        userManager.deactivateUser(email);
398
    }
399

    
400
    @Override
401
    public void deactivateUsers(List<String> emails) {
402
        userManager.deactivateUsers(emails);
403
    }
404

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

    
410
    @Override
411
    public void rejectRole(String email, String roleId) {
412
        userManager.rejectRole(email, roleId);
413
    }
414

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

    
420
    @Override
421
    public Budget saveBudget(Budget budget) {
422
        return budgetManager.saveBudget(budget);
423
    }
424

    
425
    @Override
426
    public Budget getBudgetById(String budgetId) {
427
        return budgetManager.getBudget(budgetId);
428
    }
429

    
430
    @Override
431
    public List<Budget> getBudgets() {
432
        return budgetManager.getBudgets();
433
    }
434

    
435
    @Override
436
    public List<Budget> getBudgetsForUser(String email) {
437
        return budgetManager.getBudgetsForUser(email);
438
    }
439

    
440
    @Override
441
    public List<Budget> getBudgetsForOrganizations(List<String> organizationIds) {
442
        return budgetManager.getBudgetsForOrganization(organizationIds);
443
    }
444

    
445

    
446
    @Override
447
    public void initiallyApproveBudgetRequest(String budgetId, String comment, String personId) {
448
        budgetManager.initiallyApproveBudgetRequest(budgetId, comment, personId);
449
    }
450

    
451
    @Override
452
    public void approveBudgetRequest(String budgetId, String comment, float amountGranted, String personId) {
453
        budgetManager.approveBudgetRequest(budgetId, comment, amountGranted, personId);
454
    }
455

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

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

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

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

    
476
    @Override
477
    public void budgetPaid(String budgetId, String comment, String personId) {
478
        budgetManager.budgetPaid(budgetId, comment, personId);
479
    }
480

    
481
    @Override
482
    public EligiblePresentAndFutureProjects getEligibleProjectsForOrganization(String organizationId) {
483

    
484
        EligiblePresentAndFutureProjects eligiblePresentAndFutureProjects = new EligiblePresentAndFutureProjects();
485
        eligiblePresentAndFutureProjects.setPresentEligibleProjects(projectManager.getEligibleProjectsForOrganization(organizationId));
486
        eligiblePresentAndFutureProjects.setFutureEligibleProjects(projectManager.getFutureEligibleProjectsForOrganization(organizationId));
487

    
488
        return eligiblePresentAndFutureProjects;
489
    }
490

    
491
    @Override
492
    public Help saveHelp(Help help) {
493
        return helpManager.saveHelp(help);
494
    }
495

    
496
    @Override
497
    public Help getHelpById(String id) {
498
        return helpManager.getById(id);
499
    }
500

    
501
    @Override
502
    public Invoice invoiceUploaded(String requestId, String invoiceId) throws ManagerException {
503
        return requestManager.invoiceUploaded(requestId, invoiceId);
504
    }
505

    
506
    @Override
507
    public float convert(Currency from, Currency to, float amount) {
508
        return currencyConverter.convert(from, to, amount);
509
    }
510

    
511
    @Override
512
    public StatsData getStatsData() {
513

    
514
        StatsData statsData = new StatsData();
515

    
516
        statsData.setNumbers(statsManager.getNumbers(new Numbers.Category[]{Numbers.Category.REQUESTS, Numbers.Category.PROJECTS,
517
                Numbers.Category.TOTAL_AMOUNT, Numbers.Category.AVERAGE_AMOUNT, Numbers.Category.AVERAGE_PER_ARTICLE,
518
                Numbers.Category.AVERAGE_PER_MONOGRAPH, Numbers.Category.AVERAGE_PER_BOOK_CHAPTER, Numbers.Category.PAID_REQUESTS,
519
                Numbers.Category.PAID_REQUESTS_WITH_DOI, Numbers.Category.APPROVED_REQUESTS_WITH_DOI, Numbers.Category.PAID_ARTICLE_REQUESTS,
520
                Numbers.Category.PAID_MONOGRAPH_REQUESTS, Numbers.Category.PAID_BOOK_CHAPTER_REQUESTS}));
521

    
522
        Series fundedRequests = statsManager.getSeries(new Series.Category[] {Series.Category.COUNTRY, Series.Category.ORGANIZATION,
523
                Series.Category.PUBLISHER}, new Request.RequestStatus[] {Request.RequestStatus.CONDITIONALLY_APPROVED,
524
                Request.RequestStatus.APPROVED, Request.RequestStatus.ACCOUNTING_PROCESSING, Request.RequestStatus.ACCOUNTING_PAID,
525
                Request.RequestStatus.ACCOUNTING_ON_HOLD});
526
        Series rejectedRequests = statsManager.getSeries(new Series.Category[] {Series.Category.COUNTRY, Series.Category.ORGANIZATION,
527
                Series.Category.PUBLISHER}, new Request.RequestStatus[] {Request.RequestStatus.REJECTED,
528
                Request.RequestStatus.ACCOUNTING_DENIED});
529

    
530

    
531
        // Countries
532
        extractInfo(statsData, fundedRequests, rejectedRequests, Series.Category.COUNTRY);
533

    
534
        // Publishers
535
        extractInfo(statsData, fundedRequests, rejectedRequests, Series.Category.PUBLISHER);
536

    
537
        // Organisations
538
        extractInfo(statsData, fundedRequests, rejectedRequests, Series.Category.ORGANIZATION);
539

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

    
550
        Series publicationTypeDistributionSeries = statsManager.getSeries(new Series.Category[] {Series.Category.PUBLICATION_TYPE},
551
                new Request.RequestStatus[] {Request.RequestStatus.CONDITIONALLY_APPROVED, Request.RequestStatus.APPROVED,
552
                        Request.RequestStatus.ACCOUNTING_PROCESSING, Request.RequestStatus.ACCOUNTING_PAID, Request.RequestStatus.ACCOUNTING_ON_HOLD});
553
        statsData.setPublicationTypeDistribution(publicationTypeDistributionSeries.getData(Series.Category.PUBLICATION_TYPE));
554

    
555
        return statsData;
556
    }
557

    
558
    @Override
559
    public DateSeriesData getDateSeriesData(DateSeries.Over over, Date from, Date to, String[] publishers, String[] organizations, String[] countries, String[] scientificAreas) {
560

    
561
        DateSeriesData dateSeriesData = new DateSeriesData();
562
        dateSeriesData.setNewRequestsDateSeries(statsManager.getDateSeries(over, false, from, to, publishers, organizations, countries, scientificAreas));
563
        dateSeriesData.setCumulativeRequestsDateSeries(statsManager.getDateSeries(over, true, from, to, publishers, organizations, countries, scientificAreas));
564

    
565
        return dateSeriesData;
566
    }
567

    
568
    @Override
569
    public List<CommentTemplate> getCommentTemplates(Request.RequestStatus requestStatus) {
570
        return requestManager.getCommentTemplates(requestStatus);
571
    }
572

    
573
    private void extractInfo(StatsData statsData, Series fundedRequests, Series rejectedRequests, Series.Category category) {
574

    
575
        Map<String, Tuple<Integer, Integer>> requestsMap = new HashMap<>();
576
        Map<String, Tuple<Float, Float>> amountMap = new HashMap<>();
577

    
578
        List<Triple<String, Integer, Integer>> requestsPerCategory = new ArrayList<>();
579
        List<Triple<String, Float, Float>> funds = new ArrayList<>();
580
        List<Quintuple<String, Integer, Integer, Float, Float>> fullInfo = new ArrayList<>();
581

    
582
        for(Quadruple<String, Integer, Float, Float> quadruple : fundedRequests.getData(category)) {
583
            requestsMap.put(quadruple.getFirst(), new Tuple<Integer, Integer>(quadruple.getSecond(), 0));
584
            amountMap.put(quadruple.getFirst(), new Tuple<Float, Float>(quadruple.getThird(), quadruple.getFourth()));
585
            funds.add(new Triple<String, Float, Float>(quadruple.getFirst(), quadruple.getThird(), quadruple.getFourth()));
586
        }
587

    
588
        for(Quadruple<String, Integer, Float, Float> quadruple: rejectedRequests.getData(category)) {
589
            if(!requestsMap.containsKey(quadruple.getFirst())) {
590
                requestsMap.put(quadruple.getFirst(), new Tuple<Integer, Integer>(0, quadruple.getSecond()));
591
            } else {
592
                Tuple<Integer, Integer> existingTuple = requestsMap.get(quadruple.getFirst());
593
                existingTuple.setSecond(quadruple.getSecond());
594
                requestsMap.put(quadruple.getFirst(), existingTuple);
595
            }
596
        }
597

    
598
        for(String country : requestsMap.keySet()) {
599

    
600
            Triple<String, Integer, Integer> categoryRequests = new Triple<>(country, requestsMap.get(country).getFirst(),
601
                    requestsMap.get(country).getSecond());
602
            requestsPerCategory.add(categoryRequests);
603

    
604
            Float amountPaid = 0.0f;
605
            Float avgAmountPaid = 0.0f;
606
            if(amountMap.get(country)!=null && amountMap.get(country).getFirst()!=null && amountMap.get(country).getSecond()!=null) {
607
                amountPaid = amountMap.get(country).getFirst();
608
                avgAmountPaid = amountMap.get(country).getSecond();
609
            }
610

    
611
            Quintuple<String, Integer, Integer, Float, Float> categoryFullInfo =
612
                    new Quintuple<>(country, requestsMap.get(country).getFirst(),
613
                    requestsMap.get(country).getSecond(), amountPaid, avgAmountPaid);
614
            fullInfo.add(categoryFullInfo);
615
        }
616

    
617
        Collections.sort(requestsPerCategory, new Comparator<Triple<String, Integer, Integer>>() {
618
            @Override
619
            public int compare(Triple<String, Integer, Integer> o1, Triple<String, Integer, Integer> o2) {
620
                return -(o1.getSecond()).compareTo(o2.getSecond());
621
            }
622
        });
623

    
624
        Collections.sort(funds, new Comparator<Tuple<String, Float>>() {
625
            @Override
626
            public int compare(Tuple<String, Float> o1, Tuple<String, Float> o2) {
627
                return -(o1.getSecond()).compareTo(o2.getSecond());
628
            }
629
        });
630

    
631
        if(category.equals(Series.Category.COUNTRY)) {
632

    
633
            statsData.setRequestsPerCountry(requestsPerCategory);
634
            statsData.setFundsPerCountry(funds);
635
            statsData.setCountriesFullInfo(fullInfo);
636

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

    
639
            statsData.setRequestsPerOrganisation(requestsPerCategory);
640
            statsData.setFundsPerOrganisation(funds);
641
            statsData.setOrganisationsFullInfo(fullInfo);
642

    
643
        } else if(category.equals(Series.Category.PUBLISHER)) {
644

    
645
            statsData.setRequestsPerPublisher(requestsPerCategory);
646
            statsData.setFundsPerPublisher(funds);
647
            statsData.setPublishersFullInfo(fullInfo);
648
        }
649
    }
650

    
651
    @Override
652
    public  Organization getOrganization(String organizationId) throws OrganizationManagerException {
653
        return organizationManager.getById(organizationId);
654
    }
655

    
656
    @Override
657
    public Project getProject(String projectId){
658
        return projectManager.getById(projectId);
659
    }
660

    
661

    
662
    @Override
663
    protected SerializationPolicy doGetSerializationPolicy(HttpServletRequest request, String moduleBaseURL, String strongName) {
664
        return super.doGetSerializationPolicy(request, "http://localhost:8380/goldoa/GoldOAPortal/", strongName);
665
    }
666

    
667
}
(3-3/6)