Project

General

Profile

1
package eu.dnetlib.repo.manager.client.enrichcontent;
2

    
3
import com.google.gwt.core.client.GWT;
4
import com.google.gwt.dom.client.Document;
5
import com.google.gwt.event.dom.client.ClickEvent;
6
import com.google.gwt.event.dom.client.ClickHandler;
7
import com.google.gwt.query.client.Function;
8
import com.google.gwt.user.client.Event;
9
import com.google.gwt.user.client.Window;
10
import com.google.gwt.user.client.rpc.AsyncCallback;
11
import com.google.gwt.user.client.ui.*;
12
import com.google.gwt.user.client.ui.Label;
13
import eu.dnetlib.gwt.client.help.HelpService;
14
import eu.dnetlib.gwt.client.help.HelpServiceAsync;
15
import eu.dnetlib.gwt.shared.Help;
16
import eu.dnetlib.repo.manager.client.AbstractRepositoryManagerWidget;
17
import eu.dnetlib.repo.manager.client.HelpCallback;
18
import eu.dnetlib.repo.manager.client.RepositoryManagerWidget;
19
import eu.dnetlib.repo.manager.client.enrichcontent.advancedsearch.EnrichContentAdvancedSearchForm;
20
import eu.dnetlib.repo.manager.client.services.BrokerService;
21
import eu.dnetlib.repo.manager.client.services.BrokerServiceAsync;
22
import eu.dnetlib.repo.manager.shared.broker.*;
23
import org.gwtbootstrap3.client.ui.*;
24
import org.gwtbootstrap3.client.ui.Anchor;
25
import org.gwtbootstrap3.client.ui.Button;
26
import org.gwtbootstrap3.client.ui.constants.AlertType;
27
import org.gwtbootstrap3.client.ui.constants.ButtonType;
28
import org.gwtbootstrap3.client.ui.constants.ModalBackdrop;
29
import org.gwtbootstrap3.client.ui.html.UnorderedList;
30

    
31
import java.util.List;
32

    
33
import static com.google.gwt.query.client.GQuery.$;
34

    
35
/**
36
 * Created by stefania on 11/1/16.
37
 */
