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.fundingrequest.existingrequests.ExistingRequestElement;
29
import eu.dnetlib.client.widgets.*;
30
import eu.dnetlib.client.widgets.TextBox;
31
import eu.dnetlib.goldoa.domain.*;
32

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

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

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

    
44
    private String token = "";
45

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

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

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

    
58
    private DropdownCheckbox dropdownCheckbox;
59

    
60
    private FlowPanel requestsListPanel = new FlowPanel();
61

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

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

    
70
    private FlowPanel requestsAndPagerPanel = new FlowPanel();
71

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

    
75
    private Timer timer;
76

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

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

    
81
    private RequestInfoPage requestInfoPage = null;
82

    
83
    public MonitorFundingRequestsWidget() {
84

    
85
        List<Vocabulary> statusOptions = new ArrayList<>();
86
        statusOptions.add(new Vocabulary(Request.RequestStatus.SUBMITTED.name(), Request.RequestStatus.SUBMITTED.getValue()));
87
        statusOptions.add(new Vocabulary(Request.RequestStatus.INCOMPLETE.name(), Request.RequestStatus.INCOMPLETE.getValue()));
88
        statusOptions.add(new Vocabulary(Request.RequestStatus.CONDITIONALLY_APPROVED.name(), Request.RequestStatus.CONDITIONALLY_APPROVED.getValue()));
89
        statusOptions.add(new Vocabulary(Request.RequestStatus.APPROVED.name(), Request.RequestStatus.APPROVED.getValue()));
90
        statusOptions.add(new Vocabulary(Request.RequestStatus.REJECTED.name(), Request.RequestStatus.REJECTED.getValue()));
91
        statusOptions.add(new Vocabulary(Request.RequestStatus.LIBRARY_FUND_SUBMITTED.name(), Request.RequestStatus.LIBRARY_FUND_SUBMITTED.getValue()));
92
        statusOptions.add(new Vocabulary(Request.RequestStatus.PUBLISHER_FUND_SUBMITTED.name(), Request.RequestStatus.PUBLISHER_FUND_SUBMITTED.getValue()));
93
        statusOptions.add(new Vocabulary(Request.RequestStatus.LIBRARY_FUND_PAID.name(), Request.RequestStatus.LIBRARY_FUND_PAID.getValue()));
94
        statusOptions.add(new Vocabulary(Request.RequestStatus.PUBLISHER_FUND_PAID.name(), Request.RequestStatus.PUBLISHER_FUND_PAID.getValue()));
95
        statusOptions.add(new Vocabulary(Request.RequestStatus.ACCOUNTING_PROCESSING.name(), Request.RequestStatus.ACCOUNTING_PROCESSING.getValue()));
96
        statusOptions.add(new Vocabulary(Request.RequestStatus.ACCOUNTING_PAID.name(), Request.RequestStatus.ACCOUNTING_PAID.getValue()));
97
        statusOptions.add(new Vocabulary(Request.RequestStatus.ACCOUNTING_ON_HOLD.name(), Request.RequestStatus.ACCOUNTING_ON_HOLD.getValue()));
98
        statusOptions.add(new Vocabulary(Request.RequestStatus.ACCOUNTING_DENIED.name(), Request.RequestStatus.ACCOUNTING_DENIED.getValue()));
99

    
100
        dropdownCheckbox = new DropdownCheckbox(statusOptions);
101

    
102
        monitorFundingRequestsPagePanel.addStyleName("content");
103

    
104
        monitorFundingRequestsTitleLabel.setHTML("Monitor Funding Requests <div class=\"options float-right\">" +
105
                "<a target=\"_blank\" id=\"downloadCSV\"><i class=\"icon-download-alt\"></i> Export in CSV</a>" +
106
                "</div>");
107
        monitorFundingRequestsTitleLabel.addStyleName("contentTitleLabel");
108

    
109
        monitorFundingRequestsInfoLabel.setText("Monitor and change the status of funding requests that are pending approval");
110
        monitorFundingRequestsInfoLabel.addStyleName("contentInfoLabel");
111

    
112
        errorLabel.addStyleName("alertLabel");
113
        errorLabel.addStyleName("marginTop30");
114
        errorLabel.setType(AlertType.ERROR);
115
        errorLabel.setClose(false);
116
        errorLabel.setVisible(false);
117

    
118
        warningLabel.addStyleName("alertLabel");
119
        warningLabel.addStyleName("marginTop30");
120
        warningLabel.setType(AlertType.WARNING);
121
        warningLabel.setClose(false);
122
        warningLabel.setVisible(false);
123

    
124
        addUtilitiesBar();
125

    
126
        requestsListPanel.addStyleName("requestsListPanel");
127

    
128
        topPagerPanel.addStyleName("marginTop40");
129

    
130
        resultsPagerTop.addStyleName("resultsPager");
131
        resultsPagerTop.setAligned(true);
132
        resultsPagerTop.setArrows(true);
133
        resultsPagerTop.getLeft().setIcon(IconType.LONG_ARROW_LEFT);
134
        resultsPagerTop.getRight().setIcon(IconType.LONG_ARROW_RIGHT);
135
        resultsPagerTop.getRight().setIconPosition(IconPosition.RIGHT);
136

    
137
        resultsPagerTop.getLeft().addClickHandler(new ClickHandler() {
138
            @Override
139
            public void onClick(ClickEvent clickEvent) {
140
                previousPage();
141
            }
142
        });
143

    
144
        resultsPagerTop.getRight().addClickHandler(new ClickHandler() {
145
            @Override
146
            public void onClick(ClickEvent clickEvent) {
147
                nextPage();
148
            }
149
        });
150

    
151
        resultsPagerBottom.addStyleName("resultsPager");
152
        resultsPagerBottom.setAligned(true);
153
        resultsPagerBottom.setArrows(true);
154
        resultsPagerBottom.getLeft().setIcon(IconType.LONG_ARROW_LEFT);
155
        resultsPagerBottom.getRight().setIcon(IconType.LONG_ARROW_RIGHT);
156
        resultsPagerBottom.getRight().setIconPosition(IconPosition.RIGHT);
157

    
158
        resultsPagerBottom.getLeft().addClickHandler(new ClickHandler() {
159
            @Override
160
            public void onClick(ClickEvent clickEvent) {
161
                previousPage();
162
            }
163
        });
164

    
165
        resultsPagerBottom.getRight().addClickHandler(new ClickHandler() {
166
            @Override
167
            public void onClick(ClickEvent clickEvent) {
168
                nextPage();
169
            }
170
        });
171

    
172
        requestsAndPagerPanel.add(topPagerPanel);
173
        requestsAndPagerPanel.add(requestsListPanel);
174
        requestsAndPagerPanel.add(bottomPagerPanel);
175

    
176
        monitorFundingRequestsPagePanel.add(monitorFundingRequestsTitleLabel);
177
        monitorFundingRequestsPagePanel.add(monitorFundingRequestsInfoLabel);
178
        monitorFundingRequestsPagePanel.add(sortAndFilterPanel);
179
        monitorFundingRequestsPagePanel.add(errorLabel);
180
        monitorFundingRequestsPagePanel.add(warningLabel);
181
        monitorFundingRequestsPagePanel.add(requestsAndPagerPanel);
182
    }
