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 FlowPanel showEventsBoxContent = new FlowPanel();
56

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

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

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

    
68
    public ShowEventsWidget() {
69

    
70
        super();
71

    
72
        HTML title = new HTML("<h1 class=\"uk-article-title\">Events for topic " + topic + "</h1>");
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
        advQueryObject.setDatasource(dataSource);
141
        advQueryObject.setTopic(topic);
142

    
143
        showEvents(0);
144
//        showAdvancedSearch();
145

    
146
        helpService.getHelpById(parentToken + "_showEvents", new HelpCallback(helpPanel, gridPanel) {
147

    
148
            @Override
149
            public void onSuccess(Help help) {
150

    
151
                gridPanel.add(helpPanel);
152

    
153
//                Window.alert("Run successfully!!!");
154

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

    
160
                    helpPanel.clear();
161
                    helpPanel.add(showAdvancedSearch());
162
                    helpPanel.add(html);
163
//                    gridPanel.add(helpPanel);
164

    
165
                } else {
166
                    helpPanel.clear();
167
                    helpPanel.add(showAdvancedSearch());
168

    
169
                }
170
            }
171
        });
172

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

    
182

    
183
    }
184

    
185
    @Override
186
    public void setToken(String parentToken, String rest) {
187
        this.parentToken = parentToken;
188
        this.restToken = rest;
189

    
190
        String[] tokenSplit = restToken.split("/", 2);
191
        dataSource = tokenSplit[0];
192
        topic = tokenSplit[1];
193
    }
194

    
195
    @Override
196
    public void afterAdditionToRootPanel() {
197

    
198
    }
199

    
200
    private FlowPanel showAdvancedSearch() {
201

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

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

    
219
        final FlowPanel advancedSearch = new FlowPanel();
220
        advancedSearch.addStyleName("enrichContentAdvancedSearch uk-card uk-card-body uk-card-default sidemenu");
221
        advancedSearch.add(new HTML("<h4 class=\"uk-h4 uk-text-primary uk-scrollspy-inview uk-animation-slide-top-medium\"" +
222
                "uk-scrollspy-class=\"\"><span>Advanced search</span></h4>"));
223
        advancedSearch.add(enrichContentAdvancedSearchForm.asWidget());
224

    
225
        return advancedSearch;
226
    }
