Project

General

Profile

1
package eu.dnetlib.client.monitor;
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.AlertType;
7
import com.github.gwtbootstrap.client.ui.constants.AlternateSize;
8
import com.github.gwtbootstrap.client.ui.constants.IconPosition;
9
import com.github.gwtbootstrap.client.ui.constants.IconType;
10
import com.github.gwtbootstrap.client.ui.event.HideEvent;
11
import com.github.gwtbootstrap.client.ui.event.HideHandler;
12
import com.github.gwtbootstrap.client.ui.event.ShowEvent;
13
import com.github.gwtbootstrap.client.ui.event.ShowHandler;
14
import com.google.gwt.core.client.GWT;
15
import com.google.gwt.dom.client.*;
16
import com.google.gwt.event.dom.client.ChangeEvent;
17
import com.google.gwt.event.dom.client.ChangeHandler;
18
import com.google.gwt.event.dom.client.ClickEvent;
19
import com.google.gwt.event.dom.client.ClickHandler;
20
import com.google.gwt.i18n.client.DateTimeFormat;
21
import com.google.gwt.query.client.Function;
22
import com.google.gwt.user.client.Event;
23
import com.google.gwt.user.client.Timer;
24
import com.google.gwt.user.client.rpc.AsyncCallback;
25
import com.google.gwt.user.client.ui.*;
26
import com.google.gwt.user.client.ui.Label;
27
import eu.dnetlib.client.*;
28
import eu.dnetlib.client.widgets.*;
29
import eu.dnetlib.client.widgets.TextBox;
30
import eu.dnetlib.goldoa.domain.*;
31

    
32
import java.util.ArrayList;
33
import java.util.Date;
34
import java.util.List;
35

    
36
import static com.google.gwt.query.client.GQuery.$;
37

    
38
/**
39
 * Created by stefania on 3/6/15.
40
 */