183

    
184
    @Override
185
    public Widget asWidget() {
186
        return monitorFundingRequestsPagePanel;
187
    }
188

    
189
    @Override
190
    public void clear() {
191

    
192
        errorLabel.setVisible(false);
193
        warningLabel.setVisible(false);
194
        requestsListPanel.clear();
195
        topPagerPanel.clear();
196
        bottomPagerPanel.clear();
197
    }
198

    
199
    @Override
200
    public void reload() {
201

    
202
        MyWidgetHelper.hideSidebar();
203

    
204
        SidebarPanel helpPanel = new SidebarPanel("Help");
205
        MyWidgetHelper.loadHelp(helpPanel, token.split("\\.")[0]);
206

    
207
        search.setValue("", false);
208
        orderByTypes.setSelectedValue(RequestSortOrder.DESCENDING.name());
209
        sortByTypes.setSelectedValue(RequestSort.DATE.name());
210
        timer = null;
211

    
212
        loadRequests(null, null, RequestSort.DATE, RequestSortOrder.DESCENDING, null, null, null, 0, 9);
213
    }
214

    
215
    @Override
216
    public void setToken(String token) {
217
        this.token = token;
218
    }
219

    
220
    @Override
221
    public void afterAdditionToRootPanel() {
222

    
223
        dropdownCheckbox.addFunctionality();
224

    
225
        $("#downloadCSV").click(new Function() {
226

    
227
            public boolean f(Event e) {
228

    
229
                AnchorElement anchorElement = (AnchorElement) Document.get().getElementById("downloadCSV");
230

    
231
                String term = null;
232
                if(search.getValue()!=null && !search.getValue().trim().equals(""))
233
                    term = search.getValue().trim();
234

    
235
                List<String> selectedStatuses = dropdownCheckbox.getSelectedStatuses();
236

    
237
                String url = GWT.getModuleBaseURL() + "csv?" + "mode=moderator" + "&requestSort=" + sortByTypes.getSelectedValue() +
238
                        "&requestOrder=" + orderByTypes.getSelectedValue();
239

    
240
                if(term!=null)
241
                    url += "&filterTerm=" + term;
242

    
243
                if(!selectedStatuses.isEmpty()) {
244

    
245
                    String statuses = "";
246
                    for(int i=0; i<selectedStatuses.size(); i++) {
247
                        if(i!=0)
248
                            statuses += ",";
249
                        statuses += selectedStatuses.get(i);
250
                    }
251

    
252
                    url += "&statusFilters=" + statuses;
253
                }
254

    
255
                anchorElement.setHref(url);
256

    
257
                return true;
258
            }
259
        });
260
    }
