Project

General

Profile

1
package eu.dnetlib.client.fundingrequest.existingrequests;
2

    
3
import com.github.gwtbootstrap.client.ui.*;
4
import com.github.gwtbootstrap.client.ui.ListBox;
5
import com.github.gwtbootstrap.client.ui.base.IconAnchor;
6
import com.github.gwtbootstrap.client.ui.constants.*;
7
import com.github.gwtbootstrap.client.ui.event.HideEvent;
8
import com.github.gwtbootstrap.client.ui.event.HideHandler;
9
import com.github.gwtbootstrap.client.ui.event.ShowEvent;
10
import com.github.gwtbootstrap.client.ui.event.ShowHandler;
11
import com.google.gwt.core.client.GWT;
12
import com.google.gwt.event.dom.client.ChangeEvent;
13
import com.google.gwt.event.dom.client.ChangeHandler;
14
import com.google.gwt.event.dom.client.ClickEvent;
15
import com.google.gwt.event.dom.client.ClickHandler;
16
import com.google.gwt.i18n.client.DateTimeFormat;
17
import com.google.gwt.user.client.Timer;
18
import com.google.gwt.user.client.Window;
19
import com.google.gwt.user.client.rpc.AsyncCallback;
20
import com.google.gwt.user.client.ui.*;
21
import com.google.gwt.user.client.ui.Label;
22
import eu.dnetlib.client.*;
23
import eu.dnetlib.client.widgets.*;
24
import eu.dnetlib.client.widgets.TextBox;
25
import eu.dnetlib.goldoa.domain.*;
26
import eu.dnetlib.server.DataServiceImpl;
27
import org.apache.commons.logging.Log;
28
import org.apache.commons.logging.LogFactory;
29

    
30
import java.util.ArrayList;
31
import java.util.Date;
32
import java.util.List;
33

    
34
/**
35
 * Created by stefania on 3/7/15.
36
 */