41
public class MonitorFundingRequestsWidget implements MyWidget {
42

    
43
    private String token = "";
44

    
45
    private FlowPanel monitorFundingRequestsPagePanel = new FlowPanel();
46
    private HTML monitorFundingRequestsTitleLabel = new HTML();
47
    private Label monitorFundingRequestsInfoLabel = new Label();
48

    
49
    private Alert errorLabel = new Alert();
50
    private Alert warningLabel = new Alert();
51

    
52
    private FlowPanel sortAndFilterPanel = new FlowPanel();
53
    private TextBox search = new TextBox();
54
    private ListBox orderByTypes = new ListBox();
55
    private ListBox sortByTypes = new ListBox();
56

    
57
    private DropdownCheckbox dropdownCheckbox;
58

    
59
    private FlowPanel requestsListPanel = new FlowPanel();
60

    
61
    private FlowPanel topPagerPanel = new FlowPanel();
62
    private Pager resultsPagerTop = new Pager("Previous", "Next");
63
    private Label pageNumberTop = new Label();
64

    
65
    private FlowPanel bottomPagerPanel = new FlowPanel();
66
    private Pager resultsPagerBottom = new Pager("Previous", "Next");
67
    private Label pageNumberBottom = new Label();
68

    
69
    private FlowPanel requestsAndPagerPanel = new FlowPanel();
70

    
71
    private DateTimeFormat dtf = DateTimeFormat.getFormat("yyyy/MM/dd");
72
    private DataServiceAsync dataService = GWT.create(DataService.class);
73

    
74
    private Timer timer;
75

    
76
    private List<AccordionGroup> requestsList = new ArrayList<>();
77

    
78
    private GoldOAConstants goldOAConstants = GWT.create(GoldOAConstants.class);
79

    
80
    private RequestInfoPage requestInfoPage = null;
81

    
82
    public MonitorFundingRequestsWidget() {
83

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

    
95
        dropdownCheckbox = new DropdownCheckbox(statusOptions);
96

    
97
        monitorFundingRequestsPagePanel.addStyleName("content");
98

    
99
        monitorFundingRequestsTitleLabel.setHTML("Monitor Funding Requests <div class=\"options float-right\">" +
100
                "<a target=\"_blank\" id=\"downloadCSV\"><i class=\"icon-download-alt\"></i> Export in CSV</a>" +
101
                "</div>");
102
        monitorFundingRequestsTitleLabel.addStyleName("contentTitleLabel");
103

    
104
        monitorFundingRequestsInfoLabel.setText("Monitor and change the status of funding requests that are pending approval");
105
        monitorFundingRequestsInfoLabel.addStyleName("contentInfoLabel");
106

    
107
        errorLabel.addStyleName("alertLabel");
108
        errorLabel.addStyleName("marginTop30");
109
        errorLabel.setType(AlertType.ERROR);
110
        errorLabel.setClose(false);
111
        errorLabel.setVisible(false);
112

    
113
        warningLabel.addStyleName("alertLabel");
114
        warningLabel.addStyleName("marginTop30");
115
        warningLabel.setType(AlertType.WARNING);
116
        warningLabel.setClose(false);
117
        warningLabel.setVisible(false);
118

    
119
        addUtilitiesBar();
120

    
121
        requestsListPanel.addStyleName("requestsListPanel");
122

    
123
        topPagerPanel.addStyleName("marginTop40");
124

    
125
        resultsPagerTop.addStyleName("resultsPager");
126
        resultsPagerTop.setAligned(true);
127
        resultsPagerTop.setArrows(true);
128
        resultsPagerTop.getLeft().setIcon(IconType.LONG_ARROW_LEFT);
129
        resultsPagerTop.getRight().setIcon(IconType.LONG_ARROW_RIGHT);
130
        resultsPagerTop.getRight().setIconPosition(IconPosition.RIGHT);
131

    
132
        resultsPagerTop.getLeft().addClickHandler(new ClickHandler() {
133
            @Override
134
            public void onClick(ClickEvent clickEvent) {
135
                previousPage();
136
            }
137
        });
138

    
139
        resultsPagerTop.getRight().addClickHandler(new ClickHandler() {
140
            @Override
141
            public void onClick(ClickEvent clickEvent) {
142
                nextPage();
143
            }
144
        });
145

    
146
        resultsPagerBottom.addStyleName("resultsPager");
147
        resultsPagerBottom.setAligned(true);
148
        resultsPagerBottom.setArrows(true);
149
        resultsPagerBottom.getLeft().setIcon(IconType.LONG_ARROW_LEFT);
150
        resultsPagerBottom.getRight().setIcon(IconType.LONG_ARROW_RIGHT);
151
        resultsPagerBottom.getRight().setIconPosition(IconPosition.RIGHT);
152

    
153
        resultsPagerBottom.getLeft().addClickHandler(new ClickHandler() {
154
            @Override
155
            public void onClick(ClickEvent clickEvent) {
156
                previousPage();
157
            }
158
        });
159

    
160
        resultsPagerBottom.getRight().addClickHandler(new ClickHandler() {
161
            @Override
162
            public void onClick(ClickEvent clickEvent) {
163
                nextPage();
164
            }
165
        });
166

    
167
        requestsAndPagerPanel.add(topPagerPanel);
168
        requestsAndPagerPanel.add(requestsListPanel);
169
        requestsAndPagerPanel.add(bottomPagerPanel);
170

    
171
        monitorFundingRequestsPagePanel.add(monitorFundingRequestsTitleLabel);
172
        monitorFundingRequestsPagePanel.add(monitorFundingRequestsInfoLabel);
173
        monitorFundingRequestsPagePanel.add(sortAndFilterPanel);
174
        monitorFundingRequestsPagePanel.add(errorLabel);
175
        monitorFundingRequestsPagePanel.add(warningLabel);
176
        monitorFundingRequestsPagePanel.add(requestsAndPagerPanel);
177
    }
178

    
179
    @Override
180
    public Widget asWidget() {
181
        return monitorFundingRequestsPagePanel;
182
    }
183

    
184
    @Override
185
    public void clear() {
186

    
187
        errorLabel.setVisible(false);
188
        warningLabel.setVisible(false);
189
        requestsListPanel.clear();
190
        topPagerPanel.clear();
191
        bottomPagerPanel.clear();
192
    }
193

    
194
    @Override
195
    public void reload() {
196

    
197
        MyWidgetHelper.hideSidebar();
198

    
199
        SidebarPanel helpPanel = new SidebarPanel("Help");
200
        MyWidgetHelper.loadHelp(helpPanel, token.split("\\.")[0]);
201

    
202
        search.setValue("", false);
203
        orderByTypes.setSelectedValue(RequestSortOrder.ASCENDING.name());
204
        sortByTypes.setSelectedValue(RequestSort.DATE.name());
205
        timer = null;
206

    
207
        loadRequests(null, null, RequestSort.DATE, RequestSortOrder.ASCENDING, null, null, null, 0, 9);
208
    }
209

    
210
    @Override
211
    public void setToken(String token) {
212
        this.token = token;
213
    }
214

    
215
    @Override
216
    public void afterAdditionToRootPanel() {
217

    
218
        dropdownCheckbox.addFunctionality();
219

    
220
        $("#downloadCSV").click(new Function() {
221

    
222
            public boolean f(Event e) {
223

    
224
                AnchorElement anchorElement = (AnchorElement) Document.get().getElementById("downloadCSV");
225

    
226
                String term = null;
227
                if(search.getValue()!=null && !search.getValue().trim().equals(""))
228
                    term = search.getValue().trim();
229

    
230
                List<String> selectedStatuses = dropdownCheckbox.getSelectedStatuses();
231

    
232
                String url = GWT.getModuleBaseURL() + "csv?" + "mode=moderator" + "&requestSort=" + sortByTypes.getSelectedValue() +
233
                        "&requestOrder=" + orderByTypes.getSelectedValue();
234

    
235
                if(term!=null)
236
                    url += "&filterTerm=" + term;
237

    
238
                if(!selectedStatuses.isEmpty()) {
239

    
240
                    String statuses = "";
241
                    for(int i=0; i<selectedStatuses.size(); i++) {
242
                        if(i!=0)
243
                            statuses += ",";
244
                        statuses += selectedStatuses.get(i);
245
                    }
246

    
247
                    url += "&statusFilters=" + statuses;
248
                }
249

    
250
                anchorElement.setHref(url);
251

    
252
                return true;
253
            }
254
        });
255
    }
256

    
257
    private void addUtilitiesBar() {
258

    
259
        FlowPanel sortAndFilterBar = new FlowPanel();
260
        sortAndFilterBar.addStyleName("sortAndFilterBar");
261

    
262
        FlowPanel firstRow = new FlowPanel();
263
        FlowPanel secondRow = new FlowPanel();
264

    
265
        sortAndFilterBar.add(firstRow);
266
        sortAndFilterBar.add(secondRow);
267

    
268
        search.addStyleName("searchTextBox");
269
        search.addStyleName("float-right");
270
        search.setPlaceholder("Filter...");
271
        search.setValueChangeHandler(new ValueChangeHandler() {
272
            @Override
273
            public void handle(ValueChangeEvent valueChangeEvent) {
274
                sortAndFilter();
275
            }
276
        });
277

    
278
        firstRow.add(search);
279

    
280
        orderByTypes.addItem("Ascending", RequestSortOrder.ASCENDING.name());
281
        orderByTypes.addItem("Descending", RequestSortOrder.DESCENDING.name());
282
        orderByTypes.setAlternateSize(AlternateSize.SMALL);
283
        orderByTypes.addChangeHandler(new ChangeHandler() {
284
            @Override
285
            public void onChange(ChangeEvent changeEvent) {
286
                sortAndFilter();
287
            }
288
        });
289

    
290
        Form orderBy = new Form();
291
        orderBy.addStyleName("inlineBlock");
292
        orderBy.add(new FormFieldSet("Order by", orderByTypes));
293

    
294
        sortByTypes.addItem("Date", RequestSort.DATE.name());
295
        sortByTypes.addItem("User", RequestSort.USER.name());
296
        sortByTypes.addItem("Researcher", RequestSort.RESEARCHER.name());
297
        sortByTypes.addItem("Project", RequestSort.PROJECT.name());
298
        sortByTypes.addItem("Publication", RequestSort.PUBLICATION.name());
299
        sortByTypes.addItem("Journal", RequestSort.JOURNAL.name());
300
        sortByTypes.addItem("Publisher", RequestSort.PUBLISHER.name());
301
        sortByTypes.addItem("Status", RequestSort.STATUS.name());
302
        sortByTypes.addItem("Funded with", RequestSort.FUNDING_REQUESTED.name());
303
        sortByTypes.setAlternateSize(AlternateSize.SMALL);
304
        sortByTypes.addChangeHandler(new ChangeHandler() {
305
            @Override
306
            public void onChange(ChangeEvent changeEvent) {
307
                sortAndFilter();
308
            }
309
        });
310

    
311
        Form sortBy = new Form();
312
        sortBy.addStyleName("inlineBlock");
313
        sortBy.add(new FormFieldSet("Sort by", sortByTypes));
314

    
315
        Form filterByStatusForm = new Form();
316
        filterByStatusForm.addStyleName("inlineBlock");
317

    
318
        dropdownCheckbox.addStyleName("dropdownCheckbox");
319
        DropdownCheckbox.OptionSelectedListener optionSelectedListener = new DropdownCheckbox.OptionSelectedListener() {
320
            @Override
321
            public void onSelect() {
322
                sortAndFilter();
323
            }
324
        };
325
        dropdownCheckbox.setOptionSelectedListener(optionSelectedListener);
326
        filterByStatusForm.add(new FormFieldSet("Status", dropdownCheckbox.asWidget()));
327

    
328
        firstRow.add(sortBy);
329
        firstRow.add(orderBy);
330
        firstRow.add(filterByStatusForm);
331

    
332
        FlowPanel expandCollapse = new FlowPanel();
333
        expandCollapse.addStyleName("float-right");
334

    
335
        IconAnchor expandAll = new IconAnchor();
336
        expandAll.setText("Expand All");
337
        expandAll.setIcon(IconType.ANGLE_DOWN);
338
        expandAll.addClickHandler(new ClickHandler() {
339
            @Override
340
            public void onClick(ClickEvent clickEvent) {
341
                for(AccordionGroup accordion : requestsList)
342
                    accordion.show();
343
            }
344
        });
345
        expandCollapse.add(expandAll);
346

    
347
        IconAnchor collapseAll = new IconAnchor();
348
        collapseAll.setText("Collapse All");
349
        collapseAll.setIcon(IconType.ANGLE_UP);
350
        collapseAll.addClickHandler(new ClickHandler() {
351
            @Override
352
            public void onClick(ClickEvent clickEvent) {
353
                for(AccordionGroup accordion : requestsList)
354
                    accordion.hide();
355
            }
356
        });
357
        expandCollapse.add(collapseAll);
358

    
359
        secondRow.add(expandCollapse);
360

    
361
        sortAndFilterPanel.add(sortAndFilterBar);
362
    }
363

    
364
    private void sortAndFilter() {
365

    
366
        if(timer==null) {
367

    
368
            timer = new Timer() {
369

    
370
                @Override
371
                public void run() {
372

    
373
                    RequestSort requestSort = RequestSort.valueOf(sortByTypes.getSelectedValue());
374
                    RequestSortOrder requestSortOrder = RequestSortOrder.valueOf(orderByTypes.getSelectedValue());
375

    
376
                    String term = null;
377
                    if(!search.getValue().trim().equals(""))
378
                        term = search.getValue().trim();
379

    
380
                    List<String> selectedStatuses = dropdownCheckbox.getSelectedStatuses();
381

    
382
                    if(selectedStatuses.isEmpty()) {
383
                        loadRequests(null, null, requestSort, requestSortOrder, null, term, null, 0, 9);
384
                    } else {
385
                        Request.RequestStatus[] statuses = new Request.RequestStatus[selectedStatuses.size()];
386
                        for(int i=0; i<selectedStatuses.size(); i++) {
387
                            statuses[i] = Request.RequestStatus.valueOf(selectedStatuses.get(i));
388
                        }
389
                        loadRequests(null, null, requestSort, requestSortOrder, null, term, statuses, 0, 9);
390
                    }
391
                }
392
            };
393
            timer.schedule(500);
394

    
395
        } else {
396

    
397
            timer.cancel();
398
            timer.schedule(500);
399
        }
400
    }
401

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

    
405
        errorLabel.setVisible(false);
406
        warningLabel.setVisible(false);
407

    
408
        final HTML loadingWheel = new HTML("<div class=\"loader-big\"></div><div class=\"whiteFilm\"></div>");
409
        requestsAndPagerPanel.addStyleName("loading");
410
        requestsAndPagerPanel.add(loadingWheel);
411

    
412
        dataService.getRequests(fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilters, from, to,
413
                new AsyncCallback<RequestInfoPage>() {
414

    
415
                    @Override
416
                    public void onFailure(Throwable throwable) {
417

    
418
                        MonitorFundingRequestsWidget.this.requestInfoPage = null;
419

    
420
                        requestsAndPagerPanel.remove(loadingWheel);
421
                        requestsAndPagerPanel.removeStyleName("loading");
422

    
423
                        requestsListPanel.clear();
424
                        topPagerPanel.clear();
425
                        bottomPagerPanel.clear();
426

    
427
                        errorLabel.setText(goldOAConstants.errorGettingListOfFundingRequests());
428
                        errorLabel.setVisible(true);
429
                    }
430

    
431
                    @Override
432
                    public void onSuccess(RequestInfoPage requestInfoPage) {
433

    
434
                        MonitorFundingRequestsWidget.this.requestInfoPage = requestInfoPage;
435

    
436
                        requestsAndPagerPanel.remove(loadingWheel);
437
                        requestsAndPagerPanel.removeStyleName("loading");
438

    
439
                        requestsListPanel.clear();
440
                        topPagerPanel.clear();
441
                        bottomPagerPanel.clear();
442

    
443
                        if (requestInfoPage.getRequests().isEmpty()) {
444
                            warningLabel.setText(goldOAConstants.warningNoFundingRequestsAvailable());
445
                            warningLabel.setVisible(true);
446
                        } else {
447
                            drawTopPager();
448
                            for(int i=0; i<requestInfoPage.getRequests().size(); i++)
449
                                drawRequestInfo(requestInfoPage.getRequests().get(i), i);
450
                            drawBottomPager();
451
                        }
452
                    }
453
                });
454
    }
