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.user.client.rpc.AsyncCallback;
6
import com.google.gwt.user.client.ui.FlowPanel;
7
import com.google.gwt.user.client.ui.HTML;
8
import com.google.gwt.user.client.ui.Widget;
9
import eu.dnetlib.gwt.client.help.HelpService;
10
import eu.dnetlib.gwt.client.help.HelpServiceAsync;
11
import eu.dnetlib.repo.manager.client.AbstractRepositoryManagerWidget;
12
import eu.dnetlib.repo.manager.client.HelpCallback;
13
import eu.dnetlib.repo.manager.client.RepositoryManagerWidget;
14
import eu.dnetlib.repo.manager.client.services.BrokerService;
15
import eu.dnetlib.repo.manager.client.services.BrokerServiceAsync;
16
import eu.dnetlib.repo.manager.shared.Tuple;
17
import eu.dnetlib.repo.manager.shared.broker.BrowseEntry;
18
import org.gwtbootstrap3.client.ui.Alert;
19
import org.gwtbootstrap3.client.ui.constants.AlertType;
20

    
21
import java.util.List;
22

    
23
/**
24
 * Created by stefania on 10/31/16.
25
 */
26
public class SelectTopicWidget extends AbstractRepositoryManagerWidget implements RepositoryManagerWidget {
27

    
28
    private String parentToken = "";
29
    private String restToken = "";
30

    
31
    private FlowPanel selectTopicBoxContent = new FlowPanel();
32

    
33
    private Alert errorAlert = new Alert();
34

    
35
    private static HelpServiceAsync helpService = GWT.create(HelpService.class);
36
    private static BrokerServiceAsync brokerService = GWT.create(BrokerService.class);
37

    
38
    public SelectTopicWidget() {
39

    
40
        super();
41

    
42
        //TODO find datasource name?
43
        HTML title = new HTML("<h1 class=\"uk-article-title\">Topics for datasource</h1>");
44
        title.addStyleName("uk-margin-medium-bottom");
45
        contentPanel.add(title);
46

    
47
        errorAlert.setType(AlertType.DANGER);
48
        errorAlert.setDismissable(false);
49
        errorAlert.setVisible(false);
50
        selectTopicBoxContent.add(errorAlert);
51

    
52
        contentPanel.add(selectTopicBoxContent);
53
    }
54

    
55
    @Override
56
    public void clear() {
57

    
58
        selectTopicBoxContent.clear();
59
        errorAlert.setVisible(false);
60
        gridPanel.remove(helpPanel);
61
    }
62

    
63
    @Override
64
    public void reload() {
65

    
66
        Document.get().getElementById("headerNoTransparent").removeClassName("tm-header-transparent");
67
        selectTopicBoxContent.add(errorAlert);
68

    
69
        helpService.getHelpById(parentToken + "_selectTopic", new HelpCallback(helpPanel, gridPanel));
70

    
71
        final HTML loadingWheel = new HTML("<div class=\"loader-big\" style=\"text-align: center; padding-top: 170px; " +
72
                "color: rgb(47, 64, 80); font-weight: bold;\">Retrieving topics...</div>" +
73
                "<div class=\"whiteFilm\"></div>");
74
        selectTopicBoxContent.addStyleName("loading-big");
75
        selectTopicBoxContent.add(loadingWheel);
76

    
77
        brokerService.getTopicsForDatasource(restToken, new AsyncCallback<List<BrowseEntry>>() {
78

    
79
            @Override
80
            public void onFailure(Throwable caught) {
81

    
82
                selectTopicBoxContent.removeStyleName("loading-big");
83
                selectTopicBoxContent.remove(loadingWheel);
84

    
85
                errorAlert.setText("System error retrieving topics for datasources.");
86
                errorAlert.setVisible(true);
87
            }
88

    
89
            @Override
90
            public void onSuccess(List<BrowseEntry> browseEntries) {
91

    
92
                selectTopicBoxContent.removeStyleName("loading-big");
93
                selectTopicBoxContent.remove(loadingWheel);
94

    
95
                final FlowPanel topicsList = new FlowPanel();
96
                createTopicsList(browseEntries, topicsList);
97
                selectTopicBoxContent.add(topicsList);
98
            }
99
        });
100
    }
101

    
102
    @Override
103
    public void setToken(String parentToken, String rest) {
104
        this.parentToken = parentToken;
105
        this.restToken = rest;
106
    }
107

    
108
    @Override
109
    public void afterAdditionToRootPanel() {
110

    
111
    }
112

    
113
    private void createTopicsList(List<BrowseEntry> browseEntries, FlowPanel topicsList) {
114

    
115
        topicsList.addStyleName("uk-grid-margin uk-grid uk-grid-stack repos-list");
116

    
117
        if(browseEntries.isEmpty()) {
118

    
119
            topicsList.add(new HTML("No topics were found for this datasource"));
120

    
121
        } else {
122

    
123
            long total = 0;
124

    
125
            FlowPanel colPanel = new FlowPanel();
126
            colPanel.addStyleName("uk-width-1-1@m uk-first-column");
127
            topicsList.add(colPanel);
128

    
129
            FlowPanel divPanel = new FlowPanel();
130
            divPanel.addStyleName("uk-overflow-auto uk-scrollspy-inview uk-animation-slide-top-medium");
131
            colPanel.add(divPanel);
132

    
133
            String content = "<table class=\"uk-table uk-table-striped uk-table-middle\">" +
134
                    "<thead><tr><th>Topic</th><th class=\"uk-text-nowrap\"># of events</th>" +
135
                    "</tr></thead>";
136

    
137
            content += "<tbody>";
138

    
139
            for(BrowseEntry browseEntry : browseEntries) {
140

    
141
                content += "<tr class=\"el-item\">" +
142
                        "<td class=\"uk-text-nowrap uk-table-shrink\">\n" +
143
                        "<a href=\"#" + parentToken + "/" + restToken + "/" +browseEntry.getValue() + "\" class=\"el-link\">" +
144
                        browseEntry.getValue() + "</a>" +
145
                        "</td>" +
146
                        "<td class=\"uk-text-nowrap uk-table-shrink\">\n" +
147
                        "<div class=\"el-title\">" + browseEntry.getSize() + "</div>" +
148
                        "</td>" +
149
                        "</tr>";
150

    
151
                total += browseEntry.getSize();
152
            }
153

    
154
            content += "<tr class=\"el-item footers\">" +
155
                    "<td class=\"uk-text-nowrap uk-table-shrink\">\n" +
156
                    "<div class=\"el-title\">Total</div>" +
157
                    "</td>" +
158
                    "<td class=\"uk-text-nowrap uk-table-shrink\">\n" +
159
                    "<div class=\"el-title\">" + total + "</div>" +
160
                    "</td>" +
161
                    "</tr>";
162

    
163
            content += "</tbody></table>";
164

    
165
            HTML reposListHTML = new HTML();
166
            reposListHTML.setHTML(content);
167

    
168
            divPanel.add(reposListHTML);
169
        }
170
    }
171
}
(7-7/8)