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 RequestPage requestPage = 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.LIBRARY_FUND_SUBMITTED.name(), Request.RequestStatus.LIBRARY_FUND_SUBMITTED.getValue()));
91
        statusOptions.add(new Vocabulary(Request.RequestStatus.PUBLISHER_FUND_SUBMITTED.name(), Request.RequestStatus.PUBLISHER_FUND_SUBMITTED.getValue()));
92
        statusOptions.add(new Vocabulary(Request.RequestStatus.LIBRARY_FUND_PAID.name(), Request.RequestStatus.LIBRARY_FUND_PAID.getValue()));
93
        statusOptions.add(new Vocabulary(Request.RequestStatus.PUBLISHER_FUND_PAID.name(), Request.RequestStatus.PUBLISHER_FUND_PAID.getValue()));
94
        statusOptions.add(new Vocabulary(Request.RequestStatus.ACCOUNTING_PROCESSING.name(), Request.RequestStatus.ACCOUNTING_PROCESSING.getValue()));
95
        statusOptions.add(new Vocabulary(Request.RequestStatus.ACCOUNTING_PAID.name(), Request.RequestStatus.ACCOUNTING_PAID.getValue()));
96
        statusOptions.add(new Vocabulary(Request.RequestStatus.ACCOUNTING_ON_HOLD.name(), Request.RequestStatus.ACCOUNTING_ON_HOLD.getValue()));
97
        statusOptions.add(new Vocabulary(Request.RequestStatus.ACCOUNTING_DENIED.name(), Request.RequestStatus.ACCOUNTING_DENIED.getValue()));
98

    
99
        dropdownCheckbox = new DropdownCheckbox(statusOptions);
100

    
101
        monitorFundingRequestsPagePanel.addStyleName("content");
102

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

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

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

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

    
123
        addUtilitiesBar();
124

    
125
        requestsListPanel.addStyleName("requestsListPanel");
126

    
127
        topPagerPanel.addStyleName("marginTop40");
128

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

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

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

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

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

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

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

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

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

    
188
    @Override
189
    public void clear() {
190

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

    
198
    @Override
199
    public void reload() {
200

    
201
        MyWidgetHelper.hideSidebar();
202

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

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

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

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

    
219
    @Override
220
    public void afterAdditionToRootPanel() {
221

    
222
        dropdownCheckbox.addFunctionality();
223

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

    
226
            public boolean f(Event e) {
227

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

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

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

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

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

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

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

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

    
254
                anchorElement.setHref(url);
255

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

    
261
    private void addUtilitiesBar() {
262

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

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

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

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

    
282
        firstRow.add(search);
283

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

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

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

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

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

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

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

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

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

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

    
363
        secondRow.add(expandCollapse);
364

    
365
        sortAndFilterPanel.add(sortAndFilterBar);
366
    }
367

    
368
    private void sortAndFilter() {
369

    
370
        if(timer==null) {
371

    
372
            timer = new Timer() {
373

    
374
                @Override
375
                public void run() {
376

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

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

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

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

    
399
        } else {
400

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

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

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

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

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

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

    
422
                        MonitorFundingRequestsWidget.this.requestPage = null;
423

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

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

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

    
435
                    @Override
436
                    public void onSuccess(RequestPage requestPage) {
437

    
438
                        MonitorFundingRequestsWidget.this.requestPage = requestPage;
439

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

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

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

    
460
    private void drawTopPager() {
461

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

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

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

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

    
477
        topPagerPanel.add(resultsPagerTop);
478

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

    
484
    private void drawBottomPager() {
485

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

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

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

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

    
501
        bottomPagerPanel.add(resultsPagerBottom);
502

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

    
508
    private void drawRequestInfo(final Request request, int i) {
509

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

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

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

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

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

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

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

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

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

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

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

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

    
573
        dataRequestAccordionItem.addShowHandler(new ShowHandler() {
574

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

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

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

    
586
                dataRequestAccordionItem.add(accordionInner);
587

    
588
                dataService.getRequestById(request.getId(), new AsyncCallback<Request>() {
589

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

    
593
                        dataRequestAccordionItem.clear();
594

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

    
601
                        dataRequestAccordionItem.add(errorLabel);
602
                    }
603

    
604
                    @Override
605
                    public void onSuccess(final Request request) {
606

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

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

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

    
624
    private void addNewRequestInfo(final AccordionGroup accordion, final Request request) {
625

    
626
        accordion.clear();
627

    
628
        RequestInfoElement requestInfoElement = new RequestInfoElement(request);
629
        accordion.add(requestInfoElement.asWidget());
630

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

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

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

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

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

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

    
655
                    accordion.setHeading(heading);
656

    
657
                    request.setStatus(requestStatus);
658

    
659
                    if(comment!=null) {
660
                        RequestComment rc = new RequestComment();
661
                        rc.setComment(comment);
662
                        rc.setRequest(request);
663
                        //TODO find user
664
                        //rc.setUser();
665
                        request.getRequestComments().add(rc);
666
                    }
667
                    addNewRequestInfo(accordion, request);
668
                }
669
            }
670
        };
671
        requestInfoElement.setActionListener(actionListener);
672

    
673
        RequestInfoElement.PublicationUpdatedListener publicationUpdatedListener =
674
                new RequestInfoElement.PublicationUpdatedListener() {
675
                    @Override
676
                    public void publicationUpdated() {
677

    
678
                        accordion.getHeading().getElement().scrollIntoView();
679

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

    
691
                        accordion.getHeading().remove(1);
692
                        accordion.getHeading().insert(statusHeading, 1);
693

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

    
696
                        accordion.setHeading(heading);
697

    
698
                        addNewRequestInfo(accordion, request);
699
                    }
700
                };
701
        requestInfoElement.setPublicationUpdatedListener(publicationUpdatedListener);
702
    }
703

    
704
    private void previousPage() {
705

    
706
        final int pageSize = requestPage.getTo() - requestPage.getFrom() + 1;
707

    
708
        if(requestPage !=null ) {
709
            int from = requestPage.getFrom() - pageSize;
710
            int to = requestPage.getTo() - pageSize;
711

    
712
            RequestSort requestSort = RequestSort.valueOf(sortByTypes.getSelectedValue());
713
            RequestSortOrder requestSortOrder = RequestSortOrder.valueOf(orderByTypes.getSelectedValue());
714

    
715
            String term = null;
716
            if(!search.getValue().trim().equals(""))
717
                term = search.getValue().trim();
718

    
719
            List<String> selectedStatuses = dropdownCheckbox.getSelectedStatuses();
720

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

    
733
    private void nextPage() {
734

    
735
        final int pageSize = requestPage.getTo() - requestPage.getFrom() + 1;
736

    
737
        if(requestPage !=null) {
738
            int from = requestPage.getFrom() + pageSize;
739
            int to = requestPage.getTo() + pageSize;
740

    
741
            RequestSort requestSort = RequestSort.valueOf(sortByTypes.getSelectedValue());
742
            RequestSortOrder requestSortOrder = RequestSortOrder.valueOf(orderByTypes.getSelectedValue());
743

    
744
            String term = null;
745
            if(!search.getValue().trim().equals(""))
746
                term = search.getValue().trim();
747

    
748
            List<String> selectedStatuses = dropdownCheckbox.getSelectedStatuses();
749

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