455

    
456
    private void drawTopPager() {
457

    
458
        int totalNoOfPages = (int) Math.ceil(requestInfoPage.getTotal() / (requestInfoPage.getTo() - requestInfoPage.getFrom() + 1d));
459

    
460
        final int pageSize = requestInfoPage.getTo() - requestInfoPage.getFrom() + 1;
461
        int currentPage = (requestInfoPage.getFrom() / pageSize) + 1;
462

    
463
        if(currentPage==1)
464
            resultsPagerTop.getLeft().setDisabled(true);
465
        else
466
            resultsPagerTop.getLeft().setDisabled(false);
467

    
468
        if(currentPage==totalNoOfPages)
469
            resultsPagerTop.getRight().setDisabled(true);
470
        else
471
            resultsPagerTop.getRight().setDisabled(false);
472

    
473
        topPagerPanel.add(resultsPagerTop);
474

    
475
        pageNumberTop.setText("page " + currentPage + " of " + totalNoOfPages);
476
        pageNumberTop.addStyleName("resultsPageLabel");
477
        topPagerPanel.add(pageNumberTop);
478
    }
479

    
480
    private void drawBottomPager() {
481

    
482
        int totalNoOfPages = (int) Math.ceil(requestInfoPage.getTotal() / (requestInfoPage.getTo() - requestInfoPage.getFrom() + 1d));
483

    
484
        final int pageSize = requestInfoPage.getTo() - requestInfoPage.getFrom() + 1;
485
        int currentPage = (requestInfoPage.getFrom() / pageSize) + 1;
486

    
487
        if(currentPage==1)
488
            resultsPagerBottom.getLeft().setDisabled(true);
489
        else
490
            resultsPagerBottom.getLeft().setDisabled(false);
491

    
492
        if(currentPage==totalNoOfPages)
493
            resultsPagerBottom.getRight().setDisabled(true);
494
        else
495
            resultsPagerBottom.getRight().setDisabled(false);
496

    
497
        bottomPagerPanel.add(resultsPagerBottom);
498

    
499
        pageNumberBottom.setText("page " + currentPage + " of " + totalNoOfPages);
500
        pageNumberBottom.addStyleName("resultsPageLabel");
501
        bottomPagerPanel.add(pageNumberBottom);
502
    }