38
public class ShowEventsWidget extends AbstractRepositoryManagerWidget implements RepositoryManagerWidget {
39

    
40
    private String parentToken = "";
41
    private String restToken = "";
42

    
43
    private String dataSource = "";
44
    private String topic = "";
45
    private long pageSize = 10;
46
    private AdvQueryObject advQueryObject = new AdvQueryObject();
47

    
48
//    private FlowPanel showEventsPanel = new FlowPanel();
49
//    private FlowPanel showEventsColPanel = new FlowPanel();
50
//    private FlowPanel showEventsRowPanel = new FlowPanel();
51
//
52
//    private FlowPanel showEventsListColPanel = new FlowPanel();
53
//    private FlowPanel showEventsInnerPanel = new FlowPanel();
54
//    private FlowPanel showEventsBox = new FlowPanel();
55
    private HTML title = new HTML();
56
    private FlowPanel showEventsBoxContent = new FlowPanel();
57

    
58
//    private FlowPanel showAdvancedSearchColPanel = new FlowPanel();
59
//    private FlowPanel showAdvancedSearchInnerPanel = new FlowPanel();
60
//    private FlowPanel showAdvancedSearchBox = new FlowPanel();
61
//    private FlowPanel showAdvancedSearchBoxContent = new FlowPanel();
62

    
63
    private Alert errorAlert = new Alert();
64
    private Alert successAlert = new Alert();
65

    
66
    private static HelpServiceAsync helpService = GWT.create(HelpService.class);
67
    private static BrokerServiceAsync brokerService = GWT.create(BrokerService.class);
68

    
69
    public ShowEventsWidget() {
70

    
71
        super();
72

    
73
        title.addStyleName("uk-margin-medium-bottom");
74
        contentPanel.add(title);
75

    
76
//        showEventsPanel.addStyleName("row");
77
//
78
//        showEventsColPanel.addStyleName("col-lg-12");
79
//        showEventsColPanel.add(showEventsRowPanel);
80
//
81
//        showEventsRowPanel.addStyleName("row");
82
//        showEventsRowPanel.add(showEventsListColPanel);
83
//        showEventsRowPanel.add(showAdvancedSearchColPanel);
84
//
85
//        showEventsListColPanel.addStyleName("col-lg-9");
86
//        showEventsListColPanel.add(showEventsInnerPanel);
87
//
88
//        showEventsInnerPanel.addStyleName("wrapper wrapper-content animated fadeInUp");
89
//        showEventsInnerPanel.add(showEventsBox);
90
//
91
//        showEventsBox.addStyleName("ibox");
92
//        showEventsBox.add(showEventsBoxContent);
93
//
94
//        showEventsBoxContent.addStyleName("ibox-content bigContent");
95

    
96
        errorAlert.setType(AlertType.DANGER);
97
        errorAlert.setDismissable(false);
98
        errorAlert.setVisible(false);
99
        showEventsBoxContent.add(errorAlert);
100

    
101
        successAlert.setType(AlertType.SUCCESS);
102
        successAlert.setDismissable(false);
103
        successAlert.setVisible(false);
104
        showEventsBoxContent.add(successAlert);
105

    
106
        contentPanel.add(showEventsBoxContent);
107

    
108
//        showAdvancedSearchColPanel.addStyleName("col-lg-3");
109
//        showAdvancedSearchColPanel.add(showAdvancedSearchInnerPanel);
110
//
111
//        showAdvancedSearchInnerPanel.addStyleName("wrapper wrapper-content animated fadeInUp");
112
//        showAdvancedSearchInnerPanel.add(showAdvancedSearchBox);
113
//
114
//        showAdvancedSearchBox.addStyleName("ibox");
115
//        showAdvancedSearchBox.add(showAdvancedSearchBoxContent);
116
//
117
//        showAdvancedSearchBoxContent.addStyleName("ibox-content bigContent");
118
//
119
//        showEventsPanel.add(showEventsColPanel);
120
    }
121

    
122
    @Override
123
    public void clear() {
124

    
125
        showEventsBoxContent.clear();
126
        errorAlert.setVisible(false);
127
        successAlert.setVisible(false);
128
        gridPanel.remove(helpPanel);
129

    
130
//        showAdvancedSearchBoxContent.clear();
131

    
132
        advQueryObject = new AdvQueryObject();
133
    }
134

    
135
    @Override
136
    public void reload() {
137

    
138
        Document.get().getElementById("headerNoTransparent").removeClassName("tm-header-transparent");
139

    
140
        title.setHTML("<h1 class=\"uk-article-title\">" + dataSource + "</h1><div class=\"uk-text uk-text-small uk-text-secondary\">" +
141
                topic.replace("/", "  |  ") + "</div>");
142

    
143
        advQueryObject.setDatasource(dataSource);
144
        advQueryObject.setTopic(topic);
145

    
146
        showEvents(0);
147
//        showAdvancedSearch();
148

    
149
        helpService.getHelpById(parentToken + "_showEvents", new HelpCallback(helpPanel, gridPanel) {
150

    
151
            @Override
152
            public void onSuccess(Help help) {
153

    
154
                gridPanel.add(helpPanel);
155

    
156
//                Window.alert("Run successfully!!!");
157

    
158
                if (help != null && help.getText()!=null && !help.getText().trim().isEmpty()) {
159
                    String content = "<div class=\"uk-card uk-card-body uk-card-default sidemenu\">" + help.getText() + "</div>";
160
                    HTML html = new HTML();
161
                    html.setHTML(content);
162

    
163
                    helpPanel.clear();
164
                    helpPanel.add(showAdvancedSearch());
165
                    helpPanel.add(html);
166
//                    gridPanel.add(helpPanel);
167

    
168
                } else {
169
                    helpPanel.clear();
170
                    helpPanel.add(showAdvancedSearch());
171

    
172
                }
173
            }
174
        });
175

    
176
//        RepositoryManager.pageHeader.clear();
177
//        String header = "<div class=\"col-sm-9\"><h2>Events for " + topic + "</h2><ol class=\"breadcrumb\">" +
178
//                "<li><a href=\"#dashboard\">Home</a></li><li><a href=\"#enrichContent/events\">Enrich Content</a></li>" +
179
//                "<li><a href=\"#enrichContent/events/" + dataSource +"\">" + dataSource + "</a></li>" +
180
//                "<li class=\"active\"><strong>" + topic + "</strong></li></ol></div><div class=\"col-sm-3\"><div class=\"nav " +
181
//                "navbar-top-links navbar-right\"><button id=\"subscribe\" style=\"margin-top: 30px; margin-right: 20px\" " +
182
//                "type=\"button\" class=\"btn btn-w-m btn-success\">Subscribe to these events</button></div></div>";
183
//        RepositoryManager.pageHeader.add(new HTML(header));
184

    
185

    
186
    }
187

    
188
    @Override
189
    public void setToken(String parentToken, String rest) {
190
        this.parentToken = parentToken;
191
        this.restToken = rest;
192

    
193
        String[] tokenSplit = restToken.split("/", 2);
194
        dataSource = tokenSplit[0];
195
        topic = tokenSplit[1];
196
    }
197

    
198
    @Override
199
    public void afterAdditionToRootPanel() {
200

    
201
    }
202

    
203
    private FlowPanel showAdvancedSearch() {
204

    
205
        EnrichContentAdvancedSearchForm enrichContentAdvancedSearchForm = new EnrichContentAdvancedSearchForm(dataSource, topic);
206
        EnrichContentAdvancedSearchForm.AdvancedSearchFormSelectionListener advancedSearchFormSelectionListener =
207
                new EnrichContentAdvancedSearchForm.AdvancedSearchFormSelectionListener() {
208
                    @Override
209
                    public void criteriaSelected(AdvQueryObject advQueryObject) {
210
                        ShowEventsWidget.this.advQueryObject = advQueryObject;
211
                        showEvents(0);
212
                    }
213

    
214
                    @Override
215
                    public void criteriaCleared(AdvQueryObject advQueryObject) {
216
                        ShowEventsWidget.this.advQueryObject = advQueryObject;
217
                        showEvents(0);
218
                    }
219
                };
220
        enrichContentAdvancedSearchForm.setAdvancedSearchFormSelectionListener(advancedSearchFormSelectionListener);
221

    
222
        final FlowPanel advancedSearch = new FlowPanel();
223
        advancedSearch.addStyleName("enrichContentAdvancedSearch uk-card uk-card-body uk-card-default sidemenu");
224
        advancedSearch.add(new HTML("<h6 class=\"uk-h6 uk-text-primary uk-scrollspy-inview uk-animation-slide-top-medium\"" +
225
                "uk-scrollspy-class=\"\"><span>Tweak and refine events</span></h4>"));
226
        advancedSearch.add(enrichContentAdvancedSearchForm.asWidget());
227

    
228
        return advancedSearch;
229
    }
230

    
231
    private void showEvents(long currentPage) {
232

    
233
        showEventsBoxContent.clear();
234
        showEventsBoxContent.add(errorAlert);
235
        showEventsBoxContent.add(successAlert);
236

    
237
        final HTML loadingWheel = new HTML("<div class=\"loader-big\" style=\"text-align: center; padding-top: 170px; " +
238
                "color: rgb(47, 64, 80); font-weight: bold;\">Retrieving events...</div>" +
239
                "<div class=\"whiteFilm\"></div>");
240
        showEventsBoxContent.addStyleName("loading-big");
241
        showEventsBoxContent.add(loadingWheel);
242

    
243
        brokerService.advancedShowEvents(advQueryObject, currentPage, pageSize, new AsyncCallback<EventsPage>() {
244

    
245
            @Override
246
            public void onFailure(Throwable caught) {
247

    
248
                showEventsBoxContent.removeStyleName("loading-big");
249
                showEventsBoxContent.remove(loadingWheel);
250

    
251
                errorAlert.setText("System error retrieving events for the selected topic.");
252
                errorAlert.setVisible(true);
253
            }
254

    
255
            @Override
256
            public void onSuccess(EventsPage eventsPage) {
257

    
258
                showEventsBoxContent.removeStyleName("loading-big");
259
                showEventsBoxContent.remove(loadingWheel);
260

    
261
                final FlowPanel eventsList = new FlowPanel();
262
                eventsList.addStyleName("events-results");
263
                createEventsList(eventsPage, eventsList);
264
                showEventsBoxContent.add(eventsList);
265

    
266
                addSubscribeHandler();
267

    
268
                //                final FlowPanel advancedSearch = new FlowPanel();
269
//                advancedSearch.addStyleName("col-md-3 enrichContentAdvancedSearch");
270
//                contentColPanel.add(advancedSearch);
271
//                advancedSearch.add(new HTML("<h3>Advanced Search</h3>"));
272
//                advancedSearch.add(new EnrichContentAdvancedSearchForm());
273

    
274
//                FlowPanel contentRowPanel = new FlowPanel();
275
//                contentRowPanel.addStyleName("row");
276
//                showEventsBoxContent.add(contentRowPanel);
277
//
278
//                final FlowPanel contentColPanel = new FlowPanel();
279
//                contentColPanel.addStyleName("col-lg-12");
280
//                contentRowPanel.add(contentColPanel);
281

    
282

    
283

    
284
//                final FlowPanel eventsList = new FlowPanel();
285
//                eventsList.addStyleName("col-md-12 topics-list");
286
//                createEventsList(eventsPage, eventsList);
287
//                contentColPanel.add(eventsList);
288
            }
289
        });
290
    }
291

    
292
    private void createEventsList(EventsPage eventsPage, FlowPanel eventsList) {
293

    
294
        if(eventsPage == null || eventsPage.getTotal() == 0) {
295

    
296
            eventsList.add(new HTML("<div class=\"alert alert-warning\">No events were found for this topic.</div>"));
297

    
298
        } else {
299

    
300
            long from = eventsPage.getCurrPage() * pageSize + 1;
301
            long to = (eventsPage.getCurrPage() + 1) * pageSize;
302
            if(to>eventsPage.getTotal())
303
                to = eventsPage.getTotal();
304

    
305
            HTML numberOfResultsLabel = new HTML("<span>Showing " + from + "-" + to + " of " + eventsPage.getTotal() + " results</span>" +
306
                    "<span class=\"uk-float-right\"><button id=\"subscribe\" style=\"\" type=\"button\" class=\"uk-button " +
307
                    "uk-button-primary uk-button-small\">Subscribe to these events</button></span>");
308
            numberOfResultsLabel.addStyleName("numberOfEventsLabel");
309
            eventsList.add(numberOfResultsLabel);
310

    
311
            FlowPanel topPagerPanel = new FlowPanel();
312
            drawPager(topPagerPanel, eventsPage);
313
            eventsList.add(topPagerPanel);
314

    
315
            String content = "";
316

    
317
            for(OpenAireEventPayload payload : eventsPage.getValues()) {
318
                content += returnPayloadContent(payload);
319
            }
320

    
321
            HTML eventsListHTML = new HTML();
322
            eventsListHTML.addStyleName("events-list");
323
            eventsListHTML.setHTML(content);
324

    
325
            eventsList.add(eventsListHTML);
326

    
327
            FlowPanel bottomPagerPanel = new FlowPanel();
328
            drawPager(bottomPagerPanel, eventsPage);
329
            eventsList.add(bottomPagerPanel);
330
        }
331
    }
332

    
333
    private void drawPager(FlowPanel pagerPanel, final EventsPage eventsPage) {
334

    
335
        UnorderedList pager = new UnorderedList();
336
        pager.addStyleName("uk-pagination");
337

    
338
        final ListItem listItemPrevious = new ListItem();
339
        Anchor previous = new Anchor();
340
        previous.setHTML("<span class=\"uk-margin-small-right\" uk-pagination-previous></span> Previous");
341
        previous.addClickHandler(new ClickHandler() {
342
            @Override
343
            public void onClick(ClickEvent event) {
344
                showEvents(eventsPage.getCurrPage() - 1);
345
            }
346
        });
347
        listItemPrevious.add(previous);
348
        pager.add(listItemPrevious);
349

    
350
        ListItem listItemNext = new ListItem();
351
        listItemNext.addStyleName("uk-margin-auto-left");
352
        Anchor next = new Anchor();
353
        next.setHTML("Next <span class=\"uk-margin-small-left\" uk-pagination-next></span>");
354
        next.addClickHandler(new ClickHandler() {
355
            @Override
356
            public void onClick(ClickEvent event) {
357
                showEvents(eventsPage.getCurrPage() + 1);
358
            }
359
        });
360
        listItemNext.add(next);
361
        pager.add(listItemNext);
362

    
363

    
364
        if(eventsPage.getCurrPage()==0) {
365
            previous.setEnabled(false);
366
            listItemPrevious.addStyleName("uk-disabled");
367
        } else {
368
            previous.setEnabled(true);
369
            listItemPrevious.removeStyleName("uk-disabled");
370
        }
371

    
372
        if(eventsPage.getCurrPage()==(eventsPage.getTotalPages()-1)) {
373
            next.setEnabled(false);
374
            listItemNext.addStyleName("uk-disabled");
375
        } else {
376
            next.setEnabled(true);
377
            listItemNext.removeStyleName("uk-disabled");
378
        }
379

    
380
        pagerPanel.add(pager);
381

    
382
        Label pageNumber = new Label();
383

    
384
        pageNumber.setText("page " + (eventsPage.getCurrPage() + 1) + " of " + eventsPage.getTotalPages());
385
        pageNumber.addStyleName("resultsPageLabel");
386
        pagerPanel.add(pageNumber);
387
    }
388
    
389
    private String returnPayloadContent(OpenAireEventPayload openAireEventPayload) {
390
        
391
        String payloadContent = "";
392
        
393
        payloadContent += "<div class=\"uk-card uk-card-default well uk-scrollspy-inview uk-animation-slide-top-medium\">" +
394
                "<div class=\"uk-grid-margin uk-grid uk-grid-stack\" uk-grid=\"\">" +
395
                "<div class=\"uk-width-1-1@m uk-first-column\">" +
396
                "<p class=\"text-right\"><span class=\"uk-label\">Trust: </b>" + openAireEventPayload.getTrust() + "</span></p>";
397

    
398

    
399
        payloadContent += "<div class=\"uk-overflow-auto uk-scrollspy-inview uk-animation-slide-top-medium\">" +
400
                "<table class=\"uk-table uk-table-striped uk-table-middle\"><tbody>";
401

    
402

    
403
        // ID
404
        payloadContent += "<tr class=\"el-item\">" +
405
                "<td class=\"uk-table-shrink uk-width-1-4\">" +
406
                "<strong class=\"el-title uk-display-block\">ID</strong>" +
407
                "</td>" +
408
                "<td class=\"uk-table-shrink\">\n" +
409
                "<div class=\"el-title\">" + openAireEventPayload.getPublication().getOriginalId() + "</div>" +
410
                "</td>" +
411
                "</tr>";
412

    
413

    
414
        // TITLES
415
        payloadContent += "<tr class=\"el-item\"><td class=\"uk-table-shrink uk-width-1-4\"><strong class=\"el-title uk-display-block\">" +
416
                "Title(s)</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">";
417

    
418
        for(int i=0; i<openAireEventPayload.getPublication().getTitles().size(); i++) {
419
            if(i!=0)
420
                payloadContent += "<br>";
421
            payloadContent += "<span>" + openAireEventPayload.getPublication().getTitles().get(i) + "</span>";
422
        }
423
        payloadContent += "</div></td></tr>";
424

    
425

    
426
        // AUTHORS
427
        payloadContent += "<tr class=\"el-item\"><td class=\"uk-table-shrink uk-width-1-4\"><strong class=\"el-title uk-display-block\">" +
428
                "Author(s)</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">";
429

    
430
        for(int i=0; i<openAireEventPayload.getPublication().getCreators().size(); i++) {
431
            if(i!=0)
432
                payloadContent += " | ";
433
            payloadContent += "<span>" + openAireEventPayload.getPublication().getCreators().get(i) + "</span>";
434
        }
435
        payloadContent += "</div></td></tr>";
436

    
437

    
438
        // PIDs
439
        if(openAireEventPayload.getHighlight().getPids()!=null && !openAireEventPayload.getHighlight().getPids().isEmpty()) {
440
            payloadContent += "<tr class=\"el-item success\">";
441
        } else {
442
            payloadContent += "<tr class=\"el-item\">";
443
        }
444

    
445
        payloadContent += "<td class=\"uk-table-shrink uk-width-1-4\"><strong class=\"el-title uk-display-block\">" +
446
                "PID(s)</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">";
447

    
448
        for(Pid pid : openAireEventPayload.getPublication().getPids()) {
449
            payloadContent += "<span>" + pid.getValue() + "<b>&nbsp;&nbsp;(" + pid.getType() + ")&nbsp;&nbsp;</b> ";
450
            if(isPidHighlighted(pid, openAireEventPayload.getHighlight().getPids())) {
451
                payloadContent += "<span>";
452

    
453
                payloadContent += "<span class=\"uk-label uk-label-success\">added</span>";
454

    
455
                if(openAireEventPayload.getProvenance()!=null) {
456

    
457
                    payloadContent += "<span class=\"pull-right\">" +
458
                            "<b>from: </b>";
459
                    if (openAireEventPayload.getProvenance().getUrl() != null) {
460
                        payloadContent += "<a href=\"" + openAireEventPayload.getProvenance().getUrl() + "\" target=\"_blank\">" +
461
                                openAireEventPayload.getProvenance().getRepositoryName() + "</a>";
462
                    }
463
                    if (openAireEventPayload.getProvenance().getId() != null) {
464
                        payloadContent += "<span> (ID: " + openAireEventPayload.getProvenance().getId() + ")</span>";
465
                    }
466

    
467
                    payloadContent += "</span>";
468
                }
469

    
470
                payloadContent += "</span>";
471
            }
472
            payloadContent += "</span>";
473
        }
474
        payloadContent += "</div></td></tr>";
475

    
476

    
477
        // ABSTRACTS
478
        if(openAireEventPayload.getHighlight().getAbstracts()!=null && !openAireEventPayload.getHighlight().getAbstracts().isEmpty()) {
479
            payloadContent += "<tr class=\"el-item success\">";
480
        } else {
481
            payloadContent += "<tr class=\"el-item\">";
482
        }
483

    
484
        payloadContent += "<td class=\"uk-table-shrink uk-width-1-4\"><strong class=\"el-title uk-display-block\">" +
485
                "Abstract(s)</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">";
486

    
487
        for(int i=0; i<openAireEventPayload.getPublication().getAbstracts().size(); i++) {
488
            if(i!=0)
489
                payloadContent += "<br>";
490
            payloadContent += "<span>" + openAireEventPayload.getPublication().getAbstracts().get(i) + "</span>";
491

    
492
            if(openAireEventPayload.getHighlight().getAbstracts()!=null && !openAireEventPayload.getHighlight().getAbstracts().isEmpty()
493
                    && openAireEventPayload.getProvenance()!=null) {
494

    
495
                payloadContent += "<span class=\"pull-right\">" +
496
                        "<b>from: </b>";
497
                if (openAireEventPayload.getProvenance().getUrl() != null) {
498
                    payloadContent += "<a href=\"" + openAireEventPayload.getProvenance().getUrl() + "\" target=\"_blank\">" +
499
                            openAireEventPayload.getProvenance().getRepositoryName() + "</a>";
500
                }
501
                if (openAireEventPayload.getProvenance().getId() != null) {
502
                    payloadContent += "<span> (ID: " + openAireEventPayload.getProvenance().getId() + ")</span>";
503
                }
504

    
505
                payloadContent += "</span>";
506
            }
507
        }
508
        payloadContent += "</div></td></tr>";
509

    
510

    
511
        // PROJECTS
512
        if(openAireEventPayload.getHighlight().getProjects()!=null && !openAireEventPayload.getHighlight().getProjects().isEmpty()) {
513
            payloadContent += "<tr class=\"el-item success\">";
514
        } else {
515
            payloadContent += "<tr class=\"el-item\">";
516
        }
517

    
518
        payloadContent += "<td class=\"uk-table-shrink uk-width-1-4\"><strong class=\"el-title uk-display-block\">" +
519
                "Project(s)/Relation(s)</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">";
520

    
521
        for(int i=0; i<openAireEventPayload.getPublication().getProjects().size(); i++) {
522
            if(i!=0)
523
                payloadContent += "<br>";
524
            if(openAireEventPayload.getPublication().getProjects().get(i).getAcronym()!=null && !openAireEventPayload.getPublication().getProjects().get(i).getAcronym().trim().equals(""))
525
                payloadContent += "<span>" + openAireEventPayload.getPublication().getProjects().get(i).getAcronym() + "</span>";
526
            else
527
                payloadContent += "<span>" + openAireEventPayload.getPublication().getProjects().get(i).getTitle() + "</span>";
528

    
529
            if(openAireEventPayload.getHighlight().getProjects()!=null && !openAireEventPayload.getHighlight().getProjects().isEmpty()
530
                    && openAireEventPayload.getProvenance()!=null) {
531

    
532
                payloadContent += "<span class=\"pull-right\">" +
533
                        "<b>from: </b>";
534
                if (openAireEventPayload.getProvenance().getUrl() != null) {
535
                    payloadContent += "<a href=\"" + openAireEventPayload.getProvenance().getUrl() + "\" target=\"_blank\">" +
536
                            openAireEventPayload.getProvenance().getRepositoryName() + "</a>";
537
                }
538
                if (openAireEventPayload.getProvenance().getId() != null) {
539
                    payloadContent += "<span> (ID: " + openAireEventPayload.getProvenance().getId() + ")</span>";
540
                }
541

    
542
                payloadContent += "</span>";
543
            }
544
        }
545
        payloadContent += "</div></td></tr>";
546

    
547

    
548
        // SUBJECTS
549
        if(openAireEventPayload.getHighlight().getSubjects()!=null && !openAireEventPayload.getHighlight().getSubjects().isEmpty()) {
550

    
551
            payloadContent += "<tr class=\"el-item success\">";
552

    
553
            payloadContent += "<td class=\"uk-table-shrink uk-width-1-4\"><strong class=\"el-title uk-display-block\">" +
554
                    "Subject(s)</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">";
555

    
556
            for(int i=0; i<openAireEventPayload.getPublication().getSubjects().size(); i++) {
557
                if(i!=0)
558
                    payloadContent += "<br>";
559
                payloadContent += "<span>" + openAireEventPayload.getPublication().getSubjects().get(i) + "</span>";
560

    
561
                if(openAireEventPayload.getHighlight().getSubjects()!=null && !openAireEventPayload.getHighlight().getSubjects().isEmpty()
562
                        && openAireEventPayload.getProvenance()!=null) {
563

    
564
                    payloadContent += "<span class=\"pull-right\">" +
565
                            "<b>from: </b>";
566
                    if (openAireEventPayload.getProvenance().getUrl() != null) {
567
                        payloadContent += "<a href=\"" + openAireEventPayload.getProvenance().getUrl() + "\" target=\"_blank\">" +
568
                                openAireEventPayload.getProvenance().getRepositoryName() + "</a>";
569
                    }
570
                    if (openAireEventPayload.getProvenance().getId() != null) {
571
                        payloadContent += "<span> (ID: " + openAireEventPayload.getProvenance().getId() + ")</span>";
572
                    }
573

    
574
                    payloadContent += "</span>";
575
                }
576
            }
577
            payloadContent += "</div></td></tr>";
578

    
579
        } else {
580

    
581
            payloadContent += "<tr class=\"el-item\">";
582

    
583
            payloadContent += "<td class=\"uk-table-shrink uk-width-1-4\"><strong class=\"el-title uk-display-block\">" +
584
                    "Subject(s)</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">";
585

    
586
            for(int i=0; i<openAireEventPayload.getPublication().getSubjects().size(); i++) {
587
                if(i!=0)
588
                    payloadContent += ", ";
589
                payloadContent += "<span>" + openAireEventPayload.getPublication().getSubjects().get(i) + "</span>";
590

    
591
            }
592
            payloadContent += "</div></td></tr>";
593
        }
594

    
595

    
596
        // PUBLICATION DATE
597
        if(openAireEventPayload.getHighlight().getPublicationdate()!=null &&
598
                !openAireEventPayload.getHighlight().getPublicationdate().isEmpty()) {
599
            payloadContent += "<tr class=\"el-item success\">";
600
        } else {
601
            payloadContent += "<tr class=\"el-item\">";
602
        }
603

    
604
        payloadContent += "<td class=\"uk-table-shrink uk-width-1-4\"><strong class=\"el-title uk-display-block\">" +
605
                "Publication date</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">" +
606
                openAireEventPayload.getPublication().getPublicationdate() +
607
                "</div></td></tr>";
608

    
609

    
610
        // RIGHTS
611
        if(openAireEventPayload.getHighlight().getInstances()!=null &&
612
                !openAireEventPayload.getHighlight().getInstances().isEmpty()) {
613
            payloadContent += "<tr class=\"el-item success\">";
614
        } else {
615
            payloadContent += "<tr class=\"el-item\">";
616
        }
617

    
618
        payloadContent += "<td class=\"uk-table-shrink uk-width-1-4\"><strong class=\"el-title uk-display-block\">" +
619
                "Rights</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">";
620

    
621
        for(int i=0; i<openAireEventPayload.getPublication().getInstances().size(); i++) {
622

    
623
            if(i!=0)
624
                payloadContent += "<br>";
625

    
626
            payloadContent += "<span>";
627
            payloadContent += openAireEventPayload.getPublication().getInstances().get(i).getLicense() +
628
                    "&nbsp;&nbsp;<b>" + openAireEventPayload.getPublication().getInstances().get(i).getHostedby() + "</b>";
629
            payloadContent += "<br>";
630
            payloadContent += "<a href=\"" + openAireEventPayload.getPublication().getInstances().get(i).getUrl() +
631
                    "\" target=\"_blank\">" + openAireEventPayload.getPublication().getInstances().get(i).getUrl() + "</a>&nbsp;&nbsp;";
632
            payloadContent += "</span>";
633

    
634
            if(isInstanceHighlighted(openAireEventPayload.getPublication().getInstances().get(i), openAireEventPayload.getHighlight().getInstances())) {
635
                payloadContent += "<span>";
636

    
637
                payloadContent += "<span class=\"uk-label uk-label-success\">added</span>";
638

    
639
                if(openAireEventPayload.getProvenance()!=null) {
640

    
641
                    payloadContent += "<span class=\"pull-right\">" +
642
                            "<b>from: </b>";
643
                    if (openAireEventPayload.getProvenance().getUrl() != null) {
644
                        payloadContent += "<a href=\"" + openAireEventPayload.getProvenance().getUrl() + "\" target=\"_blank\">" +
645
                                openAireEventPayload.getProvenance().getRepositoryName() + "</a>";
646
                    }
647
                    if (openAireEventPayload.getProvenance().getId() != null) {
648
                        payloadContent += "<span> (ID: " + openAireEventPayload.getProvenance().getId() + ")</span>";
649
                    }
650

    
651
                    payloadContent += "</span>";
652
                }
653

    
654
                payloadContent += "</span>";
655
            }
656
        }
657
        payloadContent += "</div></td></tr>";
658

    
659

    
660
        payloadContent += "</tbody></table></div></div></div></div>";
661
        
662
        return payloadContent;
663
    }
664

    
665
    private boolean isPidHighlighted(Pid pid, List<Pid> highlightedPIDs) {
666

    
667
        for(Pid highlightedPid : highlightedPIDs) {
668
            if(highlightedPid.getType().equals(pid.getType()) && highlightedPid.getValue().equals(pid.getValue()))
669
                return true;
670
        }
671

    
672
        return false;
673
    }
674

    
675
    private boolean isInstanceHighlighted(Instance instance, List<Instance> highlightedInstances) {
676

    
677
        for(Instance highlightedInstance : highlightedInstances) {
678
            if(highlightedInstance.getUrl().equals(instance.getUrl())
679
                    && highlightedInstance.getHostedby().equals(instance.getHostedby())
680
                    && highlightedInstance.getInstancetype().equals(instance.getInstancetype())
681
                    && highlightedInstance.getLicense().equals(instance.getLicense()))
682
                return true;
683
        }
684

    
685
        return false;
686
    }
687

    
688
    private void addSubscribeHandler() {
689

    
690
        $("#subscribe").click(new Function() {
691

    
692
            public boolean f(Event e) {
693

    
694
                errorAlert.setVisible(false);
695
                successAlert.setVisible(false);
696

    
697
                final Modal subscribeToEvents = new Modal();
698
                subscribeToEvents.setDataBackdrop(ModalBackdrop.STATIC);
699

    
700
                FlowPanel modalContent = new FlowPanel();
701

    
702
                HTML title = new HTML("<h2 class=\"uk-modal-title\">Create subscription for</h2>\n");
703
                modalContent.add(title);
704

    
705
                final EventsSubscriptionForm eventsSubscriptionForm = new EventsSubscriptionForm(advQueryObject);
706
                modalContent.add(eventsSubscriptionForm.asWidget());
707

    
708
                FlowPanel actionButtons = new FlowPanel();
709
                actionButtons.addStyleName("uk-text-right uk-margin-bottom");
710
                modalContent.add(actionButtons);
711

    
712
                Button no = new Button("Cancel");
713
                no.addStyleName("uk-button uk-button-default");
714
                no.addClickHandler(new ClickHandler() {
715
                    @Override
716
                    public void onClick(ClickEvent event) {
717
                        subscribeToEvents.hide();
718
                        subscribeToEvents.removeFromParent();
719
                    }
720
                });
721
                actionButtons.add(no);
722

    
723
                Button yes = new Button("Subscribe");
724
                yes.addStyleName("uk-button uk-button-primary");
725
                yes.addClickHandler(new ClickHandler() {
726
                    @Override
727
                    public void onClick(ClickEvent event) {
728

    
729
                        if(eventsSubscriptionForm.validate()) {
730
                            OpenaireSubscription openaireSubscription = eventsSubscriptionForm.getOpenAIRESubscription();
731
                            brokerService.subscribe(openaireSubscription, new AsyncCallback<Subscription>() {
732

    
733
                                @Override
734
                                public void onFailure(Throwable caught) {
735

    
736
                                    errorAlert.setVisible(true);
737
                                    errorAlert.setText("System error subscribing to these events");
738

    
739
                                    subscribeToEvents.hide();
740
                                    subscribeToEvents.removeFromParent();
741
                                }
742

    
743
                                @Override
744
                                public void onSuccess(Subscription result) {
745

    
746
                                    successAlert.setVisible(true);
747
                                    successAlert.setText("Your subscription was successful");
748

    
749
                                    subscribeToEvents.hide();
750
                                    subscribeToEvents.removeFromParent();
751
                                }
752
                            });
753
                        }
754
                    }
755
                });
756
                actionButtons.add(yes);
757

    
758
                ModalBody modalBody = new ModalBody();
759
                modalBody.add(modalContent);
760
                subscribeToEvents.add(modalBody);
761
                subscribeToEvents.getElement().getChild(0).getChild(0).getChild(0).removeFromParent();
762

    
763
                subscribeToEvents.show();
764

    
765
                return true;
766
            }
767
        });
768
    }
769
}
(8-8/8)