227

    
228
    private void showEvents(long currentPage) {
229

    
230
        showEventsBoxContent.clear();
231
        showEventsBoxContent.add(errorAlert);
232
        showEventsBoxContent.add(successAlert);
233

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

    
240
        brokerService.advancedShowEvents(advQueryObject, currentPage, pageSize, new AsyncCallback<EventsPage>() {
241

    
242
            @Override
243
            public void onFailure(Throwable caught) {
244

    
245
                showEventsBoxContent.removeStyleName("loading-big");
246
                showEventsBoxContent.remove(loadingWheel);
247

    
248
                errorAlert.setText("System error retrieving events for the selected topic.");
249
                errorAlert.setVisible(true);
250
            }
251

    
252
            @Override
253
            public void onSuccess(EventsPage eventsPage) {
254

    
255
                showEventsBoxContent.removeStyleName("loading-big");
256
                showEventsBoxContent.remove(loadingWheel);
257

    
258
                final FlowPanel eventsList = new FlowPanel();
259
                eventsList.addStyleName("events-results");
260
                createEventsList(eventsPage, eventsList);
261
                showEventsBoxContent.add(eventsList);
262

    
263
                addSubscribeHandler();
264

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

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

    
279

    
280

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

    
289
    private void createEventsList(EventsPage eventsPage, FlowPanel eventsList) {
290

    
291
        if(eventsPage == null || eventsPage.getTotal() == 0) {
292

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

    
295
        } else {
296

    
297
            long from = eventsPage.getCurrPage() * pageSize + 1;
298
            long to = (eventsPage.getCurrPage() + 1) * pageSize;
299
            if(to>eventsPage.getTotal())
300
                to = eventsPage.getTotal();
301

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

    
308
            FlowPanel topPagerPanel = new FlowPanel();
309
            drawPager(topPagerPanel, eventsPage);
310
            eventsList.add(topPagerPanel);
311

    
312
            String content = "";
313

    
314
            for(OpenAireEventPayload payload : eventsPage.getValues()) {
315
                content += returnPayloadContent(payload);
316
            }
317

    
318
            HTML eventsListHTML = new HTML();
319
            eventsListHTML.addStyleName("events-list");
320
            eventsListHTML.setHTML(content);
321

    
322
            eventsList.add(eventsListHTML);
323

    
324
            FlowPanel bottomPagerPanel = new FlowPanel();
325
            drawPager(bottomPagerPanel, eventsPage);
326
            eventsList.add(bottomPagerPanel);
327
        }
328
    }
329

    
330
    private void drawPager(FlowPanel pagerPanel, final EventsPage eventsPage) {
331

    
332
        UnorderedList pager = new UnorderedList();
333
        pager.addStyleName("uk-pagination");
334

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

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

    
360

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

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

    
377
        pagerPanel.add(pager);
378

    
379
        Label pageNumber = new Label();
380

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

    
395

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

    
399

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

    
410

    
411
        // TITLES
412
        payloadContent += "<tr class=\"el-item\"><td class=\"uk-table-shrink\"><strong class=\"el-title uk-display-block\">" +
413
                "Title(s)</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">";
414

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

    
422

    
423
        // AUTHORS
424
        payloadContent += "<tr class=\"el-item\"><td class=\"uk-table-shrink\"><strong class=\"el-title uk-display-block\">" +
425
                "Author(s)</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">";
426

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

    
434

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

    
442
        payloadContent += "<td class=\"uk-table-shrink\"><strong class=\"el-title uk-display-block\">" +
443
                "PID(s)</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">";
444

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

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

    
452
                if(openAireEventPayload.getProvenance()!=null) {
453

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

    
464
                    payloadContent += "</span>";
465
                }
466

    
467
                payloadContent += "</span>";
468
            }
469
            payloadContent += "</span>";
470
        }
471
        payloadContent += "</div></td></tr>";
472

    
473

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

    
481
        payloadContent += "<td class=\"uk-table-shrink\"><strong class=\"el-title uk-display-block\">" +
482
                "Abstract(s)</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">";
483

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

    
489
            if(openAireEventPayload.getHighlight().getAbstracts()!=null && !openAireEventPayload.getHighlight().getAbstracts().isEmpty()
490
                    && openAireEventPayload.getProvenance()!=null) {
491

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

    
502
                payloadContent += "</span>";
503
            }
504
        }
505
        payloadContent += "</div></td></tr>";
506

    
507

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

    
515
        payloadContent += "<td class=\"uk-table-shrink\"><strong class=\"el-title uk-display-block\">" +
516
                "Project(s)/Relation(s)</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">";
517

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

    
526
            if(openAireEventPayload.getHighlight().getProjects()!=null && !openAireEventPayload.getHighlight().getProjects().isEmpty()
527
                    && openAireEventPayload.getProvenance()!=null) {
528

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

    
539
                payloadContent += "</span>";
540
            }
541
        }
542
        payloadContent += "</div></td></tr>";
543

    
544

    
545
        // SUBJECTS
546
        if(openAireEventPayload.getHighlight().getSubjects()!=null && !openAireEventPayload.getHighlight().getSubjects().isEmpty()) {
547
            payloadContent += "<tr class=\"el-item success\">";
548
        } else {
549
            payloadContent += "<tr class=\"el-item\">";
550
        }
551

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

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

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

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

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

    
578

    
579
        // PUBLICATION DATE
580
        if(openAireEventPayload.getHighlight().getPublicationdate()!=null &&
581
                !openAireEventPayload.getHighlight().getPublicationdate().isEmpty()) {
582
            payloadContent += "<tr class=\"el-item success\">";
583
        } else {
584
            payloadContent += "<tr class=\"el-item\">";
585
        }
586

    
587
        payloadContent += "<td class=\"uk-table-shrink\"><strong class=\"el-title uk-display-block\">" +
588
                "Publication date</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">" +
589
                openAireEventPayload.getPublication().getPublicationdate() +
590
                "</div></td></tr>";
591

    
592

    
593
        // RIGHTS
594
        if(openAireEventPayload.getHighlight().getInstances()!=null &&
595
                !openAireEventPayload.getHighlight().getInstances().isEmpty()) {
596
            payloadContent += "<tr class=\"el-item success\">";
597
        } else {
598
            payloadContent += "<tr class=\"el-item\">";
599
        }
600

    
601
        payloadContent += "<td class=\"uk-table-shrink\"><strong class=\"el-title uk-display-block\">" +
602
                "Rights</strong></td><td class=\"uk-table-shrink\"><div class=\"el-title\">";
603

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

    
606
            if(i!=0)
607
                payloadContent += "<br>";
608

    
609
            payloadContent += "<span>";
610
            payloadContent += openAireEventPayload.getPublication().getInstances().get(i).getLicense() +
611
                    "&nbsp;&nbsp;<b>" + openAireEventPayload.getPublication().getInstances().get(i).getHostedby() + "</b>";
612
            payloadContent += "<br>";
613
            payloadContent += "<a href=\"" + openAireEventPayload.getPublication().getInstances().get(i).getUrl() +
614
                    "\" target=\"_blank\">" + openAireEventPayload.getPublication().getInstances().get(i).getUrl() + "</a>&nbsp;&nbsp;";
615
            payloadContent += "</span>";
616

    
617
            if(isInstanceHighlighted(openAireEventPayload.getPublication().getInstances().get(i), openAireEventPayload.getHighlight().getInstances())) {
618
                payloadContent += "<span>";
619

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

    
622
                if(openAireEventPayload.getProvenance()!=null) {
623

    
624
                    payloadContent += "<span class=\"pull-right\">" +
625
                            "<b>from: </b>";
626
                    if (openAireEventPayload.getProvenance().getUrl() != null) {
627
                        payloadContent += "<a href=\"" + openAireEventPayload.getProvenance().getUrl() + "\" target=\"_blank\">" +
628
                                openAireEventPayload.getProvenance().getRepositoryName() + "</a>";
629
                    }
630
                    if (openAireEventPayload.getProvenance().getId() != null) {
631
                        payloadContent += "<span> (ID: " + openAireEventPayload.getProvenance().getId() + ")</span>";
632
                    }
633

    
634
                    payloadContent += "</span>";
635
                }
636

    
637
                payloadContent += "</span>";
638
            }
639
        }