503

    
504
    private void drawRequestInfo(final RequestInfo requestInfo, int i) {
505

    
506
        final AccordionGroup dataRequestAccordionItem = new AccordionGroup();
507
//        if(((i+1)%2)==1)
508
//            dataRequestAccordionItem.addStyleName("odd");
509

    
510
        HTML statusHeading = new HTML();
511
        if(requestInfo.getPublication()!=null &&
512
                (requestInfo.getPublication().getRepository()!=null || !requestInfo.getPublication().getRepository().equals("")
513
                        || requestInfo.getPublication().getDoi()!=null || !requestInfo.getPublication().getDoi().equals(""))) {
514
            statusHeading.setHTML("<img src=\"./imgs/warning_h20.png\" /><span class=\"status\">" + requestInfo.getStatus().getValue().toUpperCase() + "</span>");
515
        } else {
516
            statusHeading.setHTML("<span class=\"status\">" + requestInfo.getStatus().getValue().toUpperCase() + "</span>");
517
        }
518
        statusHeading.addStyleName("float-right");
519
        statusHeading.addStyleName("statusHeading");
520

    
521
        dataRequestAccordionItem.getHeading().add(statusHeading);
522

    
523
        HTML extraInfo = new HTML();
524
        String extraInfoContents = "<div style=\"width: 8%\" class=\"inlineBlock\"><span>" + dtf.format(requestInfo.getDate()) +
525
                "</span></div><div style=\"width: 18%\" class=\"inlineBlock\"><span style=\"padding-right:10px; padding-left:10px\" " +
526
                ">|</span><span>";
527

    
528
        if(requestInfo.getProject()!=null)
529
            extraInfoContents += requestInfo.getProject().getAcronym();
530
        else
531
            extraInfoContents += "---";
532
        extraInfoContents += "</span></div><div style=\"width: 43%\" class=\"inlineBlock\"><span style=\"padding-right:10px; padding-left:10px\">|</span><span>";
533

    
534
        if(requestInfo.getPublication()!=null && requestInfo.getPublication().getJournal()!=null && requestInfo.getPublication().getJournal().getPublisher()!=null) {
535
            if(requestInfo.getPublication().getJournal().getPublisher().getName()!=null && requestInfo.getPublication().getJournal().getPublisher().getName().length()>50)
536
                extraInfoContents += requestInfo.getPublication().getJournal().getPublisher().getName().substring(0, 50) + " ...";
537
            else
538
                extraInfoContents += requestInfo.getPublication().getJournal().getPublisher().getName();
539
        } else if(requestInfo.getPublication()!=null && requestInfo.getPublication().getPublisher()!=null) {
540
            extraInfoContents += requestInfo.getPublication().getPublisher().getName();
541
        } else
542
            extraInfoContents += "---";
543
        extraInfoContents += "</span></div><div style=\"width: 17%\" class=\"inlineBlock\"><span style=\"padding-right:10px; " +
544
                "padding-left:10px\">|</span><span>";
545

    
546
        if(requestInfo.getInvoice()!=null)
547
            extraInfoContents += requestInfo.getInvoice().getNumber();
548
        else
549
            extraInfoContents += "---";
550
        extraInfoContents += "</span></div></div><div style=\"width: 14%\" class=\"inlineBlock\"><span style=\"padding-right:10px; " +
551
                "padding-left:10px\">|</span><span>";
552

    
553
        if(requestInfo.getFundingRequested()!=null && requestInfo.getCurrency()!=null)
554
            extraInfoContents += Math.round(requestInfo.getFundingRequested()*100) / 100.0 + " " + requestInfo.getCurrency().toString();
555
        else
556
            extraInfoContents += "---";
557
        extraInfoContents += "</span></div>";
558

    
559
        extraInfo.setHTML(extraInfoContents);
560
        extraInfo.addStyleName("headingExtraInfo");
561

    
562
        dataRequestAccordionItem.getHeading().add(extraInfo);
563

    
564
        String heading = "(ID: " + requestInfo.getId() + ") " + "\"" + requestInfo.getPublication().getTitle() + "\"";
565

    
566
        dataRequestAccordionItem.setHeading(heading);
567
        dataRequestAccordionItem.setIcon(IconType.ANGLE_DOWN);
568

    
569
        dataRequestAccordionItem.addShowHandler(new ShowHandler() {
570

    
571
            @Override
572
            public void onShow(ShowEvent showEvent) {
573

    
574
                dataRequestAccordionItem.setIcon(IconType.ANGLE_UP);
575
                dataRequestAccordionItem.clear();
576

    
577
                final HTML loadingWheel = new HTML("<div class=\"loader-big\"></div><div class=\"whiteFilm\"></div>");
578
                FlowPanel accordionInner = new FlowPanel();
579
                accordionInner.addStyleName("loading");
580
                accordionInner.add(loadingWheel);
581

    
582
                dataRequestAccordionItem.add(accordionInner);
583

    
584
                dataService.getRequestById(requestInfo.getId(), new AsyncCallback<RequestInfo>() {
585

    
586
                    @Override
587
                    public void onFailure(Throwable throwable) {
588

    
589
                        dataRequestAccordionItem.clear();
590

    
591
                        Alert errorLabel = new Alert();
592
                        errorLabel.addStyleName("alertLabel");
593
                        errorLabel.setType(AlertType.ERROR);
594
                        errorLabel.setClose(false);
595
                        errorLabel.setText(goldOAConstants.errorGettingSpecificRequestInfo());
596

    
597
                        dataRequestAccordionItem.add(errorLabel);
598
                    }
599

    
600
                    @Override
601
                    public void onSuccess(final RequestInfo requestInfo) {
602

    
603
                        addNewRequestInfo(dataRequestAccordionItem, requestInfo);
604
                    }
605
                });
606
            }
607
        });
608
        dataRequestAccordionItem.addHideHandler(new HideHandler() {
609

    
610
            @Override
611
            public void onHide(HideEvent hideEvent) {
612
                dataRequestAccordionItem.setIcon(IconType.ANGLE_DOWN);
613
            }
614
        });
615

    
616
        requestsListPanel.add(dataRequestAccordionItem);
617
        requestsList.add(dataRequestAccordionItem);
618
    }