261

    
262
    private void addUtilitiesBar() {
263

    
264
        FlowPanel sortAndFilterBar = new FlowPanel();
265
        sortAndFilterBar.addStyleName("sortAndFilterBar");
266

    
267
        FlowPanel firstRow = new FlowPanel();
268
        FlowPanel secondRow = new FlowPanel();
269

    
270
        sortAndFilterBar.add(firstRow);
271
        sortAndFilterBar.add(secondRow);
272

    
273
        search.addStyleName("searchTextBox");
274
        search.addStyleName("float-right");
275
        search.setPlaceholder("Filter...");
276
        search.setValueChangeHandler(new ValueChangeHandler() {
277
            @Override
278
            public void handle(ValueChangeEvent valueChangeEvent) {
279
                sortAndFilter();
280
            }
281
        });
282

    
283
        firstRow.add(search);
284

    
285
        orderByTypes.addItem("Ascending", RequestSortOrder.ASCENDING.name());
286
        orderByTypes.addItem("Descending", RequestSortOrder.DESCENDING.name());
287
        orderByTypes.setAlternateSize(AlternateSize.SMALL);
288
        orderByTypes.addChangeHandler(new ChangeHandler() {
289
            @Override
290
            public void onChange(ChangeEvent changeEvent) {
291
                sortAndFilter();
292
            }
293
        });
294

    
295
        Form orderBy = new Form();
296
        orderBy.addStyleName("inlineBlock");
297
        orderBy.add(new FormFieldSet("Order by", orderByTypes));
298

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

    
316
        Form sortBy = new Form();
317
        sortBy.addStyleName("inlineBlock");
318
        sortBy.add(new FormFieldSet("Sort by", sortByTypes));
319

    
320
        Form filterByStatusForm = new Form();
321
        filterByStatusForm.addStyleName("inlineBlock");
322

    
323
        dropdownCheckbox.addStyleName("dropdownCheckbox");
324
        DropdownCheckbox.OptionSelectedListener optionSelectedListener = new DropdownCheckbox.OptionSelectedListener() {
325
            @Override
326
            public void onSelect() {
327
                sortAndFilter();
328
            }
329
        };
330
        dropdownCheckbox.setOptionSelectedListener(optionSelectedListener);
331
        filterByStatusForm.add(new FormFieldSet("Status", dropdownCheckbox.asWidget()));
332

    
333
        firstRow.add(sortBy);
334
        firstRow.add(orderBy);
335
        firstRow.add(filterByStatusForm);
336

    
337
        FlowPanel expandCollapse = new FlowPanel();
338
        expandCollapse.addStyleName("float-right");
339

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

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

    
364
        secondRow.add(expandCollapse);
365

    
366
        sortAndFilterPanel.add(sortAndFilterBar);
367
    }
