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.RepositoryManager;
14
import eu.dnetlib.repo.manager.client.RepositoryManagerWidget;
15
import eu.dnetlib.repo.manager.client.services.BrokerService;
16
import eu.dnetlib.repo.manager.client.services.BrokerServiceAsync;
17
import eu.dnetlib.repo.manager.shared.Term;
18
import eu.dnetlib.repo.manager.shared.Tuple;
19
import eu.dnetlib.repo.manager.shared.broker.BrowseEntry;
20
import org.gwtbootstrap3.client.ui.Alert;
21
import org.gwtbootstrap3.client.ui.constants.AlertType;
22

    
23
import java.util.ArrayList;
24
import java.util.HashMap;
25
import java.util.List;
26
import java.util.Map;
27

    
28
/**
29
 * Created by stefania on 10/31/16.
30
 */
31
public class SelectTopicWidget extends AbstractRepositoryManagerWidget implements RepositoryManagerWidget {
32

    
33
    private String parentToken = "";
34
    private String restToken = "";
35

    
36
    private HTML title = new HTML();
37
    private FlowPanel selectTopicBoxContent = new FlowPanel();
38

    
39
    private Alert errorAlert = new Alert();
40

    
41
    public static Map<String, Term> topicsVocabulary = new HashMap<>();
42

    
43
    private static HelpServiceAsync helpService = GWT.create(HelpService.class);
44
    private static BrokerServiceAsync brokerService = GWT.create(BrokerService.class);
45

    
46
    public SelectTopicWidget() {
47

    
48
        super();
49

    
50
        title.addStyleName("uk-margin-medium-bottom");
51
        contentPanel.add(title);
52

    
53
        errorAlert.setType(AlertType.DANGER);
54
        errorAlert.setDismissable(false);
55
        errorAlert.setVisible(false);
56
        selectTopicBoxContent.add(errorAlert);
57

    
58
        contentPanel.add(selectTopicBoxContent);
59
    }
60

    
61
    @Override
62
    public void clear() {
63

    
64
        selectTopicBoxContent.clear();
65
        errorAlert.setVisible(false);
66
        gridPanel.remove(helpPanel);
67
    }
68

    
69
    @Override
70
    public void reload() {
71

    
72
        Document.get().getElementById("headerNoTransparent").removeClassName("tm-header-transparent");
73
        selectTopicBoxContent.add(errorAlert);
74

    
75
        title.setHTML("<h1 class=\"uk-article-title\">Enrichments for " + restToken + "</h1>");
76

    
77
        helpService.getHelpById(parentToken + "_selectTopic", new HelpCallback(helpPanel, gridPanel));
78

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

    
85
        brokerService.getTopicsForDatasource(restToken, new AsyncCallback<List<BrowseEntry>>() {
86

    
87
            @Override
88
            public void onFailure(Throwable caught) {
89

    
90
                selectTopicBoxContent.removeStyleName("loading-big");
91
                selectTopicBoxContent.remove(loadingWheel);
92

    
93
                errorAlert.setText("System error retrieving topics for datasources.");
94
                errorAlert.setVisible(true);
95
            }
96

    
97
            @Override
98
            public void onSuccess(final List<BrowseEntry> browseEntries) {
99

    
100
                brokerService.getDnetTopics(new AsyncCallback<Map<String, Term>>() {
101

    
102
                    @Override
103
                    public void onFailure(Throwable throwable) {
104

    
105
                        selectTopicBoxContent.removeStyleName("loading-big");
106
                        selectTopicBoxContent.remove(loadingWheel);
107

    
108
                        errorAlert.setText("System error retrieving topics vocabulary.");
109
                        errorAlert.setVisible(true);
110
                    }
111

    
112
                    @Override
113
                    public void onSuccess(Map<String, Term> stringTermMap) {
114

    
115
                        topicsVocabulary.putAll(stringTermMap);
116

    
117
                        selectTopicBoxContent.removeStyleName("loading-big");
118
                        selectTopicBoxContent.remove(loadingWheel);
119

    
120
                        final FlowPanel topicsList = new FlowPanel();
121
                        createTopicsList(browseEntries, topicsList);
122
                        selectTopicBoxContent.add(topicsList);
123
                    }
124
                });
125

    
126
            }
127
        });
128
    }
129

    
130
    @Override
131
    public void setToken(String parentToken, String rest) {
132
        this.parentToken = parentToken;
133
        this.restToken = rest;
134
    }
135

    
136
    @Override
137
    public void afterAdditionToRootPanel() {
138

    
139
    }
140

    
141
    private void createTopicsList(List<BrowseEntry> browseEntries, FlowPanel topicsList) {
142

    
143
        topicsList.addStyleName("uk-grid-margin uk-grid uk-grid-stack repos-list");
144

    
145
        if(browseEntries.isEmpty()) {
146

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

    
149
        } else {
150

    
151
            List<BrowseEntry> enrichMoreEntries = new ArrayList<>();
152
            List<BrowseEntry> enrichMissingEntries = new ArrayList<>();
153

    
154
            for(BrowseEntry browseEntry : browseEntries) {
155
                if(browseEntry.getValue().startsWith("ENRICH/MORE"))
156
                    enrichMoreEntries.add(browseEntry);
157
                else if(browseEntry.getValue().startsWith("ENRICH/MISSING"))
158
                    enrichMissingEntries.add(browseEntry);
159
            }
160

    
161
            //COLUMN FOR ENRICH/MORE
162
            FlowPanel colPanel1 = new FlowPanel();
163
            colPanel1.addStyleName("uk-width-1-2@m uk-first-column");
164
            topicsList.add(colPanel1);
165

    
166
            colPanel1.add(createTopicGroupPanel(enrichMoreEntries, "More"));
167

    
168
            //COLUMN FOR ENRICH/MISSING
169
            FlowPanel colPanel2 = new FlowPanel();
170
            colPanel2.addStyleName("uk-width-1-2@m uk-first-column");
171
            topicsList.add(colPanel2);
172

    
173
            colPanel2.add(createTopicGroupPanel(enrichMissingEntries, "Missing"));
174

    
175

    
176
        }
177
    }
178

    
179
    private FlowPanel createTopicGroupPanel(List<BrowseEntry> browseEntries, String group) {
180

    
181
        long total = 0;
182

    
183
        FlowPanel divPanel = new FlowPanel();
184
        divPanel.addStyleName("uk-overflow-auto uk-scrollspy-inview uk-animation-slide-top-medium");
185

    
186
        String content = "<h4 class=\"uk-h4 uk-text-primary uk-scrollspy-inview uk-animation-slide-top-medium\" " +
187
                "uk-scrollspy-class=\"\"><span>" + group + "</span></h4>";
188

    
189
        content += "<table class=\"uk-table uk-table-striped uk-table-middle\">" +
190
//                "<thead><tr><th>Related events that may potentially enrich " + restToken + " content</th>" +
191
                "<thead><tr><th>Events that may enrich " + restToken + " content</th>" +
192
                "<th class=\"uk-text-nowrap\"># of events</th>" +
193
                "</tr></thead>";
194

    
195
        content += "<tbody>";
196

    
197
        for(BrowseEntry browseEntry : browseEntries) {
198

    
199
            content += "<tr class=\"el-item\">" +
200
                    "<td class=\"uk-table-shrink uk-width-4-5\">\n" +
201
                    "<a href=\"#" + parentToken + "/" + restToken + "/" + browseEntry.getValue() + "\" class=\"el-link\">" +
202
                    browseEntry.getValue() + "</a>";
203

    
204
            if(this.topicsVocabulary.get(browseEntry.getValue())!=null)
205
                content +=   "<div class=\"uk-text uk-text-meta\">" + this.topicsVocabulary.get(browseEntry.getValue()).getEnglishName() + "</div>";
206

    
207
            content += "</td>" +
208
                    "<td class=\"uk-text-nowrap uk-table-shrink uk-width-1-5\">\n" +
209
                    "<div class=\"el-title\">" + browseEntry.getSize() + "</div>" +
210
                    "</td>" +
211
                    "</tr>";
212

    
213
            total += browseEntry.getSize();
214
        }
215

    
216
        content += "<tr class=\"el-item footers\">" +
217
                "<td class=\"uk-text-nowrap uk-table-shrink uk-width-4-5\">\n" +
218
                "<div class=\"el-title\">Total</div>" +
219
                "</td>" +
220
                "<td class=\"uk-text-nowrap uk-table-shrink uk-width-1-5\">\n" +
221
                "<div class=\"el-title\">" + total + "</div>" +
222
                "</td>" +
223
                "</tr>";
224

    
225
        content += "</tbody></table>";
226

    
227
        HTML reposListHTML = new HTML();
228
        reposListHTML.setHTML(content);
229

    
230
        divPanel.add(reposListHTML);
231

    
232
        return divPanel;
233
    }
234
}
(7-7/8)