619

    
620
    private void addNewRequestInfo(final AccordionGroup accordion, final RequestInfo requestInfo) {
621

    
622
        accordion.clear();
623

    
624
        RequestInfoElement requestInfoElement = new RequestInfoElement(requestInfo);
625
        accordion.add(requestInfoElement.asWidget());
626

    
627
        RequestInfoElement.ActionListener actionListener = new RequestInfoElement.ActionListener() {
628

    
629
            @Override
630
            public void actionHappened(boolean succeeded, Request.RequestStatus requestStatus, String comments) {
631

    
632
                accordion.getHeading().getElement().scrollIntoView();
633
                if(succeeded) {
634

    
635
                    HTML statusHeading = new HTML();
636
                    if(requestInfo.getPublication()!=null &&
637
                            (requestInfo.getPublication().getRepository()!=null || !requestInfo.getPublication().getRepository().equals("")
638
                                    || requestInfo.getPublication().getDoi()!=null || !requestInfo.getPublication().getDoi().equals(""))) {
639
                        statusHeading.setHTML("<img src=\"./imgs/warning_h20.png\" /><span class=\"status\">" + requestStatus.getValue().toUpperCase() + "</span>");
640
                    } else {
641
                        statusHeading.setHTML("<span class=\"status\">" + requestStatus.getValue().toUpperCase() + "</span>");
642
                    }
643
                    statusHeading.addStyleName("float-right");
644
                    statusHeading.addStyleName("statusHeading");
645

    
646
                    accordion.getHeading().remove(1);
647
                    accordion.getHeading().insert(statusHeading, 1);
648

    
649
                    String heading = "(ID: " + requestInfo.getId() + ") " + "\"" + requestInfo.getPublication().getTitle() + "\"";
650

    
651
                    accordion.setHeading(heading);
652

    
653
                    requestInfo.setStatus(requestStatus);
654

    
655
                    if(comments!=null)
656
                        requestInfo.getComments().add(new Comment(GoldOAPortal.currentUser, new Date(), comments));
657

    
658
                    addNewRequestInfo(accordion, requestInfo);
659
                }
660
            }
661
        };
662
        requestInfoElement.setActionListener(actionListener);
663
    }