37
public class ExistingFundingRequestsWidget implements MyWidget {
38

    
39
    private String token = "";
40

    
41
    private FlowPanel existingFundingRequestsPanel = new FlowPanel();
42

    
43
    private Label titleLabel = new Label();
44
    private Label informationLabel = new Label();
45

    
46
    private Alert errorLabel = new Alert();
47
    private Alert warningLabel = new Alert();
48

    
49
    private FlowPanel sortAndFilterPanel = new FlowPanel();
50
    private TextBox search = new TextBox();
51
    private ListBox orderByTypes = new ListBox();
52
    private ListBox sortByTypes = new ListBox();
53

    
54
    private DropdownCheckbox dropdownCheckbox;
55

    
56
    private FlowPanel requestsListPanel = new FlowPanel();
57

    
58
    private FlowPanel topPagerPanel = new FlowPanel();
59
    private Pager resultsPagerTop = new Pager("Previous", "Next");
60
    private Label pageNumberTop = new Label();
61

    
62
    private FlowPanel bottomPagerPanel = new FlowPanel();
63
    private Pager resultsPagerBottom = new Pager("Previous", "Next");
64
    private Label pageNumberBottom = new Label();
65

    
66
    private FlowPanel requestsAndPagerPanel = new FlowPanel();
67

    
68
    private DateTimeFormat dtf = DateTimeFormat.getFormat("yyyy/MM/dd");
69
    private DataServiceAsync dataService = GWT.create(DataService.class);
70

    
71
    private Timer timer;
72

    
73
    private List<AccordionGroup> requestsList = new ArrayList<>();
74

    
75
    private GoldOAConstants goldOAConstants = GWT.create(GoldOAConstants.class);
76

    
77
    private RequestPage requestPage = null;
78

    
79
    public ExistingFundingRequestsWidget() {
80

    
81
        List<Vocabulary> statusOptions = new ArrayList<>();
82
        statusOptions.add(new Vocabulary(Request.RequestStatus.SUBMITTED.name(), Request.RequestStatus.SUBMITTED.getValue()));
83
        statusOptions.add(new Vocabulary(Request.RequestStatus.INCOMPLETE.name(), Request.RequestStatus.INCOMPLETE.getValue()));
84
        statusOptions.add(new Vocabulary(Request.RequestStatus.CONDITIONALLY_APPROVED.name(), Request.RequestStatus.CONDITIONALLY_APPROVED.getValue()));
85
        statusOptions.add(new Vocabulary(Request.RequestStatus.APPROVED.name(), Request.RequestStatus.APPROVED.getValue()));
86
        statusOptions.add(new Vocabulary(Request.RequestStatus.REJECTED.name(), Request.RequestStatus.REJECTED.getValue()));
87
        statusOptions.add(new Vocabulary(Request.RequestStatus.ACCOUNTING_PROCESSING.name(), Request.RequestStatus.ACCOUNTING_PROCESSING.getValue()));
88
        statusOptions.add(new Vocabulary(Request.RequestStatus.ACCOUNTING_PAID.name(), Request.RequestStatus.ACCOUNTING_PAID.getValue()));
89
        statusOptions.add(new Vocabulary(Request.RequestStatus.ACCOUNTING_ON_HOLD.name(), Request.RequestStatus.ACCOUNTING_ON_HOLD.getValue()));
90
        statusOptions.add(new Vocabulary(Request.RequestStatus.ACCOUNTING_DENIED.name(), Request.RequestStatus.ACCOUNTING_DENIED.getValue()));
91

    
92
        dropdownCheckbox = new DropdownCheckbox(statusOptions);
93

    
94
        existingFundingRequestsPanel.addStyleName("content");
95

    
96
        titleLabel.setText("My Existing Requests");
97
        titleLabel.addStyleName("contentTitleLabel");
98

    
99
        informationLabel.setText("View all your existing requests. Click on each to go to the request funding wizard and " +
100
                "continue from where you left off.");
101
        informationLabel.addStyleName("contentInfoLabel");
102

    
103
        errorLabel.addStyleName("alertLabel");
104
        errorLabel.addStyleName("marginTop30");
105
        errorLabel.setType(AlertType.ERROR);
106
        errorLabel.setClose(false);
107
        errorLabel.setVisible(false);
108

    
109
        warningLabel.addStyleName("alertLabel");
110
        warningLabel.addStyleName("marginTop30");
111
        warningLabel.setType(AlertType.WARNING);
112
        warningLabel.setClose(false);
113
        warningLabel.setVisible(false);
114

    
115
        addUtilitiesBar();
116

    
117
        requestsListPanel.addStyleName("requestsListPanel");
118

    
119
        topPagerPanel.addStyleName("marginTop40");
120

    
121
//        resultsPagerTop.addStyleName("resultsPager");
122
        resultsPagerTop.setAligned(true);
123
        resultsPagerTop.setArrows(true);
124
        resultsPagerTop.getLeft().setIcon(IconType.LONG_ARROW_LEFT);
125
        resultsPagerTop.getRight().setIcon(IconType.LONG_ARROW_RIGHT);
126
        resultsPagerTop.getRight().setIconPosition(IconPosition.RIGHT);
127

    
128
        resultsPagerTop.getLeft().addClickHandler(new ClickHandler() {
129
            @Override
130
            public void onClick(ClickEvent clickEvent) {
131
                previousPage();
132
            }
133
        });
134

    
135
        resultsPagerTop.getRight().addClickHandler(new ClickHandler() {
136
            @Override
137
            public void onClick(ClickEvent clickEvent) {
138
                nextPage();
139
            }
140
        });
141

    
142
//        resultsPagerBottom.addStyleName("resultsPager");
143
        resultsPagerBottom.setAligned(true);
144
        resultsPagerBottom.setArrows(true);
145
        resultsPagerBottom.getLeft().setIcon(IconType.LONG_ARROW_LEFT);
146
        resultsPagerBottom.getRight().setIcon(IconType.LONG_ARROW_RIGHT);
147
        resultsPagerBottom.getRight().setIconPosition(IconPosition.RIGHT);
148

    
149
        resultsPagerBottom.getLeft().addClickHandler(new ClickHandler() {
150
            @Override
151
            public void onClick(ClickEvent clickEvent) {
152
                previousPage();
153
            }
154
        });
155

    
156
        resultsPagerBottom.getRight().addClickHandler(new ClickHandler() {
157
            @Override
158
            public void onClick(ClickEvent clickEvent) {
159
                nextPage();
160
            }
161
        });
162

    
163
        requestsAndPagerPanel.add(topPagerPanel);
164
        requestsAndPagerPanel.add(requestsListPanel);
165
        requestsAndPagerPanel.add(bottomPagerPanel);
166

    
167
        existingFundingRequestsPanel.add(titleLabel);
168
        existingFundingRequestsPanel.add(informationLabel);
169
        existingFundingRequestsPanel.add(sortAndFilterPanel);
170
        existingFundingRequestsPanel.add(errorLabel);
171
        existingFundingRequestsPanel.add(warningLabel);
172
        existingFundingRequestsPanel.add(requestsAndPagerPanel);
173
    }
174

    
175
    @Override
176
    public Widget asWidget() {
177
        return existingFundingRequestsPanel;
178
    }
179

    
180
    @Override
181
    public void clear() {
182

    
183
        errorLabel.setVisible(false);
184
        warningLabel.setVisible(false);
185
        requestsListPanel.clear();
186
        topPagerPanel.clear();
187
        bottomPagerPanel.clear();
188
    }
189

    
190
    @Override
191
    public void reload() {
192

    
193
        MyWidgetHelper.hideSidebar();
194

    
195
        SidebarPanel helpPanel = new SidebarPanel("Help");
196
        MyWidgetHelper.loadHelp(helpPanel, token.split("\\.")[0]);
197

    
198
        search.setValue("", false);
199
        orderByTypes.setSelectedValue(RequestSortOrder.DESCENDING.name());
200
        sortByTypes.setSelectedValue(RequestSort.DATE.name());
201
        timer = null;
202

    
203
        loadRequests(null, null, RequestSort.DATE, RequestSortOrder.DESCENDING, null, null, null, 0, 9);
204
    }
205

    
206
    @Override
207
    public void setToken(String token) {
208
        this.token = token;
209
    }
210

    
211
    @Override
212
    public void afterAdditionToRootPanel() {
213
        dropdownCheckbox.addFunctionality();
214
    }
215

    
216
    private void addUtilitiesBar() {
217

    
218
        FlowPanel sortAndFilterBar = new FlowPanel();
219
        sortAndFilterBar.addStyleName("sortAndFilterBar");
220

    
221
        FlowPanel firstRow = new FlowPanel();
222
        FlowPanel secondRow = new FlowPanel();
223

    
224
        sortAndFilterBar.add(firstRow);
225
        sortAndFilterBar.add(secondRow);
226

    
227
        search.addStyleName("searchTextBox");
228
        search.addStyleName("float-right");
229
        search.setPlaceholder("Filter...");
230
        search.setValueChangeHandler(new ValueChangeHandler() {
231
            @Override
232
            public void handle(ValueChangeEvent valueChangeEvent) {
233
                sortAndFilter();
234
            }
235
        });
236

    
237
        firstRow.add(search);
238

    
239
        orderByTypes.addItem("Ascending", RequestSortOrder.ASCENDING.name());
240
        orderByTypes.addItem("Descending", RequestSortOrder.DESCENDING.name());
241
        orderByTypes.setAlternateSize(AlternateSize.SMALL);
242
        orderByTypes.addChangeHandler(new ChangeHandler() {
243
            @Override
244
            public void onChange(ChangeEvent changeEvent) {
245
                sortAndFilter();
246
            }
247
        });
248

    
249
        Form orderBy = new Form();
250
        orderBy.addStyleName("inlineBlock");
251
        orderBy.add(new FormFieldSet("Order by", orderByTypes));
252

    
253
        sortByTypes.addItem("Date", RequestSort.DATE.name());
254
        sortByTypes.addItem("Researcher", RequestSort.RESEARCHER.name());
255
        sortByTypes.addItem("Project", RequestSort.PROJECT.name());
256
        sortByTypes.addItem("Publication", RequestSort.PUBLICATION.name());
257
        sortByTypes.addItem("Journal", RequestSort.JOURNAL.name());
258
        sortByTypes.addItem("Publisher", RequestSort.PUBLISHER.name());
259
        sortByTypes.addItem("Status", RequestSort.STATUS.name());
260
        sortByTypes.addItem("Funded with", RequestSort.FUNDING_REQUESTED.name());
261
        sortByTypes.setAlternateSize(AlternateSize.SMALL);
262
        sortByTypes.addChangeHandler(new ChangeHandler() {
263
            @Override
264
            public void onChange(ChangeEvent changeEvent) {
265
                sortAndFilter();
266
            }
267
        });
268

    
269
        Form sortBy = new Form();
270
        sortBy.addStyleName("inlineBlock");
271
        sortBy.add(new FormFieldSet("Sort by", sortByTypes));
272

    
273
        Form filterByStatusForm = new Form();
274
        filterByStatusForm.addStyleName("inlineBlock");
275

    
276
        dropdownCheckbox.addStyleName("dropdownCheckbox");
277
        DropdownCheckbox.OptionSelectedListener optionSelectedListener = new DropdownCheckbox.OptionSelectedListener() {
278
            @Override
279
            public void onSelect() {
280
                sortAndFilter();
281
            }
282
        };
283
        dropdownCheckbox.setOptionSelectedListener(optionSelectedListener);
284
        filterByStatusForm.add(new FormFieldSet("Status", dropdownCheckbox.asWidget()));
285

    
286
        firstRow.add(sortBy);
287
        firstRow.add(orderBy);
288
        firstRow.add(filterByStatusForm);
289

    
290
        FlowPanel expandCollapse = new FlowPanel();
291
        expandCollapse.addStyleName("float-right");
292

    
293
        IconAnchor expandAll = new IconAnchor();
294
        expandAll.setText("Expand All");
295
        expandAll.setIcon(IconType.ANGLE_DOWN);
296
        expandAll.addClickHandler(new ClickHandler() {
297
            @Override
298
            public void onClick(ClickEvent clickEvent) {
299
                for(AccordionGroup accordion : requestsList)
300
                    accordion.show();
301
            }
302
        });
303
        expandCollapse.add(expandAll);
304

    
305
        IconAnchor collapseAll = new IconAnchor();
306
        collapseAll.setText("Collapse All");
307
        collapseAll.setIcon(IconType.ANGLE_UP);
308
        collapseAll.addClickHandler(new ClickHandler() {
309
            @Override
310
            public void onClick(ClickEvent clickEvent) {
311
                for(AccordionGroup accordion : requestsList)
312
                    accordion.hide();
313
            }
314
        });
315
        expandCollapse.add(collapseAll);
316

    
317
        secondRow.add(expandCollapse);
318

    
319
        sortAndFilterPanel.add(sortAndFilterBar);
320
    }
321

    
322
    private void sortAndFilter() {
323

    
324
        if(timer==null) {
325

    
326
            timer = new Timer() {
327

    
328
                @Override
329
                public void run() {
330

    
331
                    RequestSort requestSort = RequestSort.valueOf(sortByTypes.getSelectedValue());
332
                    RequestSortOrder requestSortOrder = RequestSortOrder.valueOf(orderByTypes.getSelectedValue());
333

    
334
                    String term = null;
335
                    if(!search.getValue().trim().equals(""))
336
                        term = search.getValue().trim();
337

    
338
                    List<String> selectedStatuses = dropdownCheckbox.getSelectedStatuses();
339

    
340
                    if(selectedStatuses.isEmpty()) {
341
                        loadRequests(null, null, requestSort, requestSortOrder, null, term, null, 0, 9);
342
                    } else {
343
                        Request.RequestStatus[] statuses = new Request.RequestStatus[selectedStatuses.size()];
344
                        for(int i=0; i<selectedStatuses.size(); i++) {
345
                            statuses[i] = Request.RequestStatus.valueOf(selectedStatuses.get(i));
346
                        }
347
                        loadRequests(null, null, requestSort, requestSortOrder, null, term, statuses, 0, 9);
348
                    }
349
                }
350
            };
351
            timer.schedule(500);
352

    
353
        } else {
354

    
355
            timer.cancel();
356
            timer.schedule(500);
357
        }
358
    }
359

    
360
    private void loadRequests(Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order,
361
                              RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilters, int from, int to) {
362

    
363
        requestsList.clear();
364

    
365
        errorLabel.setVisible(false);
366
        warningLabel.setVisible(false);
367

    
368
        if(Utils.currentUserHasRole("library_staff")) {
369
            loadRequestsForLibrarian(fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilters, from, to);
370
        } else if(Utils.currentUserHasRole("publisher")) {
371
            loadRequestsForPublisher(fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilters, from, to);
372
        } else {
373
            loadRequestsForGeneralUser(fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilters, from, to);
374
        }
375
    }
376

    
377
    private void drawTopPager() {
378

    
379
        int totalNoOfPages = (int) Math.ceil(requestPage.getTotal() / (requestPage.getTo() - requestPage.getFrom() + 1d));
380

    
381
        final int pageSize = requestPage.getTo() - requestPage.getFrom() + 1;
382
        int currentPage = (requestPage.getFrom() / pageSize) + 1;
383

    
384
        if(currentPage==1)
385
            resultsPagerTop.getLeft().setDisabled(true);
386
        else
387
            resultsPagerTop.getLeft().setDisabled(false);
388

    
389
        if(currentPage==totalNoOfPages)
390
            resultsPagerTop.getRight().setDisabled(true);
391
        else
392
            resultsPagerTop.getRight().setDisabled(false);
393

    
394
        topPagerPanel.add(resultsPagerTop);
395

    
396
        pageNumberTop.setText("page " + currentPage + " of " + totalNoOfPages);
397
        pageNumberTop.addStyleName("resultsPageLabel");
398
        topPagerPanel.add(pageNumberTop);
399
    }
400

    
401
    private void drawBottomPager() {
402

    
403
        int totalNoOfPages = (int) Math.ceil(requestPage.getTotal() / (requestPage.getTo() - requestPage.getFrom() + 1d));
404

    
405
        final int pageSize = requestPage.getTo() - requestPage.getFrom() + 1;
406
        int currentPage = (requestPage.getFrom() / pageSize) + 1;
407

    
408
        if(currentPage==1)
409
            resultsPagerBottom.getLeft().setDisabled(true);
410
        else
411
            resultsPagerBottom.getLeft().setDisabled(false);
412

    
413
        if(currentPage==totalNoOfPages)
414
            resultsPagerBottom.getRight().setDisabled(true);
415
        else
416
            resultsPagerBottom.getRight().setDisabled(false);
417

    
418
        bottomPagerPanel.add(resultsPagerBottom);
419

    
420
        pageNumberBottom.setText("page " + currentPage + " of " + totalNoOfPages);
421
        pageNumberBottom.addStyleName("resultsPageLabel");
422
        bottomPagerPanel.add(pageNumberBottom);
423
    }
424

    
425
    private void drawRequestInfo(final Request request, int i) {
426

    
427
        final AccordionGroup dataRequestAccordionItem = new AccordionGroup();
428
//        if(((i+1)%2)==1)
429
//            dataRequestAccordionItem.addStyleName("odd");
430

    
431
        HTML statusHeading = new HTML();
432

    
433
        if(request.getPublication()!=null &&
434
                (request.getPublication().getRepository()!=null || !request.getPublication().getRepository().equals("")
435
                || request.getPublication().getDoi()!=null || !request.getPublication().getDoi().equals(""))) {
436
            statusHeading.setHTML("<img src=\"./imgs/warning_h20.png\" /><span class=\"status\">" + request.getStatus().getValue().toUpperCase() + "</span>");
437
        } else {
438
            statusHeading.setHTML("<span class=\"status\">" + request.getStatus().getValue().toUpperCase() + "</span>");
439
        }
440
        statusHeading.addStyleName("float-right");
441
        statusHeading.addStyleName("statusHeading");
442

    
443
        dataRequestAccordionItem.getHeading().add(statusHeading);
444

    
445
        HTML extraInfo = new HTML();
446
        String extraInfoContents = "<div style=\"width: 8%\" class=\"inlineBlock\"><span>" + dtf.format(request.getDate()) +
447
                "</span></div><div style=\"width: 18%\" class=\"inlineBlock\"><span style=\"padding-right:10px; padding-left:10px\" " +
448
                ">|</span><span>";
449

    
450
        if(request.getProject()!=null)
451
            extraInfoContents += request.getProject().getAcronym();
452
        else
453
            extraInfoContents += "---";
454
        extraInfoContents += "</span></div><div style=\"width: 43%\" class=\"inlineBlock\"><span style=\"padding-right:10px; padding-left:10px\">|</span><span>";
455

    
456
        if(request.getPublication()!=null && request.getPublication().getJournal()!=null && request.getPublication().getJournal().getPublisher()!=null) {
457
            if(request.getPublication().getJournal().getPublisher().getName()!=null && request.getPublication().getJournal().getPublisher().getName().length()>50)
458
                extraInfoContents += request.getPublication().getJournal().getPublisher().getName().substring(0, 50) + " ...";
459
            else
460
                extraInfoContents += request.getPublication().getJournal().getPublisher().getName();
461
        } else if(request.getPublication()!=null && request.getPublication().getPublisher()!=null) {
462
            extraInfoContents += request.getPublication().getPublisher().getName();
463
        } else
464
            extraInfoContents += "---";
465
        extraInfoContents += "</span></div><div style=\"width: 17%\" class=\"inlineBlock\"><span style=\"padding-right:10px; " +
466
                "padding-left:10px\">|</span><span>";
467

    
468
        if(request.getInvoice()!=null)
469
            extraInfoContents += request.getInvoice().getNumber();
470
        else
471
            extraInfoContents += "---";
472
        extraInfoContents += "</span></div></div><div style=\"width: 14%\" class=\"inlineBlock\"><span style=\"padding-right:10px; " +
473
                "padding-left:10px\">|</span><span>";
474

    
475
        if(request.getFundingrequested()!=null && request.getCurrency()!=null)
476
            extraInfoContents += Math.round(request.getFundingrequested()*100) / 100.0 + " " + request.getCurrency().toString();
477
        else
478
            extraInfoContents += "---";
479
        extraInfoContents += "</span></div>";
480

    
481
        extraInfo.setHTML(extraInfoContents);
482
        extraInfo.addStyleName("headingExtraInfo");
483

    
484
        dataRequestAccordionItem.getHeading().add(extraInfo);
485

    
486
        String heading = "(ID: " + request.getId() + ") " + "\"" + request.getPublication().getTitle() + "\"";
487

    
488
        dataRequestAccordionItem.setHeading(heading);
489
        dataRequestAccordionItem.setIcon(IconType.ANGLE_DOWN);
490

    
491
        dataRequestAccordionItem.addShowHandler(new ShowHandler() {
492

    
493
            @Override
494
            public void onShow(ShowEvent showEvent) {
495

    
496
                dataRequestAccordionItem.setIcon(IconType.ANGLE_UP);
497
                dataRequestAccordionItem.clear();
498

    
499
                final HTML loadingWheel = new HTML("<div class=\"loader-big\"></div><div class=\"whiteFilm\"></div>");
500
                FlowPanel accordionInner = new FlowPanel();
501
                accordionInner.addStyleName("loading");
502
                accordionInner.add(loadingWheel);
503

    
504
                dataRequestAccordionItem.add(accordionInner);
505

    
506
                dataService.getRequestById(request.getId(), new AsyncCallback<Request>() {
507

    
508
                    @Override
509
                    public void onFailure(Throwable throwable) {
510

    
511
                        dataRequestAccordionItem.clear();
512

    
513
                        Alert errorLabel = new Alert();
514
                        errorLabel.addStyleName("alertLabel");
515
                        errorLabel.setType(AlertType.ERROR);
516
                        errorLabel.setClose(false);
517
                        errorLabel.setText(goldOAConstants.errorGettingSpecificRequestInfo());
518

    
519
                        dataRequestAccordionItem.add(errorLabel);
520
                    }
521

    
522
                    @Override
523
                    public void onSuccess(Request request) {
524
                        addNewRequestInfo(dataRequestAccordionItem, request);
525
                    }
526
                });
527
            }
528
        });
529
        dataRequestAccordionItem.addHideHandler(new HideHandler() {
530

    
531
            @Override
532
            public void onHide(HideEvent hideEvent) {
533
                dataRequestAccordionItem.setIcon(IconType.ANGLE_DOWN);
534
            }
535
        });
536

    
537
        requestsListPanel.add(dataRequestAccordionItem);
538
        requestsList.add(dataRequestAccordionItem);
539
    }
540

    
541
    private void addNewRequestInfo(final AccordionGroup accordion, final Request request) {
542

    
543
        accordion.clear();
544

    
545
        ExistingRequestElement existingRequestElement = new ExistingRequestElement(request);
546
        accordion.add(existingRequestElement.asWidget());
547

    
548
        ExistingRequestElement.PublicationUpdatedListener publicationUpdatedListener =
549
                new ExistingRequestElement.PublicationUpdatedListener() {
550
            @Override
551
            public void publicationUpdated() {
552

    
553
                accordion.getHeading().getElement().scrollIntoView();
554

    
555
                HTML statusHeading = new HTML();
556
                if(request.getPublication()!=null &&
557
                        (request.getPublication().getRepository()!=null || !request.getPublication().getRepository().equals("")
558
                                || request.getPublication().getDoi()!=null || !request.getPublication().getDoi().equals(""))) {
559
                    statusHeading.setHTML("<img src=\"./imgs/warning_h20.png\" /><span class=\"status\">" + request.getStatus().getValue().toUpperCase() + "</span>");
560
                } else {
561
                    statusHeading.setHTML("<span class=\"status\">" + request.getStatus().getValue().toUpperCase() + "</span>");
562
                }
563
                statusHeading.addStyleName("float-right");
564
                statusHeading.addStyleName("statusHeading");
565

    
566
                accordion.getHeading().remove(1);
567
                accordion.getHeading().insert(statusHeading, 1);
568

    
569
                String heading = "(ID: " + request.getId() + ") " + "\"" + request.getPublication().getTitle() + "\"";
570

    
571
                accordion.setHeading(heading);
572

    
573
                addNewRequestInfo(accordion, request);
574
            }
575
        };
576
        existingRequestElement.setPublicationUpdatedListener(publicationUpdatedListener);
577
    }
578

    
579
    private void loadRequestsForLibrarian(Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order,
580
                                          RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilters,
581
                                          int from, int to) {
582

    
583
        List<String> organizationIds = new ArrayList<>();
584
        for(Affiliation affiliation : GoldOAPortal.currentUser.getAffiliations()) {
585
            if(affiliation.getOrganization()!=null)
586
                organizationIds.add(affiliation.getOrganization().getId());
587
        }
588

    
589
        final HTML loadingWheel = new HTML("<div class=\"loader-big\"></div><div class=\"whiteFilm\"></div>");
590
        requestsAndPagerPanel.addStyleName("loading");
591
        requestsAndPagerPanel.add(loadingWheel);
592

    
593
        dataService.getRequestsForOrganizations(organizationIds, fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilters,
594
                from, to, new AsyncCallback<RequestPage>() {
595

    
596
                    @Override
597
                    public void onFailure(Throwable throwable) {
598

    
599
                        ExistingFundingRequestsWidget.this.requestPage = null;
600

    
601
                        requestsAndPagerPanel.remove(loadingWheel);
602
                        requestsAndPagerPanel.removeStyleName("loading");
603

    
604
                        requestsListPanel.clear();
605
                        topPagerPanel.clear();
606
                        bottomPagerPanel.clear();
607

    
608
                        errorLabel.setText(goldOAConstants.errorGettingListOfFundingRequests());
609
                        errorLabel.setVisible(true);
610
                    }
611

    
612
                    @Override
613
                    public void onSuccess(RequestPage requestPage) {
614

    
615
                        ExistingFundingRequestsWidget.this.requestPage = requestPage;
616

    
617
                        requestsAndPagerPanel.remove(loadingWheel);
618
                        requestsAndPagerPanel.removeStyleName("loading");
619

    
620
                        requestsListPanel.clear();
621
                        topPagerPanel.clear();
622
                        bottomPagerPanel.clear();
623

    
624
                        if(requestPage.getRequests().isEmpty()) {
625
                            warningLabel.setText(goldOAConstants.warningNoFundingRequestsAvailable());
626
                            warningLabel.setVisible(true);
627
                        } else {
628
                            drawTopPager();
629
                            for(int i=0; i<requestPage.getRequests().size(); i++)
630
                                drawRequestInfo(requestPage.getRequests().get(i), i);
631
                            drawBottomPager();
632
                        }
633
                    }
634
                });
635
    }
636

    
637
    private void loadRequestsForPublisher(Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order,
638
                                          RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilters,
639
                                          int from, int to) {
640

    
641
        final HTML loadingWheel = new HTML("<div class=\"loader-big\"></div><div class=\"whiteFilm\"></div>");
642
        requestsAndPagerPanel.addStyleName("loading");
643
        requestsAndPagerPanel.add(loadingWheel);
644

    
645
        dataService.getRequestsForPublisher(GoldOAPortal.currentUser.getPublisher().getId(), fromDate, toDate, requestSortBy, order,
646
                requestFilter, term, statusFilters, from, to, new AsyncCallback<RequestPage>() {
647

    
648
                    @Override
649
                    public void onFailure(Throwable throwable) {
650

    
651
                        ExistingFundingRequestsWidget.this.requestPage = null;
652

    
653
                        requestsAndPagerPanel.remove(loadingWheel);
654
                        requestsAndPagerPanel.removeStyleName("loading");
655

    
656
                        requestsListPanel.clear();
657
                        topPagerPanel.clear();
658
                        bottomPagerPanel.clear();
659

    
660
                        errorLabel.setText(goldOAConstants.errorGettingListOfFundingRequests());
661
                        errorLabel.setVisible(true);
662
                    }
663

    
664
                    @Override
665
                    public void onSuccess(RequestPage requestPage) {
666

    
667
                        ExistingFundingRequestsWidget.this.requestPage = requestPage;
668

    
669
                        requestsAndPagerPanel.remove(loadingWheel);
670
                        requestsAndPagerPanel.removeStyleName("loading");
671

    
672
                        requestsListPanel.clear();
673
                        topPagerPanel.clear();
674
                        bottomPagerPanel.clear();
675

    
676
                        if(requestPage.getRequests().isEmpty()) {
677
                            warningLabel.setText(goldOAConstants.warningNoFundingRequestsAvailable());
678
                            warningLabel.setVisible(true);
679
                        } else {
680
                            drawTopPager();
681
                            for(int i=0; i<requestPage.getRequests().size(); i++)
682
                                drawRequestInfo(requestPage.getRequests().get(i), i);
683
                            drawBottomPager();
684
                        }
685
                    }
686
                });
687
    }
688

    
689
    private void loadRequestsForGeneralUser(Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order,
690
                                            RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilters,
691
                                            int from, int to) {
692

    
693
        final HTML loadingWheel = new HTML("<div class=\"loader-big\"></div><div class=\"whiteFilm\"></div>");
694
        requestsAndPagerPanel.addStyleName("loading");
695
        requestsAndPagerPanel.add(loadingWheel);
696

    
697
        dataService.getRequestsForUser(GoldOAPortal.currentUser.getEmail(), fromDate, toDate, requestSortBy, order, requestFilter,
698
                term, statusFilters, from, to, new AsyncCallback<RequestPage>() {
699

    
700
                    @Override
701
                    public void onFailure(Throwable throwable) {
702

    
703
                        ExistingFundingRequestsWidget.this.requestPage = null;
704

    
705
                        requestsAndPagerPanel.remove(loadingWheel);
706
                        requestsAndPagerPanel.removeStyleName("loading");
707

    
708
                        requestsListPanel.clear();
709
                        topPagerPanel.clear();
710
                        bottomPagerPanel.clear();
711

    
712
                        errorLabel.setText(goldOAConstants.errorGettingListOfFundingRequests());
713
                        errorLabel.setVisible(true);
714
                    }
715

    
716
                    @Override
717
                    public void onSuccess(RequestPage requestPage) {
718

    
719
                        ExistingFundingRequestsWidget.this.requestPage = requestPage;
720

    
721
                        requestsAndPagerPanel.remove(loadingWheel);
722
                        requestsAndPagerPanel.removeStyleName("loading");
723

    
724
                        requestsListPanel.clear();
725
                        topPagerPanel.clear();
726
                        bottomPagerPanel.clear();
727

    
728

    
729

    
730
                        if(requestPage.getRequests().isEmpty()) {
731
                            warningLabel.setText(goldOAConstants.warningNoFundingRequestsAvailable());
732
                            warningLabel.setVisible(true);
733
                        } else {
734
                            drawTopPager();
735
                            for(int i=0; i<requestPage.getRequests().size(); i++)
736
                                drawRequestInfo(requestPage.getRequests().get(i), i);
737
                            drawBottomPager();
738
                        }
739

    
740

    
741
                    }
742
                });
743
    }
744

    
745
    private void previousPage() {
746

    
747
        final int pageSize = requestPage.getTo() - requestPage.getFrom() + 1;
748

    
749
        if(requestPage !=null ) {
750
            int from = requestPage.getFrom() - pageSize;
751
            int to = requestPage.getTo() - pageSize;
752

    
753
            RequestSort requestSort = RequestSort.valueOf(sortByTypes.getSelectedValue());
754
            RequestSortOrder requestSortOrder = RequestSortOrder.valueOf(orderByTypes.getSelectedValue());
755

    
756
            String term = null;
757
            if(!search.getValue().trim().equals(""))
758
                term = search.getValue().trim();
759

    
760
            List<String> selectedStatuses = dropdownCheckbox.getSelectedStatuses();
761

    
762
            if(selectedStatuses.isEmpty()) {
763
                loadRequests(null, null, requestSort, requestSortOrder, null, term, null, from, to);
764
            } else {
765
                Request.RequestStatus[] statuses = new Request.RequestStatus[selectedStatuses.size()];
766
                for(int i=0; i<selectedStatuses.size(); i++) {
767
                    statuses[i] = Request.RequestStatus.valueOf(selectedStatuses.get(i));
768
                }
769
                loadRequests(null, null, requestSort, requestSortOrder, null, term, statuses, from, to);
770
            }
771
        }
772
    }
773

    
774
    private void nextPage() {
775

    
776
        final int pageSize = requestPage.getTo() - requestPage.getFrom() + 1;
777

    
778
        if(requestPage !=null) {
779
            int from = requestPage.getFrom() + pageSize;
780
            int to = requestPage.getTo() + pageSize;
781

    
782
            RequestSort requestSort = RequestSort.valueOf(sortByTypes.getSelectedValue());
783
            RequestSortOrder requestSortOrder = RequestSortOrder.valueOf(orderByTypes.getSelectedValue());
784

    
785
            String term = null;
786
            if(!search.getValue().trim().equals(""))
787
                term = search.getValue().trim();
788

    
789
            List<String> selectedStatuses = dropdownCheckbox.getSelectedStatuses();
790

    
791
            if(selectedStatuses.isEmpty()) {
792
                loadRequests(null, null, requestSort, requestSortOrder, null, term, null, from, to);
793
            } else {
794
                Request.RequestStatus[] statuses = new Request.RequestStatus[selectedStatuses.size()];
795
                for(int i=0; i<selectedStatuses.size(); i++) {
796
                    statuses[i] = Request.RequestStatus.valueOf(selectedStatuses.get(i));
797
                }
798
                loadRequests(null, null, requestSort, requestSortOrder, null, term, statuses, from, to);
799
            }
800
        }
801
    }
802
}
(1-1/2)