640
        payloadContent += "</div></td></tr>";
641

    
642

    
643
        payloadContent += "</tbody></table></div></div></div></div>";
644
        
645
        return payloadContent;
646
    }
647

    
648
    private boolean isPidHighlighted(Pid pid, List<Pid> highlightedPIDs) {
649

    
650
        for(Pid highlightedPid : highlightedPIDs) {
651
            if(highlightedPid.getType().equals(pid.getType()) && highlightedPid.getValue().equals(pid.getValue()))
652
                return true;
653
        }
654

    
655
        return false;
656
    }
657

    
658
    private boolean isInstanceHighlighted(Instance instance, List<Instance> highlightedInstances) {
659

    
660
        for(Instance highlightedInstance : highlightedInstances) {
661
            if(highlightedInstance.getUrl().equals(instance.getUrl())
662
                    && highlightedInstance.getHostedby().equals(instance.getHostedby())
663
                    && highlightedInstance.getInstancetype().equals(instance.getInstancetype())
664
                    && highlightedInstance.getLicense().equals(instance.getLicense()))
665
                return true;
666
        }
667

    
668
        return false;
669
    }
670

    
671
    private void addSubscribeHandler() {
672

    
673
        $("#subscribe").click(new Function() {
674

    
675
            public boolean f(Event e) {
676

    
677
                errorAlert.setVisible(false);
678
                successAlert.setVisible(false);
679

    
680
                final Modal subscribeToEvents = new Modal();
681
                subscribeToEvents.setDataBackdrop(ModalBackdrop.STATIC);
682

    
683
                FlowPanel modalContent = new FlowPanel();
684

    
685
                HTML title = new HTML("<h2 class=\"uk-modal-title\">Create subscription</h2>\n");
686
                modalContent.add(title);
687

    
688
                final EventsSubscriptionForm eventsSubscriptionForm = new EventsSubscriptionForm(advQueryObject);
689
                modalContent.add(eventsSubscriptionForm.asWidget());
690

    
691
                FlowPanel actionButtons = new FlowPanel();
692
                actionButtons.addStyleName("uk-text-right uk-margin-bottom");
693
                modalContent.add(actionButtons);
694

    
695
                Button no = new Button("Cancel");
696
                no.addStyleName("uk-button uk-button-default");
697
                no.addClickHandler(new ClickHandler() {
698
                    @Override
699
                    public void onClick(ClickEvent event) {
700
                        subscribeToEvents.hide();
701
                        subscribeToEvents.removeFromParent();
702
                    }
703
                });
704
                actionButtons.add(no);
705

    
706
                Button yes = new Button("Subscribe");
707
                yes.addStyleName("uk-button uk-button-primary");
708
                yes.addClickHandler(new ClickHandler() {
709
                    @Override
710
                    public void onClick(ClickEvent event) {
711

    
712
                        if(eventsSubscriptionForm.validate()) {
713
                            OpenaireSubscription openaireSubscription = eventsSubscriptionForm.getOpenAIRESubscription();
714
                            brokerService.subscribe(openaireSubscription, new AsyncCallback<Subscription>() {
715

    
716
                                @Override
717
                                public void onFailure(Throwable caught) {
718

    
719
                                    errorAlert.setVisible(true);
720
                                    errorAlert.setText("System error subscribing to these events");
721

    
722
                                    subscribeToEvents.hide();
723
                                    subscribeToEvents.removeFromParent();
724
                                }
725

    
726
                                @Override
727
                                public void onSuccess(Subscription result) {
728

    
729
                                    successAlert.setVisible(true);
730
                                    successAlert.setText("A subscription for these events was created successfully");
731

    
732
                                    subscribeToEvents.hide();
733
                                    subscribeToEvents.removeFromParent();
734
                                }
735
                            });
736
                        }
737
                    }
738
                });
739
                actionButtons.add(yes);
740

    
741
                ModalBody modalBody = new ModalBody();
742
                modalBody.add(modalContent);
743
                subscribeToEvents.add(modalBody);
744
                subscribeToEvents.getElement().getChild(0).getChild(0).getChild(0).removeFromParent();
745

    
746
                subscribeToEvents.show();
747

    
748
                return true;
749
            }
750
        });
751
    }
752
}
(8-8/8)