664

    
665
    private void previousPage() {
666

    
667
        final int pageSize = requestInfoPage.getTo() - requestInfoPage.getFrom() + 1;
668

    
669
        if(requestInfoPage !=null ) {
670
            int from = requestInfoPage.getFrom() - pageSize;
671
            int to = requestInfoPage.getTo() - pageSize;
672

    
673
            RequestSort requestSort = RequestSort.valueOf(sortByTypes.getSelectedValue());
674
            RequestSortOrder requestSortOrder = RequestSortOrder.valueOf(orderByTypes.getSelectedValue());
675

    
676
            String term = null;
677
            if(!search.getValue().trim().equals(""))
678
                term = search.getValue().trim();
679

    
680
            List<String> selectedStatuses = dropdownCheckbox.getSelectedStatuses();
681

    
682
            if(selectedStatuses.isEmpty()) {
683
                loadRequests(null, null, requestSort, requestSortOrder, null, term, null, from, to);
684
            } else {
685
                Request.RequestStatus[] statuses = new Request.RequestStatus[selectedStatuses.size()];
686
                for(int i=0; i<selectedStatuses.size(); i++) {
687
                    statuses[i] = Request.RequestStatus.valueOf(selectedStatuses.get(i));
688
                }
689
                loadRequests(null, null, requestSort, requestSortOrder, null, term, statuses, from, to);
690
            }
691
        }
692
    }