368

    
369
    private void sortAndFilter() {
370

    
371
        if(timer==null) {
372

    
373
            timer = new Timer() {
374

    
375
                @Override
376
                public void run() {
377

    
378
                    RequestSort requestSort = RequestSort.valueOf(sortByTypes.getSelectedValue());
379
                    RequestSortOrder requestSortOrder = RequestSortOrder.valueOf(orderByTypes.getSelectedValue());
380

    
381
                    String term = null;
382
                    if(!search.getValue().trim().equals(""))
383
                        term = search.getValue().trim();
384

    
385
                    List<String> selectedStatuses = dropdownCheckbox.getSelectedStatuses();
386

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

    
400
        } else {
401

    
402
            timer.cancel();
403
            timer.schedule(500);
404
        }
405
    }
406

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

    
410
        errorLabel.setVisible(false);
411
        warningLabel.setVisible(false);
412

    
413
        final HTML loadingWheel = new HTML("<div class=\"loader-big\"></div><div class=\"whiteFilm\"></div>");
414
        requestsAndPagerPanel.addStyleName("loading");
415
        requestsAndPagerPanel.add(loadingWheel);
416

    
417
        dataService.getRequests(fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilters, from, to,
418
                new AsyncCallback<RequestInfoPage>() {
419

    
420
                    @Override
421
                    public void onFailure(Throwable throwable) {
422

    
423
                        MonitorFundingRequestsWidget.this.requestInfoPage = null;
424

    
425
                        requestsAndPagerPanel.remove(loadingWheel);
426
                        requestsAndPagerPanel.removeStyleName("loading");
427

    
428
                        requestsListPanel.clear();
429
                        topPagerPanel.clear();
430
                        bottomPagerPanel.clear();
431

    
432
                        errorLabel.setText(goldOAConstants.errorGettingListOfFundingRequests());
433
                        errorLabel.setVisible(true);
434
                    }
435

    
436
                    @Override
437
                    public void onSuccess(RequestInfoPage requestInfoPage) {
438

    
439
                        MonitorFundingRequestsWidget.this.requestInfoPage = requestInfoPage;
440

    
441
                        requestsAndPagerPanel.remove(loadingWheel);
442
                        requestsAndPagerPanel.removeStyleName("loading");
443

    
444
                        requestsListPanel.clear();
445
                        topPagerPanel.clear();
446
                        bottomPagerPanel.clear();
447

    
448
                        if (requestInfoPage.getRequests().isEmpty()) {
449
                            warningLabel.setText(goldOAConstants.warningNoFundingRequestsAvailable());
450
                            warningLabel.setVisible(true);
451
                        } else {
452
                            drawTopPager();
453
                            for(int i=0; i<requestInfoPage.getRequests().size(); i++)
454
                                drawRequestInfo(requestInfoPage.getRequests().get(i), i);
455
                            drawBottomPager();
456
                        }
457
                    }
458
                });
459
    }
460

    
461
    private void drawTopPager() {
462

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

    
465
        final int pageSize = requestInfoPage.getTo() - requestInfoPage.getFrom() + 1;
466
        int currentPage = (requestInfoPage.getFrom() / pageSize) + 1;
467

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

    
473
        if(currentPage==totalNoOfPages)
474
            resultsPagerTop.getRight().setDisabled(true);
475
        else
476
            resultsPagerTop.getRight().setDisabled(false);
477

    
478
        topPagerPanel.add(resultsPagerTop);
479

    
480
        pageNumberTop.setText("page " + currentPage + " of " + totalNoOfPages);
481
        pageNumberTop.addStyleName("resultsPageLabel");
482
        topPagerPanel.add(pageNumberTop);
483
    }
484

    
485
    private void drawBottomPager() {
486

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

    
489
        final int pageSize = requestInfoPage.getTo() - requestInfoPage.getFrom() + 1;
490
        int currentPage = (requestInfoPage.getFrom() / pageSize) + 1;
491

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

    
497
        if(currentPage==totalNoOfPages)
498
            resultsPagerBottom.getRight().setDisabled(true);
499
        else
500
            resultsPagerBottom.getRight().setDisabled(false);
501

    
502
        bottomPagerPanel.add(resultsPagerBottom);
503

    
504
        pageNumberBottom.setText("page " + currentPage + " of " + totalNoOfPages);
505
        pageNumberBottom.addStyleName("resultsPageLabel");
506
        bottomPagerPanel.add(pageNumberBottom);
507
    }
508

    
509
    private void drawRequestInfo(final RequestInfo requestInfo, int i) {
510

    
511
        final AccordionGroup dataRequestAccordionItem = new AccordionGroup();
512
//        if(((i+1)%2)==1)
513
//            dataRequestAccordionItem.addStyleName("odd");
514

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

    
526
        dataRequestAccordionItem.getHeading().add(statusHeading);
527

    
528
        HTML extraInfo = new HTML();
529
        String extraInfoContents = "<div style=\"width: 8%\" class=\"inlineBlock\"><span>" + dtf.format(requestInfo.getDate()) +
530
                "</span></div><div style=\"width: 18%\" class=\"inlineBlock\"><span style=\"padding-right:10px; padding-left:10px\" " +
531
                ">|</span><span>";
532

    
533
        if(requestInfo.getProject()!=null)
534
            extraInfoContents += requestInfo.getProject().getAcronym();
535
        else
536
            extraInfoContents += "---";
537
        extraInfoContents += "</span></div><div style=\"width: 43%\" class=\"inlineBlock\"><span style=\"padding-right:10px; padding-left:10px\">|</span><span>";
538

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

    
551
        if(requestInfo.getInvoice()!=null)
552
            extraInfoContents += requestInfo.getInvoice().getNumber();
553
        else
554
            extraInfoContents += "---";
555
        extraInfoContents += "</span></div></div><div style=\"width: 14%\" class=\"inlineBlock\"><span style=\"padding-right:10px; " +
556
                "padding-left:10px\">|</span><span>";
557

    
558
        if(requestInfo.getFundingRequested()!=null && requestInfo.getCurrency()!=null)
559
            extraInfoContents += Math.round(requestInfo.getFundingRequested()*100) / 100.0 + " " + requestInfo.getCurrency().toString();
560
        else
561
            extraInfoContents += "---";
562
        extraInfoContents += "</span></div>";
563

    
564
        extraInfo.setHTML(extraInfoContents);
565
        extraInfo.addStyleName("headingExtraInfo");
566

    
567
        dataRequestAccordionItem.getHeading().add(extraInfo);
568

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

    
571
        dataRequestAccordionItem.setHeading(heading);
572
        dataRequestAccordionItem.setIcon(IconType.ANGLE_DOWN);
573

    
574
        dataRequestAccordionItem.addShowHandler(new ShowHandler() {
575

    
576
            @Override
577
            public void onShow(ShowEvent showEvent) {
578

    
579
                dataRequestAccordionItem.setIcon(IconType.ANGLE_UP);
580
                dataRequestAccordionItem.clear();
581

    
582
                final HTML loadingWheel = new HTML("<div class=\"loader-big\"></div><div class=\"whiteFilm\"></div>");
583
                FlowPanel accordionInner = new FlowPanel();
584
                accordionInner.addStyleName("loading");
585
                accordionInner.add(loadingWheel);
586

    
587
                dataRequestAccordionItem.add(accordionInner);
588

    
589
                dataService.getRequestById(requestInfo.getId(), new AsyncCallback<RequestInfo>() {
590

    
591
                    @Override
592
                    public void onFailure(Throwable throwable) {
593

    
594
                        dataRequestAccordionItem.clear();
595

    
596
                        Alert errorLabel = new Alert();
597
                        errorLabel.addStyleName("alertLabel");
598
                        errorLabel.setType(AlertType.ERROR);
599
                        errorLabel.setClose(false);
600
                        errorLabel.setText(goldOAConstants.errorGettingSpecificRequestInfo());
601

    
602
                        dataRequestAccordionItem.add(errorLabel);
603
                    }
604

    
605
                    @Override
606
                    public void onSuccess(final RequestInfo requestInfo) {
607

    
608
                        addNewRequestInfo(dataRequestAccordionItem, requestInfo);
609
                    }
610
                });
611
            }
612
        });
613
        dataRequestAccordionItem.addHideHandler(new HideHandler() {
614

    
615
            @Override
616
            public void onHide(HideEvent hideEvent) {
617
                dataRequestAccordionItem.setIcon(IconType.ANGLE_DOWN);
618
            }
619
        });
620

    
621
        requestsListPanel.add(dataRequestAccordionItem);
622
        requestsList.add(dataRequestAccordionItem);
623
    }
624

    
625
    private void addNewRequestInfo(final AccordionGroup accordion, final RequestInfo requestInfo) {
626

    
627
        accordion.clear();
628

    
629
        RequestInfoElement requestInfoElement = new RequestInfoElement(requestInfo);
630
        accordion.add(requestInfoElement.asWidget());
631

    
632
        RequestInfoElement.ActionListener actionListener = new RequestInfoElement.ActionListener() {
633

    
634
            @Override
635
            public void actionHappened(boolean succeeded, Request.RequestStatus requestStatus, Comment comment) {
636

    
637
                accordion.getHeading().getElement().scrollIntoView();
638
                if(succeeded) {
639

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

    
651
                    accordion.getHeading().remove(1);
652
                    accordion.getHeading().insert(statusHeading, 1);
653

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

    
656
                    accordion.setHeading(heading);
657

    
658
                    requestInfo.setStatus(requestStatus);
659

    
660
                    if(comment!=null)
661
                        requestInfo.getComments().add(comment);
662

    
663
                    addNewRequestInfo(accordion, requestInfo);
664
                }
665
            }
666
        };
667
        requestInfoElement.setActionListener(actionListener);
668

    
669
        RequestInfoElement.PublicationUpdatedListener publicationUpdatedListener =
670
                new RequestInfoElement.PublicationUpdatedListener() {
671
                    @Override
672
                    public void publicationUpdated() {
673

    
674
                        accordion.getHeading().getElement().scrollIntoView();
675

    
676
                        HTML statusHeading = new HTML();
677
                        if(requestInfo.getPublication()!=null &&
678
                                (requestInfo.getPublication().getRepository()!=null || !requestInfo.getPublication().getRepository().equals("")
679
                                        || requestInfo.getPublication().getDoi()!=null || !requestInfo.getPublication().getDoi().equals(""))) {
680
                            statusHeading.setHTML("<img src=\"./imgs/warning_h20.png\" /><span class=\"status\">" + requestInfo.getStatus().getValue().toUpperCase() + "</span>");
681
                        } else {
682
                            statusHeading.setHTML("<span class=\"status\">" + requestInfo.getStatus().getValue().toUpperCase() + "</span>");
683
                        }
684
                        statusHeading.addStyleName("float-right");
685
                        statusHeading.addStyleName("statusHeading");
686

    
687
                        accordion.getHeading().remove(1);
688
                        accordion.getHeading().insert(statusHeading, 1);
689

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

    
692
                        accordion.setHeading(heading);
693

    
694
                        addNewRequestInfo(accordion, requestInfo);
695
                    }
696
                };
697
        requestInfoElement.setPublicationUpdatedListener(publicationUpdatedListener);
698
    }
699

    
700
    private void previousPage() {
701

    
702
        final int pageSize = requestInfoPage.getTo() - requestInfoPage.getFrom() + 1;
703

    
704
        if(requestInfoPage !=null ) {
705
            int from = requestInfoPage.getFrom() - pageSize;
706
            int to = requestInfoPage.getTo() - pageSize;
707

    
708
            RequestSort requestSort = RequestSort.valueOf(sortByTypes.getSelectedValue());
709
            RequestSortOrder requestSortOrder = RequestSortOrder.valueOf(orderByTypes.getSelectedValue());
710

    
711
            String term = null;
712
            if(!search.getValue().trim().equals(""))
713
                term = search.getValue().trim();
714

    
715
            List<String> selectedStatuses = dropdownCheckbox.getSelectedStatuses();
716

    
717
            if(selectedStatuses.isEmpty()) {
718
                loadRequests(null, null, requestSort, requestSortOrder, null, term, null, from, to);
719
            } else {
720
                Request.RequestStatus[] statuses = new Request.RequestStatus[selectedStatuses.size()];
721
                for(int i=0; i<selectedStatuses.size(); i++) {
722
                    statuses[i] = Request.RequestStatus.valueOf(selectedStatuses.get(i));
723
                }
724
                loadRequests(null, null, requestSort, requestSortOrder, null, term, statuses, from, to);
725
            }
726
        }
727
    }
728

    
729
    private void nextPage() {
730

    
731
        final int pageSize = requestInfoPage.getTo() - requestInfoPage.getFrom() + 1;
732

    
733
        if(requestInfoPage!=null) {
734
            int from = requestInfoPage.getFrom() + pageSize;
735
            int to = requestInfoPage.getTo() + pageSize;
736

    
737
            RequestSort requestSort = RequestSort.valueOf(sortByTypes.getSelectedValue());
738
            RequestSortOrder requestSortOrder = RequestSortOrder.valueOf(orderByTypes.getSelectedValue());
739

    
740
            String term = null;
741
            if(!search.getValue().trim().equals(""))
742
                term = search.getValue().trim();
743

    
744
            List<String> selectedStatuses = dropdownCheckbox.getSelectedStatuses();
745

    
746
            if(selectedStatuses.isEmpty()) {
747
                loadRequests(null, null, requestSort, requestSortOrder, null, term, null, from, to);
748
            } else {
749
                Request.RequestStatus[] statuses = new Request.RequestStatus[selectedStatuses.size()];
750
                for(int i=0; i<selectedStatuses.size(); i++) {
751
                    statuses[i] = Request.RequestStatus.valueOf(selectedStatuses.get(i));
752
                }
753
                loadRequests(null, null, requestSort, requestSortOrder, null, term, statuses, from, to);
754
            }
755
        }
756
    }
757
}
(3-3/8)