693

    
694
    private void nextPage() {
695

    
696
        final int pageSize = requestInfoPage.getTo() - requestInfoPage.getFrom() + 1;
697

    
698
        if(requestInfoPage!=null) {
699
            int from = requestInfoPage.getFrom() + pageSize;
700
            int to = requestInfoPage.getTo() + pageSize;
701

    
702
            RequestSort requestSort = RequestSort.valueOf(sortByTypes.getSelectedValue());
703
            RequestSortOrder requestSortOrder = RequestSortOrder.valueOf(orderByTypes.getSelectedValue());
704

    
705
            String term = null;
706
            if(!search.getValue().trim().equals(""))
707
                term = search.getValue().trim();
708

    
709
            List<String> selectedStatuses = dropdownCheckbox.getSelectedStatuses();
710

    
711
            if(selectedStatuses.isEmpty()) {
712
                loadRequests(null, null, requestSort, requestSortOrder, null, term, null, from, to);
713
            } else {
714
                Request.RequestStatus[] statuses = new Request.RequestStatus[selectedStatuses.size()];
715
                for(int i=0; i<selectedStatuses.size(); i++) {
716
                    statuses[i] = Request.RequestStatus.valueOf(selectedStatuses.get(i));
717
                }
718
                loadRequests(null, null, requestSort, requestSortOrder, null, term, statuses, from, to);
719
            }
720
        }
721
    }
722
}
(2-2/7)